安全性描述元定義語言 (SDDL) 用來表示安全性描述元。 裝置對象的安全性可由 放在 INF 檔案中的 SDDL 字串指定,或傳遞至 IoCreateDeviceSecure。 安全性描述元定義語言已完整記載於 Microsoft Windows SDK 檔中。
雖然 INF 檔案支援 SDDL 的完整範圍,但 IoCreateDeviceSecure 例程僅支援語言的子集。 這裡定義了這個子集。
裝置物件的 SDDL 字串格式為 "D:P",後面接著一個或多個表示式 "(A;;Access;;;SID)"。 SID 值會指定安全性識別碼,以決定 Access 值套用的物件(例如,使用者或群組)。 Access 值會指定 SID 所允許的訪問許可權。 Access 和 SID 值如下所示。
針對裝置物件使用 SDDL 時,您的驅動程式必須連結至 Wdmsec.lib。
存取
指定 ACCESS_MASK 值,決定允許的存取權。 此值可以寫入為格式為 「0xhex」 的十六進位值,或以代表訪問許可權的兩個字母符號代碼序列撰寫。
下列程式代碼可用來指定一般訪問許可權。
| Code | 一般存取權 |
|---|---|
GA |
通用_全部 |
希臘 |
一般讀取權限 |
GW |
通用寫入 (GENERIC_WRITE) |
GX |
通用執行權限 |
下列程式代碼可用來指定特定訪問許可權。
| Code | 特定訪問許可權 |
|---|---|
RC |
讀取控制 |
SD |
刪除 |
威騰數位科技 |
WRITE_DAC |
窩 |
WRITE_OWNER (擁有者寫入權限) |
GENERIC_ALL授與上述兩個數據表中所列的所有許可權,包括變更 ACL 的能力。
SID
指定已授與指定存取權的 SID。 SID 代表帳戶、別名、群組、用戶或計算機。
下列 SID 代表電腦上的 帳戶 。
| SID | 說明 |
|---|---|
SY |
系統 表示作業系統本身,包括其使用者模式元件。 |
LS |
本機服務 本地服務預先定義的帳戶(也屬於已驗證和世界)。 從 Windows XP 開始,即可使用此 SID。 |
NS(如果 NS 是指一個系列或品牌,則直接使用英文字母) |
網路服務 用於網路服務的預定帳戶(也屬於已認證和全球)。 從 Windows XP 開始,即可使用此 SID。 |
下列 SID 代表電腦上的 群組 。
| SID | 說明 |
|---|---|
文学士 |
管理員 計算機上的內建 Administrators 群組。 |
BU |
內建使用者群組 涵蓋所有本機使用者帳戶和網域使用者的群組。 |
BG |
內建來賓群組 群組涵蓋使用本機或網域來賓帳戶登入的使用者。 |
下列 SID 描述使用者已驗證的程度。
| SID | 說明 |
|---|---|
AU |
已驗證的使用者 本機電腦或網域所辨識的任何使用者。 使用 Builtin Guest 帳戶登入的使用者未被驗證。 不過,計算機或網域上具有個別帳戶的 Guest 群組成員會經過驗證。 |
一 |
匿名登入使用者 任何沒有身分識別的使用者登入,例如匿名網路會話。 使用 Builtin Guest 帳戶登入的使用者不會經過驗證或匿名。 從 Windows XP 開始,即可使用此 SID。 |
下列 SID 說明使用者如何登入電腦。
| SID | 說明 |
|---|---|
IU |
互動式使用者 最初以互動方式登入計算機的使用者,例如本機登入和遠端桌面登入。 |
紐 |
網路登入使用者 用戶從遠端存取電腦,而不需要互動式桌面存取(例如檔案共用或 RPC 呼叫)。 |
威騰數位科技 |
世界 在 Windows XP 之前,此 SID 涵蓋每個會話,無論是已驗證的使用者、匿名使用者,還是 Builtin Guest 帳戶。 從 Windows XP 開始,此 SID 不會涵蓋匿名登入會話;它只涵蓋已驗證的使用者和 Builtin Guest 帳戶。 World SID 也不會涵蓋不受信任的或「受限制」程序代碼。 如需詳細資訊,請參閱下表中的受限制程序代碼 (RC) SID 描述。 |
下列 SID 值得特別提及。
| SID | 說明 |
|---|---|
RC |
受限制的程式碼 此 SID 用來控制不受信任的程式代碼的存取。 使用 RC 對令牌進行 ACL 驗證涉及兩項檢查:一項是針對令牌的一般 SID 清單,例如包含 WD;另一項是針對第二個清單,通常包含 RC 以及原始權杖 SID 的子集。 只有在令牌通過這兩項測試時,才會授與存取權。 因此,RC 實際上與其他 SID 搭配運作。 任何指定 RC 的 ACL 也必須指定 WD。 當 RC 與 ACL 中的 WD 配對時,會描述包含不受信任程式碼的 Everyone 超集。 未受信任的程式代碼可能是使用檔案總管中的以其他使用者身分執行選項啟動的程式代碼。 根據預設,World 不會涵蓋不受信任的程式代碼。 |
UD |
User-Mode 驅動程式 此 SID 會授與使用者模式驅動程式的存取權。 目前,此 SID 僅涵蓋針對 User-Mode Driver Framework (UMDF) 撰寫的驅動程式。 從 Windows 8 開始,即可使用此 SID。 在無法辨識 「UD」 縮寫的舊版 Windows 中,您必須指定此 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是「空白」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)都被授予讀取權限。 不受信任的程式代碼無法存取裝置(未受信任的程式代碼可能是使用 Explorer 中的 [執行身分] 選項啟動的程式代碼。根據預設,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 檔。