裝置物件的 SDDL

安全性描述項定義語言 (SDDL) 是用來代表安全性描述元。 裝置物件的安全性可由 放在 INF 檔案中的 SDDL 字串指定,或傳遞至 IoCreateDeviceSecure安全性描述元定義語言已完整記載于Microsoft Windows SDK檔中。

雖然 INF 檔案支援完整的 SDDL 範圍, 但 IoCreateDeviceSecure 常式僅支援語言的子集。 這裡定義了這個子集。

裝置物件的 SDDL 字串格式為 「D:P」,後面接著 「 (A;;Access;;;SID) 」。 SID值會指定安全性識別碼,決定Access值套用 (的物件,例如使用者或群組) 。 Access值會指定 SID 允許的存取權限。 AccessSID值如下所示。

注意 針對裝置物件使用 SDDL 時,您的驅動程式必須連結到 Wdmsec.lib。

訪問
指定決定允許存取 權的ACCESS_MASK 值。 這個值可以撰寫為格式為 「0xhex」 的十六進位值,或是表示存取權限的兩個字母符號代碼序列。

下列程式碼可用來指定一般存取權限。

程式碼 一般存取權限

GA

GENERIC_ALL

GR

GENERIC_READ

GW

GENERIC_WRITE

Gx

GENERIC_EXECUTE

下列程式碼可用來指定特定存取權限。

程式碼 特定存取權限

RC

READ_CONTROL

SD

刪除

Wd

WRITE_DAC

WRITE_OWNER

請注意,GENERIC_ALL授與上述兩個數據表中所列的擁有權限,包括變更 ACL 的能力。


指定授與指定存取權的 SID。 SID 代表帳戶、別名、群組、使用者或電腦。

下列 SID 代表電腦上的 帳戶

SID 描述

SY

系統

表示作業系統本身,包括其使用者模式元件。

LS

本機服務

本機服務 (預先定義的帳戶,其也屬於已驗證和世界) 。 從 Windows XP 開始,可以使用此 SID。

NS

網路服務

網路服務 (預先定義的帳戶,其也屬於已驗證和世界) 。 從 Windows XP 開始,可以使用此 SID。

下列 SID 代表電腦上的 群組

SID 描述

BA

系統管理員

電腦上的內建 Administrators 群組。

BU

內建使用者群組

涵蓋網域上所有本機使用者帳戶和使用者的群組。

BG

內建來賓群組

涵蓋使用者使用本機或網域來賓帳戶登入的群組。

下列 SID 描述使用者已驗證的範圍。

SID 描述

AU

驗證的使用者

本機電腦或網域所辨識的任何使用者。 請注意,使用 Builtin Guest 帳戶登入的使用者不會經過驗證。 不過,會驗證機器或網域上具有個別帳戶的 Guest 群組成員。

AN

匿名登入使用者

任何在沒有身分識別的情況下登入的使用者,例如匿名網路會話。 請注意,使用 Builtin Guest 帳戶登入的使用者不會經過驗證或匿名。 從 Windows XP 開始,可以使用此 SID。

下列 SID 說明使用者如何登入電腦。

SID 描述

IU

互動式使用者

最初以互動方式登入電腦的使用者,例如本機登入和遠端桌面登入。

NU

網路登入使用者

使用者從遠端存取電腦,而不需要互動式桌面存取 (例如檔案共用或 RPC 呼叫) 。

Wd

World

在 Windows XP 之前,此 SID 涵蓋每個會話,無論是已驗證的使用者、匿名使用者或 Builtin Guest 帳戶。

從 Windows XP 開始,此 SID 不會涵蓋匿名登入會話;它只涵蓋已驗證的使用者和 Builtin Guest 帳戶。

請注意,World SID 也未涵蓋未受信任的或「受限制」程式碼。 如需詳細資訊,請參閱下表中的 Restricted Code (RC) SID 的描述。

下列 SID 值得特別提及。

SID 描述

RC

受限制的程式碼

此 SID 是用來控制不受信任程式碼的存取。 使用 RC 對權杖的 ACL 驗證封裝含兩個檢查,一個是針對權杖的一般 SID 清單, (包含 WD 實例) ,另一個則針對第二個 (清單,通常包含 RC 和原始權杖 SID 子集) 。 只有在權杖通過這兩項測試時,才會授與存取權。 因此,RC 實際上與其他 SID 搭配運作。

