hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3539回复:10

请教各位高手,如何编写虚拟打印驱动的Vista版本INF文件

楼主#
更多 发布于:2008-09-17 15:55
大家好!

小弟做驱动开发不久,我有一个虚拟打印的驱动,在XP下是可以正确运行的。
我按照微软提供的INF文件样例修改过以后,发现在VISTA下安装过程中会提示0x00000002错误,请教大家,这个问题该怎样解决呢??

非常希望能够得到大家的解答,非常感谢!

PS:
驱动代码应该是没有问题的,在XP下工作正常。DLL文件在WDK6000下重新编译过。

文件情况如下:
UI.DLL
UNI.DLL
vprinter.gpd
vprinter.ini

inf文件样例:

[Version]
Signature="$Windows NT$"
Provider=%Macrosoft%
LayoutFile=ntprint.inf
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
Class=Printer
DriverVer=09/09/2005,1.0.0.2

[Manufacturer]
"Microsoft"=Microsoft, NTx86

[Microsoft]
"UniDrv PT/PC Plugin Provider"    = PTPCPLPR

[Microsoft.NTx86]
"UniDrv PT/PC Plugin Provider"    = PTPCPLPR

[PTPCPLPR]
CopyFiles=@vprinter.gpd
CopyFiles=@vprinter.ini
CopyFiles=@UI.dll
CopyFiles=@UNI.dll
DataFile=vprinter.gpd
DataSection=UNIDRV_DATA
Include=NTPRINT.INF
Needs=UNIDRV.OEM,UNIDRV_DATA,TTFSUB.OEM

[SourceDisksNames]
100 = %OEMIntentSample%

[SourceDisksFiles.X86]
UI.dll  = 100,x86
UNI.dll  = 100,x86

[SourceDisksFiles]
vprinter.gpd  = 100
vprinter.ini  = 100

[DestinationDirs]
DefaultDestDir=66000

[Strings]
Macrosoft="Macrosoft<webmaster@coders.com.cn>"
OEMIntentSample="UniDrv PT/PC Plugin Provider"
achellies
驱动牛犊
驱动牛犊
  • 注册日期2008-07-09
  • 最后登录2014-08-25
  • 粉丝1
  • 关注0
  • 积分9分
  • 威望73点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-09-22 13:05
问题出在:
[SourceDisksFiles.X86]
UI.dll  = 100,x86
UNI.dll  = 100,x86
Vista下要设置成x386,这样是automatic
hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-09-22 17:23
非常感谢achellies 解答。

我重新修改了INF文件,好像之前的问题解决了,可是遇到了新的问题。

在安装过程最后阶段,在出现打印机图标后,突然提示0x000003eb错误,安装过程退出。

查看windows错误码表后,发现是“0x000003EB 无法完成这项功能”。

还盼achellies兄能够再给解答一下,这是哪里的问题。

非常感谢!

PS:我把两个DLL文件名称修改了一下。

[Version]
Signature="$Windows NT$"
Provider=%AUTHOR%
LayoutFile=ntprint.inf
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
Class=Printer
DriverVer=10/02/2007

[Manufacturer]
"Grandstream"=Grandstream

[Grandstream]
"virtual printer"=VPRINTERDRV

[VPRINTERDRV]
CopyFiles=@vprinter.gpd
CopyFiles=@vprinter.ini
CopyFiles=@UNIDRV.DLL
CopyFiles=@UNIRES.DLL
DataFile=vprinter.gpd
DataSection=UNIDRV_DATA
Include=NTPRINT.INF
Needs=UNIDRV.OEM,UNIDRV_DATA,TTFSUB.OEM

[SourceDisksNames]
100 = %OEMIntentSample%

[SourceDisksFiles]
vprinter.gpd  = 100
vprinter.ini  = 100
UNIRES.DLL   =  100
UNIDRV.DLL   =  100

[DestinationDirs]
DefaultDestDir=66000

[Strings]
AUTHOR="grandstream<webmaster@coders.com.cn>"
OEMIntentSample="UniDrv PT/PC Plugin Provider"
achellies
驱动牛犊
驱动牛犊
  • 注册日期2008-07-09
  • 最后登录2014-08-25
  • 粉丝1
  • 关注0
  • 积分9分
  • 威望73点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-09-23 10:43
修改后的inf怎么没有copy插件部分呢?

可以做个程序执行安装过程的。。。
hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-09-23 14:23
copy 插件部分??

请问achellies 兄是不是这部分?
[Microsoft]
"UniDrv PT/PC Plugin Provider"    = PTPCPLPR

[Microsoft.NTx86]
"UniDrv PT/PC Plugin Provider"    = PTPCPLPR


我已经修改为:
[Manufacturer]
"Grandstream"=Grandstream

[Grandstream]
"virtual printer"=VPRINTERDRV

[VPRINTERDRV]
CopyFiles=@vprinter.gpd
CopyFiles=@vprinter.ini
CopyFiles=@UNIDRV.DLL
CopyFiles=@UNIRES.DLL
DataFile=vprinter.gpd
DataSection=UNIDRV_DATA
Include=NTPRINT.INF
Needs=UNIDRV.OEM,UNIDRV_DATA,TTFSUB.OEM

请问还有什么插件需要复制吗?我一共就4个文件啊:vprinter.gpd、vprinter.ini、UNIDRV.DLL、UNIRES.DLL

我对驱动开发了解不深,硬着头皮做的。

还盼achellies兄能给解答一下,非常感谢!
achellies
驱动牛犊
驱动牛犊
  • 注册日期2008-07-09
  • 最后登录2014-08-25
  • 粉丝1
  • 关注0
  • 积分9分
  • 威望73点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-09-23 16:49
之前的UI.dll和UNI.dll这两个文件删掉了?
hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-09-24 09:12
改名字,改成UNIDRV.DLL 和UNIRES.DLL了
achellies
驱动牛犊
驱动牛犊
  • 注册日期2008-07-09
  • 最后登录2014-08-25
  • 粉丝1
  • 关注0
  • 积分9分
  • 威望73点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-09-24 12:43
呵呵,难怪出问题呢,UNIDRV.DLL 和UNIRES.DLL这两个文件是系统文件,你所做的驱动是定制插件的方法开发的,必须用这两个文件的,所以才会出问题了。。。。
hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-09-25 16:12
我把文件名称改回来,终于可以安装了,非常感谢achellies的帮助,非常感谢!

但是新的问题出现了,VISTA是不是不支持修改注册表啊,我的虚拟打印驱动是要写一些注册表信息的,可是看装上以后,发现注册表里没有我添加的注册表信息????
achellies
驱动牛犊
驱动牛犊
  • 注册日期2008-07-09
  • 最后登录2014-08-25
  • 粉丝1
  • 关注0
  • 积分9分
  • 威望73点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-09-26 08:08
不可能的,你调试一下看看,可以修改注册表的呀,用GetPrinterData & SetPrinterData 这两个API
hxyrobin
驱动牛犊
驱动牛犊
  • 注册日期2008-09-17
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-09-26 17:41
搞好了,非常感谢achellies 的关注,呵呵

不是驱动的问题,是VISTA系统使用UAC(用户帐户控制)模式,取消这个模式就可以了。

不过还是有点小问题,我的虚拟打印以3部分构成:打印驱动、打印服务、打印监控。

打印服务发送udp消息到打印监控程序,显示其打印状态

可是安装打印服务后,VISTA系统提示“vprinterSrv 服务标记为交互服务。但是系统配置成不允许交互服务。这项服务可能无法正常操作。”

现在不能健康打印状态了,不知道该在哪里设置??
游客

返回顶部