SmQueryStoreInformation

NTSTATUS __stdcall SmQueryStoreInformation(
        PVOID SystemInformation,
        UINT64 SystemInformationLength,
        INT8 PreviousMode,
        UINT64 *a4){
  INT8 RequestorMode; 
  __int128 UserData; 
  UINT64 UserDataLength; 
  UINT64 *ReturnLength; 

  RequestorMode = (char)a4;
  if( PreviousMode != 24 )
    return -1073741820;
  UserData = *(_OWORD *)SystemInformationLength;
  UserDataLength = *(_QWORD *)(SystemInformationLength + 16);
  if( (unsigned int)*(_OWORD *)SystemInformationLength != 1 )
    return -1073741811;
  if( DWORD1(UserData) != 2 && DWORD1(UserData) != 5 )
  {
    if( DWORD1(UserData) > 0x16
      || (SystemInformation = (PVOID)4202752, !_bittest((const int *)&SystemInformation, DWORD1(UserData))) )
    {
      if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, (INT8)a4) )
        return -1073741790;
    }
  }
  switch( DWORD1(UserData) )
  {
    case 0x16:
      return SmProcessCompressionInfoRequest(
               *((PVOID *)&UserData + 1),
               (unsigned int)UserDataLength,
               ReturnLength,
               RequestorMode);
    case 8:
      return SmcProcessListRequest(
               &CacheMgr,
               *((VOID **)&UserData + 1),
               (unsigned int)UserDataLength,
               ReturnLength,
               RequestorMode);
    case 0xF:
      return SmProcessRegistrationRequest(
               *((VOID **)&UserData + 1),
               (unsigned int)UserDataLength,
               ReturnLength,
               RequestorMode);
    case 2:
      return SmProcessStatsRequest(
               SystemInformation,
               *((UINT64 *)&UserData + 1),
               (UINT64 *)(unsigned int)UserDataLength,
               (CHAR)ReturnLength);
    case 5:
      return SmProcessListRequest(
               (_SMKM_STORE_LIST *)SmGlobals,
               *((VOID **)&UserData + 1),
               (unsigned int)UserDataLength,
               ReturnLength,
               RequestorMode);
    case 0xD:
      return SmcProcessStatsRequest(
               &CacheMgr,
               *((VOID **)&UserData + 1),
               (unsigned int)UserDataLength,
               ReturnLength,
               RequestorMode);
  }
  return -1073741821;
}

Referenced by:

ExpQuerySystemInformation