PerfLogImageUnload
VOID __stdcall PerfLogImageUnload(
_UNICODE_STRING *ImageName,
_FILE_OBJECT *FileObject,
VOID *ProcessId,
VOID *ImageBase,
UINT64 ImageSize,
UINT64 ImageChecksum,
UINT64 ImageSignatureLevel,
UINT64 ImageSignatureType,
UINT64 LocksHeld){
INT64 a9;
int v14;
__int64 v15;
VOID **PoolWithTag;
__int64 v17;
int v18;
_UNICODE_STRING *v19;
INT64 a5;
INT64 a6;
INT64 v22;
int v23;
INT64 v24;
__int64 v25;
__int128 v26;
a9 = 0i64;
v24 = 0i64;
v26 = 0i64;
v25 = 0i64;
v14 = 0;
v23 = 0;
if( EtwpHostSiloState != -4548 && (*(_DWORD *)(EtwpHostSiloState + 4548) & 4) != 0 )
EtwpCoverageSamplerUnloadImage((INT64)ProcessId, (UINT64)ImageBase, ImageSize);
if( ProcessId )
{
LODWORD(v15) = RtlImageNtHeader((UINT64)ImageBase);
if( v15 )
{
LODWORD(ImageChecksum) = *(_DWORD *)(v15 + 88);
v14 = *(_DWORD *)(v15 + 8);
v23 = v14;
a9 = *(_QWORD *)(v15 + 48);
v24 = a9;
}
}
if( FileObject )
{
if( (_DWORD)LocksHeld || KeAreAllApcsDisabled() )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x90ui64, 1098347589i64);
if( PoolWithTag )
{
ObfReferenceObject(FileObject);
PoolWithTag[11] = FileObject;
PoolWithTag[12] = ProcessId;
PoolWithTag[13] = ImageBase;
PoolWithTag[14] = (VOID *)ImageSize;
*((_DWORD *)PoolWithTag + 30) = ImageChecksum;
*((_DWORD *)PoolWithTag + 31) = v14;
*((_DWORD *)PoolWithTag + 32) = ImageSignatureLevel;
*((_DWORD *)PoolWithTag + 33) = ImageSignatureType;
PoolWithTag[17] = (VOID *)a9;
KeInitializeApc(
(INT64)PoolWithTag,
(INT64)KeGetCurrentThread(),
0i64,
(INT64)xHalTimerWatchdogStop,
(INT64)EtwpCancelTraceImageUnloadApc,
(INT64)EtwpTraceImageUnloadApc,
0,
(INT64)PoolWithTag);
if( KeInsertQueueApc((INT64)PoolWithTag, 0i64, 0i64, 0i64) )
return;
ExFreePoolWithTag(PoolWithTag, 0);
HalPutDmaAdapter((PADAPTER_OBJECT)FileObject);
a9 = v24;
v14 = v23;
}
v17 = 512i64;
}
else
{
v17 = 1024i64;
}
if( *(&stru_140CF2E80 + 599) )
{
v18 = (*(__int64(__fastcall **)(_FILE_OBJECT *, __int64, __int128 *, __int64 *))(*(&stru_140CF2E80 + 599) + 24i64))(
FileObject,
v17,
&v26,
&v25);
v19 = (_UNICODE_STRING *)&v26;
if( v18 < 0 )
v19 = ImageName;
ImageName = v19;
}
}
LODWORD(v22) = LocksHeld;
LODWORD(a6) = v14;
LODWORD(a5) = ImageChecksum;
EtwpTraceImageUnload(
ImageName,
(INT64)ProcessId,
(INT64)ImageBase,
ImageSize,
a5,
a6,
ImageSignatureLevel,
ImageSignatureType,
a9,
v22);
if( v25 )
(*(void(**)(void))(*(&stru_140CF2E80 + 599) + 32i64))();
}Referenced by:
No references.