SeAccessCheckByType
NTSTATUS __stdcall SeAccessCheckByType(
VOID *SecurityDescriptor,
VOID *PrincipalSelfSid,
VOID *ClientToken,
UINT64 DesiredAccess,
_OBJECT_TYPE_LIST *ObjectTypeList,
UINT64 ObjectTypeListLength,
_GENERIC_MAPPING *GenericMapping,
PRIVILEGE_SET *PrivilegeSet,
UINT64 *PrivilegeSetLength,
UINT64 *GrantedAccess,
INT64 *AccessStatus,
UINT8 ReturnResultList){
_SIZE_T Length;
__int64 v14;
INT64 v16;
if( KeGetCurrentThread()->PreviousMode )
{
v14 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)PrivilegeSetLength < 0x7FFFFFFF0000i64 )
v14 = (__int64)PrivilegeSetLength;
Length = *(_DWORD *)v14;
}
else
{
Length = *(_DWORD *)PrivilegeSetLength;
}
LODWORD(v16) = ObjectTypeListLength;
return SeAccessCheckByTypeWithAdminlessChecks(
(INT64)SecurityDescriptor,
(INT64)PrincipalSelfSid,
(INT64)ClientToken,
DesiredAccess,
(INT64)ObjectTypeList,
v16,
(INT64)GenericMapping,
PrivilegeSet,
Length,
(INT64)PrivilegeSetLength,
(INT64)GrantedAccess,
AccessStatus,
ReturnResultList,
0);
}Referenced by:
NtAccessCheck
NtAccessCheckByType
NtAccessCheckByTypeResultList