IopWriteDriverList

VOID __fastcall IopWriteDriverList(
        UINT64 BufferAddress,
        UINT8 AtBugCheck,
        UINT64 DriverListOffset,
        UINT64 StringPoolOffset){
  INT64 v4; 
  UINT64 v5; 
  unsigned int *v6; 
  int v8; 
  unsigned int v9; 
  int v10; 
  __int64 v11; 
  UINT64 v12; 

  v4 = PsLoadedModuleList;
  v5 = BufferAddress + (unsigned int)DriverListOffset;
  v6 = (unsigned int *)(BufferAddress + (unsigned int)StringPoolOffset);
  v8 = BufferAddress;
  v9 = 0;
  while( (INT64 *)v4 != &PsLoadedModuleList
       && (AtBugCheck != 1
        || KiIsAddressRangeValid(v4, 160i64)
        && KiIsAddressRangeValid(*(_QWORD *)(v4 + 96), *(unsigned __int16 *)(v4 + 88))) )
  {
    v10 = *(unsigned __int16 *)(v4 + 88) >> 1;
    *v6 = v10;
    memmove(v6 + 1, *(const VOID **)(v4 + 96), 2 * v10);
    *((_WORD *)v6 + *v6 + 2) = 0;
    v11 = v9++;
    v12 = v5 + 144 * v11;
    *(_OWORD *)(v12 + 8) = *(_OWORD *)v4;
    *(_OWORD *)(v12 + 24) = *(_OWORD *)(v4 + 16);
    *(_OWORD *)(v12 + 40) = *(_OWORD *)(v4 + 32);
    *(_OWORD *)(v12 + 56) = *(_OWORD *)(v4 + 48);
    *(_OWORD *)(v12 + 72) = *(_OWORD *)(v4 + 64);
    *(_OWORD *)(v12 + 88) = *(_OWORD *)(v4 + 80);
    *(_OWORD *)(v12 + 104) = *(_OWORD *)(v4 + 96);
    *(_OWORD *)(v12 + 120) = *(_OWORD *)(v4 + 112);
    *(_QWORD *)(v12 + 136) = *(_QWORD *)(v4 + 128);
    *(_DWORD *)(v12 + 136) = *(_DWORD *)(v4 + 156);
    *(_DWORD *)(v12 + 72) = *(_DWORD *)(v4 + 152);
    *(_DWORD *)v12 = (_DWORD)v6 - v8;
    v4 = *(_QWORD *)v4;
    v6 = (unsigned int *)(((unsigned __int64)v6 + 2 * *v6 + 13) & 0xFFFFFFFFFFFFFFF8ui64);
  }
}

Referenced by:

IoFillTriageDumpBuffer
KeCapturePersistentThreadState