Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Метод WdfDmaTransactionDmaCompletedFinal уведомляет платформу о том, что операция передачи DMA устройства завершена с условием недозапуска и предоставляет длину завершенной передачи.
Синтаксис
BOOLEAN WdfDmaTransactionDmaCompletedFinal(
[in] WDFDMATRANSACTION DmaTransaction,
[in] size_t FinalTransferredLength,
[out] NTSTATUS *Status
);
Параметры
[in] DmaTransaction
Дескриптор объекта транзакции DMA, полученный драйвером из предыдущего вызова WdfDmaTransactionCreate.
[in] FinalTransferredLength
Количество байтов, передаваемых устройством.
[out] Status
Указатель на расположение, которое получает состояние передачи DMA. Дополнительные сведения см. в разделе "Примечания" для WdfDmaTransactionDmaCompleted.
Возвращаемое значение
WdfDmaTransactionDmaCompletedFinal возвращает FALSE, если драйвер предоставляет недопустимый входной параметр. В противном случае WdfDmaTransactionDmaCompletedFinal всегда возвращает TRUE, что указывает, что платформа не будет пытаться передавать больше байтов для транзакции DMA, указанной параметром DmaTrans action DmaTransaction.
Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Замечания
Драйвер обычно вызывает WdfDmaTransactionDmaCompletedFinal из EvtInterruptDpc обратного вызова. Драйвер для устройства DMA в системном режиме может вызывать функцию обратного вызова событий WdfDmaTransactionDmaCompletedFinal из EvtDmaTransactionDmaTransferComplete.
В примере PLX9x5x драйвер вызывает WdfDmaTransactionDmaCompletedFinal из функции обратного вызова EvtProgramD ma.
Метод WdfDmaTransactionDmaCompletedFinal ведет себя так же, как WdfDmaTransactionDmaCompleted, за исключением того, что драйверы обычно вызывают WdfDmaTransactionDmaCompletedFinal, если оборудование сообщает о недопустимом состоянии. Условие при запуске означает, что оборудование не может передавать все байты, указанные для последней передачи DMA. Вызов WdfDmaTransactionDmaCompletedFinal останавливает платформу от запуска дополнительных передач DMA для указанной транзакции DMA.
Когда драйвер вызывает WdfDmaTransactionDmaCompletedFinal, драйвер предоставляет количество переданных байтов. Возвращаемое значение всегда TRUE, так как платформа не попытается передать больше байтов для указанной транзакции.
Дополнительные сведения о завершении передачи DMA см. в разделе Завершение передачи DMA.
Примеры
Следующий пример кода уведомляет платформу о том, что операция передачи DMA устройства завершена с условием подзапуска.
BOOLEAN success;
NTSTATUS status;
success = WdfDmaTransactionDmaCompletedFinal(
DmaTransaction,
transferLength,
&status
);
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | универсальный |
| минимальная версия KMDF | 1.0 |
| Заголовок | wdfdmatransaction.h (include Wdf.h) |
| Библиотека | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
| IRQL | <=DISPATCH_LEVEL |
| правил соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |