zoukankan      html  css  js  c++  java
  • 枚举进程使用的DLL

    // tt2.cpp : 定义控制台应用程序的入口点.
    
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream.h>
    #include "Shlwapi.h"
    
    #include "Psapi.h"
    #pragma comment(lib,"Psapi.lib")
    bool DebugPrivilege(const char *PName, BOOL bEnable)
    {
        bool              bResult = TRUE;
        HANDLE            hToken;
        TOKEN_PRIVILEGES  TokenPrivileges;
        
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
        {
            bResult = FALSE;
            return bResult;
        }
        TokenPrivileges.PrivilegeCount = 1;
        TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
        
        LookupPrivilegeValue(NULL, PName, &TokenPrivileges.Privileges[0].Luid);
        AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
        if (GetLastError() != ERROR_SUCCESS)
        {
            bResult = FALSE;
        }
        
        CloseHandle(hToken);
        return bResult;    
    }
    //我们以“计算器”这个实例来枚举该进程的所有用到的模块的句柄,并打印出来
    int main()
    {
        DebugPrivilege(SE_DEBUG_NAME, TRUE);
        HMODULE nHmodule[1024]={NULL};
        char    lpFilename[MAX_PATH]="";
        DWORD cbNeeded=0;
        HWND hwnd=::FindWindow(NULL,"计算器");//以计算机为例子,枚举它的模块句柄
        DWORD idProcess=0;
        ::GetWindowThreadProcessId(hwnd,&idProcess);//获取计算器进程ID
        HANDLE hCalc=::OpenProcess(PROCESS_ALL_ACCESS,NULL,idProcess);//获取进程的句柄
        if (!hCalc)
        {
            CloseHandle(hwnd);
            ::MessageBox(NULL,"很遗憾,你没有运行计算器","EnumProcessModules",MB_OK);
        }
        else
        {
            BOOL bRetn= ::EnumProcessModules(hCalc,nHmodule,sizeof(nHmodule),&cbNeeded);
            if (!bRetn)
            {
                CloseHandle(hCalc);
                ::MessageBox(NULL,"很遗憾,获取模块句柄失败","EnumProcessModules",MB_OK);
            }
            else
            {
                for (int i=0;i<((int)cbNeeded/sizeof(HMODULE));i++)
                {
                    cout<<""<<i<<"个:";
                    GetModuleFileNameEx(hCalc,nHmodule[i],lpFilename,MAX_PATH);
                    cout<<lpFilename;
                    cout<<endl;
                }
            }
        }
        DebugPrivilege(SE_DEBUG_NAME, FALSE);
        return 0;
    }
  • 相关阅读:
    无重复字符的最长子串
    最长公共前缀
    项目开发的 工程化
    包管理 import debug 模块管理 module
    Third Party Browser Drivers NOT DEVELOPED by seleniumhq
    任何不看源码的代码引入都是存在定时爆炸的可能
    博客数计数
    lineage 世系 血缘 容错机制 DAG
    查源码分析 游标 写 需要 cursors 一切不看源码的代码引入都是定时炸弹的启动
    8核 16g 及时释放内存空间
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451857.html
Copyright © 2011-2022 走看看