挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
游戏交易就上寄售网-专注稳定-诚信赢天下玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)天下盾/国内/免实名/免备案CDN无视一切CC/DD攻击
→入驻S9企业发卡网各种全黑号辅助群:475351077 ██【我要租此广告位】██.
.. .
查看: 4655|回复: 15
打印 上一主题 下一主题

[原创] delphi加载驱动

[复制链接]

18

积分

13

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
5
海币
1817
交易币
0
跳转到指定楼层
楼主
发表于 2014-6-3 13:45:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


  1. unit untServiceMan;

  2. interface

  3. uses windows, WinSvc;

  4. type
  5.    TServiceMan = class
  6.    private
  7.      function ServiceConnect:SC_HANDLE;
  8.      function ServiceDisconn(hService:SC_HANDLE):SC_HANDLE;

  9.      function ServiceOpen(hService:SC_HANDLE; AServName:PChar):SC_HANDLE;
  10.      function ServiceClose(hService:SC_HANDLE):Boolean;

  11.      function ServiceGetStatus(hService:SC_HANDLE; AServName:PChar ):DWord;

  12.      function ServiceUninstalled(hService:SC_HANDLE; AServName:PChar):Boolean;
  13.      function ServiceRunning(hService:SC_HANDLE; AServName:PChar):Boolean;
  14.      function ServiceStopped(hService:SC_HANDLE; AServName:PChar):Boolean;
  15.    public
  16.      function ServiceInstall(AServName, ADispName, AServPath:PChar):SC_HANDLE;
  17.      function ServiceUnInstall(AServName:PChar):DWORD;
  18.      function ServiceStart(AServName:PChar):DWORD;
  19.      function ServiceStop(AServName:PChar):DWORD;
  20.    end;
  21.    
  22. implementation
  23. { TServiceMan }

  24. {**********************************************************
  25. **功能:装载服务                                           *
  26. **参数1:服务名                                            *
  27. **参数2:服务描述                                          *
  28. **参数3:服务文件的地址                                    *
  29. ***********************************************************}
  30. function TServiceMan.ServiceInstall(AServName, ADispName, AServPath: PChar): SC_HANDLE;
  31. var
  32.    hManager:SC_HANDLE;
  33. begin
  34.    result := 0;

  35.    hManager := ServiceConnect;

  36.    try
  37.      if ServiceUninstalled(hManager, AServName) then
  38.      begin
  39.        result := CreateService(hManager,
  40.                           AServName,
  41.                           ADispName,
  42.                           SERVICE_ALL_ACCESS,
  43.                           SERVICE_KERNEL_DRIVER,
  44.                           SERVICE_DEMAND_START,
  45.                           SERVICE_ERROR_NORMAL,
  46.                           AServPath,
  47.                           nil,
  48.                           nil,
  49.                           nil,
  50.                           nil,
  51.                           nil);

  52.        ServiceClose(result);            //记住关闭句柄,否则会无法卸载服务
  53.      end;
  54.    finally
  55.      ServiceDisconn(hManager);
  56.    end;
  57. end;

  58. {**********************************************************
  59. **功能:关闭打开的服务句柄                                 *
  60. **参数1:服务句柄                                          *
  61. ***********************************************************}
  62. function TServiceMan.ServiceClose(hService: SC_HANDLE): Boolean;
  63. begin
  64.    if (hService <> 0) then
  65.      result := CloseServiceHandle(hService)
  66.    else
  67.      result := True;
  68. end;

  69. {**********************************************************
  70. **功能:打开服务管理器                                     *
  71. **返回值为其句柄                                           *
  72. ***********************************************************}
  73. function TServiceMan.ServiceConnect: SC_HANDLE;
  74. begin
  75.    result := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  76. end;

  77. {**********************************************************
  78. **功能:关闭管理器句柄                                     *
  79. **参数1:服务句柄                                          *
  80. ***********************************************************}
  81. function TServiceMan.ServiceDisconn(hService: SC_HANDLE): SC_HANDLE;
  82. begin
  83.    if (hService <> 0) then
  84.      CloseServiceHandle(hService);
  85.    result := 0;
  86. end;

  87. {**********************************************************
  88. **功能:获得一个已经加载的服务的句柄                       *
  89. **参数1:管理器句柄                                        *
  90. **参数2:服务的名称                                        *
  91. ***********************************************************}
  92. function TServiceMan.ServiceOpen(hService:SC_HANDLE; AServName: PChar): SC_HANDLE;
  93. begin
  94.    result := OpenService(hService, AServName, SERVICE_ALL_ACCESS);
  95. end;

  96. {**********************************************************
  97. **功能:卸载服务                                           *
  98. **参数1:服务的名称                                        *
  99. ***********************************************************}
  100. function TServiceMan.ServiceUnInstall(AServName:PChar): DWORD;
  101. var
  102.    hService, hManager:SC_HANDLE;
  103.    ServiceStatus:TServiceStatus;
  104. begin
  105.    result := 0;

  106.    hManager := ServiceConnect;

  107.    try
  108.      if not ServiceUninstalled(hManager, AServName) then
  109.      begin
  110.        hService := ServiceOpen(hManager, AServName);

  111.        if (hService <> 0) then
  112.        begin
  113.          ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus);      //在卸载前停止服务,否则需要停止服务才能正常卸载
  114.          if DeleteService(hService) then
  115.            result := 2
  116.          else
  117.            result := 1;
  118.        end;
  119.        ServiceClose(hService);
  120.      end;
  121.    finally
  122.      ServiceDisconn(hManager);
  123.    end;
  124. end;

  125. {**********************************************************
  126. **功能:启动服务                                           *
  127. **参数1:服务的名称                                        *
  128. **返回值:     0:驱动还未安装                              *
  129.                1:驱动已启动                                *
  130.                2:驱动启动成功                              *
  131.                3:驱动启动失败                              *
  132. ***********************************************************}
  133. function TServiceMan.ServiceStart(AServName: PChar): DWORD;
  134. var
  135.    hService, hManager:SC_HANDLE;
  136. begin
  137.    result := 0;

  138.    hManager := ServiceConnect;

  139.    try
  140.      if not ServiceUninstalled(hManager, AServName) then
  141.      begin
  142.        if not ServiceRunning(hManager, AServName) then
  143.        begin
  144.          hService := ServiceOpen(hManager, AServName);

  145.          if (hService <> 0) then
  146.            if StartService(hService, 1, AServName) then          //启动服务
  147.              result := 2
  148.            else
  149.              result := 3;

  150.          ServiceClose(hService);
  151.        end
  152.        else
  153.          result := 1;
  154.      end;
  155.    finally
  156.      ServiceDisconn(hManager);
  157.    end;
  158. end;

  159. {**********************************************************
  160. **功能:停止服务                                           *
  161. **参数1:服务的名称                                        *
  162. **返回值:     0:驱动还未安装                              *
  163.                1:驱动已停止                                *
  164.                2:驱动停止成功                              *
  165.                3:驱动停止失败                              *
  166. ***********************************************************}
  167. function TServiceMan.ServiceStop(AServName: PChar): DWORD;
  168. var
  169.    hService, hManager:SC_HANDLE;
  170.    ServiceStatus:TServiceStatus;
  171. begin
  172.    result := 0;

  173.    hManager := ServiceConnect;

  174.    try
  175.      if not ServiceUninstalled(hManager, AServName) then
  176.      begin
  177.        if not ServiceStopped(hManager, AServName) then
  178.        begin
  179.          hService := ServiceOpen(hManager, AServName);

  180.          if (hService <> 0) then
  181.            if ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus) then
  182.              result := 2
  183.            else
  184.              result := 3;

  185.          ServiceClose(hService);
  186.        end
  187.        else
  188.          result := 1;
  189.      end;
  190.    finally
  191.      ServiceDisconn(hManager);
  192.    end;
  193. end;

  194. {**********************************************************
  195. **功能:获得服务的状态                                     *
  196. **参数1:管理器的句柄                                      *
  197. **参数2:服务的名称                                        *
  198. ***********************************************************}
  199. function TServiceMan.ServiceGetStatus(hService:SC_HANDLE; AServName:PChar ):DWORD;
  200. var
  201.    hService2:SC_HANDLE;
  202.    queryStatus:TServiceStatus;
  203.    dwStat:DWORD;
  204. begin
  205.    dwStat := 0;

  206.    if(hService > 0)then
  207.    begin
  208.      hService2 := ServiceOpen(hService, AServName);

  209.      if(QueryServiceStatus(hService2, queryStatus))then
  210.      begin
  211.        dwStat := queryStatus.dwCurrentState;
  212.      end;
  213.      
  214.      ServiceClose(hService2);
  215.    end;
  216.    Result := dwStat;
  217. end;

  218. {判断某服务是否安装,未安装返回true,已安装返回false}
  219. function TServiceMan.ServiceUninstalled(hService:SC_HANDLE; AServName:PChar):Boolean;
  220. begin
  221.    Result   :=   0 = ServiceGetStatus(hService, AServName);
  222. end;

  223. {判断某服务是否启动,启动返回true,未启动返回false}
  224. function TServiceMan.ServiceRunning(hService:SC_HANDLE; AServName:PChar):Boolean;
  225. begin
  226.    Result := SERVICE_RUNNING = ServiceGetStatus(hService, AServName);
  227. end;

  228. {判断某服务是否停止,停止返回true,未停止返回false}
  229. function TServiceMan.ServiceStopped(hService:SC_HANDLE; AServName:PChar):Boolean;
  230. begin
  231.    Result := SERVICE_STOPPED = ServiceGetStatus(hService, AServName);
  232. end;

  233. end.

