控制裝置命名空間存取

在 Windows 驅動程式模型 (WDM) 中,每個裝置物件都有相關聯的 命名空間。 裝置命名空間中的名稱是開頭為裝置名稱的路徑。 針對名為 「\DeviceName\ 」 的裝置,其命名空間是由 「\DeviceName\FileName\ 」 格式的任何名稱所組成。 (針對檔案系統, FileName 是檔案系統上檔案的實際名稱。)

WDM 驅動程式會接收裝置命名空間中所有名稱的開啟要求。 驅動程式會將 「\DeviceName\ 」 的開啟要求視為裝置物件本身的開啟要求。 如果驅動程式實作對裝置命名空間中開啟要求的支援,則會將 「\Device\DeviceName FileName\ 」 的開啟要求視為裝置物件命名空間中 「file」 的開啟 (,其中裝置的 「file」 概念是驅動程式決定的) 。

大部分驅動程式不會實作對裝置命名空間中開啟作業的支援,但所有驅動程式都必須提供安全性檢查,以防止未經授權存取裝置的命名空間。 根據預設,安全性會檢查裝置命名空間內的檔案開啟要求, (例如,「\DeviceDeviceName\\FileName」) 完全保留給驅動程式,作業系統不會檢查裝置物件 ACL。

如果已設定裝置物件的FILE_DEVICE_SECURE_OPEN特性,系統會將裝置物件的安全性描述元套用至裝置命名空間中的所有檔案開啟要求。 驅動程式可以使用IoCreateDevice 或 IoCreateDeviceSecure建立裝置物件時,設定FILE_DEVICE_SECURE_OPEN。 對於 WDM 驅動程式,您也可以在登錄中設定FILE_DEVICE_SECURE_OPEN。 您也可以在登錄中設定 IoCreateDeviceSecure所建立非 WDM 驅動程式的裝置物件。 如需在登錄中設定裝置物件屬性的詳細資訊,例如裝置特性,請參閱 在登錄中設定裝置物件屬性。 如需裝置特性的詳細資訊,請參閱 指定裝置特性

不支援命名空間之裝置的驅動程式必須使用兩種方法之一,以確保正確處理裝置命名空間內的檔案開啟要求:

  • 驅動程式的裝置物件具有FILE_DEVICE_SECURE_OPEN裝置特性集。 然後驅動程式可以將任何開啟的要求視為裝置物件的開啟要求。

  • 驅動程式可以失敗任何 IRP_MJ_CREATE 要求,這些要求指定長度為非零的 IrpSp-FileObject-FileName >> 參數。 在此情況下,裝置的開啟要求受限於系統的 ACL 檢查,而驅動程式會失敗裝置命名空間內的所有檔案開啟要求。 (支援獨佔開啟的驅動程式必須使用此選項。)

支援命名空間之裝置的驅動程式也可以使用兩種方法來保護裝置命名空間中開啟的檔案要求:

  • 驅動程式的裝置物件具有FILE_DEVICE_SECURE_OPEN裝置特性集。 這可確保裝置的安全性設定會統一套用至裝置的命名空間。 (驅動程式負責在其 DRIVER_DISPATCH 回呼函式中實作命名空間的支援。)

  • 驅動程式會檢查其 DispatchCreate 常式中是否有檔案名的任何 ACL。 (即使在此情況下,驅動程式應該設定FILE_DEVICE_SECURE_OPEN特性,除非開啟到裝置的命名空間可能會比裝置物件更弱的安全性設定。)

FILE_DEVICE_SECURE_OPEN特性會在堆疊頂端檢查,因此篩選裝置物件必須在附加後複製下一個較低裝置物件的 特性 成員。