MiDeleteImageCreationMdls

NTSTATUS __stdcall MiDeleteImageCreationMdls(PMDL MemoryDescriptorList){
  NTSTATUS result; 
  int v2; 
  int v3; 
  PMDL v4; 
  __int16 MdlFlags; 
  _MDL *Next; 
  _MDL *v7; 
  unsigned __int64 v8; 
  unsigned __int64 i; 

  if( MemoryDescriptorList )
  {
    v3 = v2;
    v4 = MemoryDescriptorList;
    do
    {
      MdlFlags = v4->MdlFlags;
      Next = v4->Next;
      if( (MdlFlags & 4) != 0 )
      {
        ExFreePoolWithTag(v4->StartVa, 0);
      }
      else if( (MdlFlags & 2) != 0 )
      {
        if( (MdlFlags & 1) != 0 )
          MmUnmapLockedPages(v4->MappedSystemVa, v4);
        if( v3 )
        {
          v7 = v4 + 1;
          v8 = (unsigned __int64)v4->ByteCount >> 12;
          for( i = 0i64; i < v8; ++i )
          {
            if( v7->Next != (_MDL *)-1i64 )
              MiReturnPfnReferenceCount(&MmGetPfnDb()[(__int64)v7->Next]);
            v7 = (_MDL *)((char *)v7 + 8);
          }
        }
      }
      result = (unsigned int)IoFreeMdl(v4);
      v4 = Next;
    }
    while( Next );
  }
  return result;
}

Referenced by:

MiCreateImageFileMap
MiCreateMdl