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 常數,而某些驅動程式寫入器會錯誤地指定錯誤參數中的值。
遠端文件系統,為網路重新導向器建立具名裝置物件,並使用 FsRtlRegisterUncProvider註冊,必須將FILE_REMOTE_DEVICE指定為 IoCreateDevice DeviceCharacteristics 參數中的其中一個選項。
磁碟、磁帶、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) |