菜鸟求助,如何在win xp和2000下建立无法关闭的服务

diablobaal 2011-04-15 02:07:10
要求:
1、建立一个自启动的服务程序并注册
2、该服务有一个窗口,用于显示系统时间
3、服务启动后,有个托盘图标显示,单击图标显示窗口
4、该窗口程序,在任务管理器的进程中看不到该程序,或者看到该进程,但该进程无法结束

1到3我都做了,但服务启动后托盘显示不出,如何显示
服务启动后可以在任务管理器中看到该进程,如何使该进程隐藏或者无法结束

跪求例子
...全文
195 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyk120 2011-04-18
  • 打赏
  • 举报
回复
SE_SHUTDOWN_PRIVILEGE……
谁要你提这个权限的……这是关机权限,你要的是debug权限……
应该是SE_Debug_PRIVILEGE
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
我写的代码如下:
function RtlAdjustPrivilege(
Privilege : ULONG;
Enable : BOOLEAN;
CurrentThread : BOOLEAN;
Enabled : PBOOLEAN
): DWORD; stdcall; external 'ntdll.dll';

procedure RtlSetProcessIsCritical (
bNew : BOOLEAN; // new setting for process
pbOld : BOOLEAN; // pointer which receives old setting (can be null)
bNeedScb :BOOLEAN // need system critical breaks
); stdcall; external 'ntdll.dll';

调用:
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, true, true, Pointer(true));
RtlSetProcessIsCritical(TRUE, FALSE, FALSE);
调试没报错,但没效果
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
请问RtlSetProcessIsCritical函数定义的调用代码是什么
Lactoferrin 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 diablobaal 的回复:]

可以了,但正常关机也会蓝屏,我希望在任务管理器中结束进程时出现“拒绝访问”的对话框,还要能正常关机,该如何做
[/Quote]
需要退出时把进程设置为非关键进程即可
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
API HOOK如何实现,求个示例
gyk120 2011-04-18
  • 打赏
  • 举报
回复
你说的那个情况一般是SSDT HOOK,这个还是找WDK写驱动吧……
如果你不特别在意安全性,也可以考虑API HOOK,钩OpenProcess和TerminateProcess这类API
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
我的目的就是进程保护功能,不用双进程方法,不用暴力包含(无法正常关机)
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
可以了,但正常关机也会蓝屏,我希望在任务管理器中结束进程时出现“拒绝访问”的对话框,还要能正常关机,该如何做
Lactoferrin 2011-04-18
  • 打赏
  • 举报
回复
Const SE_MIN_WELL_KNOWN_PRIVILEGE=2;
SE_CREATE_TOKEN_PRIVILEGE=2;
SE_ASSIGNPRIMARYTOKEN_PRIVILEGE=3;
SE_LOCK_MEMORY_PRIVILEGE=4;
SE_INCREASE_QUOTA_PRIVILEGE=5;
SE_UNSOLICITED_INPUT_PRIVILEGE=6;
SE_MACHINE_ACCOUNT_PRIVILEGE=6;
SE_TCB_PRIVILEGE=7;
SE_SECURITY_PRIVILEGE=8;
SE_TAKE_OWNERSHIP_PRIVILEGE=9;
SE_LOAD_DRIVER_PRIVILEGE=10;
SE_SYSTEM_PROFILE_PRIVILEGE=11;
SE_SYSTEMTIME_PRIVILEGE=12;
SE_PROF_SINGLE_PROCESS_PRIVILEGE=13;
SE_INC_BASE_PRIORITY_PRIVILEGE=14;
SE_CREATE_PAGEFILE_PRIVILEGE=15;
SE_CREATE_PERMANENT_PRIVILEGE=16;
SE_BACKUP_PRIVILEGE=17;
SE_RESTORE_PRIVILEGE=18;
SE_SHUTDOWN_PRIVILEGE=19;
SE_DEBUG_PRIVILEGE=20;
SE_AUDIT_PRIVILEGE=21;
SE_SYSTEM_ENVIRONMENT_PRIVILEGE=22;
SE_CHANGE_NOTIFY_PRIVILEGE=23;
SE_REMOTE_SHUTDOWN_PRIVILEGE=24;
SE_UNDOCK_PRIVILEGE=25;
SE_SYNC_AGENT_PRIVILEGE=26;
SE_ENABLE_DELEGATION_PRIVILEGE=27;
SE_MANAGE_VOLUME_PRIVILEGE=28;
SE_IMPERSONATE_PRIVILEGE=29;
SE_CREATE_GLOBAL_PRIVILEGE=30;
Hannibal 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 diablobaal 的回复:]

SE_Debug_PRIVILEGE我试过了,报错Undeclared identifier: 'SE_DEBUG_PRIVILEGE'
[/Quote]

这个API,据说微软没有暴露出来,这个常量要自己const。
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
另外我还是不想出现蓝屏,我希望在任务管理器中结束进程时出现“拒绝访问”的对话框
diablobaal 2011-04-18
  • 打赏
  • 举报
回复
SE_Debug_PRIVILEGE我试过了,报错Undeclared identifier: 'SE_DEBUG_PRIVILEGE'
gyk120 2011-04-16
  • 打赏
  • 举报
回复
恩,我主要是偷懒,设置自身为关键进程只需要一句代码
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
提一个debug权限,ntdll导出一下就可以了
Lactoferrin 2011-04-15
  • 打赏
  • 举报
回复
RtlSetProcessIsCritical是对NtSetInformationProcess的封装,ProcessBreakOnTermination=0x1D
gyk120 2011-04-15
  • 打赏
  • 举报
回复
RtlSetProcessIsCritical,调用这个函数即可
Lactoferrin 2011-04-15
  • 打赏
  • 举报
回复
如果要显示托盘,在WinSta0\Default创建一个进程,用这个进程来显示托盘

如果要无法结束,先获得调试特权(用RtlAdjustPrivilege),然后用NtSetInformationProcess把自己的进程设置为关键进程,这样一结束就蓝屏
diablobaal 2011-04-15
  • 打赏
  • 举报
回复
有没有具体的代码
sanguomi 2011-04-15
  • 打赏
  • 举报
回复
简单点的话挂到svchost进程里去
只是多一个 svchost 进程
bdmh 2011-04-15
  • 打赏
  • 举报
回复
应该是需要提升自己的到系统级进程

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