Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results

Home NTDEV
Before Posting...
Please check out the Community Guidelines in the Announcements and Administration Category.

More Info on Driver Writing and Debugging


The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.


Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/


Attaching to device stack given HardwareId

AvalonAvalon Member Posts: 27
edited March 31 in NTDEV

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.

Comments

  • Doron_HolanDoron_Holan Member - All Emails Posts: 10,516

    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.

    d
  • AvalonAvalon Member Posts: 27

    @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.

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Upcoming OSR Seminars
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead!
Kernel Debugging 30 Mar 2020 OSR Seminar Space
Developing Minifilters 15 Jun 2020 LIVE ONLINE
Writing WDF Drivers 22 June 2020 LIVE ONLINE
Internals & Software Drivers 28 Sept 2020 Dulles, VA