首先,我不得不承认我是硬件驱动程序开发的新手。
假设用户可以在 Windows 8.1 上使用基于 ACPI 的亮度热键触摸/按下笔记本键盘上的硬件键(例如亮度提高),系统将收到基于 ACPI 的通知并增加显示亮度并显示屏幕显示,它是在屏幕左上角显示亮度级别的垂直条。
现在我们必须主动提高这些基于 ACIP 的通知,让系统完成增加/减少显示亮度并在我们的 ACPI-filter 驱动程序接收到从我们的应用程序发送的 IRP 时在屏幕上显示屏幕显示(客户端需要此 OSD) .
首先,我阅读了“与硬件按钮(热键)集成”,但它没有发布如何在内核模式驱动程序中发送这些“ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY”或“ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY”。
所以我找到了"Supporting Display Output and ACPI Events"。它表示调用 DxgkDdiNotifyAcpiEvent 来通知显示微型端口驱动程序有关 ACPI 事件。不知道是不是误会了,我们可以主动调用这个程序来提高ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY,让系统提高亮度,显示On Screen Display。
我想我可能无法调用 DxgkDdiNotifyAcpiEvent,因为我几乎无法构造 DxgkDdiNotifyAcpiEvent 所需的“PVOID MiniportDeviceContext”。
由于我的英语很差,请原谅我对我的需求和研究的冗长解释......
总之,这是整个流程:
- 我们的应用程序使用 CreateFile 打开我们的 ACPI-Filter 驱动程序以便与其通信。
- 应用程序使用 DeviceIoControl 向 ACPI-Filter 驱动程序发送 Irp
- ACPI-Filter 驱动程序接收到 Irp 并引发基于 ACPI 的通知来告诉系统增加/减少显示器的亮度,最重要的是,显示屏幕显示(如果 ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY 通知成功通知系统,则没有需要关注这个需求,因为系统会在屏幕上显示 OSD)
当涉及到第 3 步时,有人可以告诉我如何完成它吗?示例代码是最受欢迎的。
或者,可以在 UMDF 上完成吗?
根据我的研究,HID报告是满足这个需求的另一种方式,但我认为我应该从头到尾编写HID-minifilter驱动,没有时间让完成。最重要的是,我不熟悉这些模块。