PspDetectComplusILImage
NTSTATUS __stdcall PspDetectComplusILImage(
PSP_CREATE_PROCESS_CONTEXT *CreateContext,
UINT64 *CreateFlags,
INT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
char v8;
NTSTATUS result;
char ComPlusPackage;
NTSTATUS v13;
VOID *v14;
int v15;
UINT64 BufferSize;
char v17;
int Buffer;
v8 = *((_BYTE *)CreateContext + 99);
if( (v8 & 1) == 0 || (v8 & 0x20) != 0 )
return 0;
ComPlusPackage = KUSER_SHARED_DATA.ComPlusPackage;
v13 = 0;
v17 = KUSER_SHARED_DATA.ComPlusPackage;
if( KUSER_SHARED_DATA.ComPlusPackage != -1 )
goto LABEL_6;
ZwQuerySystemInformation();
if( result >= 0 )
{
ComPlusPackage = v17;
LABEL_6:
if( (ComPlusPackage & 1) != 0 )
{
v14 = (VOID *)*((_QWORD *)CreateContext + 24);
if( v14 )
{
LODWORD(BufferSize) = 4;
Buffer = 0;
v15 = RtlQueryImageFileKeyOption(v14, (WCHAR *)L"Wow64", 4ui64, &Buffer, BufferSize, 0i64);
if( (v15 < 0 || Buffer) && v15 != -1073741772 )
{
if( v15 < 0 )
return v15;
return v13;
}
}
else if( (CreateContext[2] & 0x40) == 0 )
{
return -1073741823;
}
*(_DWORD *)CreateFlags |= 8u;
}
return v13;
}
return result;
}Referenced by:
PspAllocateProcess