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