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.