CmpIsSystemEntity
UINT8 __stdcall CmpIsSystemEntity(UINT64 *VirtContext){
struct _SECURITY_SUBJECT_CONTEXT *p_SubjectContext;
int *v2;
char v3;
int *v4;
void *ClientToken;
void *PrimaryToken;
UINT8 v7;
int v8;
int v9;
_EPROCESS *CurrentThreadProcess;
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
PVOID TokenInformation;
v3 = 0;
v4 = v2;
memset(&SubjectContext, 0, sizeof(SubjectContext));
if( !CmpVEEnabled )
return 1;
if( v2 && (*v2 & 1) != 0 )
return(*v2 & 2) != 0;
if( !(_BYTE)VirtContext )
return 1;
if( !p_SubjectContext )
{
CurrentThreadProcess = (_EPROCESS *)PsGetCurrentThreadProcess();
SeCaptureSubjectContextEx((_ETHREAD *)KeGetCurrentThread(), CurrentThreadProcess, &SubjectContext);
p_SubjectContext = &SubjectContext;
v3 = 1;
}
ClientToken = p_SubjectContext->ClientToken;
LODWORD(TokenInformation) = 0;
if( ClientToken )
PrimaryToken = ClientToken;
else
PrimaryToken = p_SubjectContext->PrimaryToken;
v7 = 1;
if( !ClientToken )
{
SeQueryInformationToken(PrimaryToken, TokenVirtualizationEnabled, &TokenInformation);
if( (_DWORD)TokenInformation )
v7 = 0;
}
if( v4 )
{
v8 = *v4;
if( v7 )
{
v9 = v8 | 3;
}
else
{
v9 = v8 | 5;
v7 = 0;
}
*v4 = v9;
}
if( v3 )
SeReleaseSubjectContext(&SubjectContext);
return v7;
}Referenced by:
CmDoVirtualTest
CmKeyBodyRemapToVirtualForEnum
CmpVEExecuteOpenLogic
CmpVEPerformOpenAccessCheck
KCBNeedsVirtualImage
KCBNeedsVirtualImage_0
SkipVirtualAccessCheck