鱼C论坛

 找回密码
 立即注册
查看: 2879|回复: 2

用Delphi编写加载和卸载驱动sys代码!

[复制链接]
发表于 2013-11-4 14:34:32 | 显示全部楼层 |阅读模式
25鱼币
希望获得用Delphi编写加载和卸载驱动sys源代码!

最佳答案

查看完整内容

帮你找到了一篇源码,希望可以帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-4 14:34:33 | 显示全部楼层
帮你找到了一篇源码,希望可以帮到你
*********************************************************************** }
{ 模块名称:MyDriver                                                         }
{ 模块功能:加载/卸载驱动程序                                                }
{ 版 本号:v1.0.0                                                           }
{ 日      期:2008-5-18                                                        }
{ *********************************************************************** }
unit MyDriver;

interface

uses
    Windows,SysUtils,Tlhelp32,WinSvc;
    {功能:加载驱动程序
     参数:sztheDriverName:驱动程序完成路径.
          szSvrName        :驱动程序名称.}
    function InstallDriver(sztheDriverName,szSvrName:string):Boolean;
    {功能:卸载驱动程序
     参数:szSvrName        :驱动程序名称.}
    function UnInstallDriver(szSvrName:string):Boolean;
   
implementation

function InstallDriver(sztheDriverName,szSvrName:string):Boolean;
var
    hServiceMgr,hServiceTwdm:SC_HANDLE;
    szDir:array[0..1023]of char;
    lpsztheDriverName,p:PChar;
begin
    ZeroMemory(@szDir,1024);
    strcopy(szDir,Pchar(sztheDriverName));
    lpsztheDriverName:=@szDir;
    {打开服务控制管理器}
    hServiceMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS );

    if hServiceMgr=0 then
      begin
        {OpenSCManager() Faild.}
        Result:=False;
        Exit;
      end;

    hServiceTwdm:=CreateService(hServiceMgr,
                                PChar(szSvrName),       {SYSTEM\CurrentControlSet\Services驱动程序的在注册表中的名字}
                                PChar(szSvrName),       {注册表驱动程序的 DisplayName 值}
                                SERVICE_ALL_ACCESS,     {加载驱动程序的访问权限}
                                SERVICE_KERNEL_DRIVER,{表示加载的服务是驱动程序}
                                SERVICE_DEMAND_START, {注册表驱动程序的 Start 值}
                                SERVICE_ERROR_IGNORE, {注册表驱动程序的 ErrorControl 值}
                                lpsztheDriverName,      {注册表驱动程序的 ImagePath 值}
                                nil,nil,nil,nil,nil);

    if hServiceTwdm=0 then
      begin
        if GetLastError()=ERROR_SERVICE_EXISTS then
          begin
            {Service Exists}
            hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS);
            if hServiceTwdm=0 then
              begin
                CloseServiceHandle(hServiceMgr);
                Result:=False;
                Exit;
              end;
          end
        else
          begin
            CloseServiceHandle(hServiceMgr);
            Result:=False;
            Exit;
          end;
      end;

    {Start the drivers}
    if hServiceTwdm<>0 then
      begin
        if StartService(hServiceTwdm,0,p)=False then
          begin
            if ERROR_SERVICE_ALREADY_RUNNING=GetLastError() then
              begin
                {no real problem}
              end
            else
              begin
                CloseServiceHandle(hServiceMgr);
                CloseServiceHandle(hServiceTwdm);
                Result:=False;
                Exit;
              end;
          end;

        CloseServiceHandle(hServiceMgr);
        CloseServiceHandle(hServiceTwdm);
      end;
     
    Result:=True;
end;

function UnInstallDriver(szSvrName:string):Boolean;
var
    hServiceMgr,hServiceTwdm:SC_HANDLE;
    SvrSta:SERVICE_STATUS;
begin
    hServiceMgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS );
    if hServiceMgr=0 then
      begin
        {OpenSCManager() Faild.}
        Result:=False;
        Exit;
      end;

    hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS );
    if hServiceTwdm=0 then
      begin
        {OpenService() Faild.}
        CloseServiceHandle(hServiceMgr);
        Result:=False;
        Exit;
      end;

    {停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。}
    if ControlService(hServiceTwdm,SERVICE_CONTROL_STOP,SvrSta)=False then
      begin
        {ControlService() Faild.}
        CloseServiceHandle(hServiceTwdm);
        CloseServiceHandle(hServiceMgr);
        Result:=False;
        Exit;
      end;
    {动态卸载驱动程序.}
    if DeleteService(hServiceTwdm)=False then
      begin
        {DeleteSrevice() Faild.}
        CloseServiceHandle(hServiceTwdm);
        CloseServiceHandle(hServiceMgr);
        Result:=False;
        Exit;
      end;

    CloseServiceHandle(hServiceTwdm);
    CloseServiceHandle(hServiceMgr);
    Result:=True;
end;

end.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-6 01:33:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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