PerfLogImageUnload
VOID __stdcall PerfLogImageUnload(
_UNICODE_STRING *ImageName,
_FILE_OBJECT *FileObject,
PVOID ProcessId,
PVOID ImageBase,
UINT64 ImageSize,
UINT64 ImageChecksum,
UINT64 ImageSignatureLevel,
UINT64 ImageSignatureType,
UINT64 LocksHeld){
INT64 v13;
unsigned int TimeDateStamp;
IMAGE_NT_HEADERS *v15;
_QWORD *PoolWithTag;
__int64 v17;
int v18;
_UNICODE_STRING *v19;
INT64 v20;
INT64 v21;
INT64 v22;
unsigned int v23;
INT64 v24;
__int64 v25;
__int128 v26[5];
v13 = 0i64;
v24 = 0i64;
v26[0] = 0i64;
v25 = 0i64;
TimeDateStamp = 0;
v23 = 0;
if( EtwpHostSiloState != -4548 && (*(_DWORD *)(EtwpHostSiloState + 4548) & 4) != 0 )
EtwpCoverageSamplerUnloadImage((INT64)ProcessId, (UINT64)ImageBase, ImageSize);
if( ProcessId )
{
v15 = RtlImageNtHeader(ImageBase);
if( v15 )
{
LODWORD(ImageChecksum) = v15->OptionalHeader.CheckSum;
TimeDateStamp = v15->FileHeader.TimeDateStamp;
v23 = TimeDateStamp;
v13 = v15->OptionalHeader.ImageBase;
v24 = v13;
}
}
if( FileObject )
{
if( (_DWORD)LocksHeld || KeAreAllApcsDisabled() )
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x90ui64, 0x41777445ui64);
if( PoolWithTag )
{
ObfReferenceObject(FileObject);
PoolWithTag[11] = FileObject;
PoolWithTag[12] = ProcessId;
PoolWithTag[13] = ImageBase;
PoolWithTag[14] = ImageSize;
*((_DWORD *)PoolWithTag + 30) = ImageChecksum;
*((_DWORD *)PoolWithTag + 31) = TimeDateStamp;
*((_DWORD *)PoolWithTag + 32) = ImageSignatureLevel;
*((_DWORD *)PoolWithTag + 33) = ImageSignatureType;
PoolWithTag[17] = v13;
KeInitializeApc(
(INT64)PoolWithTag,
(INT64)KeGetCurrentThread(),
0i64,
(INT64)xHalTimerWatchdogStop,
(INT64)EtwpCancelTraceImageUnloadApc,
(INT64)EtwpTraceImageUnloadApc,
0,
(INT64)PoolWithTag);
if( KeInsertQueueApc((_KAPC *)PoolWithTag, 0i64, 0i64, 0i64) )
return;
ExFreePoolWithTag(PoolWithTag, 0);
HalPutDmaAdapter((PADAPTER_OBJECT)FileObject);
v13 = v24;
TimeDateStamp = v23;
}
v17 = 512i64;
}
else
{
v17 = 1024i64;
}
if( FltMgrCallbacks )
{
v18 = (*(__int64(__fastcall **)(_FILE_OBJECT *, __int64, __int128 *, __int64 *))(FltMgrCallbacks + 24))(
FileObject,
v17,
v26,
&v25);
v19 = (_UNICODE_STRING *)v26;
if( v18 < 0 )
v19 = ImageName;
ImageName = v19;
}
}
LODWORD(v22) = LocksHeld;
LODWORD(v21) = TimeDateStamp;
LODWORD(v20) = ImageChecksum;
EtwpTraceImageUnload(
(INT64)ImageName,
(INT64)ProcessId,
(INT64)ImageBase,
ImageSize,
v20,
v21,
ImageSignatureLevel,
ImageSignatureType,
v13,
v22);
if( v25 )
(*(void(**)(void))(FltMgrCallbacks + 32))();
}Referenced by:
No references.