




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关键字: 打印 SPL EMF 文件格式 所有后打印作业完成,有几个 SPL、 SHD 和 TMP 留下 C:WinntSystem32SpoolPrinters 目录中的文件。SPL 文件是实际的后台打印 (打印作业) 文件。TMP 文件是通常与 LPR 打印作业相关联。SHD 文件提供有关哪台打印机打印作业发送到或从其打印作业一起提供的信息。 一个 SHD 文件是一个阴影文件,用于跟踪的哪些逻辑打印机 (同一编号) xxxxx.spl 文件转到。 它还包含在的队列发送到该的打印机和其他信息的文件的用户中的文件的顺序。 除非否则状态逻辑打印机设置,通常会删除这些文件。 问题: Windows的假脱机打印会在WindowsSystem32spoolPRINERS目录下生成.spl和.shd文件,其中的打印内容存贮在.spl文件中,但是.spl文件格式似乎未公开,那么如何才能将未知的.spl文件剥离成.emf文件呢? 首先,让我们了解一下Windows打印机制: 这是微软的官网的一副打印流程图片: 其中ISV是应用软件接口,IHV是硬件接口,左边是XP的打印模型,右边是Vista最新的XPS打印模型,但两者可以互相转换,具有良好的兼容性。不过,这里暂时只关心XP系统的打印过程。 网络打印过程图: 但是这些图似乎还不够详细,那么请看下面一副:(摘录于论文:基于关键字匹配的打印数据截获系统): 基本的思路是: 打印过程发生时,GDI模块和打印驱动(由打印机厂商提供)进行基本的数据交换,在假脱机设置环境下,生成打印机命令文件:.spl或.emf文件,作为一个打印池的作业,然后Windows后台打印线程处理打印作业,将数据文件送至打印机打印,打印完删除该打印文件。 好,现在回到正题:.spl文件该如何剥离成.emf呢?看一个例子: 在WinHex中打开一个.spl文件: 参考: /formats/winspool/spl中一些打印结构的定义。 首先,.spl文件都是以0x00010000签名开头,然后一个DWORD 是emf相关区的文件偏移,第3个DWORD是文档描述字符串(UNICODE)的文件偏移,第4个DWORD 描述的是端口说明字符串(UNICODE)。大致结构如下: 文件尾就是这个样子: 当定位到0x50的文件位置,读取2个DWORD数据之后,就是.emf文件开始了。.emf文件格式是公开的,而且非常简单,是一系列EMR_XXX开口结构的紧密排列,通常以EMR_HEADER(0x01)开头,以EMR_EOF(0x0E)结尾。其实我们根本没有必要去解析.emf文件格式,Windows SDK有专门显示.emf文件的API,3个函数就搞定: HENHMETAFILE hEMF = GetEnhMetaFile(EMF_DumpOK.emf); PlayEnhMetaFile (dc.m_hDC, hEMF, &rc) ; DeleteEnhMetaFile (hEMF) ;然后.spl文件还有一些东西,我现在还没有解析出来,但是.emf文件已经剥离出来了,后面的可以先不理它。 然后,开始写程序喽,因为比较简单,所以代码有点随便哦:) /rawdata/星绽紫辉 程序截图如下: 123#include4#include5#include6#include7#include8#include9usingnamespacestd;101112BOOLAnalyseFile(constchar*pszFileName);1314voidPFT(constchar*pszInfo,DWORDdwData)1516printf(%s:0x%08Xn,pszInfo,dwData);171819voidPFM(constchar*pszInfo)2021printf(%sn,pszInfo);222324voidUPFM(constwchar_tpszInfo)2526wprintf(L%sn,pszInfo);272829staticchar*ID_Func=3031EMR_HEADER,32EMR_POLYBEZIER,33EMR_POLYGON,34EMR_POLYLINE,35EMR_POLYBEZIERTO,36EMR_POLYLINETO,37EMR_POLYPOLYLINE,38EMR_POLYPOLYGON,39EMR_SETWINDOWEXTEX,40EMR_SETWINDOWORGEX,41EMR_SETVIEWPORTEXTEX,42EMR_SETVIEWPORTORGEX,43EMR_SETBRUSHORGEX,44EMR_EOF,45EMR_SETPIXELV,46EMR_SETMAPPERFLAGS,47EMR_SETMAPMODE,48EMR_SETBKMODE,49EMR_SETPOLYFILLMODE,50EMR_SETROP2,51EMR_SETSTRETCHBLTMODE,52EMR_SETTEXTALIGN,53EMR_SETCOLORADJUSTMENT,54EMR_SETTEXTCOLOR,55EMR_SETBKCOLOR,56EMR_OFFSETCLIPRGN,57EMR_MOVETOEX,58EMR_SETMETARGN,59EMR_EXCLUDECLIPRECT,60EMR_INTERSECTCLIPRECT,61EMR_SCALEVIEWPORTEXTEX,62EMR_SCALEWINDOWEXTEX,63EMR_SAVEDC,64EMR_RESTOREDC,65EMR_SETWORLDTRANSFORM,66EMR_MODIFYWORLDTRANSFORM,67EMR_SELECTOBJECT,68EMR_CREATEPEN,69EMR_CREATEBRUSHINDIRECT,70EMR_DELETEOBJECT,71EMR_ANGLEARC,72EMR_ELLIPSE,73EMR_RECTANGLE,74EMR_ROUNDRECT,75EMR_ARC,76EMR_CHORD,77EMR_PIE,78EMR_SELECTPALETTE,79EMR_CREATEPALETTE,80EMR_SETPALETTEENTRIES,81EMR_RESIZEPALETTE,82EMR_REALIZEPALETTE,83EMR_EXTFLOODFILL,84EMR_LINETO,85EMR_ARCTO,86EMR_POLYDRAW,87EMR_SETARCDIRECTION,88EMR_SETMITERLIMIT,89EMR_BEGINPATH,90EMR_ENDPATH,91EMR_CLOSEFIGURE,92EMR_FILLPATH,93EMR_STROKEANDFILLPATH,94EMR_STROKEPATH,95EMR_FLATTENPATH,96EMR_WIDENPATH,97EMR_SELECTCLIPPATH,98EMR_ABORTPATH,9969-Unknown,100101EMR_GDICOMMENT,102EMR_FILLRGN,103EMR_FRAMERGN,104EMR_INVERTRGN,105EMR_PAINTRGN,106EMR_EXTSELECTCLIPRGN,107EMR_BITBLT,108EMR_STRETCHBLT,109EMR_MASKBLT,110EMR_PLGBLT,111EMR_SETDIBITSTODEVICE,112EMR_STRETCHDIBITS,113EMR_EXTCREATEFONTINDIRECTW,114EMR_EXTTEXTOUTA,115EMR_EXTTEXTOUTW,116EMR_POLYBEZIER16,117EMR_POLYGON16,118EMR_POLYLINE16,119EMR_POLYBEZIERTO16,120EMR_POLYLINETO16,121EMR_POLYPOLYLINE16,122EMR_POLYPOLYGON16,123EMR_POLYDRAW16,124EMR_CREATEMONOBRUSH,125EMR_CREATEDIBPATTERNBRUSHPT,126EMR_EXTCREATEPEN,127EMR_POLYTEXTOUTA,128EMR_POLYTEXTOUTW,129EMR_SETICMMODE,130EMR_CREATECOLORSPACE,131EMR_SETCOLORSPACE,132EMR_DELETECOLORSPACE,133EMR_GLSRECORD,134EMR_GLSBOUNDEDRECORD,135EMR_PIXELFORMAT,136EMR_RESERVED_105,137EMR_RESERVED_106,138EMR_RESERVED_107,139EMR_RESERVED_108,140EMR_RESERVED_109,141EMR_RESERVED_110,142EMR_COLORCORRECTPALETTE,143EMR_SETICMPROFILEA,144EMR_SETICMPROFILEW,145EMR_ALPHABLEND,146EMR_SETLAYOUT,147EMR_TRANSPARENTBLT,148EMR_RESERVED_117,149EMR_GRADIENTFILL,150EMR_RESERVED_119,151EMR_RESERVED_120,152EMR_COLORMATCHTOTARGETW,153EMR_CREATECOLORSPACEW154;155156intmain()157158setlocale(LC_ALL,);159160constchar*pszFileName=C:DocumentsandSettingsjoe桌面100053.SPL;161162if(!AnalyseFile(pszFileName)163PFM(AnalyseFileFailed!);164else165PFM(AnalyseFileSuccessedCompleted!);166167return0;168169170171BOOLAnalyseFile(constchar*pszFileName)172173BOOLbRet=FALSE;174175DWORDdwStartPos=0;176177FILE*pFile=fopen(pszFileName,rb);178179if(!pFile)180181PFM(OpenFileFailed!);182returnbRet;183184185PFM(BeginAnalyse);186187PFM(1BegintoreadSPLHeaderInfo:);188189/*/*=Headers=*/190DWORDdwTmp=0;191192fseek(pFile,0,0);193194fread(&dwTmp,sizeof(DWORD),1,pFile);195196PFT(签名,dwTmp);197198199fread(&dwTmp,sizeof(DWORD),1,pFile);200201dwStartPos=dwTmp;202203PFT(正文信息偏移:,dwTmp);204205fread(&dwTmp,sizeof(DWORD),1,pFile);206207PFT(文档信息偏移(UNICODE):,dwTmp);208209longpos=ftell(pFile);210211fseek(pFile,dwTmp,SEEK_SET);212213wchar_tpszInfo256=0;214pszInfo0=L(;215216WORDwTmp;217for(inti=1;i+)218219fread(&wTmp,sizeof(wTmp),1,pFile);220221if(!wTmp)222break;223224memcpy(char*)&pszInfoi,&wTmp,sizeof(wTmp);225226pszInfoi=L);227UPFM(pszInfo);228229fseek(pFile,pos,SEEK_SET);230231fread(&dwTmp,sizeof(DWORD),1,pFile);232233PFT(打印端口信息偏移(UNICODE):,dwTmp);234235fseek(pFile,dwTmp,SEEK_SET);236237memset(pszInfo,0,sizeof(wchar_t)*256);238pszInfo0=L(;239for(i=1;i+)240241fread(&wTmp,sizeof(wTmp),1,pFile);242243if(!wTmp)244break;245246memcpy(char*)&pszInfoi,&wTmp,sizeof(wTmp);247248pszInfoi=L);249UPFM(pszInfo);250251/*/*=Unknowndatas=*/252PFM(2BegintoreadSPLUnknownDatas:);253254fseek(pFile,dwStartPos,SEEK_SET);255256fread(&dwTmp,sizeof(DWORD),1,pFile);257258PFT(未知数据,dwTmp);259260fread(&dwTmp,sizeof(DWORD),1,pFile);261262PFT(未知数据,dwTmp);263264/*/*=Recorddatas=*/265PFM(3BegintoreadRecordDatas:);266267DWORDdwTmp2=0;268for(inti=0;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏鑫氟天科技有限公司招聘1人考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025电子工业出版社有限公司招聘应届高校毕业生15人考前自测高频考点模拟试题完整答案详解
- 2025贵州务川自治县司法局、县审计局和砚山镇人民政府招聘城镇公益性岗位人员6人模拟试卷及1套完整答案详解
- 2025杭州路通环境科技有限公司招聘1人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025江苏苏州市张家港市澳洋绒线有限公司招聘1人考前自测高频考点模拟试题及参考答案详解
- 2025年绥化市明水县人民医院招聘中医医生模拟试卷及答案详解(各地真题)
- 2025年内蒙古锡林郭勒盟公安局招聘警务辅助人员考试试题含答案
- 2025年宿州学院高层次人才公开招聘39人模拟试卷及答案详解1套
- 2025年河北省秦皇岛市公安招聘警务辅助人员面试自测试题及答案解析
- 2025年江西中医药大学高层次人才招聘116人模拟试卷及答案详解(有一套)
- 2025榆林镁业(集团)有限公司招聘(9人)考试参考试题及答案解析
- GB/T 10454-2025包装非危险货物用柔性中型散装容器
- 2025年秋统编版九年级上册道德与法治全册知识点复习提纲
- 2025年秋青岛版三年级数学上册第一二单元学业质量检测试题
- 铝材厂跟单员培训课件
- 硫酸安全培训与防范课件
- BIM概述课件教学课件
- 农作物施肥精准手册
- 医疗机构医疗质量安全专项整治行动自查自纠报告
- 中建土建劳务招标标准清单编制参考
- 待灭菌物品的装载
评论
0/150
提交评论