Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Метод WdfDmaTransactionSetDeviceAddressOffset указывает смещение регистра, к которому будет обращаться контроллер DMA системы при выполнении операции DMA.
Синтаксис
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
Параметры
[in] DmaTransaction
Дескриптор объекта транзакции DMA, указывающий транзакцию для изменения.
[in] Offset
Смещение регистра из DeviceAddress, указанного в WDF_DMA_SYSTEM_PROFILE_CONFIG, в то или из которого необходимо выполнить DMA.
Возвращаемое значение
Нет
Замечания
WdfDmaTransactionSetDeviceAddressOffset необходимо использовать с модулем DMA, указывающим профиль DMA в системном режиме.
Драйверы на основе платформы вызывают WdfDmaTransactionSetDeviceAddressOffset после инициализации транзакции DMA и перед его выполнением.
Драйвер может использовать этот метод для доступа к нескольким регистрам в файле регистрации устройства.
Например, драйвер может использовать DMA для доступа к отдельным регистрам чтения и записи в файле регистрации устройства.
Для этого драйвер задает базовый адрес файла регистрации устройства при настройке включения, а затем задает смещение регистра чтения или записи при необходимости перед выполнением транзакции.
Если драйвер вызывает этот метод в операционной системе раньше Windows 8, проверяющего средства платформы сообщает об ошибке.
Примеры
В следующем примере кода инициализируется транзакция DMA. Затем он задает смещение регистра, к которому будет обращаться контроллер DMA системы, предоставляет подпрограмму обратного вызова завершения передачи и выполняет транзакцию DMA.
status = WdfDmaTransactionInitialize(
RequestContext->DmaTransaction,
EvtProgramDma,
direction,
mdl,
startingVa,
length
);
if(!NT_SUCCESS(status)) {
goto Complete;
}
WdfDmaTransactionSetDeviceAddressOffset(
RequestContext->DmaTransaction,
READ_DATA_REGISTER_OFFSET
);
WdfDmaTransactionSetTransferCompleteCallback(
RequestContext->DmaTransaction,
EvtDmaTransactionDmaTransferComplete,
RequestContext
);
status = WdfDmaTransactionExecute(
RequestContext->DmaTransaction,
RequestContext );
if(!NT_SUCCESS(status)) {
goto Complete;
}
return status;
Complete:
WdfDmaTransactionRelease(
RequestContext->DmaTransaction
);
Требования
Требование | Ценность |
---|---|
Минимально поддерживаемый клиент | Windows 8 |
целевая платформа | универсальный |
минимальная версия KMDF | 1.11 |
Заголовок | wdfdmatransaction.h (include Wdf.h) |
Библиотека | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
IRQL | <=DISPATCH_LEVEL |
правил соответствия DDI | DriverCreate(kmdf) |