PiSwQueuedCreateInfoCreate

VOID __stdcall PiSwQueuedCreateInfoCreate(
        _PI_SWD_QUEUED_CREATE_INFO **QueuedCreateInfo,
        _SW_DEVICE_CREATE_IOCTL_DATA *IoctlData,
        INT64 a3,
        INT64 a4){
  VOID **PoolWithTag; 
  __int64 v7; 
  VOID *v8; 
  int v9; 

  PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x58ui64, 1466986064i64);
  *QueuedCreateInfo = (_PI_SWD_QUEUED_CREATE_INFO *)PoolWithTag;
  if( !PoolWithTag )
  {
    v9 = -1073741670;
LABEL_9:
    if( v9 >= 0 )
      return;
    goto LABEL_10;
  }
  memset(PoolWithTag, 0i64, 0x58u);
  if( (int)PnpAllocatePWSTR(*((WCHAR **)IoctlData + 1), 0xC8ui64, 0x57706E50u, (PVOID *)*QueuedCreateInfo) >= 0
    && PiSwPnPInfoInit((WCHAR **)*QueuedCreateInfo + 1, IoctlData) >= 0 )
  {
    if( !*((_QWORD *)IoctlData + 12) )
    {
LABEL_7:
      v9 = PnpCopyDevPropertyArray(
             (unsigned int)IoctlData[26],
             *((_QWORD *)IoctlData + 14),
             v7,
             *QueuedCreateInfo + 20,
             (__int64)(*QueuedCreateInfo + 18));
      goto LABEL_9;
    }
    (*QueuedCreateInfo)[16] = IoctlData[22];
    *((_QWORD *)*QueuedCreateInfo + 7) = ExAllocatePoolWithTag(1ui64, (unsigned int)IoctlData[22], 1466986064i64);
    v8 = (VOID *)*((_QWORD *)*QueuedCreateInfo + 7);
    if( v8 )
    {
      memmove(v8, *((const VOID **)IoctlData + 12), IoctlData[22]);
      goto LABEL_7;
    }
  }
LABEL_10:
  if( *QueuedCreateInfo )
  {
    PiSwQueuedCreateInfoFree(*QueuedCreateInfo);
    *QueuedCreateInfo = 0i64;
  }
}

Referenced by:

PiSwIrpStartCreateWorker