PspUserThreadStartup
VOID __stdcall PspUserThreadStartup(PKSTART_ROUTINE StartRoutine, PVOID StartContext){
_ETHREAD *CurrentThread;
__int64 v3;
int SessionLocaleId;
__int64 v5;
struct _KPRCB *CurrentPrcb;
ULONG LowPart;
int v8;
unsigned __int64 v9;
int v10;
_LARGE_INTEGER CurrentTime;
__int64 v12;
_ETHREAD *v13;
INT64 result[14];
CurrentTime.QuadPart = 0i64;
__writecr8(0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = CurrentThread;
PspDisablePrimaryTokenExchange((__int64)CurrentThread);
if( (*((_DWORD *)CurrentThread + 324) & 2) == 0 )
PspTerminateThreadByPointer((ULONG_PTR)CurrentThread, -1073741749, 1);
v3 = *((_QWORD *)CurrentThread + 23);
v12 = v3;
if( (*(_DWORD *)(v3 + 2172) & 1) != 0 )
{
DbgkCreateMinimalThread((PETHREAD)CurrentThread);
}
else
{
SessionLocaleId = MmGetSessionLocaleId();
*(_DWORD *)(v5 + 264) = SessionLocaleId;
PspWriteTebIdealProcessor((__int64)CurrentThread, (__int64)CurrentThread);
DbgkCreateThread(CurrentThread);
if( (*(_DWORD *)(v3 + 1124) & 0x80000) == 0
&& !_interlockedbittestandset((volatile signed __int32 *)(v3 + 1124), 0x13u) )
{
PfProcessCreateNotification(v3, *(_QWORD *)(v3 + 1304));
}
}
while( !KUSER_SHARED_DATA.Cookie )
{
KeQuerySystemTimePrecise(&CurrentTime);
CurrentPrcb = KeGetCurrentPrcb();
LowPart = KeQueryPerformanceCounter(0i64).LowPart;
v8 = ExGenRandom(1i64);
v9 = __rdtsc();
_InterlockedCompareExchange(
(volatile signed __int32 *)&KUSER_SHARED_DATA.Cookie,
CurrentTime.LowPart ^ CurrentTime.HighPart ^ LowPart ^ v9 ^ v8 ^ *((_DWORD *)CurrentPrcb + 2884) ^ *((_DWORD *)CurrentPrcb + 8096) ^ *((_DWORD *)CurrentPrcb + 8100),
0);
}
if( (*(_BYTE *)(v3 + 992) & 1) != 0 )
{
*((_DWORD *)CurrentThread + 325) |= 0x200u;
memset((INT64)result, 0i64);
v10 = VslpEnterIumSecureMode(0, 0, *((unsigned int *)KeGetCurrentThread() + 199), (INT64)result);
PspTerminateThreadByPointer((ULONG_PTR)CurrentThread, v10, 1);
}
else if( (*((_DWORD *)CurrentThread + 324) & 1) != 0 )
{
KeWaitForSingleObject(CurrentThread, UserRequest, 1, 0, 0i64);
}
else if( (*(_DWORD *)(v3 + 2172) & 1) == 0 )
{
PspInitializeThunkContext();
}
}Referenced by:
No references.