SeCaptureLuidAndAttributesArray
NTSTATUS __stdcall SeCaptureLuidAndAttributesArray(
LUID_AND_ATTRIBUTES *InputArray,
UINT64 ArrayCount,
INT8 RequestorMode,
LUID_AND_ATTRIBUTES **CapturedArray,
UINT64 *AlignedArraySize){
UINT64 v6;
char *v7;
unsigned int v8;
UINT8 *PoolWithTag;
UINT8 **v11;
_DWORD *v12;
if( !(_DWORD)ArrayCount )
{
*v11 = 0i64;
*v12 = 0;
return 0;
}
if( (unsigned int)ArrayCount > 0x42 )
return -1073741811;
v6 = (unsigned int)(12 * ArrayCount);
*v12 = (v6 + 3) & 0xFFFFFFFC;
if( RequestorMode && (_DWORD)v6 )
{
if( ((unsigned __int8)InputArray & 3) != 0 )
ExRaiseDatatypeMisalignment();
v7 = (char *)InputArray + (unsigned int)v6;
if( (unsigned __int64)v7 > 0x7FFFFFFF0000i64 || v7 < (char *)InputArray )
MEMORY[0x7FFFFFFF0000] = 0;
}
v8 = v6;
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v6, 0x754C6553ui64);
*v11 = PoolWithTag;
if( PoolWithTag )
{
memmove(PoolWithTag, (UINT8 *)InputArray, v8);
return 0;
}
return -1073741670;
}Referenced by:
NtAdjustPrivilegesToken
NtCreateTokenEx
NtFilterToken
NtPrivilegeCheck