KeStackAttachProcess
VOID __stdcall KeStackAttachProcess(_EPROCESS *PROCESS, PRKAPC_STATE ApcState){
_ETHREAD *CurrentThread;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
__int64 v7;
UINT64 SpinCount;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (*((_DWORD *)KeGetPcr() + 3243) & 0x10001) != 0 || (*((_DWORD *)PROCESS + 158) & 0x400) != 0 )
KeBugCheckEx(
5u,
(ULONG_PTR)PROCESS,
*((_QWORD *)CurrentThread + 23),
*((unsigned __int8 *)CurrentThread + 586),
*((_DWORD *)KeGetPcr() + 3243) & 0x10001);
if( *((_EPROCESS **)CurrentThread + 23) == PROCESS )
{
ApcState->Process = (_EPROCESS *)1;
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
CurrentPrcb = KeGetCurrentPrcb();
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)CurrentThread + 16, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((_QWORD *)CurrentThread + 8) );
v7 = *((_QWORD *)CurrentPrcb + 4247);
if( v7 && *((_BYTE *)CurrentPrcb + 32) <= 1u )
++*(_DWORD *)(v7 + 24);
}
if( *((_BYTE *)CurrentThread + 586) )
{
KiAttachProcess((__int64)CurrentThread, (__int64)PROCESS, CurrentIrql, 0, (__int64)ApcState);
}
else
{
KiAttachProcess((__int64)CurrentThread, (__int64)PROCESS, CurrentIrql, 0, (__int64)CurrentThread + 600);
ApcState->Process = 0i64;
}
}
}Referenced by:
CmpStartCLFSLog
DbgkpPostFakeThreadMessages
EtwpEnableGuid
KiLogUserCetSetContextIpValidationFailureWorker
MiDeleteAllHardwareEnclaves
MmQueryVirtualMemory
NtFreeUserPhysicalPages
NtGetWriteWatch
NtInitializeEnclave
NtLoadEnclaveData
NtLockVirtualMemory
NtProtectVirtualMemory
NtPssCaptureVaSpaceBulk
NtQueryInformationProcess
NtResetWriteWatch
NtSetInformationProcess
NtSetInformationVirtualMemory
NtUnlockVirtualMemory
PfSnAppLaunchScenarioControl
PsCreateMinimalProcess
PspAllocateProcess
PspApplyWorkingSetLimits
PspCatchCriticalBreak
PspProcessDynamicEnforcedAddressRanges
PspQueryQuotaLimits
PspSetQuotaLimits