無法驗證裝置物件
許多驅動程式會呼叫 IoCreateDevice來建立一種以上的裝置物件。 有些驅動程式會在 DriverEntry 常式中建立控制裝置物件,以允許應用程式在驅動程式建立 FDO 之前與驅動程式通訊。 例如,檔案系統驅動程式會建立裝置物件,以在向 IoRegisterFileSystem註冊檔案系統時處理檔案系統通知。
驅動程式 應該準備好IRP_MJ_CREATE 所建立之任何裝置物件的要求。 完成具有成功狀態的要求之後,驅動程式應該會在建立的檔案物件上收到任何使用者可存取的 I/O 要求。 因此,任何建立多個裝置物件的驅動程式都必須檢查每個 I/O 要求所指定的裝置物件。
例如,假設驅動程式會在 DriverEntry中建立整體控制裝置物件,然後在其 AddDevice 常式中建立另一組裝置物件。 假設 AddDevice 常式會使用較低層級驅動程式的相關資訊來初始化裝置延伸模組,但控制裝置物件不包含這項資訊。 在此情況下,所有分派常式都必須小心檢查他們收到的每個裝置物件。 否則,在嘗試使用裝置擴充功能資訊時,驅動程式可能會當機。