|
发表于 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.
复制代码 |
|