функция обратного вызова 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.
Возвращаемое значение
Никакой
Замечания
Чтобы зарегистрировать подпрограмму 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 (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Вызывается в DISPATCH_LEVEL. |