MiInitializeSessionGlobals
INT64 __stdcall MiInitializeSessionGlobals(){
_ETHREAD *CurrentThread;
_EPROCESS *v1;
char v3;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v1 = (_EPROCESS *)*((_QWORD *)CurrentThread + 68);
if( (*(_DWORD *)(*((_QWORD *)CurrentThread + 23) + 1124i64) & 0x10000) != 0 )
return 3221225505i64;
if( (unsigned int)MmIsSessionLeaderProcess(*((PEPROCESS *)CurrentThread + 68)) )
return 0i64;
if( qword_140C4DB00 )
{
if( PsIsCurrentThreadInServerSilo() )
{
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx((UINT64)&P2, 0i64);
if( !PsGetCurrentServerSiloGlobals()[109] )
{
PsGetCurrentServerSiloGlobals()[109] = (__int64)v1;
ObfReferenceObject(v1);
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&P2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&P2);
KeAbPostRelease(&P2);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
}
if( (unsigned int)MmIsSessionLeaderProcess((PEPROCESS)v1) )
return 0i64;
}
else
{
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx((UINT64)&P2, 0i64);
if( !qword_140C4DB00 )
{
qword_140C4DB00 = (__int64)v1;
qword_140C4CAD0 = (PVOID)(qword_140C4DB20 + 20480);
BitmapStart = (PVOID)(qword_140C4DB20 + 28672);
qword_140C4DB10 = qword_140C4DB20 + 576;
PsGetServerSiloGlobals(0i64)[109] = (__int64)v1;
v3 = _InterlockedExchangeAdd64((volatile signed __int64 *)&P2, 0xFFFFFFFFFFFFFFFFui64);
if( (v3 & 2) != 0 && (v3 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)&P2);
KeAbPostRelease(&P2);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
ObfReferenceObject(v1);
return 0i64;
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&P2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&P2);
KeAbPostRelease(&P2);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
if( (_EPROCESS *)qword_140C4DB00 == v1 )
return 0i64;
}
return 3221225500i64;
}Referenced by:
MiSessionCreate