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)
}
**/