复制代码

加载驱动.rar (1.18 KB, 下载次数: 17)

联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:IOCP网络高并发服务端类【0.0.0.3版本】
下一篇:Delphi 指針写内存字串一問
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:[email protected]),本站将立即改正。

3正式会员
244/300

244

积分

68

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
176
海币
2106
交易币
0
沙发
发表于 2014-7-9 20:55:42 | 只看该作者
看帖看完了至少要顶一下,还可以加入到淘帖哦!

38

积分

28

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
10
海币
1144
交易币
0
板凳
发表于 2014-7-24 05:00:23 | 只看该作者
哦 不错 谢谢啊

33

积分

16

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
17
海币
657
交易币
0
地板
发表于 2014-8-6 14:05:46 | 只看该作者
我抢、我抢、我抢沙发~

3

积分

3

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
0
海币
633
交易币
0
5#
发表于 2014-8-16 09:57:33 | 只看该作者
感恩无私的分享与奉献 :)

20

积分

8

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
12
海币
2417
交易币
0
6#
发表于 2014-8-26 13:39:52 | 只看该作者
新手啊,求指教 。。。。呵呵

38

积分

28

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
10
海币
1144
交易币
0
7#
发表于 2014-9-3 04:36:03 | 只看该作者
哦 不错 谢谢啊
3正式会员
128/300

128

积分

51

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
6699
交易币
0
8#
发表于 2014-12-20 17:59:56 | 只看该作者
大人,此事必有蹊跷!

86

积分

25

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
61
海币
1987
交易币
0
9#
发表于 2015-1-2 21:26:01 | 只看该作者
OMG!介是啥东东!!!

23

积分

14

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
9
海币
449
交易币
0
10#
发表于 2015-3-27 09:52:23 | 只看该作者
我也来顶一下.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2024-5-19 20:56 , Processed in 0.441086 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

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