LdrpKrnGetDataTableEntry
NTSTATUS __stdcall LdrpKrnGetDataTableEntry(PVOID Address){
_ETHREAD *CurrentThread;
NTSTATUS v2;
PVOID *v4;
unsigned __int64 v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0;
if( !CurrentThread )
return 0;
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceSharedLite(&PsLoadedModuleResource, 1);
v4 = (PVOID *)PsLoadedModuleList;
if( !PsLoadedModuleList )
return 0;
while( 1 )
{
v5 = (unsigned __int64)v4[6];
if( (unsigned __int64)Address >= v5 && (unsigned __int64)Address < v5 + *((unsigned int *)v4 + 16) )
break;
v4 = (PVOID *)*v4;
if( v4 == &PsLoadedModuleList )
goto LABEL_6;
}
v2 = (int)v4;
LABEL_6:
ExReleaseResourceLite(&PsLoadedModuleResource);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
return v2;
}Referenced by:
LdrLoadAlternateResourceModuleEx
LdrpGetImageSize
LdrpResGetMappingSize