列举进程

#include <stdio.h>
#include <windows.h>

#define    Max_Process_Count    1024
#define    Max_Module_Count    1024

//缺少psapi.h头,自己导出函数

typedef    BOOL (__stdcall *ENUMPROCESSES)( OUT DWORD *, IN DWORD, OUT DWORD * );
typedef DWORD (__stdcall *GETMODULEFILENAMEEX)( IN HANDLE, IN HMODULE, OUT LPTSTR, IN DWORD );
typedef BOOL (__stdcall *ENUMPROCESSMODULES)( IN HANDLE, OUT HMODULE*, IN DWORD, OUT LPDWORD );

ENUMPROCESSES            EnumProcesses;
GETMODULEFILENAMEEX        GetModuleFileNameEx;
ENUMPROCESSMODULES        EnumProcessModules;

void GetPath( DWORD );

int main(int argc, char *argv[])
{
    HMODULE        hPsapiHandle = LoadLibrary( "psapi.dll " );

    printf( "/n" );

    if( ! hPsapiHandle )
    {
        printf( "Load psapi.dll error: %d/n", GetLastError() );

        return -1;
    }
    
    EnumProcesses = (ENUMPROCESSES)GetProcAddress( hPsapiHandle, "EnumProcesses" );

    GetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress( hPsapiHandle, "GetModuleFileNameExA" );

    EnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress( hPsapiHandle, "EnumProcessModules" );

    DWORD    processesID[Max_Process_Count];
    DWORD    buffNeeded;
    DWORD    processCount;

    if( !EnumProcesses( processesID, sizeof(processesID), &buffNeeded) )
    {
        FreeLibrary( hPsapiHandle );
        return -1;
    }

    processCount = buffNeeded  /sizeof(DWORD);

    int index = 0;

    for( index =0; index < processCount; index++ )
    {
        GetPath( processesID[index] );
    }

    if( hPsapiHandle )
    {
        FreeLibrary( hPsapiHandle );
    }

    return 0;
}

void GetPath( DWORD processID )
{
    char filePath[MAX_PATH];

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
                                    FALSE,
                                    processID
                                );
    if( hProcess )
    {
        HMODULE        hMod[Max_Module_Count];
        DWORD        buffNeeded, moduleCount;
        
        if( EnumProcessModules( hProcess, hMod, sizeof(hMod), &buffNeeded) )
        {
            moduleCount = buffNeeded / sizeof(HMODULE);

            if( hProcess && hMod[0] )
            {
                GetModuleFileNameEx( hProcess, hMod[0], filePath, sizeof(filePath) );
            }
            
            printf( "%d/t%s/n", processID, filePath );
        }
    }

    CloseHandle(hProcess);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值