MiCompactServiceTable

INT64 __fastcall MiCompactServiceTable(_KLDR_DATA_TABLE_ENTRY *DataTableEntry){
  INT8 v1; 
  VOID *v3; 
  INT8 v4; 
  VOID *v5; 
  _DWORD *v6; 
  INT8 v7; 
  _DWORD *v8; 
  void *v9; 
  INT8 v10; 
  void *v11; 
  VOID *v12; 
  INT8 v13; 
  VOID *v14; 
  _DWORD *v15; 
  INT8 v16; 
  _DWORD *v17; 
  void *v18; 
  void *v19; 
  unsigned int v20; 
  unsigned int NumberOfBytes; 
  LODWORD(v3) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pServiceTable", v1);
  v5 = v3;
  if( !v3 )
    return 3221225594i64;
  LODWORD(v6) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pServiceLimit", v4);
  v8 = v6;
  if( !v6 )
    return 3221225594i64;
  LODWORD(v9) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pArgumentTable", v7);
  v11 = v9;
  if( !v9 )
    return 3221225594i64;
  LODWORD(v12) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pServiceTableFilter", v10);
  v14 = v12;
  if( !v12 )
    return 3221225594i64;
  LODWORD(v15) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pServiceLimitFilter", v13);
  v17 = v15;
  if( !v15 )
    return 3221225594i64;
  LODWORD(v18) = RtlFindExportedRoutineByName(*((PVOID *)DataTableEntry + 6), (PSTR)"W32pArgumentTableFilter", v16);
  v19 = v18;
  if( !v18 )
    return 3221225594i64;
  v20 = 4 * *v8;
  MiSetImageProtection(DataTableEntry, v5, v20, 4ui64);
  NumberOfBytes = 4 * *v17;
  MiSetImageProtection(DataTableEntry, v14, NumberOfBytes, 4ui64);
  KeCompactServiceTable(v14, v19, (unsigned int)*v17, 3ui64, *((_QWORD *)DataTableEntry + 6));
  KeCompactServiceTable(v5, v11, (unsigned int)*v8, 1ui64, *((_QWORD *)DataTableEntry + 6));
  if( *((_QWORD *)MiSectionControlArea(*((_SECTION **)DataTableEntry + 14)) + 18) )
  {
    MiSetImageProtection(DataTableEntry, v5, v20, 0x100ui64);
    MiSetImageProtection(DataTableEntry, v14, NumberOfBytes, 0x100ui64);
  }
  return 0i64;
}

Referenced by:

MmLoadSystemImageEx