共用方式為


控制裝置命名空間存取

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

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

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

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

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

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

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

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

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

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

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