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位來明確要求它們,否則常式不會進行任何許可權檢查。
[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 2000 版和更新版本的 Windows。 |
| 目標平台 | 通用 |
| 標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
| 程式庫 | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | PASSIVE_LEVEL |
| DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 PowerIrpDDis (wdm) |
另請參閱
意見反應
提交並檢視相關的意見反應