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


Функция 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)

См. также

WDFDEVICE_INIT

WDF_OBJECT_ATTRIBUTES_INIT

WdfControlDeviceInitSetShutdownNotification

WdfControlFinishInitializing

WdfDeviceCreate

WdfDeviceInitAssignName

WdfDeviceInitAssignSDDLString