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.