阅读:1810回复:4
关于安装驱动的问题,40分
呵呵,大家好,我在公司都是与别人合作的,自己从来没有安装过驱动。最近写了一个很简单的monitor程序,编译通过,可是我实在不知道怎么安装,我用DDK给的工具:geninf做了一个INF文件,右键安装,没有报错,可是驱动程序也没有拷贝到system32/drivers目录下,注册表里面也是什么都没有。谁能告诉我应该怎么做,谢谢。
inf文件如下,请指教: ; ; Created by GenINF. ; ; [Version] Signature = \"$Windows NT$\" Class=System ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} Provider=%sc% CatalogFile=hello.cat DriverVer= 6/8/2005 [DestinationDirs] hanmonitor.Files.x86_12 = 12 [SourceDisksNames.x86] 0=%Desc_x860% [SourceDisksNames.ia64] [SourceDisksFiles.x86] AppMonitor.sys=0,\\work\\sunqi\\code32\\objchk_wxp_x86\\i386, [SourceDisksFiles.ia64] [Manufacturer] %sc%=sc [sc] %hanmonitorDesc%=hanmonitor_Inst,0x10000 [hanmonitor_Inst.ntx86] CopyFiles = hanmonitor.Files.x86_12 [hanmonitor_Inst.ntx86.Services] AddService = AppMonitor,0x00000002,hanmonitor_Service_Instx86, [hanmonitor_Service_Instx86] ServiceType = %SERVICE_KERNEL_DRIVER% StartType = %SERVICE_SYSTEM_START% ErrorControl = %SERVICE_ERROR_NORMAL% ServiceBinary = %12%\\AppMonitor.sys [hanmonitor.Files.x86_12] |
|
沙发#
发布于:2005-06-08 14:46
如果你的是一个纯软件驱动,根本不需要通过inf来安装,调用CreateService创建键值,把驱动拷贝到driver目录下(如在其他目录,CreateService的时候,参数指定就可以了)
StartService就可以让系统把驱动调起来。 inf反而来的麻烦 |
|
板凳#
发布于:2005-06-08 15:07
确实是纯软件的,不涉及任何硬件,那么请问楼上的,我可不可以直接写一个注册表文件,导入到注册表里面,类似于好多FILTER的安装方式,谢谢,马上给你分,希望你能不惜吝教,说说这几种安装方式有什么不同,还有关于INF。
|
|
地板#
发布于:2005-06-08 15:33
确实是纯软件的,不涉及任何硬件,那么请问楼上的,我可不可以直接写一个注册表文件,导入到注册表里面,类似于好多FILTER的安装方式,谢谢,马上给你分,希望你能不惜吝教,说说这几种安装方式有什么不同,还有关于INF。 1。可以。和自己用CreateService原理是一样的。 2。对于硬件有关的驱动,一般就不能这么简单的实现了,必须要通过inf了 |
|
地下室#
发布于:2005-06-13 23:11
建议你把自安装的程序封在动态库或静态库中,在程序开始时首先获得应用程序所在的路径,并把相应的*.sys文件续在路径后面,然后调用OpenSCManager打开服务管理器,在调用CreateService创建服务,最后在调用OpenService和StartService启动服务。部分例程如下:
SC_HANDLE scHandle=NULL,hDriver=NULL; HANDLE devHandle; char drvPath[256]; char drvName[12]=\"portio\",drvFileName[12]=\"portio.sys\"; LPSERVICE_STATUS SCstatus=NULL; int err; if(drvstarted==FALSE) { //打开服务管理器 scHandle=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(scHandle==NULL) return SC_MANAGER_ERR; //创建服务 GetModuleFileName(0,drvPath,256); *(strrchr(drvPath,\'\\\\\')+1)=\'\\0\'; strcat(drvPath,drvFileName); hDriver = CreateService(scHandle, drvName, drvName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, drvPath, NULL, NULL, NULL, NULL, NULL); //启动驱动程序服务 hDriver=OpenService(scHandle,drvName,SERVICE_ALL_ACCESS); StartService(hDriver, 0, NULL); 为了省点地方,错误处理省略 [编辑 - 6/13/05 by bobbysun2000] |
|