Search code examples
acpi

How do I call ACPI control methods from C++ or C# on Windows?


I'm getting tired of waiting for HP to fix the switchable graphics driver for my laptop, but I think I can switch GPUs myself by calling ACPI methods. The switching works using vga_switcheroo in Linux, which is open source, so I know what methods I need to call, but not how to call them.

The two methods I need to call are in the SSDT namespace, if that matters, and I also need to pass integer arguments.


Solution

  • Some links on similar problems (For example) say that this is possible only from kernel-mode driver under Windows. So to accomplish this I can think only of the following options:

    1. Writing entire videodriver by yourself - I doubt you will go this way...

    2. Finding documentation on or reverse-engineering existing videodriver for your GPU and issuing necessary commands via IOCTLs using function DeviceIoControl (MSDN). Also not very reliable - existing driver might not contain necessary functions/IOCTLs - but I think it will be much easier than the first option.