EtwpBuildMdlForTraceBuffer

NTSTATUS __stdcall EtwpBuildMdlForTraceBuffer(_WMI_BUFFER_HEADER *Buffer, _MDL **OutMdl){
  _MDL **v2; 
  unsigned int v3; 
  _MDL **v4; 
  _MDL **v5; 
  NTSTATUS v7; 
  _MDL *Mdl; 
  _MDL *v9; 
  __int64 v10; 
  _MDL *v11; 
  unsigned __int64 v12; 

  v3 = *(_DWORD *)OutMdl;
  v4 = OutMdl;
  v5 = v2;
  v7 = 0;
  Mdl = IoAllocateMdl(OutMdl, *(unsigned int *)OutMdl, 0, 0, 0i64);
  v9 = Mdl;
  if( !Mdl )
    return -1073741670;
  if( (*((_DWORD *)Buffer + 208) & 0x20000000) != 0 )
  {
    v10 = v3 >> 12;
    v11 = Mdl + 1;
    if( (_DWORD)v10 )
    {
      do
      {
        LODWORD(v12) = MmGetPhysicalAddress((UINT64)v4);
        v4 += 512;
        v11->Next = (_MDL *)(v12 >> 12);
        v11 = (_MDL *)((char *)v11 + 8);
        --v10;
      }
      while( v10 );
    }
  }
  else
  {
    MmBuildMdlForNonPagedPool(Mdl);
  }
  *v5 = v9;
  return v7;
}

Referenced by:

EtwpPreserveLogger