Поделиться через


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

Подпрограмма AdapterListControl запускает операцию прямого доступа к памяти (DMA) точечной и сборной.

Синтаксис

DRIVER_LIST_CONTROL DriverListControl;

void DriverListControl(
  [in] _DEVICE_OBJECT *DeviceObject,
  [in] _IRP *Irp,
  [in] PSCATTER_GATHER_LIST ScatterGather,
  [in] PVOID Context
)
{...}

Параметры

[in] DeviceObject

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

[in] Irp

Предоставленный вызывающим абонентом указатель на структуру IRP , которая описывает операцию ввода-вывода, если у драйвера есть подпрограмма StartIo . В противном случае не используется.

[in] ScatterGather

Предоставленный вызывающим абонентом указатель на SCATTER_GATHER_LIST структуру, описывающую области точечной и сборной.

[in] Context

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

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

None

Remarks

Чтобы зарегистрировать подпрограмму AdapterListControl для определенного объекта устройства, драйвер должен вызвать IoGetDmaAdapter для получения объекта адаптера, а затем вызвать Метод GetScatterGatherList , чтобы запросить использование адаптера и указать адрес подпрограммы AdapterListControl . Когда адаптер свободен, система вызывает подпрограмму AdapterListControl .

Примеры

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

Например, чтобы определить подпрограмму обратного вызова AdapterListControl с именем MyAdapterListControl, используйте тип DRIVER_LIST_CONTROL, как показано в следующем примере кода:

DRIVER_LIST_CONTROL MyAdapterListControl;

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

_Use_decl_annotations_
VOID
  MyAdapterListControl(
    struct _DEVICE_OBJECT  *DeviceObject,
    struct _IRP  *Irp,
    PSCATTER_GATHER_LIST  ScatterGather,
    PVOID  Context
    )
  {
      // Function body
  }

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

Подробные сведения о реализации подпрограммы AdapterListControl см. в разделе Использование точечной и сборной DMA.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Звонил на DISPATCH_LEVEL.