在NT/2000中怎么禁用Ctrl+Alt+Delete?(不能用gina,键盘驱动)
远程控制软件需要不重新启动而动态禁用/启用Ctrl+Alt+Delete 问题点数:300、回复次数:164Top
1 楼slwqw(四大名捕之追杀令)回复于 2002-10-21 19:33:26 得分 300
目前最流行的做法就是动态Hook GINA里边的函数WlxLoggedOnSAS,然后返回WLX_SAS_ACTION_NONE以达到目的,如果不能使用GINA,不知道还能有什么妙法!
关注!Top
2 楼nevergrief(孤独骑士)回复于 2002-10-21 19:35:24 得分 0
好吓人的问题,居然还不能用gina,建议你还是想办法去要微软的内部资料吧。否则,实在太难了。
帮你UpTop
3 楼nevergrief(孤独骑士)回复于 2002-10-21 19:38:12 得分 0
哈哈哈,拔掉键盘行不行??没用使用gina,键盘驱动。
想个办法,禁用键盘的那个PS口(好像是这个名称),行不行??Top
4 楼slwqw(四大名捕之追杀令)回复于 2002-10-21 19:41:36 得分 0
还有,能不能说一下你的目的,是不是为了防止别人关闭你的程序?如果是这样,那就算屏蔽Ctrl + Alt + Del也没有用!使用任何一个进程管理器都可以关闭你的程序!并非一定要使用2000里边的进程管理器!
目前在2000下面防止程序被别人关闭的方法似乎就只有两种:
1、Hook NtQuerySystemInformatoin。
2、使用远程注入技术把程序挂接到别的进程。
不过实现起来都比较麻烦。Top
5 楼suplxun(大刘)回复于 2002-10-21 20:53:12 得分 0
为什么不考虑屏蔽Ctrl + Alt + Del键(可以只屏蔽其中一个键)Top
6 楼zhuwenzheng(卧薪尝胆)回复于 2002-10-22 10:49:52 得分 0
旁听Top
7 楼slwqw(四大名捕之追杀令)回复于 2002-10-22 12:10:03 得分 0
贴主怎么不露面了?:)Top
8 楼mostneed(黙黙)回复于 2002-10-22 12:14:05 得分 0
此类问题实在是太多,查查以前的帖子吧。Top
9 楼JennyVenus()回复于 2002-10-22 12:16:17 得分 0
把键盘的驱动改了Top
10 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 12:27:26 得分 0
不使用gina的原因是其他应用程序可能也替换gina(甚至微软自己的补丁也会),而且可能和未来版本的系统补丁有兼容性问题
参见MSDN知识库
Q195027 STOP 0xC000021A in Winlogon Caused by PCAnywhere
Q229033 Programs That Replace Msgina.dll May Cause "STOP 0x0000001E" Error Message
Q192298 Third Party GINAs May Fail with Service Pack 4 Causing STOP 0x21A in WINLOGON
Q164486 Winlogon May Fail if the Third-Party Gina.dll File is Missing or Corrupted
Q180854 Access Violation in Winlogon with Third-Party Gina.dll
组策略中的HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System \DisableTaskMgr策略在2000下似乎不能动态启用/禁用
to nevergrief :注意我不是要禁用键盘,是要动态禁用/启用Ctrl+Alt+Delete组合键,其他的键可能可以使用(视设置而定)
to BCB_FANS:我要防止用户使用任务管理器。当然我的程序也不能被关闭,谢谢你的信息
to suplxun:系统组合键输入的时候不会发送键盘消息。Top
11 楼panch(江湖小子)回复于 2002-10-22 12:32:49 得分 0
用HOOK不就完了Top
12 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 12:33:21 得分 0
to jennyvenus:请看标题是什么Top
13 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 12:33:55 得分 0
to panch:这个组合键不能被HOOKTop
14 楼nevergrief(孤独骑士)回复于 2002-10-22 13:29:24 得分 0
to jiangsheng(蒋晟.Net) 大哥
前面都是我在看玩笑。也怪你自己没有说清楚前因后果,其实这个问题早就有人搞定了呀!(因为屏蔽三键很难,而防止用户使用任务管理器又是另外一回事)
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
我都试过了,没有问题,动态控制防止用户使用任务管理器。并且你右键点击底下任务栏,那个任务管理器的菜单都是灰的。
应该说搞定没有问题了吧!!!Top
15 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 13:56:01 得分 0
这个代码早就看过了,参见MSDN杂志,2002年第9期 C++ Q&A
http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/default.aspx
在我的2000上不能正常工作Top
16 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 13:57:03 得分 0
这个代码早就看过了,在我的2000上不能禁用任务管理器。
参见MSDN杂志,2002年第9期 C++ Q&A
http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/default.aspx
Top
17 楼slwqw(四大名捕之追杀令)回复于 2002-10-22 13:57:57 得分 0
To : nevergrief(孤独骑士)
嘿嘿,你试一试Ctrl + Shift + Esc组合键,看看什么出来了?这个组合键的级别估计跟Ctrl + Alt + Del一样高,可能使用xx_LL低级沟子也沟不住(因为没有编写过,不知道是否能沟得住)。Top
18 楼slwqw(四大名捕之追杀令)回复于 2002-10-22 14:32:19 得分 0
搞定!!!既不编写GINA也不编写DRIVER。
详细讨论看这个帖子。
http://www.driverdevelop.com/forum/html_22833.html?1035268121Top
19 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 15:36:52 得分 0
好像是用类似病毒的方法……会不会被杀毒软件杀掉?Top
20 楼slwqw(四大名捕之追杀令)回复于 2002-10-22 16:20:15 得分 0
老大啊,我上面已经说过了,我这种方法只能禁止用户使用Ctrl + Alt + Del和Ctrl + Shift + Esc组合键。
如果用户想真正关闭你的程序,他可以使用别的进程管理器来关闭。所以要想被关闭看来只好Hook NTDDLL.DLL里边的NtQuerySystemInformation了,虽然远程注入技术也很热门,不过我看了大多数的例子,好象都只是执行一小段代码,真正把一个巨大的EXE注入没有见过。
关于API Hook,网上资料就更多了,MS的Detours库有全部的源代码。Top
21 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-22 16:52:41 得分 0
NtQuerySystemInformation好像是未公开的API?
先Hook了再说
Top
22 楼slwqw(四大名捕之追杀令)回复于 2002-10-22 17:09:30 得分 0
理论倒是知道了,但是真正实现就比较麻烦了,最近又太忙,郁闷ing...,我尽可能快点搞定吧!请耐心等待...Top
23 楼xuefl66(xuefl66)回复于 2002-10-22 22:27:08 得分 0
关注中。。。Top
24 楼nevergrief(孤独骑士)回复于 2002-10-23 10:01:22 得分 0
嘿嘿,老大,毛主席说的:没有调查就没有发言权!
您想禁止Ctrl+Alt+Del三键的目的不就是为了禁止任务管理器吗?
所以只要能禁止任务管理器,不禁止三键又有什么关系?
老大,拜托你好好试试,可以吗?
我说的那个没有问题,连那个Ctrl + Shift + Esc一起禁止了。
也就是说,以下完全符合你的要求!!!
你再不动手试试,我要生气了!!!!!!!
真不知是你着急还是我着急。
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
另外,Ctrl + Shift + Esc没甚么,xx_ll一样能勾住,不信你自己试试。
我源代码都写好了。请下载:
ftp://pub:pub@211.157.101.157/Hook和hotKey.rar
ftp://pub:pub@211.157.101.157/Hook和hotKey源码.rar
另外,我的环境是win2k pro, vs6Top
25 楼nevergrief(孤独骑士)回复于 2002-10-23 10:06:37 得分 0
To : BCB_FANS(四大名捕之追杀令)
>>嘿嘿,你试一试Ctrl + Shift + Esc组合键,看看什么出来了?这个组合键的级别估计跟Ctrl + Alt + Del一样高,可能使用xx_LL低级沟子也沟不住(因为没有编写过,不知道是否能沟得住)。
嘿嘿,你这几句话里,充满了"估计","可能","没编过","不知道","试一试"
也不知到底是谁应该"试一试"???
Top
26 楼nevergrief(孤独骑士)回复于 2002-10-23 10:15:37 得分 0
to jiangsheng(蒋晟.Net)
老大,我想不通为什么你的机子上不能禁用任务管理器???
我这里真的没有什么问题。
你下载试试吧(编译好的可执行文件),拜托了!!!
简直看着我都着急。
ftp://pub:pub@211.157.101.157/1.rarTop
27 楼slwqw(四大名捕之追杀令)回复于 2002-10-23 11:28:08 得分 0
1、http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
拜托,老兄,看清楚一点,人家说的是“Windows XP”。“此代码示范在Windows XP中如何实现屏蔽CTRL+ALT+DEL组合键序列...”。不要以为2000跟XP是一个样的!!!
2、ftp://pub:pub@211.157.101.157/Hook和hotKey.rar
ftp://pub:pub@211.157.101.157/Hook和hotKey源码.rar
是能沟住了,但是是采用替换GINA的方法实现的,”GinaDLL -> NoReboot.DLL”。楼主已经事先声明了,不能使用GINA,老兄没有看到吗?????????
3、ftp://pub:pub@211.157.101.157/1.rar
是不是就是这个程序http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309的EXE文件?任务管理器倒是不能使用了,不过是通过修改注册实现的,而不是通过程序实现的!!!
Regmon.log
....
TrapKeys.exe:292 SetValue HKCU\...\Policies\System\DisableTaskMgr SUCCESS 0x1
TrapKeys.exe:292 DeleteValueKey HKCU\...\Policies\System\DisableTaskMgr SUCCESS
......
=======================
不过我倒是希望你看一下我的方案,怎样在2000下面真正屏蔽Ctrl + Alt + Del(如果愿意,也可以屏蔽Ctrl + Shift + Del)
http://www.driverdevelop.com/forum/html_22833.html?1035268121
=======================
我的平台:在Windows 2000 Professional中文版 + SP3中文版
Top
28 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-23 11:50:13 得分 0
to BCB_FANS(四大名捕之追杀令)
你的程序也不能锁掉Ctrl+Alt+Delete?我试了好几台计算机都不行
都是中文Win2KProSp3Top
29 楼slwqw(四大名捕之追杀令)回复于 2002-10-23 14:17:42 得分 0
1、有没有把RemoteDll.Dll拷贝到\Winnt\System32目录下面?
2、如果真的不行,请楼主自己监视输出文件
//SAS窗口的窗口过程
LRESULT CALLBACK SASWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//请把这些消息输出到文件中,看看按Ctrl + Alt + Del时触发什么消息
MsgList->Add("Msg: Wnd = " + IntToHex((int)hwnd,8) + " Msg = " + IntToHex((int)uMsg,8));
//屏蔽Ctrl + Alt + Del
.........
return CallWindowProc(FOldProc,hwnd,uMsg,wParam,lParam);
}
//---------------------------------------------------------------------------
===================
有几位朋友跟我要了那份代码,他们都没有向我反映不能Hook的情况。
Top
30 楼nevergrief(孤独骑士)回复于 2002-10-23 15:02:09 得分 0
to BCB_FANS(四大名捕之追杀令)
1、http://www.vckbase.com/document/viewdoc.asp?id=424
xp与2000当然有区别,但是这个程序在我的两台机子都没有问题!!!!
而且两个机子一个装了2kpro,一个是server,都没有问题。
2、ftp://pub:pub@211.157.101.157/Hook和hotKey.rar
ftp://pub:pub@211.157.101.157/Hook和hotKey源码.rar
我虽然用了Gina,但是屏蔽Ctrl + Shift + Esc组合键,并不需要Gina,不信你把源代码里的
HANDLE hMutex = CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL");
屏蔽掉试试,我已经试了。
确实不需要Gina,就可以屏蔽但是屏蔽Ctrl + Shift + Esc组合键!!!!
(但是按ctrl_alt_del后,依然可以使用任务管理器功能)
你没有仔细看源码,也不能怪你!
3、ftp://pub:pub@211.157.101.157/1.rar
是不是通过注册表我倒没注意,因为我没看源码。
不过我觉得,只要能解决问题,为什么不让用注册表????
争来争去,我头都大了,我本来就是个菜鸟。只是刚好几个例子都做过,所以才来说了几句。以前还请教过你们两位呢!
要么今天晚上约个时间,大家一起试试吧!
小弟QQ:76628305
MSN:nevergrief@hotmail.com
网易泡泡: nevergrief@163.com (今天申请的,很好用,还可以免费发短信).http://popo.163.com/
或者去某个聊天室也行。
Top
31 楼slwqw(四大名捕之追杀令)回复于 2002-10-23 15:56:15 得分 0
我们不是争来争去,只是希望找到一种统一的方法而已。
==============
现在我们不必讨论了!!!楼主的主要目的就是为了防止程序被关闭,无论是禁止Ctrl + Alt + Del还是禁止任务管理器,都无法达到目的,如果用户真正想关闭称许1,他可以找另外一个进程管理器来关闭。
现在的目的就是Hook掉NtQuerySystemInformation。只要成功了,楼主目的就算是达到了!Top
32 楼nevergrief(孤独骑士)回复于 2002-10-23 16:17:15 得分 0
ftp://pub:pub@211.157.101.157/1.rar
不过我觉得,只要能解决问题,为什么不让用注册表????
唉,想不通想不通想不通想不通想不通!
-----------------------------------------
那个xx_LL能勾住Ctrl + Shift + Esc组合键。。。Top
33 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-23 16:33:44 得分 0
目的1 程序运行中不允许从外部关闭
目的2 某任务执行中不允许从外部关闭、注销和重新启动计算机
Top
34 楼nevergrief(孤独骑士)回复于 2002-10-23 18:04:45 得分 0
我已经死心了。Top
35 楼alphapiao(奉旨灌水钦差)回复于 2002-10-24 08:40:56 得分 0
关注,UP中。Top
36 楼mengxihe(濛溪河)回复于 2002-10-24 09:54:14 得分 0
搬个凳子来,好好学习学习~Top
37 楼kingzai(stevenzhu)回复于 2002-10-24 15:22:48 得分 0
第一个问题应该可以用hook API的方法解决.
hook 该进程的OpenProcess,TerminateProcess函数可以使它程序运行中不允许从外部关闭,hook Api的代码可以参考codeguru "hijack".我没有试过hook OpenProcess,但在网上确实看到有人已经做过.
Top
38 楼slwqw(四大名捕之追杀令)回复于 2002-10-24 17:48:35 得分 0
1、关于Ctrl + Alt + Del
完全可以
我在 Win2K Pro SP1 SvrSP1 AdvSvr SP2 三个版本下都试了可以,
就是不能 UnHook, 不起作用,我在论坛上已提出问题了!
谢谢!
> 郭征,您好!
>
> 不好意思,有人反应在2000不能截获Ctrl + Alt + Del,所以向老兄问一下情况,到底能不能截获?请务必回信,谢谢!
>
> BCB_FANS(四大名捕之追杀令) 14:18
>
> 在 2002-10-23 11:04:00 您写道:
> >谢谢,太感谢了!
> >无名小卒!
> >
> >> 郭征,您好!
> >>
> >> 老兄是哪一位?我怎么没有一点印象:)
> >>
> >> 把RunPkg.Zip里边的RemoteDll.DLL拷贝到\Winnt\System32目录下面,就可以运行了Prject1.exe进行测试了。
> >>
> >> BCB_FANS(四大名捕之追杀令) 2002-10-22 16:52
> >>
> >>
>
> 致
> 礼!
>
> slwqw
> slwqw@163.com
>
>
>
>
2、关于Hook NtQuerySystemInformation,使用MS的Detour库已经搞定,可以在所有的进程管理器中隐藏自己,已经发了邮件,注意查收。
3、某任务执行中不允许从外部关闭、注销和重新启动计算机
不关闭可以,但是注销、重启吗?除非把2000的任务栏屏蔽了,不然怎么能阻止用户执行操作“开始->关机->注销 Administrator”呢?Top
39 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-24 20:55:23 得分 0
任务栏已经搞定了,Hook之后Ctrl+Alt+Delete也可以屏蔽了,但是但是好像UnHook没有起作用
明天去法庭,没时间看Hook NtQuerySystemInformation的了,谢谢你的代码Top
40 楼nevergrief(孤独骑士)回复于 2002-10-25 13:35:56 得分 0
哦,去法庭干什么?Top
41 楼nevergrief(孤独骑士)回复于 2002-10-25 13:36:29 得分 0
还有,老大,问题解决了把答案贴出来啊。Top
42 楼tonnyue(伊然)回复于 2002-10-26 20:58:40 得分 0
关注Top
43 楼kwiner(ak.net)回复于 2002-10-26 21:07:36 得分 0
要想屏蔽任务管理器还不简单
枚举所有运行中的窗口,发现窗口标题是“Windows 任务管理器"
就向它发送关闭消息,我编写的相关程序就是采用这种方法Top
44 楼atm2001(松鼠)回复于 2002-10-26 22:17:24 得分 0
用远程线程
把Winlogo.exe进程的键盘消息api挂了。。。如果是Ctrl+Alt+Del的消息就不给源函数。。。呵呵。。。Top
45 楼xuefl66(xuefl66)回复于 2002-10-29 08:15:55 得分 0
see
see!!!Top
46 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-30 09:55:15 得分 0
如何清除注入的代码?Top
47 楼slwqw(四大名捕之追杀令)回复于 2002-10-30 10:13:48 得分 0
根据“郭征”地测试,是程序跟“瑞星”冲突了,导致程序不能正常远程卸载RemoteDLL.Dll,所以Unhook之后Ctrl + Alt + Del仍然起作用!只是令人感到奇怪地是,我这里也运行了瑞星,但是还是可以正常卸载!所以这个问题无法进行测试.......
瑞星实时监控会不会是把程序当成“病毒”了?
楼主能不能自己进行测试一下?Top
48 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-30 14:55:23 得分 0
我这里运行的是Norton Antivirus?
Hook NtQuerySystemInformation已经成功隐藏进程。Top
49 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-10-30 15:11:11 得分 0
启动任务管理器的时候出现内存不能为Read错误?Top
50 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-01 11:34:32 得分 0
Hook NtQuerySystemInformation已经成功隐藏进程(但是只在我的计算机上成功过一次,在其他计算机上会造成任务管理器崩溃)Top
51 楼wj59(wj59)回复于 2002-11-01 13:37:17 得分 0
UP吧Top
52 楼slwqw(四大名捕之追杀令)回复于 2002-11-02 16:02:56 得分 0
1、我分别使用“瑞星2002增强版”,“瑞星2003”,“金山毒霸2003”,“Norton AntiVirus 2002”进行了测试,发现还是能正常卸载,我实在想不出哪里有问题。不过我还是做了一个带有调试功能的版本,重新发给你测试一下,看看错误代码是什么!然后再告诉我!
2、关于Hook NtQuerySystemInformation。我上一次的版本是使用MS的Detours编写的,它实际上是在目标函数的前5个字节插入JMP指令跳转到自己的函数以得到控制权。关于这种方法的缺点,Jetfrey Richter在他的书《Windows核心编程》里边已经给出了详细的解释,他同时也给出另外一种方法,就是更改模块的引入函数地址表(IAT)。现在我以他的代码为基础重写了Hook部分,如果还是有问题,那我也没辙了!
上面的代码都已经通过邮件发出,请注意查收!
Top
53 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-02 19:29:37 得分 0
收到了……你改了什么?现在两个都可以用了(虽然不知道为什么两个都可以用了)
我回了一封email。Top
54 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-02 19:52:24 得分 0
用新的project1.exe测试旧的dll的时候报告加注卸载线程成功,卸载失败Top
55 楼slwqw(四大名捕之追杀令)回复于 2002-11-02 22:01:05 得分 0
1、关于Ctrl + Alt + Del,我真看不出新版本跟旧版本有什么不同,我发了新版本源代码给你,你自己看看这两个版本有什么不同。
2、关于Hook NtQuerySystemInformatoin,倒是有两个不同:
(1)旧版本的实现代码跟新版本完全不一样,一个是在函数前面插入JMP指令,一个是更改模块的引入函数地址表。
(2)旧版本没有在自定义的函数中添加结构化异常处理,但是新版本添加了。
============
新版本Ctrl + Alt + Del源代码已经发出,注意查收!Top
56 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-02 22:31:50 得分 0
收到,谢谢
下周上XP测试一下……Top
57 楼smhpnuaa(天将降大任于斯人也!)回复于 2002-11-04 16:04:35 得分 0
gina挺好的,要想不被替换,可以在gina退出的时候再写一次注册表!
禁止任务管理器只需要写注册表啊。Top
58 楼kathywp(树欲静而风不止)回复于 2002-11-04 16:26:25 得分 0
大家搞笑呢吧,呵呵!
告诉大家一个简单的方法:
if("ctrl+alt+delete") return false;
不就行了
忘处理大小写了,嘿嘿!
(注:孤独骑士是对的)Top
59 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-04 18:33:34 得分 0
to smhpnuaa(天将降大任于斯人也!) 替换系统文件始终是不安全的,理由已经说过了,在这里再说一遍
不使用gina的原因是其他应用程序可能也替换gina(甚至微软自己的补丁也会),而且可能和未来版本的系统补丁有兼容性问题
to BCB_FANS(四大名捕之追杀令)
可能是VC数据类型和BCB不同,你的代码不能成功移植到VC?Top
60 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-04 18:58:48 得分 0
最后一步建立远程线程时WinLogon出错Top
61 楼slwqw(四大名捕之追杀令)回复于 2002-11-04 19:03:22 得分 0
我来转换!!!Top
62 楼d992901(沉思)回复于 2002-11-04 20:13:09 得分 0
老大们,把源程序也给我一份把,我现在也在作关于ctrl+alt+del的项目,要求按下后弹出对话框,输入密码可用,我想用钩子钩住啊,但是我不会!!给我一份源码把,我好好研究一下。谢谢啦!!
我的邮箱 d992901@sina.comTop
63 楼slwqw(四大名捕之追杀令)回复于 2002-11-04 23:26:43 得分 0
转换完了,我也差不多被VC弄疯了!!!95%的时间都花在怎样使用类CString上面:(
1、建立一个“A simple Dll Project”类型的DLL。
2、在Dll.Cpp中输入 CString Str,
(1)编译错误:
#include "stdafx.h"
Dll.cpp(7) : error C2146: syntax error : missing ';' before identifier 'Str'
Dll.cpp(7) : error C2501: 'CString' : missing storage-class or type specifiers
Dll.cpp(7) : fatal error C1004: unexpected end of file found
(2)改为
//#include "stdafx.h"
#include <afx.h>
继续错:
atal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.
(3)同时包括
#include "stdafx.h"
#include <afx.h>
还是错:
afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
Error executing cl.exe.
靠!服了!!!最后不得不使用STL里边的string类,楼主说一说这种错误到底是怎么回事?
Top
64 楼slwqw(四大名捕之追杀令)回复于 2002-11-04 23:30:52 得分 0
To : d992901(三胖子)
我的代码只能屏蔽,至于怎样显示自己的对话框,我也不知道!
不过间接的方法倒是有一个,就是接收到消息时,向主窗口发送消息,然后主窗口再显示对话框!理论上可以,但是不敢肯定一定行得通!Top
65 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-05 17:30:20 得分 0
要使用CString的话,建立DLL的时候选择MFC支持就可以了。#include <afx.h>不是必要的
今天又去法院了,明天开始测试……Top
66 楼slwqw(四大名捕之追杀令)回复于 2002-11-05 23:30:29 得分 0
致命的BUG!!!!!
原来变量IsHook分别在Hook和Unhook里边设置其值,现在发现这个值必须移到HookFunc和UnhookFunc里边设置,否则程序一跳到自己的GetProcAddresss之后就返回了,达不到目的!
DLL_EXP_IMP int _cdecl Hook(DWORD dwSelfProcessID_P)
{
.......
IsHook = true;
.......
}
//---------------------------------------------------------------------------
DLL_EXP_IMP int _cdecl Unhook()
{
.......
IsHook = false;
.......
}
//---------------------------------------------------------------------------
移到下面的函数里边设置:
int __fastcall HookFunc()
{
IsHook = true;
.....
}
//---------------------------------------------------------------------------
int __fastcall UnhookFunc()
{
IsHook = false;
...........
}
//---------------------------------------------------------------------------
Top
67 楼RomanticProgrammer() 兰企鹅||南极俺最帅 ()回复于 2002-11-05 23:44:25 得分 0
我来学习.....BCB版的高人BCB_FANS在这里啊...Top
68 楼RomanticProgrammer() 兰企鹅||南极俺最帅 ()回复于 2002-11-05 23:45:14 得分 0
看了这个帖子,才知道自己有多菜啊....根本看不懂啊...自卑ingTop
69 楼Li_Dinosaur(朋友)回复于 2002-11-06 10:39:13 得分 0
up;)Top
70 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-06 14:02:31 得分 0
测试失败……错误依旧……
发回代码ing……Top
71 楼slwqw(四大名捕之追杀令)回复于 2002-11-06 20:43:21 得分 0
楼主怎么这么粗心啊?
卸载失败的原因是什么?Top
72 楼zhenxizhou(东门行)回复于 2002-11-06 20:49:23 得分 0
gzTop
73 楼microran2000(什么时候才能看到星星?)回复于 2002-11-06 21:11:40 得分 0
http://www.vchelp.net/vchelp/zsrc/dists.asp?type_id=25&class_id=1&cata_id=2&article_id=458
禁止Win32平台的任务切换
Windows 提供的多任务机制使得用户可以自由地在多个应用程序间自由切换,每一个应用程序作为一个进程都拥有独立的进程地址空间。各个程序之间互不影响,特别是在windows NT 环境下,一个应用程序的挂起,一般不会影响其它程序的运行,操作系统可以很轻松地把挂起的进程杀死,从而使系统得到正常响应。然而这种机制同时也会助长了用户同时运行多个程序,开多个窗口,从而使系统不堪重负,反应迟缓,这对于普通的个人用机不会有什么影响,但对于工业实时控制计算机而言,情况就大不一样。由于Windows NT 并不是一个实时的操作系统,一个程序的运行尽管不会直接影响其它程序,但是如果它对系统资源如CPU、内存占用过多,就会直接影响其它程序的快速响应,比如完全格式化一个质量不好的软盘、浏览次品光盘、刻录光盘、复制大文件等等。因此对于运行重要程序的计算机而言,重要程序应该独占系统资源,禁止任务切换,以便提高系统的实时性和可靠性,以防意外事件发生。另外对于文献检索的公共机房,机房工作人员一般也不希望检索人员来回切换程序。
1). 在Win9x环境下,应用程序可以通过不同的参数调用SystemParametersInfo函数,实现允 许和禁止任务切换。方法如下:
UINT nPreviousState;
// Disables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0);
// Enables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0);
只是应用程序退出前,必须恢复允许任务切换状态。
2). 对于Windows NT 4.0 Service Pack 3机器更高版本,包括Windows 2000和Whister (windows XP),应用程序可以通过安装低级键盘钩子(WH_KEYBOARD_LL)实现禁止任务切换。在windows 9x/Me环境下不起作用。
#define _WIN32_WINNT 0x0400
#include
HHOOK hhkLowLevelKybd;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam)
{KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
BOOL bControlKeyDown = 0;
switch (nCode)
case HC_ACTION:
// Check to see if the CTRL key is pressed
bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
// Disable CTRL+ESC
if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
return 1;
// Disable ALT+TAB
if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
return 1;
// Disable ALT+ESC
if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
return 1;
break;
default:
break;
return CallNextHookEx (hhkLowLevelKybd, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{
// Install the low-level keyboard & mouse hooks
hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardProc, hinstExe, 0);
// Keep this app running until we're told to stop
MessageBox(NULL,
TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.")
TEXT("Click "Ok" to terminate this application and re-enable these keys."),
TEXT("Disable Low-Level Keys"), MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd);
return(0);
}
3).在NT环境下还有一种方法,通过枚举窗口,禁止除当前窗口以外所有窗口,程序退出前,恢复这些窗口为允许状态,这种方法同时适用于Windows9X和Windows NT所有版本,只是无法禁止Ctrl+ESC键。
// DisableTaskSwitch.cpp : Defines the entry point for the application.
//
#define _WIN32_WINNT 0x0400
#include
typedef struct _DLONG
{
LONG wParam;
LONG lParam;
}DLONG;
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszClassName = "szClassDisableTaskSwitch";
RegisterClassEx(&wcex);
HWND hWnd;
hWnd = CreateWindow("szClassDisableTaskSwitch", "Disable Task Switch", WS_OVERLA
PPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
return FALSE;
BOOL old;
DLONG dlong;
dlong.wParam = (WPARAM)hWnd;
dlong.lParam = (LPARAM)FALSE;
EnumWindows(EnumWindowsProc , (LONG)&dlong);
//Deceive the OS by communicating that the application is a screen //saver.
//This disables the ALT + TAB /ESC keys.
SystemParametersInfo(SPI_SCREENSAVERRUNNING,TRUE,&old,0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message) {
case WM_SYSCOMMAND:
if(wParam ==SC_MINIMIZE)return 0;
return DefWindowProc(hWnd, message, wParam, lParam);
break;
case WM_DESTROY:
DLONG dlong;
BOOL Old;
dlong.lParam = (LPARAM)TRUE;
dlong.wParam = (WPARAM)hWnd;
EnumWindows(EnumWindowsProc,(LONG)&dlong);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,FALSE,&Old,0);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DLONG *pDlong = (DLONG *) lParam;
BOOL bEnable = (BOOL)pDlong->lParam;
if(hwnd != (HWND)pDlong->wParam)
EnableWindow(hwnd,bEnable);
return TRUE;
}
Top
74 楼microran2000(什么时候才能看到星星?)回复于 2002-11-06 21:16:54 得分 0
把Del的键的键和其它键的键冒交换一下,或者打开键盘把线路板与DEL链接的线与其它键重新焊接。
本法只适用于本机,对于别人的机器,大部分人的做法是逼急了找个系统启动盘格式化,这三个键是非用不可。Top
75 楼clin2y(林子)回复于 2002-11-07 11:22:18 得分 0
这个帖子真的很好,以前我问个一样的问题:(怎样进入我的程序后就屏蔽CTRL+ALT+DEL,退出我的程序后就恢复CTRL+ALT+DELETE),现在依然没有解决。只能通过替换gina来实现,这样好象必须修改注册表然后重新启动机器才生效.还有这样不安全,结果我安装W2Ksp3时我的机器出现了致命的错误,启动不起来了,从此我的爱机就在也不行了,重新安装过程中都死机,进入CMOS甚至都死机.没有办法买了一块新主板换上一切正常了.不知是不是这个gina引起的.
请求 jiangsheng(蒋晟.Net ) 和 BCB_FANS(四大名捕之追杀令 )你们俩帮帮我,把你们最新的讨论结果给我发到邮箱好吗?c 谢谢cailintai@sohu.com
Top
76 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-07 17:09:38 得分 0
>楼主怎么这么粗心啊?
>卸载失败的原因是什么?
调用CreateRemoteThread之后Winlogon.exe出错,然后计算机自动关机……
Top
77 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-07 17:12:40 得分 0
microran2000()
请看清楚题目
clin2y(林子)
现在的代码还是不甚稳定
Top
78 楼slwqw(四大名捕之追杀令)回复于 2002-11-07 17:51:20 得分 0
唉,老大怎么每一次都是惜字如金啊?
Hook和Unhook时,都要建立远程线程,到底是Hook时死机还是Unhook时死机?
因为我这里没有问题,只能根据你的测试结果来判断了,你提供的信息越详细,就越好判断!Top
79 楼cbc(逍遥子)回复于 2002-11-07 18:42:16 得分 0
学习Top
80 楼JennyVenus()回复于 2002-11-07 19:13:50 得分 0
好长时间没到这里了
to 楼主
改写键盘驱动可不是非要用vc呀,你可以用别的Top
81 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-07 20:17:50 得分 0
//InjectFunc
HANDLE hRemoteThread;
hRemoteThread = CreateRemoteThread(hRemoteProcess,0,0,(DWORD(__stdcall *)(VOID*))pRemoteThread,(INJECTLIBINFO*)pRemoteParam,0,&dwWriten);
这里Top
82 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-07 20:19:48 得分 0
我改写的代码在你的PC上也没问题?Top
83 楼smhpnuaa(天将降大任于斯人也!)回复于 2002-11-07 21:13:14 得分 0
up!Top
84 楼smhpnuaa(天将降大任于斯人也!)回复于 2002-11-07 21:14:06 得分 0
海尔公司的一个产品中已经实现了。Top
85 楼slwqw(四大名捕之追杀令)回复于 2002-11-07 21:44:10 得分 0
靠,真是见鬼了!我也就是直接编译你发来的文件,运行,一切正常!
按理说插入出问题,那只有可能是pfnLoadLibrary或者pInfo为NULL,可是pfnLoadLibrary和pInfo怎么会为NULL呢?代码中已经加了检测,如果为NULL,程序根本就运行不到那一步,又怎么会出问题?
现在我真恨不得直接到你那里去调试..:)Top
86 楼microran2000(什么时候才能看到星星?)回复于 2002-11-08 08:32:06 得分 0
其实WDM键盘驱动,是不需要重新启动机器的,DDK中专门提供了一个instdrv的源程序,可以实现动态加载和卸载WDM驱动程序。
驱动程序级的HOOK比Ring3层的API HOOK更有趣。
帮上面的服务改写为你需要的服务NtQuerySystemInformation 即可。instdrv通过服务的安装和卸载可以实现驱动程序的动态加载和卸载。
本来有一个很好的网站,www.sysinternals.com,这个网站提供了大量经典的源程序,水准比codeguru codetools要高的多,很遗憾,最近几个月却无情的关闭了。比如它提供了无需远程客户端,直接在远程计算机上运行代码的源程序。
如果你因为担心键盘驱动需要重新启动计算机而放弃WDM的话,大可不必。拦截WIN 32 SDK API是一种比较简单的办法,但是拦截Windows NT服务(或者说是驱动)也应该行的通。只是前者经过多年相对比较成熟。
其实ring3层的应用程序解决不了的问题,往往会采用API HOOK和钩子函数。
如果仍然解决不了,那就只有回归到ring0层的驱动程序了。因为在ring0可以运行权限不加限制的特权指令,当然也很容易把系统搞垮。
不过我最关心的是COM API的拦截,基于COM的应用程序普天盖地,然而成功拦截COM接口方法的方案的确不多,尽管Detours提供的PPT文档简单提到了一些,但是应用起来很不理想。Windows核心编程对COM 接口方法拦截只字不提。然而COM接口方法的拦截前景可谓一片光明。比如你可以在IE中拦截Wscript.Shell、scripting.FileSystemObject还有就是MediaPlayer DirectX的接口。
Top
87 楼microran2000(什么时候才能看到星星?)回复于 2002-11-08 08:33:10 得分 0
#define FILE_DEVICE_HOOKSYS 0x00008300
#define DRIVER_DEVICE_NAME L"hooksys"
#include "ntddk.h"
#include "stdarg.h"
#include "stdio.h"
#include "hooksys.h"
#define FILE_DEVICE_HOOKSYS 0x00008300
#define DRIVER_DEVICE_NAME L"hooksys"
#include "..\..\include\undocnt.h"
typedef NTSTATUS (*NTCREATEFILE)(
PHANDLE FileHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PIO_STATUS_BLOCK IoStatusBlock,
PLARGE_INTEGER AllocationSize OPTIONAL,
ULONG FileAttributes,
ULONG ShareAccess,
ULONG CreateDisposition,
ULONG CreateOptions,
PVOID EaBuffer OPTIONAL,
ULONG EaLength
);
#define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
NTCREATEFILE OldNtCreateFile;
NTSTATUS NewNtCreateFile(
PHANDLE FileHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PIO_STATUS_BLOCK IoStatusBlock,
PLARGE_INTEGER AllocationSize OPTIONAL,
ULONG FileAttributes,
ULONG ShareAccess,
ULONG CreateDisposition,
ULONG CreateOptions,
PVOID EaBuffer OPTIONAL,
ULONG EaLength)
{
int rc;
char ParentDirectory[1024];
PUNICODE_STRING Parent=NULL;
ParentDirectory[0]='\0';
if (ObjectAttributes->RootDirectory!=0) {
PVOID Object;
Parent=(PUNICODE_STRING)ParentDirectory;
rc=ObReferenceObjectByHandle(ObjectAttributes->RootDirectory,
0,
0,
KernelMode,
&Object,
NULL);
if (rc==STATUS_SUCCESS) {
extern NTSTATUS ObQueryNameString(void *, void *, int size,
int *);
int BytesReturned;
rc=ObQueryNameString(Object,
ParentDirectory,
sizeof(ParentDirectory),
&BytesReturned);
ObDereferenceObject(Object);
if (rc!=STATUS_SUCCESS)
RtlInitUnicodeString(Parent, L"Unknown\\");
} else {
RtlInitUnicodeString(Parent, L"Unknown\\");
}
}
DbgPrint("NtCreateFile : Filename = %S%S%S\n", Parent?Parent->Buffer:L"",
Parent?L"\\":L"", ObjectAttributes->ObjectName->Buffer);
rc=((NTCREATEFILE)(OldNtCreateFile)) (
FileHandle,
DesiredAccess,
ObjectAttributes,
IoStatusBlock,
AllocationSize,
FileAttributes,
ShareAccess,
CreateDisposition,
CreateOptions,
EaBuffer,
EaLength);
DbgPrint("NtCreateFile : rc = %x\n", rc);
return rc;
}
NTSTATUS HookServices()
{
OldNtCreateFile=(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile));
_asm cli
(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))=NewNtCreateFile;
_asm sti
return STATUS_SUCCESS;
}
void UnHookServices()
{
_asm cli
(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))=OldNtCreateFile;
_asm sti
return;
}
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
MYDRIVERENTRY(DRIVER_DEVICE_NAME,
FILE_DEVICE_HOOKSYS,
HookServices());
return ntStatus;
}
NTSTATUS
DriverDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest (Irp,
IO_NO_INCREMENT
);
return Irp->IoStatus.Status;
}
VOID
DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
WCHAR deviceLinkBuffer[] = L"\\DosDevices\\"DRIVER_DEVICE_NAME;
UNICODE_STRING deviceLinkUnicodeString;
UnHookServices();
RtlInitUnicodeString (&deviceLinkUnicodeString,
deviceLinkBuffer
);
IoDeleteSymbolicLink (&deviceLinkUnicodeString);
IoDeleteDevice (DriverObject->DeviceObject);
}
Top
88 楼microran2000(什么时候才能看到星星?)回复于 2002-11-08 08:36:52 得分 0
NTSTATUS NTAPI
NtQuerySystemInformation (SYSTEMINFOCLASS sic,
PVOID pData,
DWORD dSize,
PDWORD pdSize);
NTSTATUS NTAPI
NtSetSystemInformation (SYSTEMINFOCLASS sic,
PVOID pData,
DWORD dSize);
Example 2:
NtQuerySystemInformation (18) --> 64 bytes at 0x007B0020
Offset| 00 01 02 03 04 05 06 07 : 08 09 0A 0B 0C 0D 0E 0F | 01234567 : 89ABCDEF
00000 | 00 00 00 00 00 8B 00 00 : 66 0B 00 00 66 0B 00 00 | ....... : f...f...
00010 | 26 00 28 00 38=00=7B=00 : 5C 00 3F 00 3F 00 5C 00 | &.(.8.{. : \.?.?.\.
00020 | 44 00 3A 00 5C 00 70 00 : 61 00 67 00 65 00 66 00 | D.:.\.p. : a.g.e.f.
00030 | 69 00 6C 00 65 00 2E 00 : 73 00 79 00 73 00 00 00 | i.l.e... : s.y.s...
Example 3:
NtQuerySystemInformation (18) --> 64 bytes
Offset| 00 01 02 03 04 05 06 07 : 08 09 0A 0B 0C 0D 0E 0F | 01234567 : 89ABCDEF
------|-------------------------:-------------------------|----------:---------
00000 | 00 00 00 00 00 8B 00 00 : 66 0B 00 00 66 0B 00 00 | ....... : f...f...
00010 | 26 00 28 00 18=00=00=00 : 5C 00 3F 00 3F 00 5C 00 | &.(..... : \.?.?.\.
00020 | 44 00 3A 00 5C 00 70 00 : 61 00 67 00 65 00 66 00 | D.:.\.p. : a.g.e.f.
00030 | 69 00 6C 00 65 00 2E 00 : 73 00 79 00 73 00 00 00 | i.l.e... : s.y.s...
Example 4:
NtQuerySystemInformation:
77f67d2c b87c000000 mov eax,0x7c
77f67d31 8d542404 lea edx,[esp+0x4]
77f67d35 cd2e int 2e
77f67d37 c21000 ret 0x10
NtSetSystemInformation:
77f68034 b8ae000000 mov eax,0xae
77f68039 8d542404 lea edx,[esp+0x4]
77f6803d cd2e int 2e
77f6803f c20c00 ret 0xc
Listing One
NTSTATUS WINAPI QuerySystemInformation (SYSTEMINFOCLASS sic,
PPVOID ppData,
PDWORD pdData)
{
PVOID pData;
DWORD dData, n;
NTSTATUS ns = STATUS_INVALID_PARAMETER;
dData = 0;
if (ppData != NULL)
{
n = 0;
while ((pData = LocalAlloc (LMEM_FIXED, dData += 0x10000))
!= NULL)
{
ns = NtQuerySystemInformation (sic, pData, dData, &n);
if (ns != STATUS_SUCCESS) n = 0;
if (ns != STATUS_INFO_LENGTH_MISMATCH) break;
LocalFree (pData);
}
dData = n;
if (pData != NULL)
{
if (ns != STATUS_SUCCESS)
{
LocalFree (pData);
pData = NULL;
dData = 0;
}
}
else
{
ns = STATUS_NO_MEMORY;
}
*ppData = pData;
}
if (pdData != NULL) *pdData = dData;
return ns;
}
Listing Two
// 05: SystemProcessInformation
// see ExpGetProcessInformation()
// see also ExpCopyProcessInfo(), ExpCopyThreadInfo()
typedef struct _SYSTEM_THREAD
{
QWORD qKernelTime; // 100 nsec units
QWORD qUserTime; // 100 nsec units
QWORD qCreateTime; // relative to 01-01-1601
DWORD d18;
PVOID pStartAddress;
CLIENT_ID Cid; // process/thread ids
DWORD dPriority;
DWORD dBasePriority;
DWORD dContextSwitches;
DWORD dThreadState; // 2=running, 5=waiting
KWAIT_REASON WaitReason;
DWORD dReserved01;
}
SYSTEM_THREAD;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
typedef struct _SYSTEM_PROCESS_INFORMATION
{
DWORD dNext; // relative offset
DWORD dThreadCount;
DWORD dReserved01;
DWORD dReserved02;
DWORD dReserved03;
DWORD dReserved04;
DWORD dReserved05;
DWORD dReserved06;
QWORD qCreateTime; // relative to 01-01-1601
QWORD qUserTime; // 100 nsec units
QWORD qKernelTime; // 100 nsec units
UNICODE_STRING usName;
KPRIORITY BasePriority;
DWORD dUniqueProcessId;
DWORD dInheritedFromUniqueProcessId;
DWORD dHandleCount;
DWORD dReserved07;
DWORD dReserved08;
VM_COUNTERS VmCounters;
DWORD dCommitCharge; // bytes
SYSTEM_THREAD ast [];
}
SYSTEM_PROCESS_INFORMATION;Top
89 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 10:17:20 得分 0
microran2000() 感谢你的参与,我想的是HOOK键盘不用这么麻烦,你的方法对我HOOK显示驱动倒是有帮助
Top
90 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 10:27:36 得分 0
BCB_FANS(四大名捕之追杀令)
的确都不为NULL,但是就是出问题……
在TrapKey程序中选择Disable Ctrl+Alt+Delete的时候出错,已经把出问题的图发给你了,Top
91 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 13:47:36 得分 0
不好意思,我昨晚测试不够仔细!
我一打开到你的项目,就切换到“TrapKeys - Win32 Release”了,所以一切正常!看到你发的图片之后,试着切换到“TrapKeys - Win32 Debug”,果然Winlogon.Exe出问题了,2000也当机了:)
关于VC中Debug状态和Release状态运行结果的不同,我早已耳闻!今日终于还是让我碰上了,靠!
不过我觉得最主要的是Release版本工作正常就可以了,为什么在Debug状态就出问题,以我现在的VC水平可能无法得知了。
=============
Bug报告:
TrapKeys程序的“Disable Taskbar”功能在某些特殊情况会实效!!! 选中这个功能之后,你按以下Win键,看看什么出来了,嘿嘿...
Top
92 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 15:59:02 得分 0
我没锁这些键……其实要锁也能锁住的Top
93 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 16:08:51 得分 0
用Release+Debug信息的版本倒是正常运行,但是也不能锁Ctrl+Alt+Delete了Top
94 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 16:10:40 得分 0
unload错误:找不到指定的模块?Top
95 楼hzwanglw(Ringwraiths)回复于 2002-11-08 16:13:42 得分 0
gzTop
96 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 17:22:05 得分 0
找不到指定的模块?那就是路径设置有问题了,一步一步地跟踪看看结果是什么就可以了。
我这里一切正常。邪门!!!Top
97 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-11-08 18:11:38 得分 0
发现问题
1 复制字符串的时候不能用CopyMemory,而应该用lstrcpy
2 复制字符串的时候应该复制字符串长度+1个字符Top
98 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 18:50:24 得分 0
试着在CopyMemory前面添加
ZeroMemory(InjectLibInfo.DllName,sizeof(InjectLibInfo.DllName));
看看.
Top
99 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:10:27 得分 0
ZeroMemory加了还有问题
现在怀疑是DLL有问题,检查ing……Top
100 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:14:09 得分 0
检查无用……Top
101 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:15:59 得分 0
现在的问题是无论是否正常运行,remote.dll都没有加载(没进dllmain)Top
102 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 19:27:47 得分 0
1、没进DLlMain,那就是装载DLL的远程线程运行失败,我发了一个带调试功能的Hook.Cpp给你,看看在哪个地方装载DLL失败。
2、建议统一使用LoadLibraryA和FreeLibraryA和GetModuleHanleA来试试。
已经发了邮件.....Top
103 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:34:38 得分 0
发现一个问题
在WindowsNT4 Terminal Server 4.0 Edition/2000 Server/XP/Windows .Net Server上,如果安装了终端服务,则每个登录用户会有自己的Winlogon进程和桌面(包括控制台进程),也就是说,需要判别哪一个Winlogon进程是自己的Winlogon进程
不幸的是,所有Winlogon进程拥有者名称都是SYSTEM,只能根据终端服务的会话ID来判断是否是当前用户,可使用ProcessIdToSessionId函数Top
104 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 19:39:35 得分 0
我这里是单机,对这种终端不熟悉,老大能不能说得再详细一点?Top
105 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:51:54 得分 0
http://www.microsoft.com/china/technet/windows2000/dguide/chapt-16.asp
终端服务(Terminal Services )
KB关键字kbTermServ
可以通过调用WTSQuerySessionInformation的时候传递WTSSessionId来获得当前会话ID
Top
106 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 19:58:04 得分 0
BCB_FANS(四大名捕之追杀令),nevergrief(孤独骑士), microran2000() 进来领分
http://expert.csdn.net/Expert/topic/1160/1160965.xml
继续继续……Top
107 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 20:00:44 得分 0
装载失败:原因:拒绝访问
??Top
108 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 20:22:24 得分 0
邪了!!!LoadLibrary竟然返回这个错误值!把代码贴出来,我实在想不出哪里有问题了:(
======================
//远程线程,用来装载DLL
static DWORD WINAPI ThreadFuncAttach(INJECTLIBINFO *pInfo)
{
HINSTANCE hDll;
pInfo->dwReturnValue = 0;
hDll = (HINSTANCE)pInfo->pfnLoadLibrary(pInfo->DllName);
if(hDll == NULL)
pInfo->dwReturnValue = pInfo->pfnGetLastError();
return((DWORD)hDll);
}
Top
109 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 20:37:34 得分 0
正在编写2000终端版本
已知问题:在Windows2000ServerSP3上从一个UNC路径(以\\开头的路径)运行的时候会报告拒绝访问错误Top
110 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 20:43:58 得分 0
这段代码怎么会得到以“\\”开头的路径?
======================
const char* const RemoteDllName = "RemoteDll.Dll";
TCHAR szEXEPath[_MAX_PATH];
GetModuleFileName(NULL,szEXEPath,_MAX_PATH);
::PathRemoveFileSpec(szEXEPath);
::PathAppend(szEXEPath,RemoteDllName);
CTaskKeyMgr::strRemoteDllName=szEXEPath;
。。。。。。。。。。。。Top
111 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 20:49:36 得分 0
我的整个工程都在服务器上,所以出现了这个问题
刚才说错了,只要Exe文件在网络上就会出现拒绝访问错误,映射网络驱动器之后也有同样的错误。
Top
112 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 21:00:46 得分 0
Getting Process Information with WTS APIshttp://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.aspxTop
113 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 21:05:38 得分 0
我的整个工程都在服务器上,所以出现了这个问题
刚才说错了,只要Exe文件在网络上就会出现拒绝访问错误,映射网络驱动器之后也有同样的错误。
===========
我越来越不明白你在说什么了!单机环境跟网络环境大大地不同,看来我无法再帮忙了。Top
114 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 21:27:25 得分 0
简单的说,我把工程从服务器复制到本机,编译,运行就没问题了……真是!@#%^@#!&^
Top
115 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 21:40:19 得分 0
看了这个帖子
http://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.asp
想不到XP还有这么一个功能,看来得装一下XP了!
===============
问题是你的程序要在什么样的环境下运行?是不是在一台台独立的电脑上运行,还是在网络环境下运行?如果是网络环境,那程序具体是怎么运行的?我确实不清楚!Top
116 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 21:59:59 得分 0
运行环境是本地硬盘
估计原因是Winlogon进程没有足够权限去访问一个有密码保护的网络资源(它和资源管理器分属不同的用户,所以权限和缓冲的密码不同)
正在测试……Top
117 楼slwqw(四大名捕之追杀令)回复于 2002-11-08 22:14:44 得分 0
我更迷糊了...既然是本地硬盘,Exe和DLL都在本地硬盘上,Winlogon为什么要去访问网络资源?Top
118 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 22:17:36 得分 0
测试成功
BCB_FANS(四大名捕之追杀令)
很多人提出了公开源代码的要求,你觉得这个代码是否可以帖到codeguru/codeproject之类的公开代码网站?
已知问题:该程序必须在一个系统(SYSTEM)用户不输入密码就可以访问的位置,不能在一个密码保护的位置上运行(因为Winlogon程序是系统用户运行的)
正在去掉调试信息对话框Top
119 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 22:20:30 得分 0
刚才的问题是我访问服务器的资源需要输入密码。和Explorer用户名相同的应用程序(Visual C++和我的程序)可以通过Explorer缓存的密码来访问服务器,但是WinLogon和Explorer使用了不同的用户名,所以我的程序可以访问到的资源,WinLogon不能访问。这就是我的程序LoadLibrary成功而WinLogonLoadLibrary失败的原因Top
120 楼slwqw2(亚洲之鹰)回复于 2002-11-08 22:53:27 得分 0
靠,CSDN,为什么不能回复超过30次???
========================================
测试成功
BCB_FANS(四大名捕之追杀令)
很多人提出了公开源代码的要求
==============
当然可以,只是最好要充分测试一下,免得以后又让人家忙:)
不过版权部分,除了姓名和网上呢称不变之外,其它的你能不能翻译成英文?我的E文不太好,看看可以,翻译就不行了:(
============
这个帐号是我的马夹:)Top
121 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-08 23:13:58 得分 0
大家都是马甲:(
现存问题:Debug方式运行会S机Top
122 楼slwqw2(亚洲之鹰)回复于 2002-11-08 23:33:57 得分 0
这个问题在VC中普遍存在,具体原因不详:(Top
123 楼slwqw2(亚洲之鹰)回复于 2002-11-09 11:03:40 得分 0
发现BUG,已经发更正文件。注意查收!Top
124 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-09 12:22:38 得分 0
其实可以用VC里面的TCHAR解决问题的,不必另外开缓冲区
正在发送修改过的Unicode版本……
Top
125 楼slwqw2(亚洲之鹰)回复于 2002-11-09 13:17:07 得分 0
老大发送了没有?我现在还没有收到啊!1个小时了。Top
126 楼slwqw2(亚洲之鹰)回复于 2002-11-09 14:15:30 得分 0
使用TCHAR不成功!
我定义了UNICODE之后,提示:找不到指定的模块。
===============
#define UNICODE
#ifdef UNICODE
LPCSTR LoadLibraryFuncStr = "LoadLibraryW";
Top
127 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-09 15:56:21 得分 0
好像不行,#define UNICODE应该在所有工程的stdafx.h里面定义才可以(也就是说,所有的模块都必须有unicode版本)
这个工作量好像太大,只用ansi版本好了Top
128 楼slwqw2(亚洲之鹰)回复于 2002-11-09 16:05:12 得分 0
那看来只好使用ANSI版本了。Top
129 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2002-11-09 18:54:46 得分 0
插嘴问一下,成功了吗?Top
130 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-11 10:43:16 得分 0
http://www.csdn.net/Develop/read_article.asp?id=15645
BCB_FANS(四大名捕之追杀令) 来写Hook NtQuerySystemInformation的文档吧
已知问题
尚无Unicode版本
VirtualAllocEx分配的内存没有用VirtualFreeEx释放
在Debug方式下运行会造成Winlogon出错(出错后请不要确认或取消那个出错对话框,然后保存打开的所有文档,关闭所有程序,通过正常的途径关机,否则Windows会立刻关机)
在Windows 2000 Pro SP3,IE6SP1,VC6SP5下编译通过Top
131 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-11 10:43:52 得分 0
BCB_FANS(四大名捕之追杀令) 来这里http://expert.csdn.net/Expert/topic/1160/1160965.xmlTop
132 楼slwqw2(亚洲之鹰)回复于 2002-11-11 11:46:39 得分 0
来写Hook NtQuerySystemInformation的文档吧
======
怎么写啊?所有的代码都是从《Windows核心编程》里边拷贝的。如果想知道原理,只有去看《Windows核心编程》了。Top
133 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-11 12:03:36 得分 0
由于使用了替换系统窗口过程的方法,所以多个实例同时运行可能出现问题……要按次序启动和退出(第一个启动的要最后一个退出)Top
134 楼slwqw2(亚洲之鹰)回复于 2002-11-11 14:04:32 得分 0
的确有这种事。因为第二个程序替换时,返回的旧的窗口过程实际上就是第一个程序里边的窗口过程,如果第一个程序先退出了,它里边的窗口过程就会失效,第二个程序可能就会出问题。
=====
BCB_FANS(四大名捕之追杀令) 来这里http://expert.csdn.net/Expert/topic/1160/1160965.xml
老大,你叫我去这个帖子,干吗不给我分啊?是不是给错了?:)Top
135 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-11 14:18:09 得分 0
的确是给错了……幸好这里还有300……Top
136 楼rivershan(阿门)回复于 2002-11-12 12:45:00 得分 0
哦~
原来在硬件里~
我说怎么没看到呢~Top
137 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-12 17:36:52 得分 0
考虑用DLL中的共享数据段解决多实例问题……但是其他程序同时也替换系统窗口过程的话就没办法检测了Top
138 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-12 17:39:43 得分 0
觉得这里太乱的话,可以看看文档
http://www.csdn.net/Develop/read_article.asp?id=15645
有没有人研究动态Hook GINA函数的?Top
139 楼slwqw2(亚洲之鹰)回复于 2002-11-12 20:59:06 得分 0
我手头就有动态Hook GINA函数的代码,采用的技术就是替换WlxLoggedOnSAS的前5个字节,插入一条JMP指定,指向自己的函数。
说一说过程(献丑了:))
缺省情况下,SAS窗口接收到Ctrl + Alt + Del消息之后,切换到Winlogon桌面,然后调用GINA里边的WlxLoggedOnSAS函数,缺省情况下,这个函数显示安全对话框。如果用户选“注销”,WlxLoggedOnSAS返回WLX_SAS_ACTION_LOGOFF,以表明用户想注销,接着Winlogon进程将调用GIAN的WlxLogoff函数进行注销操作; 如果用户选“关机”、“更改密码”、“任务管理器”等操作,Winlogon也将做其它一些相关的操作。但是如果用户按“取消”按钮,这个函数将直接返回WLX_SAS_ACTION_NONE,表明用户不想做任何事,则Winlonon进程也不做任何事,直接返回Default桌面。上面的Hook技术就是采用替换前5个字节的方法,跳到自己的函数,然后直接返回WLX_SAS_ACTION_NONE,Winlogon也就直接返回Default桌面了:)。这种方法的毛病就是明显地看到桌面在闪烁。而且这种Hook技术固有的缺点并没有得到克服,同样随时有可能出现Exception,具体原因《Windows核心编程》已经说了。Top
140 楼superaf(阿斐)回复于 2002-11-13 16:24:05 得分 0
精彩,我以前问过,但没有人搭理,好好学学。。。
发表源代码的地方,别忘了贴出来啊,
给你们鼓个气,加油,要是真的能做成unicode版本就好了,便于移植。Top
141 楼BCBFANSXP(狼嗥九月血满天,小楼细雨梦惊魂)回复于 2002-11-13 17:41:33 得分 0
新马甲报道:)Top
142 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-13 17:54:00 得分 0
根据这个工作原理来看,可行的另外一种方案是WH_CALLWNDPROC Hook,然后判断热键是否是Ctrl+Alt+Delete,不过可能效率太低
发现unicode版本的问题……字符串的长度有误
考虑用DLL中的共享数据段+Hook SetWindowLong解决多次替换窗口过程的问题Top
143 楼microsoftwin(流星雨点)回复于 2002-11-13 21:04:53 得分 0
该死的微软,写什么Windows嘛!!!害得大伙这么伤脑筋!!!我很同情大家!!!有好的程序请发到我的信箱!!microsoftwin3000@sina.com!!!谢谢!!!Top
144 楼BCBFANSXP(狼嗥九月血满天,小楼细雨梦惊魂)回复于 2002-11-14 13:04:03 得分 0
考虑用DLL中的共享数据段+Hook SetWindowLong解决多次替换窗口过程的问题
=======
有道理,设置一个共享变量,比如 bool HasInstallHook = false;
在调用SetWindowLong之前,先判断这个标志,如果已经为true,则直接返回,不进行替换。Top
145 楼nbgyf(梅花峰)回复于 2002-11-14 14:27:41 得分 0
HOOK早有耳闻,却未用过,学习之;
老大们,干码非要用VC写WDM不行吗?
UPTop
146 楼BCBFANSXP(狼嗥九月血满天,小楼细雨梦惊魂)回复于 2002-11-14 16:00:22 得分 0
我不会WDM :(Top
147 楼wltsui(-无招胜有招-)回复于 2002-11-14 16:04:35 得分 0
gzTop
148 楼nbgyf(梅花峰)回复于 2002-11-14 18:32:07 得分 0
哎,才疏学浅呀!!!!!!
向各位老大学习;
写WDM太痛苦了,还是要HOOK;
Top
149 楼nbgyf(梅花峰)回复于 2002-11-14 18:36:25 得分 0
本人临时抱佛脚学了一会hook;
发现有篇文章写的蛮好;
转载部分,不知对各位是否有用;
------------------------------------------------------
作者:张运潮
底层键盘钩子存在于用户敲击键盘和系统处理之间,而普通键盘钩子则存在于系统产生WM_KEY***消息之后。很清楚,普通键盘钩子只能截获WM_KEY***消息,而不能对系统键进行操作。但是底层键盘钩子有一个致命的弱点,就是如果调用它的进程或线程出现死循环,则系统将不能处理任何键盘操作。为了解决这个问题,微软在注册表中给出了一个底层键盘钩子处理的限制时间,如果超出了这个时间,系统将进入正常处理。
下面是实现底层键盘钩子的部分源代码:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;
If (nCode == HC_ACTION) {
switch (wParam) {
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p =
(PKBDLLHOOKSTRUCT) lParam;
fEatKeystroke =((p->vkCode ==
VK_TAB) && ((p->flags & LLKHF_ALTDOWN)
!= 0)) ||((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||((p->vkCode == VK_ESCAPE) &&
((GetKeyState(VK_CONTROL) & 0x8000) != 0));
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}
int WINAPI WinMain(HINSTANCE hinstExe, HIN
STANCE, PTSTR pszCmdLine, int)
{
//安装底层键盘钩子
HHOOK hhkLowLevelKybd = SetWindow
sHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,
hinstExe, 0);
MessageBox(NULL,TEXT(“Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.\n”),TEXT(“Click \“Ok\” to terminate this application and re-enable these keys.”),TEXT(“Disable Low-Level Keys”), MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd);
return(0);
}
Top
150 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-15 10:15:28 得分 0
在示例代码中屏蔽Ctrl+Alt+Delete之外的系统热键就是用的这种方法。Top
151 楼nbgyf(梅花峰)回复于 2002-11-15 11:59:25 得分 0
难道,这个示例代码不能屏蔽Ctrl+Alt+Delete?
我试了,可以呀?
奇怪
UPTop
152 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-11-15 12:24:56 得分 0
LowLevelKeyboardProc Function
The LowLevelKeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function every time a new keyboard input event is about to be posted into a thread input queue. The keyboard input can come from the local keyboard driver or from calls to the keybd_event function. If the input comes from a call to keybd_event, the input was "injected". However, the WH_KEYBOARD_LL hook is not injected into another process. Instead, the context switches back to the process that installed the hook and it is called in its original context. Then the context switches back to the application that generated the event.
The HOOKPROC type defines a pointer to this callback function. LowLevelKeyboardProc is a placeholder for the application-defined or library-defined function name.
Syntax
LRESULT CALLBACK LowLevelKeyboardProc( int nCode,
WPARAM wParam,
LPARAM lParam
);
Parameters
wParam
[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
你确认你测试过?Ctrl+Alt+Delete产生WM_HOTKEY消息,而不是WH_KEYBOARD_LL能够Hook的WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, 或者WM_SYSKEYUP 。Top
153 楼nbgyf(梅花峰)回复于 2002-11-15 14:55:03 得分 0
呵呵;
是不能屏蔽Ctrl+Alt+Delete它;
SorryTop
154 楼finix(*_*)回复于 2002-12-17 12:39:03 得分 0
mark(this);Top
155 楼sjzxyg(小小鸟)回复于 2002-12-17 13:05:26 得分 0
做个标记,有空再看Top
156 楼cbc(逍遥子)回复于 2002-12-17 13:20:09 得分 0
xuexi,做个记号Top
157 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2002-12-18 12:42:40 得分 0
目前的改进:
分配空间时分配4K的倍数可能提高稳定性
使用SetProp和GetProp在SAS窗口上设置引用计数,解决多次替换窗口过程的问题(DLL共享代码段在终端服务器上会出现问题……只有第一个用户的Winlogon进程被Hook)Top
158 楼NowCan(城市浪人)回复于 2002-12-22 17:38:18 得分 0
太厉害了~!Top
159 楼kernelspirit(核心精神)回复于 2002-12-23 11:30:29 得分 0
收藏Top
160 楼realjustin(莫论国事,违者杀头3)回复于 2003-01-06 22:57:01 得分 0
源码下不下来,谁又能否发给我一份?
谢谢!
litz@paic.com.cnTop
161 楼jiangshengMKII(蒋晟.Net的马甲)回复于 2003-01-08 18:21:36 得分 0
src:
http://freehost19.websamba.com/skyflier/caq0209.rar
bin:
http://freehost19.websamba.com/skyflier/disablectrlaltdelete.zipTop
162 楼kylix2001(皮卡丘)回复于 2003-01-15 14:00:19 得分 0
五体投地!收藏:)Top
163 楼illuhui(瘦猴)回复于 2003-01-25 12:29:15 得分 0
哇,真的是五体投地!小弟刚弄了一个,在2000下结合HOOK和GINA,没其他的办法:)那个NtQuerySystemInformatoin函数,唉,不懂!Top
164 楼Analyst()回复于 2003-02-04 22:27:26 得分 0
阅Top
相关问题
- 能否用VB禁用Ctrl+Alt+Del ???
- 如何在windows启动时,禁用CTRL+ALT+DEL。
- 请问如何在 WinNT 下禁用Ctrl+Alt+Del
- 着急:如何禁用ctrl+ALT+DEL组合键?
- 2000,xp,2003系统如何禁用ctrl+alt+del键?
- 有谁知道如何禁用以下组合键ALT+F4、ALT+TAB、CTRL+ESC、CTRL+ALT+DEL怎么实现
- 如何在Win2000中禁用Ctrl+Alt+Delete等热键?(在线等待!)
- 如何在win98下使用API函数,禁用win键和三键热启(Ctrl+Alt+Del),急救!
- 请教,如何通过修改注册表使Ctrl+Alt+Del三键热启以及Win键禁用
- 在winxp中怎么样从注册表中禁用ctrl+alt+del,ctrl+esc,还有那个开始菜单快捷键???



