LdrpKrnGetDataTableEntry
_LIST_ENTRY *__fastcall LdrpKrnGetDataTableEntry(VOID *Address){
_ETHREAD *CurrentThread;
_LIST_ENTRY *v2;
INT64 v4;
unsigned __int64 v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0i64;
if( !CurrentThread )
return 0i64;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceSharedLite((UINT64)&PsLoadedModuleResource, 1);
v4 = PsLoadedModuleList;
if( !PsLoadedModuleList )
return 0i64;
while( 1 )
{
v5 = *(_QWORD *)(v4 + 48);
if( (unsigned __int64)Address >= v5 && (unsigned __int64)Address < v5 + *(unsigned int *)(v4 + 64) )
break;
v4 = *(_QWORD *)v4;
if( (INT64 *)v4 == &PsLoadedModuleList )
goto LABEL_6;
}
v2 = (_LIST_ENTRY *)v4;
LABEL_6:
ExReleaseResourceLite(&PsLoadedModuleResource);
KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
return v2;
}Referenced by:
LdrLoadAlternateResourceModuleEx
LdrpGetImageSize
LdrpResGetMappingSize