PsCallImageNotifyRoutines
VOID __stdcall PsCallImageNotifyRoutines(
_UNICODE_STRING *FullImageName,
VOID *ProcessId,
_IMAGE_INFO_EX *ExtendedInfo,
_FILE_OBJECT *FileObject){
_ETHREAD *CurrentThread;
__int64 v9;
__int64 v10;
IMAGE_INFO *p_ImageInfo;
INT64 *v12;
_EX_RUNDOWN_REF *v13;
_EX_RUNDOWN_REF *v14;
void(__fastcall *Count)(_UNICODE_STRING *, __int64, IMAGE_INFO *);
__int128 v16;
__int64 v17;
v16 = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v9 = 0i64;
v17 = 0i64;
if( KeAreAllApcsDisabled() )
__int2c();
if( *(&stru_140CF2E80 + 599)
&& (*(int(__fastcall **)(_FILE_OBJECT *, __int64, __int128 *, __int64 *))(*(&stru_140CF2E80 + 599) + 24i64))(
FileObject,
1024i64,
&v16,
&v17) >= 0 )
{
FullImageName = (_UNICODE_STRING *)&v16;
}
if( ProcessId )
v9 = *((_QWORD *)ProcessId + 136);
if( (PspNotifyEnableMask & 1) != 0 )
{
ExtendedInfo->ImageInfo.anonymous_0.Properties |= 0x400u;
v10 = 64i64;
p_ImageInfo = &ExtendedInfo->ImageInfo;
*(_QWORD *)&ExtendedInfo->Size = 56i64;
*(_QWORD *)&ExtendedInfo[1].Size = FileObject;
v12 = (INT64 *)&CallBack;
do
{
v13 = ExReferenceCallBackBlock(v12);
v14 = v13;
if( v13 )
{
Count = (void(__fastcall *)(_UNICODE_STRING *, __int64, IMAGE_INFO *))v13[1].Count;
if( ((p_ImageInfo->anonymous_0.Properties & 0x800) == 0 || (v14[2].Count & 1) != 0) && Count )
Count(FullImageName, v9, p_ImageInfo);
ExDereferenceCallBackBlock((_EX_CALLBACK *)v12, v14);
}
++v12;
--v10;
}
while( v10 );
}
if( v17 )
(*(void(**)(void))(*(&stru_140CF2E80 + 599) + 32i64))();
KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
}Referenced by:
DbgkCreateThread
MiDriverLoadSucceeded
MiMapViewOfImageSection