HalpQueueMapBufferWorker

VOID __stdcall HalpQueueMapBufferWorker(_ADAPTER_OBJECT *ChildAdapter, UINT64 NumberOfMapRegisters){
  int v2; 
  __int64 v4; 
  VOID **PoolWithTag; 

  v2 = NumberOfMapRegisters;
  v4 = ChildAdapter->ScatterGather != 0 ? 4 : 0;
  if( !_InterlockedCompareExchange((volatile signed __int32 *)((char *)&HalpDmaGrowMapBufferWorkerQueued + v4), 1, 0) )
  {
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x38ui64, 543973704i64);
    if( PoolWithTag )
    {
      *PoolWithTag = 0i64;
      PoolWithTag[2] = HalpGrowMapBufferWorker;
      PoolWithTag[3] = PoolWithTag;
      PoolWithTag[4] = ChildAdapter->MasterAdapter;
      *((_DWORD *)PoolWithTag + 11) = v2;
      *((_BYTE *)PoolWithTag + 40) = ChildAdapter->ScatterGather;
      *((_DWORD *)PoolWithTag + 12) = ChildAdapter->AdapterObject.LibraryVersion;
      ExQueueWorkItem((PWORK_QUEUE_ITEM)PoolWithTag, DelayedWorkQueue);
    }
    else
    {
      *(_DWORD *)((char *)&HalpDmaGrowMapBufferWorkerQueued + v4) = 0;
    }
  }
}

Referenced by:

HalAllocateAdapterChannelV2
HalpAllocateDmaResourcesInternal
HalpDmaProcessMapRegisterQueueV2
IoFreeAdapterChannelV2