PspUserThreadStartup
VOID __stdcall PspUserThreadStartup(PKSTART_ROUTINE StartRoutine, PVOID StartContext){
_ETHREAD *CurrentThread;
__int64 Process;
NTSTATUS SessionLocaleId;
__int64 v5;
struct _KPRCB *CurrentPrcb;
int PerformanceCounter;
int v8;
unsigned __int64 v9;
unsigned int v10;
_LARGE_INTEGER CurrentTime;
__int64 v12;
_ETHREAD *v13;
INT64 v14[14];
CurrentTime.QuadPart = 0i64;
__writecr8(0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = CurrentThread;
PspDisablePrimaryTokenExchange(CurrentThread);
if( (CurrentThread->CrossThreadFlags & 2) == 0 )
PspTerminateThreadByPointer(CurrentThread, 0xC000004Bui64, 1u);
Process = (__int64)CurrentThread->Tcb.ApcState.Process;
v12 = Process;
if( (*(_DWORD *)(Process + 2172) & 1) != 0 )
{
DbgkCreateMinimalThread(CurrentThread);
}
else
{
SessionLocaleId = MmGetSessionLocaleId();
*(_DWORD *)(v5 + 264) = SessionLocaleId;
PspWriteTebIdealProcessor(CurrentThread, CurrentThread);
DbgkCreateThread(CurrentThread);
if( (*(_DWORD *)(Process + 1124) & 0x80000) == 0
&& !_interlockedbittestandset((volatile signed __int32 *)(Process + 1124), 0x13u) )
{
PfProcessCreateNotification((_EPROCESS *)Process, *(VOID **)(Process + 1304));
}
}
while( !KUSER_SHARED_DATA.Cookie )
{
KeQuerySystemTimePrecise(&CurrentTime);
CurrentPrcb = KeGetCurrentPrcb();
PerformanceCounter = KeQueryPerformanceCounter(0i64);
v8 = ExGenRandom(ExGenRandomDomainUserVisible);
v9 = __rdtsc();
_InterlockedCompareExchange(
(volatile signed __int32 *)&KUSER_SHARED_DATA.Cookie,
CurrentTime.anonymous_0.LowPart ^ CurrentTime.anonymous_0.HighPart ^ PerformanceCounter ^ v9 ^ v8 ^ CurrentPrcb->MmPageFaultCount ^ CurrentPrcb->InterruptCount ^ CurrentPrcb->InterruptTime,
0);
}
if( (*(_BYTE *)(Process + 992) & 1) != 0 )
{
CurrentThread->SameThreadPassiveFlags |= 0x200u;
memset(v14, 0i64, 0x68u);
v10 = VslpEnterIumSecureMode(0, 0, KeGetCurrentThread()->SecureThreadCookie, (INT64)v14);
PspTerminateThreadByPointer(CurrentThread, v10, 1u);
}
else if( (CurrentThread->CrossThreadFlags & 1) != 0 )
{
KeWaitForSingleObject((UINT64)CurrentThread, 6, 1, 0, 0i64);
}
else if( (*(_DWORD *)(Process + 2172) & 1) == 0 )
{
PspInitializeThunkContext();
}
}Referenced by:
No references.