任何指定 RC 的 ACL 也必須指定 WD。 當 RC 與 ACL 中的 WD 配對時,會描述包含不受信任程式碼的所有人超集合。

未受信任的程式碼可能是使用 [總管] 中的 [執行身分] 選項啟動的程式碼。 根據預設,World 不會涵蓋不受信任的程式碼。

Ud

User-Mode驅動程式

此 SID 會授與使用者模式驅動程式的存取權。 目前,此 SID 僅涵蓋針對 User-Mode Driver Framework (UMDF) 所撰寫的驅動程式。 從 Windows 8 開始,即可使用此 SID。

在舊版的 Windows 中,您無法辨識 「UD」 縮寫,您必須指定此 SID 的完整形式, (S-1-5-84-0-0-0-0-0) 來授與 UMDF 驅動程式的存取權。 如需詳細資訊,請參閱 User-Mode Driver Framework 檔中 的控制裝置存取

裝置物件的 SDDL 範例

本節描述 Wdmsec.h 中找到的預先定義 SDDL 字串。 您也可以使用這些做為範本,為裝置物件定義新的 SDDL 字串。

SDDL_DEVOBJ_KERNEL_ONLY

「D:P」

SDDL_DEVOBJ_KERNEL_ONLY是「empty」 ACL。 使用者模式程式碼 (包括以系統) 執行的進程無法開啟裝置。

建立 PDO 時,PnP 匯流排驅動程式可以使用此描述元。 然後,INF 檔案可以指定裝置的鬆散安全性設定。 藉由指定此描述元,匯流排驅動程式可確保在處理 INF 之前,不會嘗試開啟裝置。

同樣地,非 WDM 驅動程式可以使用這個描述元讓其裝置物件無法存取,直到適當的使用者模式程式 (,例如安裝程式) 在登錄中設定最終的安全性描述元為止。

在所有情況下,預設值都是緊密的安全性,視需要鬆散。

SDDL_DEVOBJ_SYS_ALL

「D:P (A;;Ga;;;SY) 」

SDDL_DEVOBJ_SYS_ALL類似于SDDL_DEVOBJ_KERNEL_ONLY,但除了核心模式程式碼之外,也允許以系統身分執行的使用者模式程式碼來開啟裝置以進行任何存取。

舊版驅動程式可能會使用此 ACL 從緊密的安全性設定開始,並使用 SetFileSecurity 使用者模式函式讓其服務在執行時間開啟裝置給個別使用者。 在此情況下,服務必須以系統身分執行。

SDDL_DEVOBJ_SYS_ALL_ADM_ALL

「D:P (A;;Ga;;;SY) (A;;Ga;;;BA) 」

SDDL_DEVOBJ_SYS_ALL_ADM_ALL允許核心、系統和系統管理員完全控制裝置。 沒有其他使用者可以存取裝置。

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R

「D:P (A;;Ga;;;SY) (A;;GRGWGX;;;BA) (A;;Gr;;;WD) 」

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R允許核心和系統完全控制裝置。 根據預設,系統管理員可以存取整個裝置,但無法變更 ACL (系統管理員必須先控制裝置。)

(World SID) 的每個人都獲得讀取權限。 不受信任的程式碼無法存取裝置, (未受信任的程式碼可能是使用 [總管] 中的 [執行身分] 選項啟動的程式碼。根據預設,World 不會涵蓋受限制的程式碼。)

另請注意,周遊存取權不會授與一般使用者。 因此,這可能不是具有命名空間之裝置的適當描述項。

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R

「D:P (A;;Ga;;;SY) (A;;GRGWGX;;;BA) (A;;Gr;;;WD) (A;;Gr;;;RC) 」

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R允許核心和系統完全控制裝置。 根據預設,系統管理員可以存取整個裝置,但無法變更 ACL (系統管理員必須先控制裝置。)

(World SID) 的每個人都獲得讀取權限。 此外,也允許不受信任的程式碼存取程式碼。 未受信任的程式碼可能是使用 [總管] 中的 [執行身分] 選項啟動的程式碼。 根據預設,World 不會涵蓋受限制的程式碼。

另請注意,周遊存取權不會授與一般使用者。 因此,這可能不是具有命名空間之裝置的適當描述項。

請注意,上述 SDDL 字串不包含任何繼承修飾詞。 因此,它們僅適用于裝置物件,不應用於檔案或登錄機碼。 如需使用 SDDL 指定繼承的詳細資訊,請參閱Microsoft Windows SDK檔。