WdfControlDeviceInitAllocate 函数 (wdfcontrol.h)

[仅适用于 KMDF]

WdfControlDeviceInitAllocate 方法分配驱动程序在创建新的控制设备对象时使用的WDFDEVICE_INIT结构。

语法

PWDFDEVICE_INIT WdfControlDeviceInitAllocate(
  [in] WDFDRIVER            Driver,
  [in] const UNICODE_STRING *SDDLString
);

参数

[in] Driver

框架驱动程序对象的句柄。

[in] SDDLString

指向描述 Unicode 字符串 的UNICODE_STRING 结构的指针。 此字符串是安全描述符定义语言 (SDDL) 安全描述符的表示形式。 有关更多信息,请参见下面的“备注”部分。

返回值

如果操作成功,WdfControlDeviceInitAllocate 返回指向框架分配的WDFDEVICE_INIT结构的指针。 否则,方法返回 NULL

注解

如果希望驱动程序创建控制设备对象,驱动程序必须调用 WdfControlDeviceInitAllocate 以获取可传递给 WdfDeviceCreate 的WDFDEVICE_INIT结构。

驱动程序可以使用 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)
Library 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