PspTerminateProcessesJobCallback
INT64 __fastcall PspTerminateProcessesJobCallback(
const _WNF_STATE_NAME *StateName,
const _WNF_TYPE_ID *TypeId,
const VOID *ExplicitScope,
UINT64 *ChangeStamp,
VOID *Buffer,
UINT64 *BufferSize){
int *v8;
__int64 v9;
char v10;
UINT8 v11;
_ETHREAD *CurrentThread;
__int64 v13;
char v14;
__int64 NextJobProcess;
__int64 v16;
int v18;
__int64 *ServerSiloGlobals;
PEJOB v20;
__int128 v21;
__int64 v22;
v21 = 0i64;
v22 = 0i64;
PsIsServerSilo((INT64)StateName, (volatile INT32 *)TypeId);
if( v10 )
{
v18 = *v8;
ServerSiloGlobals = PsGetServerSiloGlobals(v9);
v11 = PspMarkServerSiloAsTerminating(v20);
if( v11 )
*((_DWORD *)ServerSiloGlobals + 279) = v18;
}
else
{
v11 = 0;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = 0i64;
v14 = 8 * (TypeId->TypeId.Data2 & 1) + 6;
while( 1 )
{
NextJobProcess = PspGetNextJobProcess(StateName, CurrentThread, &v21, v13);
v16 = NextJobProcess;
if( !NextJobProcess )
break;
if( (*(_DWORD *)(NextJobProcess + 1120) & 0x800) == 0 )
LOBYTE(TypeId->TypeId.Data2) |= 2u;
PspRemoveProcessFromJobChain(NextJobProcess, 0i64, v14, TypeId->TypeId.Data1);
v13 = v16;
}
if( v11 )
PspCompleteServerSiloShutdown((PEJOB)StateName);
return 0i64;
}Referenced by:
No references.