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;
    }
  • 相关阅读:
    CentOS安装配置ganglia
    k-means聚类算法
    SharePoint solution and feature management with PowerShell
    EM算法
    极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人
    学习游戏要学习编程语言吗?十大主流编程语言解析
    platform_device与platform_driver
    《用户体验要素》澄清了 UI 原型设计中看不见确感受得到的那一层
    ipconfig /flushdns 清除系统DNS缓存
    typedef和define具体的具体差别
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451857.html
Copyright © 2011-2022 走看看