【发布时间】:2017-05-02 03:39:24
【问题描述】:
我有兴趣为任意打印机调用DrvEnablePDEV,以便检查设备信息。为此,我需要(除了很多其他事情之外)HDEV,它在documentation 中描述为
GDI 提供的设备句柄。此句柄必须用作某些 GDI 回调的输入,例如 EngGetDriverName。
我是否有可能以某种方式获得引擎使用的这个句柄?或者我可以用它代替其他手柄吗? (虽然我猜这充其量是有风险的)
【问题讨论】:
-
您知道 DrvEnablePDEV 是打印机驱动程序提供给 Windows 调用的函数吗? (你是如何获得指向它的指针的?)
-
是的,我知道。指向什么?我只是从打印机驱动程序 dll 中获取该功能。获取功能根本不是问题。 (这是一个导出的函数,引擎就是这样获取的)
-
哦,对了,打印机驱动程序被加载到应用程序的地址空间中,所以我想您可以调用 GetProcAddress。但是,进行这样的调用总是很危险的,因为打印机驱动程序不会期待它。鉴于此警告,捕获句柄的最明显方法是挂钩
DrvEnablePDEV函数。 (虽然我想如果你这样做,你不妨简单地捕获挂钩中的设备信息。) -
我想你不明白,我在问如何为不同的打印机获取引擎的 hdev。我不能依赖引擎调用驱动程序,我就是这样做的人。不过谢谢你的想法。
-
好的。如果没有其他人有更好的想法,您大概可以通过调用适当的 API 函数来强制引擎调用驱动程序。我希望 CreateDC() 能做到。