建立裝置物件

整合型驅動程式必須為每個處理 I/O 要求的實體、邏輯或虛擬裝置建立裝置物件。 未為裝置建立裝置物件的驅動程式不會收到裝置的任何 IRP。

在某些技術方面,與類別驅動程式或埠驅動程式相關聯的迷你驅動程式不需要建立自己的裝置物件。 相反地,類別或埠驅動程式會建立裝置物件,並接收裝置的所有 IRP。 類別或埠驅動程式接著會使用驅動程式特定的方法,將 I/O 要求傳遞至迷你驅動程式。 請參閱特定技術領域的檔,以判斷 Microsoft 是否提供代表驅動程式建立裝置物件的類別或埠驅動程式。

驅動程式會呼叫 IoCreateDevice 或 IoCreateDeviceSecure 來建立其裝置物件。 如需要使用的常式詳細資訊,請參閱下列各節。

建立 WDM 函式和篩選驅動程式的裝置物件

建立 WDM 匯流排驅動程式的裝置物件

建立非 WDM 驅動程式的裝置物件

當驅動程式建立裝置物件時,它會將下列資訊提供給 IoCreateDevice 或 IoCreateDeviceSecure:

  • 裝置的 裝置擴充功能大小。 裝置擴充功能是一個系統組態的儲存區域,驅動程式可用於裝置特定的存放裝置。 如需詳細資訊,請參閱 裝置擴充功能。

  • 系統定義的常數,表示裝置物件所代表的 DeviceType 。 如需詳細資訊,請參閱 指定裝置類型。

  • 一或多個 ORed 系統定義的常數,表示裝置的裝置特性。 如需詳細資訊,請參閱 指定裝置特性。

  • 名為 Exclusive的布林值,指定裝置物件的 Flags 中的位是否應該設定為 DO_EXCLUSIVE,指出驅動程式服務獨佔裝置,例如視訊、序列、平行或音效裝置。 WDM 驅動程式必須將 [獨佔] 設定為 FALSE。 如需詳細資訊,請參閱 指定裝置物件的獨佔存取權。

  • 驅動程式物件的指標。 WDM 函式或篩選驅動程式會接收其驅動程式物件的指標,做為其 AddDevice 常式的參數。 所有驅動程式都會在其 DriverEntry 常式中接收其驅動程式物件的指標。 系統會使用此指標將驅動程式與其裝置物件產生關聯。

  • (DeviceName) 命名裝置,為 Null 終止的 Unicode 字串選擇性指標。 除了匯流排驅動程式以外,WDM 驅動程式不提供裝置名稱;這麼做會略過 PnP 管理員的安全性功能。 如需詳細資訊,請參閱 具名裝置物件。

如果 呼叫 IoCreateDevice 或 IoCreateDeviceSecure 成功,I/O 管理員會提供裝置物件本身的儲存空間,以及與裝置物件相關聯的所有其他資料結構,包括裝置延伸模組,它會以零初始化。

建立 WDM 函式和篩選驅動程式的裝置物件

除了匯流排驅動程式以外,WDM 驅動程式呼叫 IoCreateDevice 以建立其裝置物件。 大部分 WDM 驅動程式都會從其 AddDevice 常式內建立其裝置物件。 某些驅動程式,例如必須回應磁片磁碟機配置 IOCTLs 的磁片磁碟機,請從分派常式呼叫 IoCreateDevice 。

除非 Windows 驅動程式套件的裝置類型特定區段 (WDK) 檔狀態否則,您的驅動程式應該在其 AddDevice 常式中建立其裝置物件。 如需詳細資訊,請參閱 撰寫 AddDevice 常式。

建立 WDM 匯流排驅動程式的裝置物件

如果關聯類型為BusRelations,WDM 匯流排驅動程式會在列舉新裝置以回應IRP_MN_QUERY_DEVICE_RELATIONS要求時建立 PDO。

下列規則會判斷匯流排驅動程式是否呼叫 IoCreateDevice 或 IoCreateDeviceSecure 來建立裝置物件:

  • 如果裝置可以 用於原始模式,則必須呼叫 IoCreateDeviceSecure。

  • 如果裝置沒有原始模式,則匯流排驅動程式可以使用 IoCreateDevice 或 IoCreateDeviceSecure。 當匯流排上裝置的預設系統安全性足夠時,可以使用IoCreateDevice;IoCreateDeviceSecure可用來指定更嚴格的安全性描述元。 如需詳細資訊,請參閱 控制裝置存取。

建立非 WDM 驅動程式的裝置物件

非 WDM 驅動程式會使用 IoCreateDevice 來建立未命名的裝置物件,而 IoCreateDeviceSecure 則使用 IoCreateDeviceSecure 來建立具名裝置物件。 請注意,無法從使用者模式存取非 WDM 驅動程式的未命名裝置物件,因此驅動程式通常必須建立至少一個具名物件。