PopFxCreateDeviceCommon

__int64 __fastcall PopFxCreateDeviceCommon(const void **a1, __int64 a2, __int64 a3, int a4, _QWORD *a5){
  NTSTATUS v6; 
  char *PoolWithTag; 
  char *v8; 
  UNICODE_STRING v10; 
  UNICODE_STRING v11; 
  v11 = 0i64;
  v6 = PopFxDuplicateUniqueId((UNICODE_STRING *)a1, &v11);
  if( v6 >= 0 )
  {
    PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x4B8ui64, 0x4D584650ui64);
    v8 = PoolWithTag;
    if( PoolWithTag )
    {
      memset((INT64)PoolWithTag, 0i64);
      v10 = v11;
      *((_QWORD *)v8 + 45) = 0i64;
      *((_QWORD *)v8 + 140) = v8 + 920;
      *(UNICODE_STRING *)(v8 + 216) = v10;
      *((_QWORD *)v8 + 26) = v8 + 200;
      *((_QWORD *)v8 + 25) = v8 + 200;
      *((_QWORD *)v8 + 118) = v8;
      *((_QWORD *)v8 + 73) = v8 + 576;
      *((_QWORD *)v8 + 72) = v8 + 576;
      *((_QWORD *)v8 + 48) = v8 + 376;
      *((_QWORD *)v8 + 47) = v8 + 376;
      *((_QWORD *)v8 + 57) = PopFxIdleTimeoutDpcRoutine;
      *((_QWORD *)v8 + 40) = PopFxDeviceWork;
      *((_QWORD *)v8 + 117) = PopFxDirectedPowerTransitionWorker;
      *((_QWORD *)v8 + 126) = v8 + 1000;
      *((_QWORD *)v8 + 125) = v8 + 1000;
      *((_QWORD *)v8 + 135) = PopFxDirectedWorkOrderWatchdog;
      *((_QWORD *)v8 + 115) = 0i64;
      *((_QWORD *)v8 + 46) = 0i64;
      *((_QWORD *)v8 + 124) = 0i64;
      *((_QWORD *)v8 + 136) = v8 + 976;
      *((_QWORD *)v8 + 121) = v8 + 976;
      *((_QWORD *)v8 + 1) = v8;
      *(_QWORD *)v8 = v8;
      *((_WORD *)v8 + 284) = 0;
      v8[570] = 6;
      *((_DWORD *)v8 + 143) = 1;
      v8[368] = 9;
      *((_QWORD *)v8 + 49) = 0i64;
      *((_DWORD *)v8 + 107) = 0;
      *((_WORD *)v8 + 212) = 0;
      *((_DWORD *)v8 + 108) = 275;
      *((_QWORD *)v8 + 58) = v8;
      *((_QWORD *)v8 + 61) = 0i64;
      *((_QWORD *)v8 + 56) = 0i64;
      *((_QWORD *)v8 + 41) = v8;
      *((_QWORD *)v8 + 38) = 0i64;
      *((_QWORD *)v8 + 144) = 0i64;
      v8[992] = 8;
      *((_QWORD *)v8 + 127) = 0i64;
      *((_DWORD *)v8 + 263) = 0;
      *((_WORD *)v8 + 524) = 0;
      *((_DWORD *)v8 + 264) = 275;
      *((_QWORD *)v8 + 139) = 0i64;
      *((_QWORD *)v8 + 134) = 0i64;
      IoInitializeRemoveLockEx((_DWORD)v8 + 272, 0x4D584650u, 0, 0);
      *((_DWORD *)v8 + 58) = ((a4 & 4) != 0) + 1;
      *((_DWORD *)v8 + 206) = a4;
      *a5 = v8;
      return(unsigned int)v6;
    }
    v6 = -1073741670;
  }
  if( v11.Buffer )
    ExFreePoolWithTag(v11.Buffer, 0x4D584650u);
  return(unsigned int)v6;
}

Referenced by:

PopFxAcpiRegisterDevice
PopFxRegisterDeviceWorker