ciomhan
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2010-07-27
  • 粉丝0
  • 关注0
  • 积分244分
  • 威望75点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:1810回复:4

关于安装驱动的问题,40分

楼主#
更多 发布于:2005-06-08 13:51
呵呵,大家好,我在公司都是与别人合作的,自己从来没有安装过驱动。最近写了一个很简单的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]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-08 14:46
如果你的是一个纯软件驱动,根本不需要通过inf来安装,调用CreateService创建键值,把驱动拷贝到driver目录下(如在其他目录,CreateService的时候,参数指定就可以了)
StartService就可以让系统把驱动调起来。
inf反而来的麻烦
ciomhan
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2010-07-27
  • 粉丝0
  • 关注0
  • 积分244分
  • 威望75点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-08 15:07
确实是纯软件的,不涉及任何硬件,那么请问楼上的,我可不可以直接写一个注册表文件,导入到注册表里面,类似于好多FILTER的安装方式,谢谢,马上给你分,希望你能不惜吝教,说说这几种安装方式有什么不同,还有关于INF。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-08 15:33
确实是纯软件的,不涉及任何硬件,那么请问楼上的,我可不可以直接写一个注册表文件,导入到注册表里面,类似于好多FILTER的安装方式,谢谢,马上给你分,希望你能不惜吝教,说说这几种安装方式有什么不同,还有关于INF。

1。可以。和自己用CreateService原理是一样的。
2。对于硬件有关的驱动,一般就不能这么简单的实现了,必须要通过inf了
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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]
游客

返回顶部