IoCreateDevice 函数 (wdm.h)
IoCreateDevice 例程创建设备对象供驱动程序使用。
语法
NTSTATUS IoCreateDevice(
[in] PDRIVER_OBJECT DriverObject,
[in] ULONG DeviceExtensionSize,
[in, optional] PUNICODE_STRING DeviceName,
[in] DEVICE_TYPE DeviceType,
[in] ULONG DeviceCharacteristics,
[in] BOOLEAN Exclusive,
[out] PDEVICE_OBJECT *DeviceObject
);
参数
[in] DriverObject
指向调用方驱动程序对象的指针。 每个驱动程序在参数中接收指向其 DriverEntry 例程的驱动程序对象的指针。 WDM 函数和筛选器驱动程序还会在其 AddDevice 例程中接收驱动程序对象指针。
[in] DeviceExtensionSize
指定要为设备对象的 设备扩展 分配的驱动程序确定字节数。 设备扩展的内部结构是驱动程序定义的。
[in, optional] DeviceName
(可选)指向包含命名设备对象的以 null 结尾的 Unicode 字符串的缓冲区。 字符串必须是完整路径名称。 WDM 筛选器和函数驱动程序不为其设备对象命名。 有关详细信息,请参阅 命名设备对象。
如果未提供设备名称(即,DeviceNameNULL),IoCreateDevice 创建的设备对象将不会(且不能)具有与之关联的任意访问控制列表(DACL)。 有关详细信息,请参阅 安全描述符。
[in] DeviceType
指定系统定义的FILE_DEVICE_XXX 常量之一,该常量指示设备类型(如FILE_DEVICE_DISK或FILE_DEVICE_KEYBOARD)或供应商定义的新类型的设备值。 有关详细信息,请参阅 指定设备类型。
[in] DeviceCharacteristics
指定一个或多个系统定义的常量(ORed 在一起)提供有关驱动程序设备的其他信息。 有关可能的设备特征的列表,请参阅 DEVICE_OBJECT。 有关如何指定设备特征的详细信息,请参阅 指定设备特征。 大多数驱动程序都为此参数指定FILE_DEVICE_SECURE_OPEN。
[in] Exclusive
指定设备对象是否表示 独占设备。 大多数驱动程序将此值设置为 FALSE。 有关独占访问的详细信息,请参阅 指定对设备对象的独占访问。
[out] DeviceObject
指向接收指向新创建的 DEVICE_OBJECT 结构的指针的变量的指针。 DEVICE_OBJECT 结构是从非分页池分配的。 设备对象的设备扩展为零。
返回值
IoCreateDevice 在成功时返回STATUS_SUCCESS,或者在失败时返回相应的 NTSTATUS 错误代码。 此函数返回的失败代码的部分列表包括:
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_COLLISION
言论
IoCreateDevice 创建设备对象,并返回指向该对象的指针。 调用方负责在不再需要 IoDeleteDevice时删除该对象。
IoCreateDevice 只能用于创建未命名的设备对象,或者由 INF 文件为其设置安全描述符的命名设备对象。 否则,驱动程序必须使用 IoCreateDeviceSecure 来创建命名的设备对象。 有关详细信息,请参阅 创建设备对象。 调用方负责设置返回的设备对象的某些成员。 有关详细信息,请参阅 初始化设备对象 和设备类型特定的文档。
请注意,在正确的参数中指定 DeviceType 和 DeviceCharacteristics 值。 这两个参数都使用系统定义的FILE_XXX 常量,某些驱动程序编写器错误地指定错误参数中的值。
为网络重定向程序创建命名设备对象的远程文件系统,并使用
磁盘、磁带、CD-ROM 和 RAM 磁盘的设备对象具有已初始化的卷参数块(VPB),以指示从未在设备上装载卷。
如果驱动程序对 IoCreateDevice 的调用返回错误,驱动程序应释放为该设备分配的任何资源。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
DDI 符合性规则 | AddDevice(wdm)、CheckDeviceObjectFlags(wdm)、HwStorPortProhibitedDDIs(storport)、IrqlIoPassive1(wdm)、MiniportOnlyWdmDevice(kmdf) |