SepCopyTokenAccessInformation
VOID __stdcall SepCopyTokenAccessInformation(
_TOKEN *Token,
_TOKEN_ACCESS_INFORMATION *pTAI,
UINT64 TAIBufferLength,
UINT64 PrivilegeCount,
UINT64 GroupsLength,
UINT64 GroupsSALength,
UINT64 RestrictedSidsLength,
UINT64 RestrictedSidsSALength,
UINT64 PackageSidLength,
UINT64 CapabilitySidsLength,
UINT64 CapabilitySidsSALength,
UINT64 TrustSidLength,
UINT64 SecurityAttributesLength,
UINT8 UseNewTrust,
VOID *NewTrustSid){
unsigned int v16;
int v18;
__int64 v19;
__int64 v20;
char *v21;
unsigned int v22;
UINT64 v23;
char *TargetSid;
_SID_AND_ATTRIBUTES *v25;
char *v26;
UINT64 RestrictedSidCount;
char *v28;
char *v29;
UINT64 CapabilityCount;
char *v31;
void *v32;
unsigned __int8 *TrustLevelSid;
char *v34;
char *v35;
_TOKEN_PRIVILEGES *v36;
UINT64 pReturnSize;
pTAI->AuthenticationId = Token->AuthenticationId;
v16 = PrivilegeCount;
pTAI->TokenType = Token->TokenType;
pTAI->ImpersonationLevel = Token->ImpersonationLevel;
pTAI->Flags = Token->TokenFlags;
v18 = (_DWORD)pTAI + TAIBufferLength;
SeQueryMandatoryPolicyToken(Token, &pTAI->MandatoryPolicy);
v20 = *(_QWORD *)(v19 + 1080);
v21 = 0i64;
v22 = 0;
if( v20 )
v22 = *(_DWORD *)(v20 + 40);
v23 = (unsigned int)(GroupsLength - GroupsSALength);
pTAI->AppContainerNumber = v22;
LODWORD(pTAI[1].SidHash) = Token->UserAndGroupCount;
TargetSid = (char *)&pTAI[4].RestrictedSidHash + (unsigned int)GroupsSALength;
pTAI[1].RestrictedSidHash = (_SID_AND_ATTRIBUTES_HASH *)&pTAI[4].RestrictedSidHash;
pTAI->SidHash = (_SID_AND_ATTRIBUTES_HASH *)&pTAI[1];
RtlCopySidAndAttributesArray(
Token->UserAndGroupCount,
Token->UserAndGroups,
v23,
(_SID_AND_ATTRIBUTES *)&pTAI[4].RestrictedSidHash,
TargetSid,
(VOID **)&pReturnSize,
&pReturnSize);
RtlSidHashInitialize(
(_SID_AND_ATTRIBUTES *)&pTAI[4].RestrictedSidHash,
Token->UserAndGroupCount,
(_SID_AND_ATTRIBUTES_HASH *)&pTAI[1]);
v25 = (_SID_AND_ATTRIBUTES *)((char *)&pTAI[4].RestrictedSidHash + (unsigned int)GroupsLength);
LODWORD(v25->Sid) = Token->RestrictedSidCount;
v26 = (char *)&v25[17];
*(_QWORD *)&v25->Attributes = v25 + 17;
pTAI->RestrictedSidHash = (_SID_AND_ATTRIBUTES_HASH *)v25;
RestrictedSidCount = Token->RestrictedSidCount;
if( (_DWORD)RestrictedSidCount )
{
RtlCopySidAndAttributesArray(
RestrictedSidCount,
Token->RestrictedSids,
(unsigned int)(RestrictedSidsLength - RestrictedSidsSALength),
v25 + 17,
&v26[(unsigned int)RestrictedSidsSALength],
(VOID **)&pReturnSize,
&pReturnSize);
RtlSidHashInitialize(v25 + 17, Token->RestrictedSidCount, (_SID_AND_ATTRIBUTES_HASH *)v25);
}
v28 = &v26[(unsigned int)RestrictedSidsLength];
*(_DWORD *)v28 = Token->CapabilityCount;
v29 = v28 + 272;
*((_QWORD *)v28 + 1) = v28 + 272;
pTAI->CapabilitiesHash = (_SID_AND_ATTRIBUTES_HASH *)v28;
CapabilityCount = Token->CapabilityCount;
if( (_DWORD)CapabilityCount )
{
RtlCopySidAndAttributesArray(
CapabilityCount,
Token->Capabilities,
(unsigned int)(CapabilitySidsLength - CapabilitySidsSALength),
(_SID_AND_ATTRIBUTES *)v28 + 17,
&v29[(unsigned int)CapabilitySidsSALength],
(VOID **)&pReturnSize,
&pReturnSize);
RtlSidHashInitialize((_SID_AND_ATTRIBUTES *)v28 + 17, Token->CapabilityCount, (_SID_AND_ATTRIBUTES_HASH *)v28);
}
v31 = &v29[(unsigned int)CapabilitySidsLength];
v32 = 0i64;
if( (_DWORD)PackageSidLength )
{
v32 = v31;
memmove(v31, Token->Package, 4 * *((unsigned __int8 *)Token->Package + 1) + 8);
}
TrustLevelSid = (unsigned __int8 *)NewTrustSid;
pTAI->PackageSid = v32;
if( !UseNewTrust )
TrustLevelSid = (unsigned __int8 *)Token->TrustLevelSid;
v34 = &v31[(unsigned int)PackageSidLength];
if( (_DWORD)TrustSidLength )
{
v21 = v34;
memmove(v34, TrustLevelSid, 4 * TrustLevelSid[1] + 8);
}
v35 = &v34[(unsigned int)TrustSidLength];
pTAI->TrustLevelSid = v21;
AuthzBasepQueryInternalSecurityAttributesToken(
Token->pSecurityAttributes,
v35,
(unsigned int)(v18 - (_DWORD)v35),
&pReturnSize);
v36 = (_TOKEN_PRIVILEGES *)&v35[(unsigned int)SecurityAttributesLength];
pTAI->SecurityAttributes = v35;
v36->PrivilegeCount = v16;
pTAI->Privileges = v36;
SepConvertTokenPrivilegesToLuidAndAttributes(Token, v36->Privileges);
}Referenced by:
NtQueryInformationToken
SeQueryInformationToken