PsUnregisterSiloMonitor
VOID __stdcall PsUnregisterSiloMonitor(_SILO_MONITOR *Monitor){
_ETHREAD *CurrentThread;
__int64 v3;
_EJOB *i;
_EJOB *NextSilo;
PKINTERRUPT_ROUTINE **v6;
UINT32 v7;
PKINTERRUPT_ROUTINE *v8;
_EJOB *v9;
__int64 v10;
_SILO_MONITOR **v11;
PSP_STORAGE *v12;
NTSTATUS v13;
_KAPC_STATE ApcState;
memset(&ApcState, 0, sizeof(ApcState));
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&PspSiloMonitorLock, 0i64);
v3 = *(_QWORD *)Monitor;
if( *(_OWORD *)Monitor != 0i64 )
{
if( *((_QWORD *)Monitor + 4) )
{
KiStackAttachProcess(PsInitialSystemProcess, 0i64, &ApcState);
for( i = 0i64; ; i = v9 )
{
NextSilo = PspGetNextSilo(i, 1u);
v9 = NextSilo;
if( !NextSilo )
break;
if( (unsigned int)(*PspGetServerSiloStatePointer(NextSilo) - 1) <= 2 )
(*((void(__fastcall **)(_EJOB *))Monitor + 4))(v9);
}
if( *((_BYTE *)Monitor + 16) )
{
LODWORD(v10) = HalSystemVectorDispatchEntry(v7, v6, v8);
(*((void(__fastcall **)(__int64))Monitor + 4))(v10);
}
KiUnstackDetachProcess(&ApcState, 0i64);
v3 = *(_QWORD *)Monitor;
}
if( *(_SILO_MONITOR **)(v3 + 8) != Monitor || (v11 = (_SILO_MONITOR **)*((_QWORD *)Monitor + 1), *v11 != Monitor) )
__fastfail(3u);
*v11 = (_SILO_MONITOR *)v3;
*(_QWORD *)(v3 + 8) = v11;
*(_QWORD *)Monitor = 0i64;
*((_QWORD *)Monitor + 1) = 0i64;
}
if( (_InterlockedExchangeAdd64(&PspSiloMonitorLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&PspSiloMonitorLock);
KeAbPostRelease(&PspSiloMonitorLock);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( *((_BYTE *)Monitor + 16) )
{
KiStackAttachProcess(PsInitialSystemProcess, 0i64, &ApcState);
LODWORD(v12) = PspGetHostSiloStorage();
v13 = PspStorageRemoveObject(v12, (unsigned int)Monitor[5], 1u, 0i64);
KiUnstackDetachProcess(&ApcState, 0i64);
if( v13 )
{
if( v13 != -1073741275 )
NT_ASSERT("Status == ((NTSTATUS)0x00000000L) || Status == ((NTSTATUS)0xC0000225L)");
}
}
PspStorageFreeSlot((unsigned int)Monitor[5]);
ExFreePoolWithTag(Monitor, 0x4D6C6953u);
}Referenced by:
No references.