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