PspTerminateProcessesJobCallback
NTSTATUS __stdcall PspTerminateProcessesJobCallback(
const _WNF_STATE_NAME *StateName,
const _WNF_TYPE_ID *TypeId,
const VOID *ExplicitScope,
UINT64 *ChangeStamp,
VOID *Buffer,
UINT64 *BufferSize){
int *v8;
_EJOB *v9;
char v10;
UINT8 v11;
_ETHREAD *CurrentThread;
CHAR i;
_EPROCESS *v14;
int v16;
_ESERVERSILO_GLOBALS *ServerSiloGlobals;
_EJOB *v18;
PsIsServerSilo((INT64)StateName, (INT32 *)TypeId);
if( v10 )
{
v16 = *v8;
ServerSiloGlobals = PsGetServerSiloGlobals(v9);
v11 = PspMarkServerSiloAsTerminating(v18);
if( v11 )
ServerSiloGlobals->ExitStatus = v16;
}
else
{
v11 = 0;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
for( i = 8 * (TypeId->TypeId[0].Data2 & 1) + 6; ; PspRemoveProcessFromJobChain(v14, 0i64, i, TypeId->TypeId[0].Data1) )
{
LODWORD(v14) = PspGetNextJobProcess((_EJOB *)StateName, CurrentThread);
if( !v14 )
break;
if( (v14->Flags2 & 0x800) == 0 )
LOBYTE(TypeId->TypeId[0].Data2) |= 2u;
}
if( v11 )
PspCompleteServerSiloShutdown((_EJOB *)StateName);
return 0;
}Referenced by:
No references.