Функция WdfControlDeviceInitAllocate (wdfcontrol.h)
[Применимо только к KMDF]
Метод WdfControlDeviceInitAllocate выделяет WDFDEVICE_INIT структуру, которую драйвер использует при создании нового объекта устройства управления.
Синтаксис
PWDFDEVICE_INIT WdfControlDeviceInitAllocate(
[in] WDFDRIVER Driver,
[in] const UNICODE_STRING *SDDLString
);
Параметры
[in] Driver
Дескриптор объекта драйвера платформы.
[in] SDDLString
Указатель на структуру UNICODE_STRING, описывающую строку Юникода. Эта строка представляет собой представление языка определения дескриптора безопасности (SDDL) дескриптора безопасности. Дополнительные сведения см. в следующем разделе "Примечания".
Возвращаемое значение
WdfControlDeviceInitAllocate возвращает указатель на выделенную платформой структуру WDFDEVICE_INIT, если операция завершается успешно. В противном случае метод возвращает NULL.
Замечания
Если вы хотите, чтобы драйвер создавал объект устройства управления, драйвер должен вызвать WdfControlDeviceInitAllocate, чтобы получить структуру WDFDEVICE_INIT, которую он может передать в WdfDeviceCreate.
Драйвер может указать параметр безопасности с помощью подмножества SDDL. Файл Wdmsec.h определяет набор SDDL_DEVOBJ_xxx-форматированных констант, которые можно использовать. Дополнительные сведения о дескрипторах безопасности и SDDL см. в защиты объектов устройств.
Метод WdfDeviceInitAssignSDDLString перезаписывает параметр безопасности, если таковой есть, что WdfControlDeviceInitAllocate.
Дополнительные сведения о вызове WdfControlDeviceInitAllocateсм. в использовании объектов устройств управления.
Примеры
В следующем примере кода выделяется структура DEVICE_INIT, назначается имя объекта устройства, регистрирует функцию обратного вызова уведомления о завершении работы и создает объект устройства управления. Более сложный пример использования WdfControlDeviceInitAllocateсм. в примере драйвера NONPNP или примера драйвера NDISProt.
PWDFDEVICE_INIT deviceInit = NULL;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES objectAttribs;
deviceInit = WdfControlDeviceInitAllocate(
hDriver,
&SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R
);
if (deviceInit == NULL) {
status = STATUS_INSUFFICIENT_RESOURCES;
goto Error;
}
status = WdfDeviceInitAssignName(
deviceInit,
&ntDeviceName
);
if (!NT_SUCCESS(status)) {
WdfDeviceInitFree(deviceInit);
deviceInit = NULL;
goto Error;
}
WdfControlDeviceInitSetShutdownNotification(
deviceInit,
EvtShutdownNotification,
WdfDeviceShutdown
);
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
status = WdfDeviceCreate(
&deviceInit,
&objectAttribs,
&controlDevice
);
if (!NT_SUCCESS(status)) {
WdfDeviceInitFree(deviceInit);
deviceInit = NULL;
goto Error;
}
WdfControlFinishInitializing(controlDevice);
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.0 |
заголовка | wdfcontrol.h (include Wdf.h) |
библиотеки | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
IRQL | PASSIVE_LEVEL |
правил соответствия DDI | ControlDeviceInitAPI(kmdf), CtlDeviceFinishInitDeviceAdd(kmdf), CtlDeviceFinishInitDrEntry(kmdf), DoubleDeviceInitFree(kmdf), DriverCreate(kmdf), InitFreeDeviceCallback (kmdf), InitFreeDeviceCreate(kmdf), InitFreeDeviceCreateType2(kmdf), InitFreeDeviceCreateType4(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |