本地打印的流程:
1. 应用程序
2. GDI引擎
3. 本地打印提供者(localspl.dll)
4. 如果是EMF格式交给EMF打印处理器(winprint.dll)转成RAW格式下面是到打印处理的函数栈
063df19c73d542b7 05f3e188 063df30c 00000000winprint!PrintDocumentOnPrintProcessor(FPO: [Non-Fpo])
063df1bc 6149c35c 0663737c063df30c 00b06a4aPrintIsolationProxy!sandbox::PrintProcessor::PrintDocThroughPrintProcessor+0x49(FPO: [Non-Fpo])
063df228 6149b052 00ad6744 063df30c00b06a4alocalspl!sandbox::PrintProcessorExecuteObserver::PrintDocThroughPrintProcessor+0x84(FPO: [Non-Fpo])
063df244 61499d20 00ad6744 063df30c00b06a4alocalspl!sandbox::PrintProcessorAdapterImpl::PrintDocumentOnPrintProcessor+0x27(FPO: [Non-Fpo])
063df270 61460400 00aa3960 063df30c0018c938localspl!sandbox::PrintProcessorAdapter::PrintDocumentOnPrintProcessor+0x77(FPO: [Non-Fpo])
063df950 614615fe 00aa4f20063df970 00000000 localspl!PrintDocumentThruPrintProcessor+0x3bd (FPO:[Non-Fpo])
063dfbb0 76161174 00aa4f20063dfbfc 77d1b3f5localspl!PortThread+0x41c(FPO: [Non-Fpo])
063dfbbc 77d1b3f5 00aa4f20 70896cd8 00000000 kernel32!BaseThreadInitThunk+0xe(FPO: [Non-Fpo])
063dfbfc 77d1b3c8614611e2 00aa4f2000000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
063dfc14 00000000 614611e2 00aa4f2000000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
5. 本地打印提供者SplWriterPrinter函数
ChildEBP RetAddr Args toChild
063de2f000db9295 05f3cba8 01b70000 00002b64 localspl!SplWritePrinter(FPO: [Non-Fpo])
063de308 00da8f7e 05f20620 01b70000 00002b64spoolsv!WritePrinter+0x2c (FPO:[Non-Fpo])
063de324 738bc27a 05f20620 01b70000 00002b64spoolsv!YWritePrinter+0x2b (FPO: [Non-Fpo])
063de374 738c150e003991f4 000000007b03d19b winspool!FlushBuffer+0xee (FPO: [Non-Fpo])
063de3c46d57cf9f 003991f4 00000000 00000002 winspool!GetJobW+0x36 (FPO:[Non-Fpo])
WARNING: Stack unwind information not available. Following frames maybe wrong.
063de57c6d57de7e 00d40008 063de598 00d40008 hpvpldrv09+0xcf9f
063de5a4 6d577f25 00d40008 06c30034 ffffffff hpvpldrv09+0xde7e
063de5c064e5ee13 00d40008 06c30034ff7fffff hpvpldrv09+0x7f25
063de5d8 64e5fcc4 00d40008 06c3003406499738 UNIDRV!DrvEnableDriver+0x5401
063de5f8 763d1a16 00d40008 06c30034 063def08 UNIDRV!DrvEnableDriver+0x62b2
063de630 77e43829 063dee98 063de648 00000004GDI32!GdiPrinterThunk+0x753 (FPO: [Non-Fpo])
063dee80 77d0642e 063dee98 0000001c063def20 USER32!__ClientPrinterThunk+0x28 (FPO: [Non-Fpo])
063deeb0 76406825 763f7c2cb42103eb 00000000 ntdll!KiUserCallbackDispatcher+0x2e (FPO: [0,0,0])