RtlQueryModuleInformation
NTSTATUS __stdcall RtlQueryModuleInformation(
UINT64 *BufferSize,
UINT64 ElementSize,
VOID *QueryInfo,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
int v9;
unsigned int v11;
NTSTATUS result;
char *PoolWithQuotaTag;
int v14;
NTSTATUS v15;
unsigned int v16;
__int64 v17;
char *v18;
__int64 v19;
_OWORD *v20;
__int64 v21;
char *v22;
__int128 v23;
char P[304];
v9 = ElementSize;
memset(P, 0i64, sizeof(P));
v11 = 0;
if( v9 == 272 )
{
result = ((unsigned __int8)QueryInfo & 7) != 0 ? 0xC00000F1 : 0;
goto LABEL_3;
}
if( v9 != 8 )
return -1073741584;
if( ((unsigned __int8)QueryInfo & 7) != 0 )
{
result = -1073741583;
LABEL_3:
if( result < 0 )
return result;
}
PoolWithQuotaTag = P;
while( 1 )
{
ZwQuerySystemInformation();
v15 = v14;
if( ((v14 + 0x80000000) & 0x80000000) == 0 && v14 != -1073741820 )
break;
if( !QueryInfo )
{
v15 = 0;
v16 = 14510024 * v9;
LABEL_14:
*(_DWORD *)BufferSize = v16;
break;
}
if( v14 >= 0 )
{
v16 = v9 * *(_DWORD *)PoolWithQuotaTag;
if( *(_DWORD *)BufferSize < v16 )
{
v15 = -1073741789;
}
else if( *(_DWORD *)PoolWithQuotaTag )
{
do
{
if( v9 == 8 )
{
*((_QWORD *)QueryInfo + v11) = *(_QWORD *)&PoolWithQuotaTag[296 * v11 + 24];
}
else
{
v17 = 296i64 * v11;
v18 = (char *)QueryInfo + 272 * v11;
*(_QWORD *)v18 = *(_QWORD *)&PoolWithQuotaTag[v17 + 24];
*((_DWORD *)v18 + 2) = *(_DWORD *)&PoolWithQuotaTag[v17 + 32];
*((_WORD *)v18 + 6) = *(_WORD *)&PoolWithQuotaTag[v17 + 46];
v19 = v17 + 48;
v20 = v18 + 14;
v21 = 2i64;
v22 = &PoolWithQuotaTag[v19];
do
{
*v20 = *(_OWORD *)v22;
v20[1] = *((_OWORD *)v22 + 1);
v20[2] = *((_OWORD *)v22 + 2);
v20[3] = *((_OWORD *)v22 + 3);
v20[4] = *((_OWORD *)v22 + 4);
v20[5] = *((_OWORD *)v22 + 5);
v20[6] = *((_OWORD *)v22 + 6);
v20 += 8;
v23 = *((_OWORD *)v22 + 7);
v22 += 128;
*(v20 - 1) = v23;
--v21;
}
while( v21 );
}
++v11;
}
while( v11 < *(_DWORD *)PoolWithQuotaTag );
}
goto LABEL_14;
}
if( PoolWithQuotaTag != P )
ExFreePoolWithTag(PoolWithQuotaTag, 0);
PoolWithQuotaTag = (char *)ExAllocatePoolWithQuotaTag((POOL_TYPE)9, 0i64, 0x546C7452ui64);
if( !PoolWithQuotaTag )
return -1073741670;
}
if( PoolWithQuotaTag != P )
ExFreePoolWithTag(PoolWithQuotaTag, 0);
return v15;
}Referenced by:
No references.