CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

请教如何编程阻止windows2000自动重新启动?

楼主mizhael(男儿当自强)2003-11-03 02:16:47 在 VC/MFC / 进程/线程/DLL 提问

我的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

相关问题

  • windows sdk 编程
  • Windows编程
  • windows 2000 编程
  • WINDOWS编程
  • 关于Windows编程:
  • Windows核心编程???
  • windows编程的书
  • windows 编程入门
  • 关于windows编程???
  • windows编程书籍

关键词

  • windows2000
  • 函数
  • processliststr
  • 进程
  • 启动
  • exitwindow
  • 命令
  • szexefile
  • bsuccess
  • snapshot

得分解答快速导航

  • 帖主:mizhael

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo