SmProcessStatsRequest

INT64 __stdcall SmProcessStatsRequest(PVOID UserData, UINT64 UserDataLength, UINT64 *ReturnLength, INT8 RequestorMode){
  int v4; 
  _MDL *NonPaged; 
  __int64 v7; 
  int v8; 
  int v9; 
  unsigned __int8 v10; 
  unsigned int v11; 
  INT64 v12; 
  int v13; 
  __int128 Base; 
  __int128 v16; 
  _KEVENT Object[3]; 
  _DWORD *v18; 
  CHAR PreviousMode; 
  v18 = (_DWORD *)RequestorMode;
  v4 = (int)ReturnLength;
  v16 = 0i64;
  NonPaged = 0i64;
  v7 = 0i64;
  v8 = 0;
  KeInitializeEvent(Object, NotificationEvent, 0);
  if( v4 == 16 )
  {
    if( PreviousMode && (UserDataLength & 7) != 0 )
      ExRaiseDatatypeMisalignment();
    Base = *(_OWORD *)UserDataLength;
    v10 = BYTE1(*(_OWORD *)UserDataLength);
    if( (_BYTE)Base == 2 && v10 < 4u )
    {
      if( v10 <= 1u || SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, PreviousMode) )
      {
        if( (!DWORD1(Base)
           || (v11 = MmSizeOfMdl(*((PVOID *)&Base + 1), DWORD1(Base)),
               (NonPaged = (_MDL *)SSHSupportAllocateNonPaged(v11, 0x444D6D73u)) != 0i64))
          && (v12 = SSHSupportAllocateNonPaged(0x28ui64, 0x69576D73u), (v7 = v12) != 0) )
        {
          *(_OWORD *)v12 = 0i64;
          *(_OWORD *)(v12 + 16) = 0i64;
          *(_QWORD *)(v12 + 32) = 0i64;
          v13 = 0;
          if( DWORD1(Base) )
          {
            NonPaged->Next = 0i64;
            NonPaged->Size = 8 * ((((WORD4(Base) & 0xFFF) + (unsigned __int64)DWORD1(Base) + 4095) >> 12) + 6);
            NonPaged->MdlFlags = 0;
            NonPaged->StartVa = (void *)(*((_QWORD *)&Base + 1) & 0xFFFFFFFFFFFFF000ui64);
            NonPaged->ByteOffset = WORD4(Base) & 0xFFF;
            NonPaged->ByteCount = DWORD1(Base);
            v8 = 1;
            MmProbeAndLockPages(NonPaged, PreviousMode, IoWriteAccess);
            v13 = *(_DWORD *)v7;
          }
          *(_DWORD *)v7 = v13 & 0xFFFFFFF8 | 3;
          *(_DWORD *)(v7 + 8) = v10;
          *(_DWORD *)(v7 + 12) = DWORD1(Base);
          *(_QWORD *)(v7 + 16) = NonPaged;
          v9 = SMKM_STORE_MGR::SmStoreRequest((__int64)&SmGlobals, WORD1(Base), v7, (__int64)Object, &v16);
          if( v9 >= 0 )
          {
            v7 = 0i64;
            KeWaitForSingleObject(Object, Executive, 0, 0, 0i64);
            v9 = v16;
            *v18 = DWORD2(v16);
          }
        }
        else
        {
          v9 = -1073741670;
        }
      }
      else
      {
        v9 = -1073741790;
      }
    }
    else
    {
      v9 = -1073741811;
    }
  }
  else
  {
    v9 = -1073741306;
  }
  if( v7 )
    CmSiFreeMemory((PPRIVILEGE_SET)v7);
  if( v8 )
    MmUnlockPages(NonPaged);
  if( NonPaged )
    CmSiFreeMemory((PPRIVILEGE_SET)NonPaged);
  return(unsigned int)v9;
}

Referenced by:

SmQueryStoreInformation