• windows 枚举所有进程 的模块


     1 #include <Psapi.h>
     2 
     3 //#pragma comment(lib, "psapi.lib")
     4 
     5 BOOL UpdateProcessPrivilege(HANDLE hProcess, LPCTSTR lpRivilegeName = SE_DEBUG_NAME);
     6 
     7 //枚举进程中的所有
     8 void fun16(int argc, char *argv[]) {
     9     //提升当前进程的权限
    10     UpdateProcessPrivilege(GetCurrentProcess());
    11 
    12     DWORD PID[1024];//保存所有进程的ID
    13     DWORD cbNeeded;//系统当前实际进程数量
    14     //获取所有进程的ID
    15     if (!EnumProcesses(PID, sizeof(PID), &cbNeeded)) {
    16         printf("获取所有进程ID失败
    ");
    17         return;
    18     }
    19     DWORD processcount = cbNeeded / sizeof(DWORD);//计算进程个数
    20     printf("当前共有%d个进程
    ", processcount);
    21     HANDLE hProcess;
    22     HMODULE hModules[1024];//模块
    23     for (DWORD i = 0; i < processcount; ++i) {
    24         hProcess = OpenProcess(
    25             PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,//打开进程 查询信息 读取信息
    26             FALSE,
    27             PID[i]);
    28         if (hProcess) {
    29             printf("PID: %d
    ", PID[i]);
    30             if (EnumProcessModules(hProcess, hModules, sizeof(hModules), &cbNeeded)) {
    31                 for (int j = 0; j < (cbNeeded / sizeof(HMODULE)); ++j) {
    32                     TCHAR szFilename[MAX_PATH];
    33                     DWORD nSize;
    34                     if (GetModuleFileNameEx(hProcess, hModules[j], szFilename, MAX_PATH)) {
    35                         printf("	%d %s (0x%08x)
    ", j, szFilename, hModules[j]);
    36                     }
    37                 }
    38             }
    39             else {
    40                 printf("模块打开失败
    ");
    41             }
    42         }
    43         else {
    44             printf("PID: %d 打开进程失败
    ", PID[i]);
    45         }
    46         CloseHandle(hProcess);
    47     }
    48 
    49 }
    50 //提升进程权限
    51 BOOL UpdateProcessPrivilege(HANDLE hProcess, LPCTSTR lpRivilegeName) {
    52     HANDLE hToken;
    53     TOKEN_PRIVILEGES TokenPrivileges;
    54     if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken)) {
    55         printf("OpenProcessToken 成功
    ");
    56         LUID destLuid;
    57         if (LookupPrivilegeValue(NULL, lpRivilegeName, &destLuid)) {
    58             printf("LookupPrivilegeValue 成功
    ");
    59             TokenPrivileges.PrivilegeCount = 1;
    60             TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    61             TokenPrivileges.Privileges[0].Luid = destLuid;
    62             if (AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges,0,NULL,NULL)) {
    63                 printf("AdjustTokenPrivileges 成功
    ");
    64                 return TRUE;
    65             }
    66         }
    67     }
    68     return FALSE;
    69 }

    不知道为什么提升进程权限没用

    用管理员身份运行CMD,用CMD去执行程序,能打开一些,但还有很多程序无法打开。

  • 相关阅读:
    java8之lambda表达式(默认方法)
    结合 CSS3 & Canvas 模拟人行走的效果
    使用 SVG 实现一个漂亮的页面预加载效果
    借助 CSS Colorguard 来避免使用重复的颜色
    网站制作素材:创意的404错误页面下载
    使用 CSS3 打造一组质感细腻丝滑的按钮
    经典!HTML5 Canvas 模拟可撕裂布料效果
    实用工具:检测过时的浏览器并提醒用户更新
    Hya.io – 基于 Web 的数字音频工作站
    SlidesJS
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/11992421.html
Copyright © 2020-2023  润新知