如何获取传递给 DrvEnablePDEV 的属于 GDI 引擎的 "handle to the logical device" HDEV?

How to obtain the "handle to the logical device" HDEV belonging to the GDI engine as passed to DrvEnablePDEV?

我对能够为任意打印机调用 DrvEnablePDEV 感兴趣,这样我就可以检查设备信息。为此,我需要(除了很多其他东西之外)HDEV,它在 documentation 中描述为

GDI-supplied handle to the device. This handle must be used as input to some GDI callbacks, such as EngGetDriverName.

我是否可以通过某种方式获得引擎使用的句柄?或者我可以用它代替其他手柄吗? (虽然我猜这充其量是有风险的)

原来有一个很好的方法来伪造打印驱动程序的 DLL。注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments 项下的值指向二进制名称。通过将我自己的驱动程序复制到打印驱动程序 v3 目录并模拟注册表中的名称,我可以获得函数及其所有参数,因为它们通过并与正确的驱动程序相对应。这样我就可以调用 CreateDC 或打印驱动程序上的其他内容来访问驱动程序的入口点。

要使注册表更改生效,必须重新启动后台打印程序服务。

感谢 Harry Johnston 提出了挂接驱动程序 DLL 的想法,这让我走上了一条良好的道路。