PsWow64GetSupportedArchitectures
NTSTATUS __stdcall PsWow64GetSupportedArchitectures(
VOID *ArchInfo,
UINT64 ArchInfoLength,
UINT64 *ReturnLength,
_EPROCESS *TargetProcess){
size_t v6;
NTSTATUS IsMachineSupported;
NTSTATUS v9;
int v10;
size_t v11;
__int16 Machine;
unsigned int v13;
int v14;
unsigned int v15;
unsigned int v16;
int v17;
unsigned int v18;
int v19;
_EWOW64PROCESS *WoW64Process;
v6 = ArchInfoLength;
IsMachineSupported = PsWow64IsMachineSupported(332);
v9 = PsWow64IsMachineSupported(452);
v10 = (IsMachineSupported != 0) + 2;
if( !v9 )
v10 = (IsMachineSupported != 0) + 1;
v11 = 4 * v10 + 4;
*(_DWORD *)ReturnLength = v11;
if( v11 > v6 )
return -1073741789;
Machine = 0;
if( TargetProcess )
{
WoW64Process = TargetProcess->WoW64Process;
if( !WoW64Process || (Machine = WoW64Process->Machine) == 0 )
Machine = -31132;
}
memset(ArchInfo, 0i64, v11);
v13 = *(_DWORD *)ArchInfo & 0xFFFF0000 | 0x8664;
*(_DWORD *)ArchInfo = v13;
v13 |= 0x10000u;
*(_DWORD *)ArchInfo = v13;
v13 |= 0x20000u;
*(_DWORD *)ArchInfo = v13;
v14 = v13 | 0x40000;
*(_DWORD *)ArchInfo = v14;
if( Machine == -31132 )
*(_DWORD *)ArchInfo = v14 | 0x80000;
v15 = 1;
if( IsMachineSupported )
{
v16 = *((_DWORD *)ArchInfo + 1) & 0xFFFF0000 | 0x14C;
*((_DWORD *)ArchInfo + 1) = v16;
v17 = v16 | 0x20000;
*((_DWORD *)ArchInfo + 1) = v17;
if( Machine == 332 )
*((_DWORD *)ArchInfo + 1) = v17 | 0x80000;
v15 = 2;
}
if( v9 )
{
v18 = *((_DWORD *)ArchInfo + v15) & 0xFFFF0000 | 0x1C4;
*((_DWORD *)ArchInfo + v15) = v18;
v19 = v18 | 0x20000;
*((_DWORD *)ArchInfo + v15) = v19;
if( Machine == 452 )
*((_DWORD *)ArchInfo + v15) = v19 | 0x80000;
}
return 0;
}Referenced by:
ExpQuerySystemInformation