Attaching to device stack given HardwareId

Hello. Using an INF one can specify this line to attach to the device stack of PNP1234
%DeviceDesc% = Bla_Install.ntamd64, ACPI\PNP1234

How can you do that programatically without the INF. For example all you need to do is find the DeviceObject representing that HardwareId, then it’s easy to attach. But I can’t seem to find the correct API (if there is one), to convert that HardwareId to something else more useful.

I tried IoGetDeviceObjectPointer("ACPI\\PNP1234"..) getting STATUS_OBJECT_PATH_SYNTAX_BAD, but that requires a device in the object namespace.

What larger problem are you trying to solve? Attaching your driver to a stack after it has been started is not a supported operation (while it may appear to work most of the time, there are many stacks which assume the entire stack has been built at start time and cache information which will not be reread when your driver attaches). Attaching to the stack declaratively through an INF is the supported way to add yourself to a device stack.

@Doron_Holan said:
What larger problem are you trying to solve? Attaching your driver to a stack after it has been started is not a supported operation (while it may appear to work most of the time, there are many stacks which assume the entire stack has been built at start time and cache information which will not be reread when your driver attaches). Attaching to the stack declaratively through an INF is the supported way to add yourself to a device stack.

What is the issue with IoAttachDeviceToDeviceStackSafe()? MSDN states that a system wide lock is placed preventing IRPs from travelling down the stack until fully attached.

This page also indicates it’s supported https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/attaching-the-filter-device-object-to-the-target-device-object

Though I agree MSDN has often been incorrect for kernel related docs.