WdmlibIoCreateDeviceSecure 函数 (wdmsec.h)
WdmlibIoCreateDeviceSecure 函数 (或 IoCreateDeviceSecure) 创建命名设备对象并应用指定的安全设置。
语法
NTSTATUS WdmlibIoCreateDeviceSecure(
[in] PDRIVER_OBJECT DriverObject,
[in] ULONG DeviceExtensionSize,
[in, optional] PUNICODE_STRING DeviceName,
[in] DEVICE_TYPE DeviceType,
[in] ULONG DeviceCharacteristics,
[in] BOOLEAN Exclusive,
[in] PCUNICODE_STRING DefaultSDDLString,
[in, optional] LPCGUID DeviceClassGuid,
PDEVICE_OBJECT *DeviceObject
);
参数
[in] DriverObject
指向调用方驱动程序对象的指针。 每个驱动程序在指向其 DriverEntry 例程的参数中接收指向其驱动程序对象的指针。 WDM 函数和筛选器驱动程序还会在其 AddDevice 例程中接收驱动程序对象指针。
[in] DeviceExtensionSize
指定要为 设备对象的设备扩展 分配的驱动程序确定的字节数。 设备扩展的内部结构由驱动程序定义。
[in, optional] DeviceName
(可选)指向包含以 null 结尾的 Unicode 字符串的缓冲区,该字符串为设备对象命名。 字符串必须是完整路径名称。 如果未提供名称,则 deviceCharacteristics 参数中必须存在FILE_AUTOGENERATED_DEVICE_NAME标志。 (若要创建未命名的设备对象,请使用 IoCreateDevice 例程.)
[in] DeviceType
指定系统定义的 FILE_DEVICE_XXX 常量之一,这些常量指示设备 ((如FILE_DEVICE_DISK、FILE_DEVICE_KEYBOARD等) )或供应商为新型设备定义的值。 有关详细信息,请参阅 指定设备类型。 (由于总线驱动程序可能没有有关设备类型的信息,因此可以在 INF AddReg 指令中指定 PDO 的设备类型值。)
[in] DeviceCharacteristics
指定一个或多个系统定义的常量 ORed 在一起,这些常量提供有关驱动程序设备的其他信息。 有关可能的设备特征的列表,请参阅 DEVICE_OBJECT。 有关如何指定设备特征的详细信息,请参阅 指定设备特征。 大多数驱动程序为此参数指定FILE_DEVICE_SECURE_OPEN。
[in] Exclusive
指定设备对象是否表示 独占设备。 大多数驱动程序将此值设置为 FALSE。 有关详细信息,请参阅 指定对设备对象的独占访问。
[in] DefaultSDDLString
指定设备对象的默认安全设置的字符串表示形式。 应用于设备对象的安全性派生自此字符串,除非系统管理员在 由 DeviceClassGuid 参数标识的注册表部分中放置替代。
安全设置是在 SDDL) 安全描述符定义语言 (子集中指定的。 还提供了一组预定义常量 (SDDL_DEVOBJ_ XXX) 。 有关详细信息,请参阅 保护设备对象。
[in, optional] DeviceClassGuid
指向 GUID 的指针,该 GUID 标识包含 DefaultSDDLString、 DeviceType、 DeviceCharacteristics 和 Exclusive 参数的可能替代的注册表部分。
DeviceObject
指向变量的指针,该变量接收指向新创建的 DEVICE_OBJECT 结构的指针。 DEVICE_OBJECT结构是从非分页池分配的。
返回值
WdmlibIoCreateDeviceSecure 在成功时返回STATUS_SUCCESS,或在失败时返回相应的 NTSTATUS 错误代码。 此函数可能返回的部分失败代码列表包括:
注解
WdmlibIoCreateDeviceSecure 创建命名设备对象,应用指定的安全设置,并返回指向该对象的指针。 调用 IoDeleteDevice 不再需要对象时,调用方负责删除该对象。
此例程不是操作系统的一部分。 驱动程序可以通过链接到 Microsoft Windows 2000 及更高版本的 Windows 上的 Wdmsec.lib 来使用该例程。 (Wdmsec.lib 库首先随 Microsoft Windows XP Service Pack 1 [SP1] 和 Windows Server 2003 版本的驱动程序开发工具包 [DDK] 一起提供,还随 Windows 驱动程序工具包 [WDK] 一起提供 )
创建不保证由 INF 文件设置其安全描述符的命名设备对象的任何驱动程序都必须使用 WdmlibIoCreateDeviceSecure。 有关详细信息,请参阅 创建设备对象。 调用方负责设置返回的设备对象的某些成员。 有关详细信息,请参阅 初始化设备对象 和设备的特定于设备类型的文档。
请注意,在正确的参数中指定 DeviceType 和 DeviceCharacteristics 值。 这两个参数都使用系统定义的 FILE_XXX 常量,某些驱动程序编写器错误地指定了错误参数中的值。
调用方负责在返回的设备对象中设置某些字段,例如 Flags 字段,以及使用任何驱动程序定义的信息初始化设备扩展。 有关新设备对象上所需的其他操作,请参阅 初始化设备对象 和设备的特定于设备类型的文档。
DeviceClassGuid 参数指定的 GUID 确定设备对象的设备设置类。 (有关设备设置类的详细信息,请参阅 设备设置类。) 调用方必须提供一个值,以便系统管理员可以更改设备的安全设置 (,以拒绝某些用户) 访问。 有关详细信息,请参阅 安装后设置设备对象注册表属性。
非 WDM 驱动程序指定新的 GUID,该 GUID 尚未由现有设备安装类使用。 使用Microsoft Windows SDK中包含的 GuidGen.exe 工具生成新的 GUID。
处理支持原始模式的设备的 WDM 总线驱动程序可以指定设备的设备设置类,但前提是保证已创建该类。 否则,请创建新的 GUID。
磁盘、磁带、CD-ROM 和 RAM 磁盘的设备对象被赋予一个卷参数块 (VPB) ,该块已初始化为指示从未在设备上装载卷。
如果驱动程序对 WdmlibIoCreateDeviceSecure 的调用返回错误,则驱动程序应释放它为该设备分配的任何资源。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 请参见“备注”部分。 |
目标平台 | 桌面 |
标头 | wdmsec.h (包括 Wdmsec.h) |
Library | Wdmsec.lib |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | AddDevice (wdm) 、 HwStorPortProhibitedDDI (storport) 、 IrqlIoPassive1 (wdm) 、MiniportOnlyWdmDevice |