HalAllocateCrashDumpRegisters

PVOID __stdcall HalAllocateCrashDumpRegisters(PADAPTER_OBJECT AdapterObject, PULONG NumberOfMapRegisters){
  ULONG v2; 
  int v5; 
  __int64 v6; 
  PVOID result; 
  _DMA_OPERATIONS *MapRegistersAtHighLevel; 
  int v9; 
  __int64 v10; 
  v2 = 0;
  if( LOBYTE(AdapterObject[27].Version) || !*((_BYTE *)&AdapterObject[27].Size + 3) )
  {
    if( HalpDmaHibernateRegisterPhase == 1 )
    {
      v5 = HalpDmaHibernatePhase1RegisterSetIndex;
      v6 = 2i64 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex;
      *NumberOfMapRegisters = HalpDmaHibernateRegisterSets[2 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex + 1];
      result = (PVOID)HalpDmaHibernateRegisterSets[v6];
      AdapterObject[14].DmaOperations = (_DMA_OPERATIONS *)result;
      *(_DWORD *)&AdapterObject[15].Version = *NumberOfMapRegisters;
      HalpDmaHibernatePhase1RegisterSetIndex = v5 + 1;
      return result;
    }
    if( *NumberOfMapRegisters > *(_DWORD *)&AdapterObject[14].Version )
    {
      *(_DWORD *)&AdapterObject[15].Version = 0;
      result = 0i64;
      *NumberOfMapRegisters = 0;
      return result;
    }
    MapRegistersAtHighLevel = (_DMA_OPERATIONS *)HalpDmaAllocateMapRegistersAtHighLevel(
                                                   (__int64)AdapterObject,
                                                   (int *)NumberOfMapRegisters);
    AdapterObject[14].DmaOperations = MapRegistersAtHighLevel;
    if( MapRegistersAtHighLevel )
    {
      v9 = HalpDmaHibernateRegisterSetIndex;
      if( (unsigned int)HalpDmaHibernateRegisterSetIndex < 4 )
      {
        v10 = 2i64 * (unsigned int)HalpDmaHibernateRegisterSetIndex;
        HalpDmaHibernateRegisterSets[v10] = (__int64)MapRegistersAtHighLevel;
        LODWORD(HalpDmaHibernateRegisterSets[v10 + 1]) = *NumberOfMapRegisters;
        HalpDmaHibernateRegisterSetIndex = v9 + 1;
      }
    }
    else
    {
      *NumberOfMapRegisters = 0;
    }
    v2 = *NumberOfMapRegisters;
  }
  else
  {
    AdapterObject[14].DmaOperations = 0i64;
  }
  *(_DWORD *)&AdapterObject[15].Version = v2;
  result = AdapterObject[14].DmaOperations;
  HalpDmaHibernateAdapter = AdapterObject;
  return result;
}

Referenced by:

VfAllocateCrashDumpRegisters