共用方式為


控制 KMDF 驅動程式中的裝置存取

驅動程式必須協助防止使用者不當存取電腦的裝置和檔案。 若要防止未經授權的裝置和檔案存取,您必須:

  • 僅在必要時為裝置物件命名。

  • 提供裝置物件和介面的安全性描述項。

僅在必要時為裝置物件命名

就像大部分 Windows 驅動程式模型 (WDM) 驅動程式一樣,架構型驅動程式通常不會命名其裝置物件。 應用程式可以藉由指定裝置物件名稱來存取裝置,因此每個額外的裝置物件名稱都代表應用程式可用來存取裝置的額外路徑。

若要防止未經授權的裝置存取,每個驅動程式都可以在命名裝置物件時指定安全性描述元。 不過,作業系統提供給驅動程式的檔案名 (請參閱 WdfFileObjectGetFileName) 不包含應用程式所使用的裝置物件名稱。 因此,如果驅動程式堆疊中的數個驅動程式為其裝置物件提供名稱,則驅動程式無法判斷用來開啟裝置的應用程式物件名稱。 因此,應用程式可能會開啟比驅動程式預期的較不嚴格安全性描述元的裝置。

實體裝置物件 (PDO) 必須具有名稱。 一般而言,架構型匯流排驅動程式不會指定 PDO 的名稱,因為架構預設會 () 指示作業系統產生名稱。

另一方面,架構型驅動程式可以藉由呼叫 WdfDeviceInitAssignName,將裝置名稱指派給裝置物件。 驅動程式應該 (FDO) 命名功能裝置物件、篩選裝置物件 (篩選 DO) ,或只有在驅動程式必須支援需要特定裝置名稱的較舊應用程式時,或驅動程式屬於需要物件名稱的較舊驅動程式堆疊時,才能將裝置物件命名為 PDO。

WDM 驅動程式和架構型驅動程式應該提供應用程式可以存取的裝置介面,而不是命名 FDO 和篩選 DO。 作業系統會從裝置的 PDO 取得裝置介面的安全性描述元,以及驅動程式套件 INF 檔案所指定的登錄專案。 如果驅動程式的裝置以原始模式運作,則匯流排驅動程式可以提供 PDO 的裝置介面,而不需要函式驅動程式。

有些驅動程式必須呼叫 WdfDeviceCreateSymbolicLink ,以為其裝置建立符號連結名稱。 例如,如果應用程式預期會看到裝置的 MS-DOS 名稱,驅動程式可能會建立 MS-DOS 裝置名稱 。 如果您的驅動程式為未命名的 FDO 或篩選 DO 建立符號連結名稱,則架構會將符號連結名稱與 PDO 的名稱產生關聯。 (控制裝置未與 PDO 相關聯,因此驅動程式無法為未命名的控制裝置建立符號連結名稱。)

提供裝置物件和介面的安全性描述項

每個具名裝置物件都必須有安全性描述元。 作業系統會使用裝置物件的安全性描述元來判斷允許存取裝置及其裝置介面的使用者類型。 安全性描述元可以指派給裝置物件,方法是:

根據預設,作業系統也會使用裝置 PDO 的安全性描述元來判斷驅動程式所提供的裝置介面存取權限。

驅動程式套件可以提供 INF 檔案,以在INF DDInstall.HW 區段中指定具有INF AddReg 指示詞的裝置安全性描述項。

如需在 INF 檔案中指定安全描述元的詳細資訊,請參閱 建立安全裝置安裝

如果您的驅動程式為以原始模式運作的裝置建立 PDO,驅動程式必須在呼叫WdfPdoInitAssignRawDevice時指定裝置安裝類別。 此外,如果您的驅動程式建立控制裝置,它可以呼叫 WdfDeviceInitSetDeviceClass 來指定裝置設定類別。 在這兩種情況下,系統管理員可以使用指定之安裝類別的登錄機碼來儲存裝置的安全性描述項。

如需作業系統如何決定要用於裝置之安全性描述項的資訊,請參閱 控制裝置存取

當架構建立裝置物件時,它一律會設定FILE_DEVICE_SECURE_OPEN旗標,讓作業系統在允許應用程式存取裝置命名空間內的任何名稱之前,先檢查裝置的安全性描述項。 如需FILE_DEVICE_SECURE_OPEN旗標和裝置命名空間的詳細資訊,請參閱 控制裝置命名空間存取