Функция WdfDmaTransactionCancel (wdfdmatransaction.h)
[Относится только к KMDF]
Метод WdfDmaTransactionCancel пытается отменить транзакцию DMA, ожидающую выделения регистров карты.
Синтаксис
BOOLEAN WdfDmaTransactionCancel(
[in] WDFDMATRANSACTION DmaTransaction
);
Параметры
[in] DmaTransaction
Дескриптор объекта транзакции DMA, представляющий отменяемую транзакцию. Эта транзакция должна быть инициализирована драйвером.
Возвращаемое значение
WdfDmaTransactionCancel возвращает значение TRUE, если платформа успешно отменяет выделение регистра карты. В этом случае передача не выполняется, и платформа не выполняет дополнительных обратных вызовов DMA для транзакции, пока она не будет повторно инициирована.
Метод возвращает значение FALSE, если другой поток уже обрабатывает эту транзакцию или если драйвер еще не вызвал WdfDmaTransactionExecute. В первом случае платформа в настоящее время вызывает или вызывает EvtProgramDma или EvtReserveDma. На этом этапе драйвер, задающий профиль DMA в системном режиме, может вызвать WdfDmaTransactionStopSystemTransfer.
Метод также возвращает значение FALSE при вызове с транзакцией, выделенной из средства включения DMA версии 2.
Комментарии
Драйвер может вызывать WdfDmaTransactionCancel из функции обратного вызова события EvtRequestCancel , которую он предоставляет в вызове WdfRequestMarkCancelableEx. Пример кода, показывающий, как это сделать, см. в разделе WdfDmaTransactionStopSystemTransfer.
Драйвер также может вызывать WdfDmaTransactionCancel из функции обратного вызова события EvtIoCanceledOnQueue .
Отмена может быть успешной, только если вызов WdfDmaTransactionCancel происходит после вызова WdfDmaTransactionExecute, но до того, как метод WdfDmaTransactionExecute запустил выделение DMA. Дополнительные сведения см. в разделе Отмена транзакций DMA.
Драйвер должен вызвать WdfDmaTransactionCancel после вызова WdfDmaTransactionInitialize, но перед вызовом WdfDmaTransactionRelease или WdfObjectDelete , чтобы удалить объект транзакции.
Не вызывайте WdfDmaTransactionCancel после того, как платформа вызвала EvtProgramDma или EvtReserveDma.
Драйвер должен запросить использование DMA версии 3 перед вызовом WdfDmaTransactionCancel. Чтобы выбрать DMA версии 3, установите для элемента WdmDmaVersionOverrideWDF_DMA_ENABLER_CONFIG значение 3.
Если драйвер вызывает WdfDmaTransactionCancel для транзакции, выделенной из средства включения DMA версии 2, платформа создает ошибку проверяющего средства, а WdfDmaTransactionCancel возвращает значение FALSE. В этом случае попытка отменить транзакцию не выполняется.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 |
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1.11 |
Верхняя часть | wdfdmatransaction.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы). |
IRQL | <=DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf) |