Функция 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 (включая 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)

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

WDFDEVICE_INIT

WDF_OBJECT_ATTRIBUTES_INIT

WdfControlDeviceInitSetShutdownNotification

WdfControlFinishInitializing

WdfDeviceCreate

WdfDeviceInitAssignName

WdfDeviceInitAssignSDDLString