HalpAddDevice

NTSTATUS __stdcall HalpAddDevice(DRIVER_OBJECT *DriverObject, DEVICE_OBJECT *PhysicalDeviceObject){
  NTSTATUS v4; 
  _DEVICE_OBJECT *v5; 
  PDEVICE_OBJECT v6; 
  __int64 v7; 
  PDEVICE_OBJECT v8; 
  NTSTATUS result; 
  PDEVICE_OBJECT v10; 
  __int64 v11; 
  PDEVICE_OBJECT v12; 
  __int64 v13; 
  UINT64 DeviceCharacteristics; 
  UINT64 DeviceCharacteristicsa; 
  UINT64 DeviceCharacteristicsb; 
  PDEVICE_OBJECT v17; 
  PDEVICE_OBJECT SourceDevice; 
  PDEVICE_OBJECT DeviceObject; 
  DeviceObject = 0i64;
  SourceDevice = 0i64;
  v17 = 0i64;
  LODWORD(DeviceCharacteristics) = 0;
  v4 = IoCreateDevice(DriverObject, 0x28ui64, 0i64, 0x2Aui64, DeviceCharacteristics, 0, &SourceDevice);
  if( v4 < 0 )
    KeBugCheckEx(0x5Cu, 0x10Eui64, v4, 0i64, 0i64);
  v5 = SourceDevice;
  v6 = SourceDevice;
  v7 = *((_QWORD *)SourceDevice + 8);
  *(_DWORD *)v7 = 193;
  *(_QWORD *)(v7 + 16) = PhysicalDeviceObject;
  *(_QWORD *)(v7 + 24) = v6;
  *((_DWORD *)v6 + 12) &= ~0x80u;
  v8 = IoAttachDeviceToDeviceStack(v6, PhysicalDeviceObject);
  if( v8 )
  {
    *(_QWORD *)(v7 + 32) = v8;
    LODWORD(DeviceCharacteristicsa) = 128;
    result = IoCreateDevice(DriverObject, 0x30ui64, 0i64, 0x2Aui64, DeviceCharacteristicsa, 0, &DeviceObject);
    if( result >= 0 )
    {
      v10 = DeviceObject;
      AcpiRootPdo = DeviceObject;
      v11 = *((_QWORD *)DeviceObject + 8);
      *(_QWORD *)(v11 + 8) = 0i64;
      *(_DWORD *)v11 = 192;
      *(_QWORD *)(v11 + 16) = v10;
      *(_QWORD *)(v11 + 24) = v7;
      *(_DWORD *)(v11 + 32) = 129;
      if( HalpIsUefiFirmwareResourceTablePresent() )
      {
        LODWORD(DeviceCharacteristicsb) = 128;
        if( IoCreateDevice(DriverObject, 0x30ui64, 0i64, 0x2Aui64, DeviceCharacteristicsb, 0, &v17) >= 0 )
        {
          v12 = v17;
          v13 = *((_QWORD *)v17 + 8);
          *(_QWORD *)(v13 + 8) = 0i64;
          *(_DWORD *)v13 = 192;
          *(_QWORD *)(v13 + 16) = v12;
          *(_QWORD *)(v13 + 24) = v7;
          *(_DWORD *)(v13 + 32) = 131;
          *(_QWORD *)(v11 + 8) = v13;
          *((_DWORD *)v12 + 12) &= ~0x80u;
        }
      }
      *((_DWORD *)v10 + 12) &= ~0x80u;
      *(_QWORD *)(v7 + 8) = v11;
      HalpPostPnpInitialize((INT64)v12);
      return 0;
    }
  }
  else
  {
    IoDeleteDevice(v5);
    return -1073741810;
  }
  return result;
}

Referenced by:

HalpDriverEntry