PspCompleteServerSiloShutdownDeferred
VOID __stdcall PspCompleteServerSiloShutdownDeferred(VOID *Context){
_ESERVERSILO_GLOBALS *ServerSiloGlobals;
_EJOB *v3;
_EJOB *v4;
_ADAPTER_OBJECT *ExpDefaultErrorPortProcess;
_ADAPTER_OBJECT *ExpDefaultErrorPort;
_ADAPTER_OBJECT *MiSessionLeaderProcess;
VOID *ExitStatus;
_ETHREAD *CurrentThread;
ServerSiloGlobals = PsGetServerSiloGlobals((_EJOB *)Context);
if( PsGetServerSiloState(v3) != SERVERSILO_TERMINATING )
NT_ASSERT("PsGetServerSiloState(Silo) == SERVERSILO_TERMINATING");
PspTerminateSiloSubsystemProcesses(v4);
ExpDefaultErrorPortProcess = (_ADAPTER_OBJECT *)ServerSiloGlobals->ExpDefaultErrorPortProcess;
if( ExpDefaultErrorPortProcess )
{
HalPutDmaAdapter(ExpDefaultErrorPortProcess);
ServerSiloGlobals->ExpDefaultErrorPortProcess = 0i64;
}
ExpDefaultErrorPort = (_ADAPTER_OBJECT *)ServerSiloGlobals->ExpDefaultErrorPort;
if( ExpDefaultErrorPort )
{
HalPutDmaAdapter(ExpDefaultErrorPort);
ServerSiloGlobals->ExpDefaultErrorPort = 0i64;
}
PspNotifyServerSiloTermination((_EJOB *)Context);
PspDeleteExternalServerSiloState((_EJOB *)Context);
MiSessionLeaderProcess = (_ADAPTER_OBJECT *)ServerSiloGlobals->MiSessionLeaderProcess;
if( MiSessionLeaderProcess )
{
HalPutDmaAdapter(MiSessionLeaderProcess);
ServerSiloGlobals->MiSessionLeaderProcess = 0i64;
}
ExitStatus = (VOID *)ServerSiloGlobals->ExitStatus;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
PspLockJobShared((_EJOB *)Context, CurrentThread);
if( *((_QWORD *)Context + 57) && (*((_DWORD *)Context + 219) & 0x2000) != 0 )
PspSendJobNotification((_EJOB *)Context, 0xDui64, ExitStatus, 0);
PspUnlockJob((_EJOB *)Context, CurrentThread);
HalPutDmaAdapter((PADAPTER_OBJECT)Context);
}Referenced by:
No references.