[ABORT] Memory DC和DC的区别
背景:bitmapPrint示例程序的流程创建了俩DC,
HDC prn = GetPrinterDC(hwnd)
- ``HDC hdcMem = CreateCompatibleDC(prn)`
有啥区别吗?
注:Memory DC又叫Compatible DC,下边Microsoft Docs有提及。
参考:
- Microsoft Docs: Memory Device Contexts
- Stack Overflow: Understanding Device Contexts
猜测:DC是设备映射到内存的,memory DC是真实驻留在内存的?
所有已安装打印在哪里被找到
详细参考logs.md所有打印机这一节。
Windows有维护特殊的文件夹,可以通过shell:PrintersFolder
打开。
打印机的graphics dll和interface dll的路径如何得到?
通过读取注册表。打印机的graphics dll和interface dll的信息存在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3\
里。
Driver
是graphics dll,Configuration File
是interface dll
相关信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
WINE
WINE本身(WINEPS.DRV)似乎没有支持加载graphics dll和interface dll,不过ddiwarpper是支持的,从注册表读取。
-
CreateICW
-
CreateDCW
-
DRIVER_GetDriverName
从C:/windows/win.ini读取的驱动dll名字。
-
DRIVER_load_driver
在可能的路径中去寻找驱动dll。
2020.1.6:
对于DDIWrapper的驱动,
-
funcs->pCreateDC=驱动相关!WINGDIDRV_CreateDC
-
WINGDIDRV_FindPrinterInfo
-
WINGDIDRV_load_driver
加载interface dll和graphics dll
-
-
对于WINEPS.DRV,
- funcs->pCreateDC=驱动相关!PSDRV_CreateDC
- PSDRV_FindPrinterInfo
- OpenPrinterW
- get_ppd_filename
- PSDRV_FindPrinterInfo
-
-
Windows
读注册表的流程如下,主要是两个函数,OpenPrinterW
加载打印机(加载了写啥?),LoadUserModePrinterDriver
读注册表加载驱动(graphics dll),