阅读:999回复:0
关于驱动安装的问题(ifs)
我修改了sfiter,添加了文件隐藏功能,主要处理set information,create,querydirectory这三个派遣过程,但现在有个问题,就是如果在系统启动后启动就一切正常,如果使用自动方式就问题多多,一种是启动后services.exe进程狂吃内存,直到虚拟内存满为止,其后可以正常使用,一种是启动到桌面后系统变得反映很迟钝,我的启动注册代码如下,请各位帮着看一下,已经搞了两天了,没有什么进展,是我的注册方法不对,还是必须使用inf文件安装?:
procedure StartSvr(szSvrName:String; SYS_FILE_NAME:String; ServiceType:ULONG); var m_sManager,m_sService:SC_HANDLE; DriverName:Array[0..255] of Char; p:PChar; errCode:ULONG; state:TServiceStatus; begin m_sManager:=0; m_sService:=0; fillChar(DriverName,sizeof(DriverName),0); GetSystemDirectory(DriverName, sizeof(DriverName)); strcat(PChar(@DriverName), PChar(SYS_FILE_NAME)); m_sManager := OpenSCManager( nil, nil, SC_MANAGER_ALL_ACCESS); if (m_sManager=0) then Exit; m_sService := CreateService( m_sManager, PChar(szSvrName), PChar(szSvrName), SERVICE_ALL_ACCESS, ServiceType, SERVICE_DEMAND_START,//SERVICE_AUTO_START SERVICE_ERROR_IGNORE, DriverName, nil,nil,nil,nil,nil); try errCode:=GetLastError(); if (ERROR_SERVICE_EXISTS <> errCode) and (m_sService=0) then begin Exit; end; m_sService := OpenService(m_sManager, PChar(szSvrName), SERVICE_ALL_ACCESS); if (m_sService=0) then begin Exit; end; { FillChar(state,sizeof(state),0); if not QueryServiceStatus(m_sService,state) then Exit; if state.dwCurrentState in [SERVICE_START_PENDING,SERVICE_RUNNING,SERVICE_CONTINUE_PENDING] then Exit; } //Ready For Start Service p:=nil; if (not StartService(m_sService, 0, p)) then begin errCode:=GetLastError(); if ERROR_SERVICE_ALREADY_RUNNING=errCode then Exit; end; finally if m_sService<>0 then CloseServiceHandle(m_sService); if m_sManager<>0 then CloseServiceHandle(m_sManager); end end; |
|