функция обратного вызова DMA_COMPLETION_ROUTINE (wdm.h)

Подпрограмма обратного вызова DmaCompletionRoutine уведомляет драйвер, который ранее запросил передачу DMA системы, что эта передача завершена.

Синтаксис

DMA_COMPLETION_ROUTINE DmaCompletionRoutine;

void DmaCompletionRoutine(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PVOID CompletionContext,
  [in] DMA_COMPLETION_STATUS Status
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER . Эта структура представляет собой объект адаптера, представляющий канал DMA системы драйвера.

[in] DeviceObject

Указатель на структуру DEVICE_OBJECT . Эта структура представляет собой объект физического устройства (PDO), представляющий целевое устройство для запрошенной операции DMA.

[in] CompletionContext

Указатель на определяемый драйвером контекст для подпрограммы DmaCompletionRoutine . Этот контекст представляет собой значение параметра CompletionContext , которое драйвер ранее передал вызову MapTransferEx , который инициировал передачу системного DMA.

[in] Status

Состояние завершения передачи DMA. Этот параметр является значением перечисления DMA_COMPLETION_STATUS , указывающее, успешно ли выполнена передача DMA.

Возвращаемое значение

None

Remarks

В качестве параметра драйвер может реализовать подпрограмму DmaCompletionRoutine . Когда драйвер запрашивает передачу системного DMA, драйвер может указать указатель на эту подпрограмму с запросом. После завершения передачи DMA подпрограмма DmaCompletionRoutine автоматически вызывается для уведомления драйвера.

Подпрограмма DmaCompletionRoutine драйвера вызывается только в том случае, если передача DMA, запрошенная драйвером, использует системный контроллер DMA, который может генерировать прерывание после завершения передачи DMA. Драйвер, использующий устройство DMA шины или использующий системный контроллер DMA, который не создает прерывания, должен использовать другие средства для определения завершения передачи DMA. Например, этот драйвер может использовать прерывание таймера для периодического опроса состояния передачи DMA.

Драйвер может указать указатель на подпрограмму DmaCompletionRoutine в качестве необязательного параметра подпрограмме MapTransferEx .

Примеры

Чтобы определить подпрограмму обратного вызова DmaCompletionRoutine , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с использованием типов функций обратного вызова помогает анализу кода для драйверов, средства проверки статических драйверов (SDV) и других средств проверки найти ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить именованную подпрограмму MyDmaCompletionRoutineобратного вызова DmaCompletionRoutine, используйте тип DMA_COMPLETION_ROUTINE, как показано в этом примере кода:

DMA_COMPLETION_ROUTINE MyDmaCompletionRoutine;

Затем реализуйте подпрограмму обратного вызова следующим образом:


_Use_decl_annotations_
VOID
  MyDmaCompletionRoutine(
    PDMA_ADAPTER DmaAdapter,
    PDEVICE_OBJECT DeviceObject,
    PVOID CompletionContext,
    DMA_COMPLETION_STATUS Status
    )
  {
      // Function body
  }

Тип функции DMA_COMPLETION_ROUTINE определен в файле заголовка Wdm.h. Чтобы точнее определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations . Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции DMA_COMPLETION_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе "Объявление функций с помощью типов ролей функций для драйверов WDM". Сведения о Use_decl_annotations см. в разделе "Поведение функции аннотирования".

Требования

   
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Рабочий стол
Заголовок wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается в DISPATCH_LEVEL.

См. также раздел

BuildScatterGatherListEx

DEVICE_OBJECT

DMA_ADAPTER

DMA_COMPLETION_STATUS

DMA_OPERATIONS

GetScatterGatherListEx

MapTransferEx