SeAccessCheck 函式 (wdm.h)
SeAccessCheck 會判斷要求的訪問許可權是否可以授與受安全性描述元和對象擁有者保護的物件。
語法
BOOLEAN SeAccessCheck(
[in] PSECURITY_DESCRIPTOR SecurityDescriptor,
[in] PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
[in] BOOLEAN SubjectContextLocked,
[in] ACCESS_MASK DesiredAccess,
[in] ACCESS_MASK PreviouslyGrantedAccess,
[out] PPRIVILEGE_SET *Privileges,
[in] PGENERIC_MAPPING GenericMapping,
[in] KPROCESSOR_MODE AccessMode,
[out] PACCESS_MASK GrantedAccess,
[out] PNTSTATUS AccessStatus
);
參數
[in] SecurityDescriptor
描述保護所存取物件之安全描述項之 SECURITY_DESCRIPTOR 結構的指標。
[in] SubjectSecurityContext
不透明 SECURITY_SUBJECT_CONTEXT 結構的指標,指定主體擷取的安全性內容。
[in] SubjectContextLocked
布爾值,指出使用者的主旨內容是否已鎖定,因此不需要再次鎖定。
[in] DesiredAccess
指定呼叫端嘗試取得之訪問許可權 的ACCESS_MASK 位掩碼。 如果呼叫端設定MAXIMUM_ALLOWED位,則例程會執行所有 DACL 檢查。 不過,除非呼叫端藉由設定ACCESS_SYSTEM_SECURITY或WRITE_OWNER位來明確要求, 否則 SeAccessCheck 不會執行任何許可權檢查。
[in] PreviouslyGrantedAccess
指定已授與訪問許可權 的ACCESS_MASK 位掩碼,例如因為持有許可權而授與的訪問許可權。
[out] Privileges
呼叫端提供的變數指標,設定為將做為存取驗證一部分的 PRIVILEGE_SET 結構位址,或者此參數可以是 NULL。 如果有的話,傳回的緩衝區必須由具有 SeFreePrivileges 的呼叫端釋放。
[in] GenericMapping
與這個物件類型相關聯 之GENERIC_MAPPING 結構的指標。 這個值會指定每個GENERIC_XXX 訪問許可權所隱含的特定訪問許可權。
[in] AccessMode
指定要在檢查中使用的存取模式,可以是 UserMode 或 KernelMode。
[out] GrantedAccess
傳回存取遮罩的指標,表示授與的存取權。 如果呼叫端指定MAXIMUM_ALLOWED, 且 SecurityDescriptor 中的 DACL 為 NULL,則例程會傳回GENERIC_ALL加上呼叫端明確要求的任何其他存取權。
[out] AccessStatus
狀態值的指標,指出拒絕存取的原因。
傳回值
如果允許存取, SeAccessCheck 會傳回 TRUE。
備註
SeAccessCheck 可能會根據所要求的存取權,執行 SeTakeOwnershipPrivilege 和 SeSecurityPrivilege 的許可權測試。 它可能會在未來的作業系統版本中執行額外的許可權測試。
此例程也可能檢查呼叫端是否為對象的擁有者,以便授與WRITE_DAC或READ_CONTROL存取權。
如果這個例程傳回 FALSE,呼叫端應該使用傳回的 AccessStatus 作為其傳回值。 也就是說,呼叫端應該避免硬式編碼傳回值STATUS_ACCESS_DENIED或任何其他特定的STATUS_XXX 值。
如需安全性和訪問控制的詳細資訊,請參閱適用於驅動程序開發人員的 Windows 安全性模型,以及 Microsoft Windows SDK 中有關這些主題的檔。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 PowerIrpDDis (wdm) |