SmSetStoreInformation

NTSTATUS __stdcall SmSetStoreInformation(PVOID SystemInformation, UINT64 SystemInformationLength, INT8 PreviousMode){
  INT8 v3; 
  char v4; 
  __int128 UserData; 
  UINT64 UserDataLength; 
  v4 = v3;
  if( PreviousMode != 24 )
    return -1073741820;
  UserData = *(_OWORD *)SystemInformationLength;
  UserDataLength = *(_QWORD *)(SystemInformationLength + 16);
  if( (unsigned int)*(_OWORD *)SystemInformationLength != 1 )
    return -1073741811;
  if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, v3) )
    return -1073741790;
  if( SDWORD1(UserData) <= 12 )
  {
    switch( DWORD1(UserData) )
    {
      case 0xC:
        return SmcProcessStoreDeleteRequest((INT64)&qword_140D231C0, *((__int128 **)&UserData + 1), UserDataLength, v4);
      case 3:
        return SmProcessCreateRequest((INT64)&SmGlobals, *((UINT64 *)&UserData + 1), (unsigned int)UserDataLength, v4);
      case 4:
        return SmProcessDeleteRequest((INT64)&SmGlobals, *((INT64 **)&UserData + 1), (unsigned int)UserDataLength, v4);
      case 9:
        return SmcProcessCreateRequest(
                 (__int64)&qword_140D231C0,
                 *((unsigned __int64 *)&UserData + 1),
                 UserDataLength,
                 v4);
      case 0xA:
        return SmcProcessDeleteRequest((__int64)&qword_140D231C0, *((__int64 **)&UserData + 1), UserDataLength, v4);
      case 0xB:
        return SmcProcessStoreCreateRequest(
                 (__int64)&qword_140D231C0,
                 *((unsigned __int64 *)&UserData + 1),
                 UserDataLength,
                 v4);
    }
    return -1073741821;
  }
  if( DWORD1(UserData) == 17 )
    return SmProcessResizeRequest((INT64)&SmGlobals, *((INT64 *)&UserData + 1), (unsigned int)UserDataLength, v4);
  if( DWORD1(UserData) != 18 )
  {
    switch( DWORD1(UserData) )
    {
      case 0x13:
        return SmProcessConfigRequest(*((VOID **)&UserData + 1), (unsigned int)UserDataLength, v4);
      case 0x14:
        return SmProcessStoreMemoryPriorityRequest(*((VOID **)&UserData + 1), (unsigned int)UserDataLength, v4);
      case 0x15:
        return SmProcessSystemStoreTrimRequest(*((VOID **)&UserData + 1), (unsigned int)UserDataLength, v4);
    }
    return -1073741821;
  }
  return SmcProcessResizeRequest((INT64)&qword_140D231C0, *((UINT64 *)&UserData + 1), (unsigned int)UserDataLength, v4);
}

Referenced by:

NtSetSystemInformation