共用方式為


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 來建立具名裝置物件。 如需詳細資訊,請參閱 建立裝置物件。 呼叫端負責設定所傳回裝置物件的特定成員。 如需詳細資訊,請參閱 初始化裝置物件 和裝置類型的特定檔。

請小心指定 DeviceTypeDeviceCharacteristics 正確參數中的值。 這兩個參數都會使用系統定義的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)

另請參閱

DEVICE_OBJECT

FsRtlRegisterUncProvider

IoAttachDevice

IoAttachDeviceToDeviceStack

IoCreateDeviceSecure

IoCreateSymbolicLink

IoDeleteDevice