SMKM_STORE::SmStDirectRead
__int64 __fastcall SMKM_STORE::SmStDirectRead(__int64 a1, __int128 *a2){
__int64 v2;
unsigned int v3;
PSLIST_ENTRY Context;
__int128 v7;
__int128 v8;
__int128 v10;
ULONG_PTR BugCheckParameter3[2];
__int128 v12;
__int128 v13;
__int128 v14;
_KAPC_STATE ApcState;
v2 = 0i64;
memset(&ApcState, 0, sizeof(ApcState));
v3 = 0;
*(_OWORD *)BugCheckParameter3 = 0i64;
v12 = 0i64;
if( *((_BYTE *)KeGetCurrentThread() + 586) != 1 || *((_QWORD *)KeGetCurrentThread() + 23) == *(_QWORD *)(a1 + 6584) )
{
KiStackAttachProcess(*(_KPROCESS **)(a1 + 6584), 0i64, &ApcState);
v3 = 2;
Context = ST_STORE::StAcquireReadContext(a1);
v2 = (__int64)Context;
if( Context )
{
v7 = *a2;
BugCheckParameter3[0] = a1;
v13 = v7;
v8 = a2[1];
v3 = 3;
BugCheckParameter3[1] = (ULONG_PTR)a2;
*(_QWORD *)&v12 = Context;
v14 = v8;
if( (int)KeExpandKernelStackAndCalloutInternal(
SMKM_STORE::SmStDirectReadCallout,
BugCheckParameter3,
0x2000i64) >= 0 )
{
v3 = 2;
if( DWORD2(v12) )
{
v3 = 6;
}
else
{
v10 = v14;
*a2 = v13;
a2[1] = v10;
}
}
}
}
if( (v3 & 1) != 0 )
ST_STORE::StReleaseReadContext(a1, v2);
if( (v3 & 2) != 0 )
KiUnstackDetachProcess(&ApcState, 0i64);
return v3 >> 2;
}
Referenced by:
No references.