zoukankan      html  css  js  c++  java
  • Unicode与MultiByte之间的练习: Process Cleaner

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <windows.h>
      4 #include <tlhelp32.h>
      5 
      6 using namespace std;
      7 
      8 const int MAX = 15;
      9 
     10 WCHAR SysProcList[MAX][MAX_PATH] = {
     11     L"[system process]",
     12     L"system",
     13     L"smss.exe",
     14     L"csrss.exe",
     15     L"wininit.exe",
     16     L"winlogon.exe",
     17     L"services.exe",
     18     L"lsass.exe",
     19     L"lsm.exe",
     20     L"svchost.exe",
     21     L"audiodg.exe",
     22     L"explorer.exe",
     23     L"conhost.exe",
     24     L"dllhost.exe",
     25     L"ctfmon.exe"
     26 };
     27 
     28 bool CheckSysProcList(LPWSTR lpText);
     29 void PrintfNormal(LPWSTR lpText);
     30 void PrintfSucceed(LPWSTR lpText);
     31 void PrintfError(LPWSTR lpText);
     32 
     33 int main()
     34 {
     35     HANDLE hToken;
     36     OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
     37     
     38     LUID luid = {};
     39     LookupPrivilegeValue(NULL, L"SeDebugPrivilege", &luid);
     40 
     41     TOKEN_PRIVILEGES tp;
     42     tp.PrivilegeCount = 1;
     43     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     44     tp.Privileges[0].Luid = luid;
     45     if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL))
     46     {
     47         PrintfError(L"ERROR_01!\n");
     48         Sleep(2000);
     49         return 0;
     50     }
     51 
     52     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
     53     if (INVALID_HANDLE_VALUE == hSnapshot)
     54     {
     55         PrintfError(L"ERROR_02!\n");
     56         Sleep(2000);
     57         return 0;
     58     }
     59 
     60     PROCESSENTRY32 pe32 = {};
     61     pe32.dwSize = sizeof(pe32);
     62     
     63     BOOL ret = Process32First(hSnapshot, &pe32);
     64     while (ret)
     65     {
     66         Sleep(100);
     67 
     68         bool isSysProc = (pe32.th32ProcessID == GetCurrentProcessId()) || (CheckSysProcList(wcslwr(pe32.szExeFile)));
     69 
     70         WCHAR wstr[MAX_PATH];
     71         wsprintf(wstr, L"%d %s %s", pe32.th32ProcessID, wcslwr(pe32.szExeFile), isSysProc ? L"ignored\n" : L"");
     72         PrintfNormal(wstr);
     73 
     74         if (!isSysProc)
     75         {
     76             BOOL tpret = TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID), NULL);
     77             wsprintf(wstr, L"shutdown %s\n", tpret ? L"succeed" : L"faild");
     78 
     79             if (tpret)
     80                 PrintfSucceed(wstr);
     81             else
     82                 PrintfError(wstr);
     83         }
     84 
     85         ret = Process32Next(hSnapshot, &pe32);
     86     }
     87 
     88     PrintfNormal(L"\nProcess Clean Finish...\n");
     89     Sleep(2000);
     90     return 0;
     91 }
     92 
     93 
     94 bool CheckSysProcList(LPWSTR lpText)
     95 {
     96     for (int i = 0; i < MAX; i++)
     97         if (0 == wcscmp(lpText, SysProcList[i]))
     98         return true;
     99 
    100     return false;
    101 }
    102 
    103 void PrintfNormal(LPWSTR lpText)
    104 {
    105     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
    106     printf("%S", lpText);
    107 }
    108 
    109 void PrintfSucceed(LPWSTR lpText)
    110 {
    111     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    112     printf("%S", lpText);
    113 }
    114 
    115 void PrintfError(LPWSTR lpText)
    116 {
    117     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
    118     printf("%S", lpText);
    119 }
    View Code
  • 相关阅读:
    修改mysql数据库字段内容默认值为当前时间
    报错 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
    python标准库之ConfigParser模块读写配置文件
    使用xshell连接liunx服务器遇到的问题( Connection failed)
    linux学习笔记(四)
    本地项目上传到github
    Java 获取昨天、前天时间
    Kibana 启动报错 Error: Unable to write Kibana UUID file, please check the uuid.server configuration value in kibana.yml
    Mybatis foreach 标签的使用
    RabbitMQ 延时队列
  • 原文地址:https://www.cnblogs.com/gwsbhqt/p/4649444.html
Copyright © 2011-2022 走看看