找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7709|回复: 3

[开源] LoadDriver加载驱动代码

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2011-8-6 08:28:34 | 显示全部楼层 |阅读模式

  1. //OpenSCManager - > CreateService - > StartService 大概流程是这样...
  2.   function LoadDriver(lpService, lpFileName: string): Boolean;
  3. const
  4.   METHOD_BUFFERED = $00000000;
  5.   FILE_SPECIAL_ACCESS = $00000000;
  6.   FILE_DEVICE_FILE_SYSTEM = $00000009;
  7.   FSCTL_SET_SPARSE = FILE_DEVICE_FILE_SYSTEM shl 16 or FILE_SPECIAL_ACCESS shl 14 or 49 shl 2 or METHOD_BUFFERED;
  8. var
  9.   pStart: Pchar;
  10.   hFile: THandle;
  11.   hSC, hSvc: THandle;
  12.   BytesReturned: Cardinal;
  13.   hStatus: SERVICE_STATUS;
  14. begin
  15.   Result := False;
  16.   if not FileExists(Pchar(lpFileName)) then Exit;
  17.   hSC := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  18.   try
  19.     if hSC <> 0 then
  20.     begin
  21.       hSvc := CreateService(hSC, PChar(lpService), PChar(lpService), SERVICE_START or SERVICE_STOP, SERVICE_KERNEL_DRIVER,
  22.         SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, PChar(lpFileName), nil, nil, nil, nil, nil);
  23.       if ERROR_SERVICE_EXISTS = GetLastError() then
  24.       begin
  25.         hSvc := OpenService(hSC, PChar(lpService), SERVICE_START);
  26.       end;
  27.       StartService(hSvc, 0, pStart);
  28.       {ControlService(hSvc, SERVICE_CONTROL_STOP, hStatus);
  29.    DeleteService(hSvc); }//这里是停止和删除服务的,哈哈
  30.     end;
  31.   finally
  32.     CloseServiceHandle(hSC);
  33.   end;
  34. end;
复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

1

主题

60

回帖

0

精华

铜牌会员

积分
122
发表于 2013-1-11 19:29:59 | 显示全部楼层
感觉这种方式不稳定啊

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-15 15:12:05 | 显示全部楼层
DevilLiao 发表于 2013-1-11 19:29
感觉这种方式不稳定啊

哪裡會不穩

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-3-19 11:26:18 | 显示全部楼层
基本调用原理清晰 谢谢斑竹
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表