请教如何编程阻止windows2000自动重新启动?
我的windows2000电脑被管理员设成自动下载更新然后重新启动(当接到他的server的命令的时候)。
随时随地的会重新启动简直太可怕了。
跟他们商量,要求改变,他们说当你不愿意重新启动的时候只要断开网络连接就可以不受到他们的重新启动命令了。但是我总不能老是断开网络连接啊。。。
昨天又受到一个命令,说“4分钟之内重新启动”。我于是将process删除了一通,最后竟然躲过了重新启动。
因此我想到:如果能知道重新启动的确切进程名,我至少能手工删除该进程;如果能编一个程序监控进程,就能自动删除该进程。防止重新启动。
请问又没有大侠知道重新启动的进程名是什么?如何监控进程并删除该进程
问题点数:0、回复次数:6Top
1 楼wangjinwang(王者之疯)回复于 2003-11-04 09:26:00 得分 0
1、重新启动只是一个函数调用ExitWindow()或ExitWindowEx()
2、你可以根据经验(通过观察,记录,对比等等手段)找出调用重启函数的进程名
3、下面有两段代码(读出所有进程名,强制结束某一进程)
(基于对话框,一个ListBox控件)
#include <tlhelp32.h>
#pragma comment(lib,"kernel32.lib")
// 列举进程
void CProcessDlg::OnButtonList()
{
CString text;
m_list.ResetContent();
HANDLE Snapshot;
Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOL bSuccess;
bSuccess=Process32First(Snapshot,&processListStr);
for(int i=0;bSuccess;i++)
{
name.Add(processListStr.szExeFile);
text=processListStr.szExeFile;
int c=4-strlen(processListStr.szExeFile)/8;
while(c--)text+="\t";
sprintf(processListStr.szExeFile,"%2d",i+1);
text+=processListStr.szExeFile;
m_list.AddString(text);//向列表框添加字符串
AProcess.Add(OpenProcess(PROCESS_ALL_ACCESS,FALSE,processListStr.th32ProcessID));
bSuccess=Process32Next(Snapshot,&processListStr);
}
CloseHandle(Snapshot);
GetDlgItem(IDC_BUTTON3)->EnableWindow();
}
//结束进程(强制)
void CProcessDlg::OnButtonKill()
{
int currentSelect;//当前选择了第几项
currentSelect=m_list.GetCurSel();//取值范围从0开始
if(currentSelect!=LB_ERR)
{
//选择了某一项
CString FileBuffer;//获得进程的可执行文件的文件名
m_list.GetText(currentSelect,FileBuffer);
FileBuffer.Insert(0,"确定 要终止的进程:\n");
if(AfxMessageBox(FileBuffer,MB_OKCANCEL,0)==IDOK)
{
//先获得该进程句柄:通过进程标识
if(AProcess.GetAt(currentSelect))
{
TerminateProcess(AProcess.GetAt(currentSelect),0);
AfxMessageBox("指定进程已被终止!");
OnButtonList();//刷新显示
}
}
}
}
Top
2 楼yangsiwei(100%甜菜)回复于 2003-11-05 00:46:46 得分 0
做个HOOK拦ExitWindow或ExitWindowEx
Top
3 楼MilitaryMiniatures(++)回复于 2003-11-05 00:49:39 得分 0
莫非要拦截ExitWindow/ExitWindowEx这两个API函数?Top
4 楼mizhael(男儿当自强)回复于 2003-11-09 14:00:11 得分 0
看来有两条路:
一是杀掉那个发出ExitWindow命令的进程;
二是直接拦截所有ExitWindow命令。
不瞒各位大侠,对我来说好像还是“二”比较简单:主要是因为我的
编程能力有限,还有就是找不到那个发出ExitWindow命令的进程,我
在的时候它不来,我去吃饭的时候、或者晚上,它就来。机器就启动
了。
还请各位大侠给个实例如何hook拦截所有ExitWindow命令吧
非常感谢。
Top
5 楼ahao(天·狼·星星)回复于 2003-11-09 21:34:11 得分 0
写个小程序运行着,处理WM_QUERYENDSESSION消息,返回false应该可以Top
6 楼luolovegui(骆归)回复于 2004-02-11 22:08:07 得分 0
在2000下关机不是用上面的关机函数的,在2000下只可以用 AbortSystemShutdown() 取消关机。但是首先要取得权限。用OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 函数。Top




