import win.ui; /*DSG{{*/ mainForm = win.form(text="AA驱动加载";right=470;bottom=358;acceptfiles=1) mainForm.add( button={cls="button";text="安装";left=15;top=87;right=76;bottom=111;edge=1;frame=1;z=5}; button2={cls="button";text="启动";left=105;top=87;right=166;bottom=111;edge=1;frame=1;z=6}; button3={cls="button";text="停止";left=195;top=87;right=256;bottom=111;edge=1;frame=1;z=7}; button4={cls="button";text="卸载";left=284;top=87;right=345;bottom=111;edge=1;frame=1;z=8}; button5={cls="button";text="关闭";left=374;top=87;right=435;bottom=111;edge=1;frame=1;z=9}; edit={cls="edit";left=77;top=33;right=402;bottom=61;edge=1;multiline=1;z=4}; edit2={cls="edit";left=36;top=184;right=391;bottom=312;edge=1;multiline=1;z=13}; groupbox={cls="groupbox";left=2;top=114;right=458;bottom=154;edge=1;z=11}; groupbox2={cls="groupbox";left=3;top=79;right=458;bottom=118;edge=1;z=3}; groupbox3={cls="groupbox";left=3;top=17;right=457;bottom=80;edge=1;z=2}; groupbox4={cls="groupbox";left=1;top=6;right=461;bottom=158;edge=1;z=1}; static={cls="static";text="驱动路径:";left=12;top=37;right=74;bottom=51;transparent=1;z=10}; static2={cls="static";left=8;top=126;right=444;bottom=151;transparent=1;z=12} ) /*}}*/ import process; import fsys.dlg; OpenSCManager=::Advapi32.api("OpenSCManagerW","ptr( ustring lpMachineName, ustring lpDatabaseName, INT dwDesiredAccess )") CreateService=::Advapi32.api("CreateServiceW","ptr( ptr hSCManager, ustring lpServiceName, ustring lpDisplayName, INT dwDesiredAccess, INT dwServiceType, INT dwStartType, INT dwErrorControl, ustring lpBinaryPathName, ustring lpLoadOrderGroup, ustring lpdwTagId, ustring lpDependencies, ustring lpServiceStartName, ustring lpPassword )"); StartService=::Advapi32.api("StartServiceW","int( ptr hService, INT dwNumServiceArgs, string lpServiceArgVectors )"); OpenService =::Advapi32.api("OpenServiceW","ptr( ptr hSCManager, ustring lpServiceName, INT dwDesiredAccess )"); CloseServiceHandle=::Advapi32.api("CloseServiceHandle","int( ptr hSCObject )"); ControlService=::Advapi32.api("ControlService","int( ptr hService, INT dwControl, struct lpServiceStatus )"); DeleteService=::Advapi32.api("DeleteService","int( ptr hSCObject )"); DeviceIoControl = ::Kernel32.api("DeviceIoControl","int( pointer hDevice, INT dwIoControlCode, pointer lpInBuffer, INT nInBufferSize, pointer lpOutBuffer, INT nOutBufferSize, INT& lpBytesReturned, prt lpOverlapped )"); class SERVICE_STATUS { INT dwServiceType; INT dwCurrentState; INT dwControlsAccepted; INT dwWin32ExitCode; INT dwServiceSpecificExitCode; INT dwCheckPoint; INT dwWaitHint; } 安装=function(path){ handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ mainForm.static2.text=lasterr() return ; } mainForm.edit2.print("SCM",handle) hServer=CreateService(handle, "TitanHide", "TitanHide", 0xF01FF/*_SERVICE_ALL_ACCESS*/, 0x1/*_SERVICE_KERNEL_DRIVER*/, 0x3/*_SERVICE_DEMAND_START*/, 0x0/*_SERVICE_ERROR_IGNORE*/, "I:\work\ring0\titanhide.sys", null, null, null, null, null ) mainForm.edit2.print(hServer) if hServer == null { select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="拒绝访问" CloseServiceHandle(handle) return -1; } case 0x431/*_ERROR_SERVICE_EXISTS*/ { hServer = OpenService(handle,"TitanHide", 0xF0003/*_SERVER_ALL_ACCESS*/); if (hServer == NULL){ return -1; } } case 0x7B/*_ERROR_INVALID_NAME*/{ mainForm.static2.text="指定的服务名称无效" return -1; } case 6/*_ERROR_INVALID_HANDLE*/{ mainForm.static2.text="指定的服务控制管理器数据库的句柄无效。" return -1; } else{ mainForm.static2.text="错误" CloseServiceHandle(handle) return -2; } } } mainForm.static2.text="驱动服务安装成功" CloseServiceHandle(handle) CloseServiceHandle(hServer) } 启动=function(hServer){ if type(hServer)=="pointer"{ if !StartService(hServer,0,null){ //mainForm.static2.text="启动驱动失败" select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有SERVICE_START访问权限。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="该句柄无效。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 3/*_ERROR_PATH_NOT_FOUND*/ { mainForm.static2.text="找不到服务二进制文件。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x420/*_ERROR_SERVICE_ALREADY_RUNNING*/ { mainForm.static2.text="服务的实例已运行。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41F/*_ERROR_SERVICE_DATABASE_LOCKED*/ { mainForm.static2.text="数据库已锁定。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x433/*_ERROR_SERVICE_DEPENDENCY_DELETED*/ { mainForm.static2.text="该服务取决于不存在或标记为要删除的服务。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x42C/*_ERROR_SERVICE_DEPENDENCY_FAIL*/ { mainForm.static2.text="该服务依赖于另一个未能启动的服务。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x422/*_ERROR_SERVICE_DISABLED*/ { mainForm.static2.text="服务已被禁用。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x42D/*_ERROR_SERVICE_LOGON_FAILED*/ { mainForm.static2.text="由于登录失败而无法启动服务。 如果服务配置为在没有“以服务身份登录”的帐户下运行,则会发生此错误" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x430/*_ERROR_SERVICE_MARKED_FOR_DELETE*/ { mainForm.static2.text="服务已被标记为要删除。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41E/*_ERROR_SERVICE_NO_THREAD*/ { mainForm.static2.text="无法为服务创建线程。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/ { mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能在控制处理程序函数中被阻止。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } } } } } 停止=function(hServer){ if type(hServer)="point"{ if !ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,status){ select(GetLastError()) { case 0x426/*_ERROR_SERVICE_NOT_ACTIVE*/ { mainForm.static2.text="该服务尚未启动。" return -1; } case 0x41B/*_ERROR_DEPENDENT_SERVICES_RUNNING*/ { mainForm.static2.text="无法停止该服务,因为其他正在运行的服务依赖于它。" return -1; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有所需的访问权限" return -1; } case 0x57/*_ERROR_INVALID_PARAMETER*/ { mainForm.static2.text="请求的控制代码未定义。" return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/{ mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能会在控制处理程序函数中被阻止。" return -1; } case 0x45B/*_ERROR_SHUTDOWN_IN_PROGRESS*/ { mainForm.static2.text="系统正在关闭。" return -1; } } } } } 卸载=function(name){ hServer=打开服务("TitanHide") mainForm.edit2.print(type(hServer)) if type(hServer)=="pointer"{ if !DeleteService(hServer){ select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有 DELETE 访问权限。" } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄无效。" } case 0x430/*_ERROR_SERVICE_MARKED_FOR_DELETE*/ { mainForm.static2.text="指定的服务已被标记为要删除。" } } } mainForm.static2.text="删除驱动服务安装成功" CloseServiceHandle(hServer) } } 打开服务=function(name){ var handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ //mainForm.static2.text=lasterr() CloseServiceHandle(handle) return -6; } var hServer = OpenService(handle,name, 0xF0003/*_SERVER_ALL_ACCESS*/); if (hServer == NULL){ //mainForm.edit2.print(GetLastError()) select(GetLastError()) { case 0x424/*_ERROR_SERVICE_DOES_NOT_EXIST*/ { mainForm.static2.text="指定的服务不存在。" CloseServiceHandle(handle) return -1 ; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄无权访问服务。" CloseServiceHandle(handle) return -2; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄无效。" CloseServiceHandle(handle) return -3; } case 0x7B/*_ERROR_INVALID_NAME*/ { mainForm.static2.text="指定的服务名称无效。" CloseServiceHandle(handle) return -4; } } }else{ CloseServiceHandle(handle) return hServer; } } 控制服务=function(hServer,code){ if code==null{ return -1; } /*控制代码 128~255 自定义代码 1 通知服务应停止。 hService 句柄必须具有SERVICE_STOP访问权限。将停止请求发送到服务后,不应将其他控件发送到服务。 2 通知服务应暂停。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 3 通知暂停的服务应恢复。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 4 通知服务应将其当前状态信息报告给服务控制管理器。 hService 句柄必须具有SERVICE_INTERROGATE访问权限。请注意,此控件通常不有用,因为 SCM 知道服务的当前状态。 6 通知服务其启动参数已更改。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 7 通知网络服务有一个新组件用于绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 8 通知网络服务已删除绑定组件。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 9 通知网络服务已启用禁用的绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 a 通知网络服务已禁用其中一个绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 */ var ptr=SERVICE_STATUS()//创建一个结构体对象 //ptr=topointer(ptr) //prt=raw.convert(ptr,) //ptr=raw.realloc(60) mainForm.edit2.print(type(ptr)) hServer=打开服务("TitanHide") mainForm.edit2.dump(hServer) if type(hServer)=="pointer"{ if !ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,ptr){ select(GetLastError()) { case 0x426/*_ERROR_SERVICE_NOT_ACTIVE*/ { mainForm.static2.text="该服务尚未启动。" return -1; } case 0x41B/*_ERROR_DEPENDENT_SERVICES_RUNNING*/ { mainForm.static2.text="无法停止该服务,因为其他正在运行的服务依赖于它。" CloseServiceHandle(hServer) return -1; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有所需的访问权限" CloseServiceHandle(hServer) return -1; } case 0x57/*_ERROR_INVALID_PARAMETER*/ { mainForm.static2.text="请求的控制代码未定义。" CloseServiceHandle(hServer) return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/{ mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能会在控制处理程序函数中被阻止。" CloseServiceHandle(hServer) return -1; } case 0x45B/*_ERROR_SHUTDOWN_IN_PROGRESS*/ { mainForm.static2.text="系统正在关闭。" CloseServiceHandle(hServer) return -1; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄未使用 CreateService 或 OpenService 获取,或者句柄不再有效。" CloseServiceHandle(hServer) return -1; } case 0x425/*_ERROR_SERVICE_CANNOT_ACCEPT_CTRL*/ { mainForm.static2.text="由于服务的状态 为SERVICE_STOPPED、 SERVICE_START_PENDING或 SERVICE_STOP_PENDING,因此无法将请求的控制代码发送到服务。" CloseServiceHandle(hServer) return -1; } case 0x41C/*_ERROR_INVALID_SERVICE_CONTROL*/ { mainForm.static2.text="请求的控制代码无效或服务无法接受该控制代码" CloseServiceHandle(hServer) return -1; } } } } } mainForm.button.oncommand = function(id,event){ 安装() } mainForm.button2.oncommand = function(id,event){ hServer=打开服务("TitanHide") 启动(hServer) } mainForm.edit.oncommand = function(id,event){ if path==null{ path=fsys.dlg.open("*.sys","选择驱动文件","c:\") mainForm.edit.text=path } return ; } mainForm.button4.oncommand = function(id,event){ ret=卸载(hServer) mainForm.edit2.print(ret) } mainForm.onDropFiles = function(files){ //mainForm.edit2.print(files[1]) mainForm.edit.text=files[1] } mainForm.button3.oncommand = function(id,event){ 控制服务("TitanHide",1) } mainForm.show(); return win.loopMessage(); /** loaddriver=function(path){ //hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); OpenSCManager=::Advapi32.api("OpenSCManagerW","ptr( ustring lpMachineName, ustring lpDatabaseName, INT dwDesiredAccess )") CreateService=::Advapi32.api("CreateServiceW","ptr( ptr hSCManager, ustring lpServiceName, ustring lpDisplayName, INT dwDesiredAccess, INT dwServiceType, INT dwStartType, INT dwErrorControl, ustring lpBinaryPathName, ustring lpLoadOrderGroup, ustring lpdwTagId, ustring lpDependencies, ustring lpServiceStartName, ustring lpPassword )"); StartService=::Advapi32.api("StartServiceW","int( ptr hService, INT dwNumServiceArgs, string lpServiceArgVectors )"); OpenService =::Advapi32.api("OpenServiceW","ptr( ptr hSCManager, ustring lpServiceName, INT dwDesiredAccess )"); CloseServiceHandle=::Advapi32.api("CloseServiceHandle","int( ptr hSCObject )"); ControlService=::Advapi32.api("ControlService","int( ptr hService, INT dwControl, pointer lpServiceStatus )"); DeleteService=::Advapi32.api("DeleteService","int( ptr hSCObject )"); /* dwServiceType 服务类型有 SERVICE_ADAPTER 0x00000004 保留。 SERVICE_FILE_SYSTEM_DRIVER 0x00000002 文件系统驱动程序服务。 SERVICE_KERNEL_DRIVER 0x00000001 驱动程序服务。 SERVICE_RECOGNIZER_DRIVER 0x00000008 保留。 SERVICE_WIN32_OWN_PROCESS 0x00000010 在其自己的进程中运行的服务。 SERVICE_WIN32_SHARE_PROCESS 0x00000020 与一个或多个其他服务共享进程的服务 dwStartType参数有 SERVICE_AUTO_START 0x00000002 在系统启动期间服务控制管理器自动启动的服务。 有关详细信息,请参阅 “自动启动服务”。 SERVICE_BOOT_START 0x00000000 系统加载程序启动的设备驱动程序。 此值只对驱动程序服务有效。 SERVICE_DEMAND_START 0x00000003 进程调用 StartService 函数时由服务控制管理器启动的服务。 有关详细信息,请参阅 “按需启动服务”。 SERVICE_DISABLED 0x00000004 无法启动的服务。 尝试启动服务会导致错误代码 ERROR_SERVICE_DISABLED。 SERVICE_SYSTEM_START 0x00000001 IoInitSystem 函数启动的设备驱动程序。 此值只对驱动程序服务有效。 dwErrorControl 参数有 SERVICE_ERROR_CRITICAL 0x00000003 如果可能,启动程序会在事件日志中记录错误。 如果启动最后一个已知良好的配置,启动操作将失败。 否则,系统会使用上次已知的良好配置重启系统。 SERVICE_ERROR_IGNORE 0x00000000 启动程序将忽略错误并继续启动操作。 SERVICE_ERROR_NORMAL 0x00000001 启动程序在事件日志中记录错误,但会继续启动操作。 SERVICE_ERROR_SEVERE 0x00000002 启动程序在事件日志中记录错误。 如果启动最后一个已知良好的配置,启动操作将继续。 否则,系统会使用最后一个已知良好的配置重启系统。 */ handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ winform.editChange.print(lasterr()) return ; } //winform.editChange.print(handle) hServer=CreateService(handle, "TitanHide", "TitanHide", 0xF01FF/*_SERVICE_ALL_ACCESS*/, 0x1/*_SERVICE_KERNEL_DRIVER*/, 0x3/*_SERVICE_DEMAND_START*/, 0x0/*_SERVICE_ERROR_IGNORE*/, "I:\work\ring0\titanhide.sys", null, null, null, null, null ) //winform.editChange.print(hServer) if hServer == null { select(GetLastError()) { case 5 { winform.editChange.print("拒绝访问") CloseServiceHandle(handle) return -1; } case 0x431/*_ERROR_SERVICE_EXISTS*/ { hService = OpenService(handle,"TitanHide", 0xF0003/*_SERVER_ALL_ACCESS*/); if (hService == NULL){ return -1; } } else{ mainForm.static2.text="错误" CloseServiceHandle(handle) return -2; } } } if !StartService(hServer,0,null){ mainForm.static2.text="启动驱动失败" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -3; } class SERVICE_STATUS { INT dwServiceType; INT dwCurrentState; INT dwControlsAccepted; INT dwWin32ExitCode; INT dwServiceSpecificExitCode; INT dwCheckPoint; INT dwWaitHint; } status=raw.struct(SERVICE_STATUS) ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,status) } **/ import win.ui; /*DSG{{*/ mainForm = win.form(text="AA驱动加载";right=470;bottom=358;acceptfiles=1) mainForm.add( button={cls="button";text="安装";left=15;top=87;right=76;bottom=111;edge=1;frame=1;z=5}; button2={cls="button";text="启动";left=105;top=87;right=166;bottom=111;edge=1;frame=1;z=6}; button3={cls="button";text="停止";left=195;top=87;right=256;bottom=111;edge=1;frame=1;z=7}; button4={cls="button";text="卸载";left=284;top=87;right=345;bottom=111;edge=1;frame=1;z=8}; button5={cls="button";text="关闭";left=374;top=87;right=435;bottom=111;edge=1;frame=1;z=9}; edit={cls="edit";left=77;top=33;right=402;bottom=61;edge=1;multiline=1;z=4}; edit2={cls="edit";left=36;top=184;right=391;bottom=312;edge=1;multiline=1;z=13}; groupbox={cls="groupbox";left=2;top=114;right=458;bottom=154;edge=1;z=11}; groupbox2={cls="groupbox";left=3;top=79;right=458;bottom=118;edge=1;z=3}; groupbox3={cls="groupbox";left=3;top=17;right=457;bottom=80;edge=1;z=2}; groupbox4={cls="groupbox";left=1;top=6;right=461;bottom=158;edge=1;z=1}; static={cls="static";text="驱动路径:";left=12;top=37;right=74;bottom=51;transparent=1;z=10}; static2={cls="static";left=8;top=126;right=444;bottom=151;transparent=1;z=12} ) /*}}*/ import process; import fsys.dlg; OpenSCManager=::Advapi32.api("OpenSCManagerW","ptr( ustring lpMachineName, ustring lpDatabaseName, INT dwDesiredAccess )") CreateService=::Advapi32.api("CreateServiceW","ptr( ptr hSCManager, ustring lpServiceName, ustring lpDisplayName, INT dwDesiredAccess, INT dwServiceType, INT dwStartType, INT dwErrorControl, ustring lpBinaryPathName, ustring lpLoadOrderGroup, ustring lpdwTagId, ustring lpDependencies, ustring lpServiceStartName, ustring lpPassword )"); StartService=::Advapi32.api("StartServiceW","int( ptr hService, INT dwNumServiceArgs, string lpServiceArgVectors )"); OpenService =::Advapi32.api("OpenServiceW","ptr( ptr hSCManager, ustring lpServiceName, INT dwDesiredAccess )"); CloseServiceHandle=::Advapi32.api("CloseServiceHandle","int( ptr hSCObject )"); ControlService=::Advapi32.api("ControlService","int( ptr hService, INT dwControl, struct lpServiceStatus )"); DeleteService=::Advapi32.api("DeleteService","int( ptr hSCObject )"); DeviceIoControl = ::Kernel32.api("DeviceIoControl","int( pointer hDevice, INT dwIoControlCode, pointer lpInBuffer, INT nInBufferSize, pointer lpOutBuffer, INT nOutBufferSize, INT& lpBytesReturned, prt lpOverlapped )"); class SERVICE_STATUS { INT dwServiceType; INT dwCurrentState; INT dwControlsAccepted; INT dwWin32ExitCode; INT dwServiceSpecificExitCode; INT dwCheckPoint; INT dwWaitHint; } 安装=function(path){ handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ mainForm.static2.text=lasterr() return ; } mainForm.edit2.print("SCM",handle) hServer=CreateService(handle, "TitanHide", "TitanHide", 0xF01FF/*_SERVICE_ALL_ACCESS*/, 0x1/*_SERVICE_KERNEL_DRIVER*/, 0x3/*_SERVICE_DEMAND_START*/, 0x0/*_SERVICE_ERROR_IGNORE*/, "I:\work\ring0\titanhide.sys", null, null, null, null, null ) mainForm.edit2.print(hServer) if hServer == null { select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="拒绝访问" CloseServiceHandle(handle) return -1; } case 0x431/*_ERROR_SERVICE_EXISTS*/ { hServer = OpenService(handle,"TitanHide", 0xF0003/*_SERVER_ALL_ACCESS*/); if (hServer == NULL){ return -1; } } case 0x7B/*_ERROR_INVALID_NAME*/{ mainForm.static2.text="指定的服务名称无效" return -1; } case 6/*_ERROR_INVALID_HANDLE*/{ mainForm.static2.text="指定的服务控制管理器数据库的句柄无效。" return -1; } else{ mainForm.static2.text="错误" CloseServiceHandle(handle) return -2; } } } mainForm.static2.text="驱动服务安装成功" CloseServiceHandle(handle) CloseServiceHandle(hServer) } 启动=function(hServer){ if type(hServer)=="pointer"{ if !StartService(hServer,0,null){ //mainForm.static2.text="启动驱动失败" select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有SERVICE_START访问权限。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="该句柄无效。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 3/*_ERROR_PATH_NOT_FOUND*/ { mainForm.static2.text="找不到服务二进制文件。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x420/*_ERROR_SERVICE_ALREADY_RUNNING*/ { mainForm.static2.text="服务的实例已运行。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41F/*_ERROR_SERVICE_DATABASE_LOCKED*/ { mainForm.static2.text="数据库已锁定。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x433/*_ERROR_SERVICE_DEPENDENCY_DELETED*/ { mainForm.static2.text="该服务取决于不存在或标记为要删除的服务。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x42C/*_ERROR_SERVICE_DEPENDENCY_FAIL*/ { mainForm.static2.text="该服务依赖于另一个未能启动的服务。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x422/*_ERROR_SERVICE_DISABLED*/ { mainForm.static2.text="服务已被禁用。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x42D/*_ERROR_SERVICE_LOGON_FAILED*/ { mainForm.static2.text="由于登录失败而无法启动服务。 如果服务配置为在没有“以服务身份登录”的帐户下运行,则会发生此错误" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x430/*_ERROR_SERVICE_MARKED_FOR_DELETE*/ { mainForm.static2.text="服务已被标记为要删除。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41E/*_ERROR_SERVICE_NO_THREAD*/ { mainForm.static2.text="无法为服务创建线程。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/ { mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能在控制处理程序函数中被阻止。" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -1; } } } } } 停止=function(hServer){ if type(hServer)="point"{ if !ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,status){ select(GetLastError()) { case 0x426/*_ERROR_SERVICE_NOT_ACTIVE*/ { mainForm.static2.text="该服务尚未启动。" return -1; } case 0x41B/*_ERROR_DEPENDENT_SERVICES_RUNNING*/ { mainForm.static2.text="无法停止该服务,因为其他正在运行的服务依赖于它。" return -1; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有所需的访问权限" return -1; } case 0x57/*_ERROR_INVALID_PARAMETER*/ { mainForm.static2.text="请求的控制代码未定义。" return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/{ mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能会在控制处理程序函数中被阻止。" return -1; } case 0x45B/*_ERROR_SHUTDOWN_IN_PROGRESS*/ { mainForm.static2.text="系统正在关闭。" return -1; } } } } } 卸载=function(name){ hServer=打开服务("TitanHide") mainForm.edit2.print(type(hServer)) if type(hServer)=="pointer"{ if !DeleteService(hServer){ select(GetLastError()) { case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有 DELETE 访问权限。" } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄无效。" } case 0x430/*_ERROR_SERVICE_MARKED_FOR_DELETE*/ { mainForm.static2.text="指定的服务已被标记为要删除。" } } } mainForm.static2.text="删除驱动服务安装成功" CloseServiceHandle(hServer) } } 打开服务=function(name){ var handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ //mainForm.static2.text=lasterr() CloseServiceHandle(handle) return -6; } var hServer = OpenService(handle,name, 0xF0003/*_SERVER_ALL_ACCESS*/); if (hServer == NULL){ //mainForm.edit2.print(GetLastError()) select(GetLastError()) { case 0x424/*_ERROR_SERVICE_DOES_NOT_EXIST*/ { mainForm.static2.text="指定的服务不存在。" CloseServiceHandle(handle) return -1 ; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄无权访问服务。" CloseServiceHandle(handle) return -2; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄无效。" CloseServiceHandle(handle) return -3; } case 0x7B/*_ERROR_INVALID_NAME*/ { mainForm.static2.text="指定的服务名称无效。" CloseServiceHandle(handle) return -4; } } }else{ CloseServiceHandle(handle) return hServer; } } 控制服务=function(hServer,code){ if code==null{ return -1; } /*控制代码 128~255 自定义代码 1 通知服务应停止。 hService 句柄必须具有SERVICE_STOP访问权限。将停止请求发送到服务后,不应将其他控件发送到服务。 2 通知服务应暂停。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 3 通知暂停的服务应恢复。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 4 通知服务应将其当前状态信息报告给服务控制管理器。 hService 句柄必须具有SERVICE_INTERROGATE访问权限。请注意,此控件通常不有用,因为 SCM 知道服务的当前状态。 6 通知服务其启动参数已更改。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 7 通知网络服务有一个新组件用于绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 8 通知网络服务已删除绑定组件。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 9 通知网络服务已启用禁用的绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 a 通知网络服务已禁用其中一个绑定。 hService 句柄必须具有SERVICE_PAUSE_CONTINUE访问权限。 但是,此控制代码已被弃用;请改用即插即用功能。 */ var ptr=SERVICE_STATUS()//创建一个结构体对象 //ptr=topointer(ptr) //prt=raw.convert(ptr,) //ptr=raw.realloc(60) mainForm.edit2.print(type(ptr)) hServer=打开服务("TitanHide") mainForm.edit2.dump(hServer) if type(hServer)=="pointer"{ if !ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,ptr){ select(GetLastError()) { case 0x426/*_ERROR_SERVICE_NOT_ACTIVE*/ { mainForm.static2.text="该服务尚未启动。" return -1; } case 0x41B/*_ERROR_DEPENDENT_SERVICES_RUNNING*/ { mainForm.static2.text="无法停止该服务,因为其他正在运行的服务依赖于它。" CloseServiceHandle(hServer) return -1; } case 5/*_ERROR_ACCESS_DENIED*/ { mainForm.static2.text="句柄没有所需的访问权限" CloseServiceHandle(hServer) return -1; } case 0x57/*_ERROR_INVALID_PARAMETER*/ { mainForm.static2.text="请求的控制代码未定义。" CloseServiceHandle(hServer) return -1; } case 0x41D/*_ERROR_SERVICE_REQUEST_TIMEOUT*/{ mainForm.static2.text="服务的进程已启动,但它未调用 StartServiceCtrlDispatcher,或者调用 StartServiceCtrlDispatcher 的线程可能会在控制处理程序函数中被阻止。" CloseServiceHandle(hServer) return -1; } case 0x45B/*_ERROR_SHUTDOWN_IN_PROGRESS*/ { mainForm.static2.text="系统正在关闭。" CloseServiceHandle(hServer) return -1; } case 6/*_ERROR_INVALID_HANDLE*/ { mainForm.static2.text="指定的句柄未使用 CreateService 或 OpenService 获取,或者句柄不再有效。" CloseServiceHandle(hServer) return -1; } case 0x425/*_ERROR_SERVICE_CANNOT_ACCEPT_CTRL*/ { mainForm.static2.text="由于服务的状态 为SERVICE_STOPPED、 SERVICE_START_PENDING或 SERVICE_STOP_PENDING,因此无法将请求的控制代码发送到服务。" CloseServiceHandle(hServer) return -1; } case 0x41C/*_ERROR_INVALID_SERVICE_CONTROL*/ { mainForm.static2.text="请求的控制代码无效或服务无法接受该控制代码" CloseServiceHandle(hServer) return -1; } } } } } mainForm.button.oncommand = function(id,event){ 安装() } mainForm.button2.oncommand = function(id,event){ hServer=打开服务("TitanHide") 启动(hServer) } mainForm.edit.oncommand = function(id,event){ if path==null{ path=fsys.dlg.open("*.sys","选择驱动文件","c:\") mainForm.edit.text=path } return ; } mainForm.button4.oncommand = function(id,event){ ret=卸载(hServer) mainForm.edit2.print(ret) } mainForm.onDropFiles = function(files){ //mainForm.edit2.print(files[1]) mainForm.edit.text=files[1] } mainForm.button3.oncommand = function(id,event){ 控制服务("TitanHide",1) } mainForm.show(); return win.loopMessage(); /** loaddriver=function(path){ //hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); OpenSCManager=::Advapi32.api("OpenSCManagerW","ptr( ustring lpMachineName, ustring lpDatabaseName, INT dwDesiredAccess )") CreateService=::Advapi32.api("CreateServiceW","ptr( ptr hSCManager, ustring lpServiceName, ustring lpDisplayName, INT dwDesiredAccess, INT dwServiceType, INT dwStartType, INT dwErrorControl, ustring lpBinaryPathName, ustring lpLoadOrderGroup, ustring lpdwTagId, ustring lpDependencies, ustring lpServiceStartName, ustring lpPassword )"); StartService=::Advapi32.api("StartServiceW","int( ptr hService, INT dwNumServiceArgs, string lpServiceArgVectors )"); OpenService =::Advapi32.api("OpenServiceW","ptr( ptr hSCManager, ustring lpServiceName, INT dwDesiredAccess )"); CloseServiceHandle=::Advapi32.api("CloseServiceHandle","int( ptr hSCObject )"); ControlService=::Advapi32.api("ControlService","int( ptr hService, INT dwControl, pointer lpServiceStatus )"); DeleteService=::Advapi32.api("DeleteService","int( ptr hSCObject )"); /* dwServiceType 服务类型有 SERVICE_ADAPTER 0x00000004 保留。 SERVICE_FILE_SYSTEM_DRIVER 0x00000002 文件系统驱动程序服务。 SERVICE_KERNEL_DRIVER 0x00000001 驱动程序服务。 SERVICE_RECOGNIZER_DRIVER 0x00000008 保留。 SERVICE_WIN32_OWN_PROCESS 0x00000010 在其自己的进程中运行的服务。 SERVICE_WIN32_SHARE_PROCESS 0x00000020 与一个或多个其他服务共享进程的服务 dwStartType参数有 SERVICE_AUTO_START 0x00000002 在系统启动期间服务控制管理器自动启动的服务。 有关详细信息,请参阅 “自动启动服务”。 SERVICE_BOOT_START 0x00000000 系统加载程序启动的设备驱动程序。 此值只对驱动程序服务有效。 SERVICE_DEMAND_START 0x00000003 进程调用 StartService 函数时由服务控制管理器启动的服务。 有关详细信息,请参阅 “按需启动服务”。 SERVICE_DISABLED 0x00000004 无法启动的服务。 尝试启动服务会导致错误代码 ERROR_SERVICE_DISABLED。 SERVICE_SYSTEM_START 0x00000001 IoInitSystem 函数启动的设备驱动程序。 此值只对驱动程序服务有效。 dwErrorControl 参数有 SERVICE_ERROR_CRITICAL 0x00000003 如果可能,启动程序会在事件日志中记录错误。 如果启动最后一个已知良好的配置,启动操作将失败。 否则,系统会使用上次已知的良好配置重启系统。 SERVICE_ERROR_IGNORE 0x00000000 启动程序将忽略错误并继续启动操作。 SERVICE_ERROR_NORMAL 0x00000001 启动程序在事件日志中记录错误,但会继续启动操作。 SERVICE_ERROR_SEVERE 0x00000002 启动程序在事件日志中记录错误。 如果启动最后一个已知良好的配置,启动操作将继续。 否则,系统会使用最后一个已知良好的配置重启系统。 */ handle=OpenSCManager(null,null,0xF003F/*_SC_MANAGER_ALL_ACCESS*/) if handle == null{ winform.editChange.print(lasterr()) return ; } //winform.editChange.print(handle) hServer=CreateService(handle, "TitanHide", "TitanHide", 0xF01FF/*_SERVICE_ALL_ACCESS*/, 0x1/*_SERVICE_KERNEL_DRIVER*/, 0x3/*_SERVICE_DEMAND_START*/, 0x0/*_SERVICE_ERROR_IGNORE*/, "I:\work\ring0\titanhide.sys", null, null, null, null, null ) //winform.editChange.print(hServer) if hServer == null { select(GetLastError()) { case 5 { winform.editChange.print("拒绝访问") CloseServiceHandle(handle) return -1; } case 0x431/*_ERROR_SERVICE_EXISTS*/ { hService = OpenService(handle,"TitanHide", 0xF0003/*_SERVER_ALL_ACCESS*/); if (hService == NULL){ return -1; } } else{ mainForm.static2.text="错误" CloseServiceHandle(handle) return -2; } } } if !StartService(hServer,0,null){ mainForm.static2.text="启动驱动失败" CloseServiceHandle(hServer) CloseServiceHandle(handle) return -3; } class SERVICE_STATUS { INT dwServiceType; INT dwCurrentState; INT dwControlsAccepted; INT dwWin32ExitCode; INT dwServiceSpecificExitCode; INT dwCheckPoint; INT dwWaitHint; } status=raw.struct(SERVICE_STATUS) ControlService(hServer,1/*_SERVICE_CONTROL_STOP*/,status) } **/