枚举进程使用的DLL

摘要:
=ERROR_SUCCESS){bResult=FALSE;}CloseHandle;returnbResult;}//我们以“计算器”这个实例来枚举该进程的所有用到的模块的句柄,并打印出来intmain(){DebugPrivilege;HMODULEnHmodule[1024]={NULL};charlpFilename[MAX_PATH]="";DWORDcbNeeded=0;HWNDhwnd=::FindWindow;//以计算机为例子,枚举它的模块句柄DWORDidProcess=0;::GetWindowThreadProcessId;//获取计算器进程IDHANDLEhCalc=::OpenProcess;//获取进程的句柄if(!
//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;
        returnbResult;
    }
    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);
    returnbResult;    
}
//我们以“计算器”这个实例来枚举该进程的所有用到的模块的句柄,并打印出来
intmain()
{
    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;
}

免责声明:文章转载自《枚举进程使用的DLL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决某些Android Permission deniedDATEDIFF() 函数返回两个日期之间的时间下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

Redis设置Auth认证保护

Redis有一种保护数据安全的身份验证方法。有两种方法可以设置此身份验证。一个是通过配置文件。另一种是直接在Redis客户端命令中设置参数requirepas。首先是在配置文件中查找参数requirepass。这是配置Redis访问密码的参数。由于Redis具有很强的并发能力,并且只使用密码,攻击者可能会在短时间内发送大量密码猜测请求,这很容易被暴力破解。因...

Fiddler抓包7-post请求(json)(转载)

2.查看上图中的红色框:这里只支持application/x-www-form-urlencoded格式的body参数,即json格式。您需要检查JOSN列中的five和xml。1.如果遇到text/xml格式的正文,如下图所示...

go语言游戏服务端开发(一)——架构

本教程以Go语言为例。特别是游戏服务进程有更新上线时,稳定性还没有被线上并发验证,宕机的几率会增加,数据丢失的风险也会增加。为了减轻风险,可以考虑把数据缓存跟服务进程分离。对于轻中度游戏,游戏的通信量不会很多,没必要每个分服都有一个长连接socket网关。假设一个分服同时连接服务器的客户端有5k,一台机器的socket网关能支持5w个玩家。因此网关需要参与服...

为什么运行CMD后,一闪就不见了 解决方案

方法1:如果您中毒,系统中的一个进程正在监视您的命令。如果您看到CMD,可以关闭它。您可以检查任务管理中是否有流程。如果你关闭它,你应该可以打开它。如果没有,则说明已注入系统进程。很难杀死病毒。方法2:注册表:HKEY_LOCAL__清除MACHINE Software Microsoft CommandProcessor AutoRun中的值,即删除带有d...

js学习-es6实现枚举

最近,我大部分时间都在写dart,突然使用了js。我发现js不能直接声明枚举。目录枚举功能对象冻结()符号实现反映了不可更改值的唯一性。请注意,枚举特性枚举值不能重复,也不能修改。Switchcase可以直接判断对象。冻结()对象。方法可以冻结对象。无法更改实现constEnumSex=Object。冷冻枚举性别。人=1;安慰日志;//符号(男性)表示值co...