wangchao.org
设为首页 | 添加收藏
 
购物视频论坛博客自然风光美女图片王朝网络小游戏BT下载生活百科编程设计软件下载小说
 
化妆 | 音乐 | 影视 | 图书 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《windows下禁止程序运行返回上一页 
 
1楼 

windows下禁止程序运行

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  禁止程序运行的方式有很多种,第一种方法是写一个单独的程序并且能够在开机的时候自动运行,而这个程序的作用就是监视进程信息,如果发现目标进程则立即把它干掉,从而达到禁止程序运行的目的。第二种方法是写一个服务,这种方法个人觉得比较隐蔽。下面我就拿第二种方法作一下讲解。
  写服务的方法也有很多,而笔者比较喜欢的是用c来写,用c写服务比较直观,也比较随心所欲。如果有的读者不知道该如何写windows下的服务程序,请自行查阅相关资料。下面就给出程序的源代码。
  #include <windows.h>
  #include <stdio.h>
  #include<tlhelp32.h>
  #include<stdlib.h>
  #include<string.h>
  #define SLEEP_TIME 5000
  #define LOGFILE "C:\\MemoryStatus\\memstatus.txt"
  ////////////////////////////////////////////////////////////
  // Declare several global variables to share
  // their values across multiple functions of your program.
  ////////////////////////////////////////////////////////////
  SERVICE_STATUS ServiceStatus;
  SERVICE_STATUS_HANDLE hStatus;
  ////////////////////////////////////////////////////////////
  // Make the forward definitions of functions prototypes.
  //
  ////////////////////////////////////////////////////////////
  void ServiceMain(int argc, char** argv);
  void ControlHandler(DWORD request);
  int InitService();
  int ScanProcess();
  int WriteToLog(char* str)
  {
   FILE* log;
   log = fopen(LOGFILE, "a+");
   if (log == NULL){
   OutputDebugString("Log file open failed.");
   return -1;
   }
   fprintf(log, "%s\n", str);
   fclose(log);
   return 0;
  }
  // Service initialization
  int InitService()
  {
  OutputDebugString("Monitoring started.");
  int result;
  result = WriteToLog("Monitoring started.");
  return(result);
  }
  // Control Handler
  void ControlHandler(DWORD request)
  {
   switch(request)
   {
   case SERVICE_CONTROL_STOP:
   OutputDebugString("Monitoring stopped.");
   WriteToLog("Monitoring stopped.");
   ServiceStatus.dwWin32ExitCode = 0;
   ServiceStatus.dwCurrentState = SERVICE_STOPPED;
   SetServiceStatus (hStatus, &ServiceStatus);
   return;
   case SERVICE_CONTROL_SHUTDOWN:
   OutputDebugString("Monitoring stopped.");
   WriteToLog("Monitoring stopped.");
   ServiceStatus.dwWin32ExitCode = 0;
   ServiceStatus.dwCurrentState = SERVICE_STOPPED;
   SetServiceStatus (hStatus, &ServiceStatus);
   return;
  
   default:
   break;
   }
   // Report current status
   SetServiceStatus (hStatus, &ServiceStatus);
   return;
  }
  void ServiceMain(int argc, char** argv)
  {
   int error;
   ServiceStatus.dwServiceType =
   SERVICE_WIN32;
   ServiceStatus.dwCurrentState =
   SERVICE_START_PENDING;
   ServiceStatus.dwControlsAccepted =
   SERVICE_ACCEPT_STOP |
   SERVICE_ACCEPT_SHUTDOWN;
   ServiceStatus.dwWin32ExitCode = 0;
   ServiceStatus.dwServiceSpecificExitCode = 0;
   ServiceStatus.dwCheckPoint = 0;
   ServiceStatus.dwWaitHint = 0;
   hStatus = RegisterServiceCtrlHandler(
   "MemoryStatus",
   (LPHANDLER_FUNCTION)ControlHandler);
   if (hStatus == (SERVICE_STATUS_HANDLE)0)
   {
   // Registering Control Handler failed
   return;
   }
   // Initialize Service
   error = InitService();
   if (error)
   {
   // Initialization failed
   ServiceStatus.dwCurrentState =
   SERVICE_STOPPED;
   ServiceStatus.dwWin32ExitCode = -1;
   SetServiceStatus(hStatus, &ServiceStatus);
   return;
   }
   // We report the running status to SCM.
   ServiceStatus.dwCurrentState =
   SERVICE_RUNNING;
   SetServiceStatus (hStatus, &ServiceStatus);
   // MEMORYSTATUS memory;
   // The worker loop of a service
   while (ServiceStatus.dwCurrentState ==
   SERVICE_RUNNING)
   {
   int flag;
  
   if(ScanProcess())
   flag=1;
   else
   flag=0;
  
  
   if (flag==0)
   {
   ServiceStatus.dwCurrentState = SERVICE_STOPPED;
   ServiceStatus.dwWin32ExitCode = -1;
   SetServiceStatus(hStatus, &ServiceStatus);
   return;
   }
   Sleep(SLEEP_TIME);
   }
   return;
  }
  int ScanProcess()
  {
  PROCESSENTRY32 pe;
  char *name=(char *)malloc(sizeof(char)*128);
  if(name==NULL)
  {
   WriteToLog("无法分配内存!");
   return 0;
  }
  FILE *fp;
  HANDLE process;
  fp=fopen("C:\\MemoryStatus\\ScrutinyProcess.txt","rb");
  if(!fp)
  {
   WriteToLog("无法打开文件");
   return 0;
  }
  fgets(name,128,fp);
  HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  Process32First(hSnapshot,&pe);
  do{
   if(!strcmp(name,pe.szExeFile))
   {
   process=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
   if(process)
   {
   TerminateProcess(process,0);
   WriteToLog(name);
   }
   }
  }while(Process32Next(hSnapshot,&pe));
  free(name);
  CloseHandle(hSnapshot);
  fclose(fp);
  return 1;
  }
  void main(int argc, char* argv[])
  {
   SERVICE_TABLE_ENTRY ServiceTable[2];
   ServiceTable[0].lpServiceName = "MemoryStatus";
   ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
   ServiceTable[1].lpServiceName = NULL;
   ServiceTable[1].lpServiceProc = NULL;
   // Start the control dispatcher thread for our service
   StartServiceCtrlDispatcher(ServiceTable);
  }
  把想要禁止运行的进程名字写在日志文件里就可以达到目的,如果不知道如何安装服务那你可要好好学习了^_^
  by:yyjw
  转载请注明出处。

