HalpDmaAllocateReservedMappingArray

NTSTATUS __stdcall HalpDmaAllocateReservedMappingArray(UINT64 TotalMappings, UINT64 MappingsToAllocate){
  unsigned int v2; 
  __int64 v3; 
  __int64 v4; 
  unsigned int v5; 
  __int64 v6; 
  struct _SLIST_ENTRY *ReservedMapping; 
  __int64 v8; 
  v2 = MappingsToAllocate;
  if( ((unsigned __int8)&xmmword_140CF6260 & 0xF) != 0 )
    RtlRaiseStatus(-2147483646);
  qword_140CF6270 = 0i64;
  xmmword_140CF6260 = 0i64;
  qword_140C53C68 = HalpMmAllocCtxAlloc(TotalMappings, 8i64 * (unsigned int)TotalMappings);
  v4 = qword_140C53C68;
  if( qword_140C53C68 )
  {
    v5 = 0;
    if( v2 )
    {
      v6 = 0i64;
      do
      {
        ReservedMapping = (struct _SLIST_ENTRY *)HalpDmaAllocateReservedMapping(v3);
        v4 = qword_140C53C68;
        *(_QWORD *)(v6 + qword_140C53C68) = ReservedMapping;
        if( !ReservedMapping )
          break;
        RtlpInterlockedPushEntrySList((PSLIST_HEADER)&xmmword_140CF6260, ReservedMapping);
        v4 = qword_140C53C68;
        ++v5;
        v8 = *(_QWORD *)(v6 + qword_140C53C68);
        v6 += 8i64;
        *(_DWORD *)(v8 + 28) = 1;
      }
      while( v5 < v2 );
      if( v5 )
      {
        dword_140CF6278 = v5;
        return 0;
      }
    }
    HalpMmAllocCtxFree(v3, v4);
  }
  return -1073741670;
}

Referenced by:

HalpDmaAllocateMappingResources