MiShutdownSystem
INT64 __fastcall MiShutdownSystem(){
INT64 result;
UINT64 v1;
_ETHREAD *CurrentThread;
INT64 v3;
_ETHREAD *Lock;
PVOID *v5;
_ETHREAD *v6;
UINT8 *v7;
UINT64 v8;
UINT8 *v9;
UINT8 *v10;
PVOID v11;
if( !dword_140C4E404 )
{
CcNotifyWriteBehind(v1);
MiFlushAllFilesystemPages();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx((UINT64)&qword_140C50ED0, 0i64);
dword_140C4E404 = 1;
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C50ED0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&qword_140C50ED0);
KeAbPostRelease(&qword_140C50ED0);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
KeSetEvent(&stru_140C50B28, 0);
if( byte_140C4E402 == 1 )
{
if( (MiFlags & 4) == 0 )
MmLockPagableSectionByHandle(ExPageLockHandle);
MiZeroAllPageFiles();
if( (MiFlags & 4) == 0 )
MmUnlockPagableImageSection(ExPageLockHandle, v3);
}
LODWORD(result) = MiDeleteAllHardwareEnclaves();
}
if( PopShutdownCleanly )
{
Lock = MmAcquireLoadLock();
v5 = (PVOID *)PsLoadedModuleList;
v6 = Lock;
while( v5 != &PsLoadedModuleList )
{
v7 = (UINT8 *)v5[17];
if( v7 != (UINT8 *)1 && v7 != (UINT8 *)-2i64 && ((unsigned __int8)v7 & 1) == 0 )
{
v8 = 8i64 * *(_QWORD *)v7 + 8;
LODWORD(v9) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
v10 = v9;
if( !v9 )
{
PopShutdownCleanly = 0;
break;
}
memmove(v9, v7, v8);
MiFreeLoadedImportList(v7);
v5[17] = v10;
}
v11 = v5[10];
if( v11 )
{
ExFreePoolWithTag(v11, 0);
v5[10] = 0i64;
}
v5 = (PVOID *)*v5;
}
MmReleaseLoadLock(v6);
result = MiDeletePagingFiles((__int64)&MiSystemPartition);
}
LOBYTE(result) = 1;
return result;
}Referenced by:
MmShutdownSystem