禁止程序运行的方式有很多种,第一种方法是写一个单独的程序并且能够在开机的时候自动运行,而这个程序的作用就是监视进程信息,如果发现目标进程则立即把它干掉,从而达到禁止程序运行的目的。第二种方法是写一个服务,这种方法个人觉得比较隐蔽。下面我就拿第二种方法作一下讲解。 写服务的方法也有很多,而笔者比较喜欢的是用c来写,用c写服务比较直观,也比较随心所欲。如果有的读者不知道该如何写windows下的服务程序,请自行查阅相关资料。下面就给出程序的源代码。 #include <windows.h> #include <stdio.h> #include<tlhelp32.h> #include<stdlib.h> #include<string.h> #define SLEEP_TIME 5000 #define LOGFILE "C:\\MemoryStatus\\memstatus.txt" //////////////////////////////////////////////////////////// // Declare several global variables to share // their values across multiple functions of your program. //////////////////////////////////////////////////////////// SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hStatus; //////////////////////////////////////////////////////////// // Make the forward definitions of functions prototypes. // //////////////////////////////////////////////////////////// void ServiceMain(int argc, char** argv); void ControlHandler(DWORD request); int InitService(); int ScanProcess(); int WriteToLog(char* str) { FILE* log; log = fopen(LOGFILE, "a+"); if (log == NULL){ OutputDebugString("Log file open failed."); return -1; } fprintf(log, "%s\n", str); fclose(log); return 0; } // Service initialization int InitService() { OutputDebugString("Monitoring started."); int result; result = WriteToLog("Monitoring started."); return(result); } // Control Handler void ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_STOP: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped."); ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return; case SERVICE_CONTROL_SHUTDOWN: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped."); ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return; default: break; } // Report current status SetServiceStatus (hStatus, &ServiceStatus); return; } void ServiceMain(int argc, char** argv) { int error; ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; hStatus = RegisterServiceCtrlHandler( "MemoryStatus", (LPHANDLER_FUNCTION)ControlHandler); if (hStatus == (SERVICE_STATUS_HANDLE)0) { // Registering Control Handler failed return; } // Initialize Service error = InitService(); if (error) { // Initialization failed ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; } // We report the running status to SCM. ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus (hStatus, &ServiceStatus); // MEMORYSTATUS memory; // The worker loop of a service while (ServiceStatus.dwCurrentState == SERVICE_RUNNING) { int flag; if(ScanProcess()) flag=1; else flag=0; if (flag==0) { ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; } Sleep(SLEEP_TIME); } return; } int ScanProcess() { PROCESSENTRY32 pe; char *name=(char *)malloc(sizeof(char)*128); if(name==NULL) { WriteToLog("无法分配内存!"); return 0; } FILE *fp; HANDLE process; fp=fopen("C:\\MemoryStatus\\ScrutinyProcess.txt","rb"); if(!fp) { WriteToLog("无法打开文件"); return 0; } fgets(name,128,fp); HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); Process32First(hSnapshot,&pe); do{ if(!strcmp(name,pe.szExeFile)) { process=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID); if(process) { TerminateProcess(process,0); WriteToLog(name); } } }while(Process32Next(hSnapshot,&pe)); free(name); CloseHandle(hSnapshot); fclose(fp); return 1; } void main(int argc, char* argv[]) { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = "MemoryStatus"; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; // Start the control dispatcher thread for our service StartServiceCtrlDispatcher(ServiceTable); } 把想要禁止运行的进程名字写在日志文件里就可以达到目的,如果不知道如何安装服务那你可要好好学习了^_^ by:yyjw 转载请注明出处。

 
标签: windows  禁止  程序运行  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 

 
 
 
 
 更多内容
 ·Linux下的并口编程 ·MS-DOS autocomplete in Microso ·Windows 2K DDK IRP原文翻译 ·微软证实Windows XP SP3
 ·Windows XP操作系统自动关机的实 ·Win 2003安装过后必须进行的配置 ·Windows 端口汇总 ·推荐一份Linux电子杂志《OurLinu
 ·WIN32编程必知:__stdcall,__cde ·Windows 的多线程程序设计 ·Linux 目录详解! ·感受Windows XP中DOS命令的新增功
 ·Win 2000命令行大揭秘 ·编译优化自己的FreeBSD ·FreeBSD 5.3 与 Apache2.0建立列 ·从windows启动列表里启动Linux的
 ·寻找免费的windows平台下的pdf创 ·王垠:完全用Linux工作及其后续 ·如何系统的学习linux. ·什么是Fedora Linux ?
 ·Tomcat5.5.X 的安装和配置 ·在Linux上安装postgresql的全过程 ·Windows 开始->运行->命令 ·微软Windows Vista七个版本提前揭
 
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有