ExpQuerySingleModuleInformation
NTSTATUS __stdcall ExpQuerySingleModuleInformation(
PVOID SystemInformation,
UINT64 ModuleInformationLength,
INT8 PreviousMode,
UINT64 *ReturnLength){
_ETHREAD *CurrentThread;
unsigned __int64 v8;
PVOID *v9;
INT16 v10;
PVOID v11;
NTSTATUS v12;
*(_DWORD *)ReturnLength = 0;
if( PreviousMode )
return -1073741790;
if( (unsigned int)ModuleInformationLength < 0x148 )
return -1073741820;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v8 = *(_QWORD *)SystemInformation;
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&PsLoadedModuleResource, 1u);
v9 = (PVOID *)PsLoadedModuleList;
v10 = 0;
if( PsLoadedModuleList )
{
while( v9 != &PsLoadedModuleList )
{
v11 = v9[6];
if( v8 >= (unsigned __int64)v11 && v8 < (unsigned __int64)v11 + *((unsigned int *)v9 + 16) )
{
*((_WORD *)SystemInformation + 4) = 0;
ExpConvertLdrEntryToModuleInfo((INT64)v9, v10, (INT64)SystemInformation + 8);
v12 = 0;
goto LABEL_11;
}
v9 = (PVOID *)*v9;
++v10;
}
}
v12 = -1073741275;
LABEL_11:
ExReleaseResourceLite(&PsLoadedModuleResource);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v12 >= 0 )
*(_DWORD *)ReturnLength = 328;
return v12;
}Referenced by:
ExpQuerySystemInformation