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;
    }
  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451857.html
Copyright © 2011-2022 走看看