wuyingjie2022 发表于 2023-10-17 15:47

windows api

#include <iostream>
#include <windows.h>
#include <psapi.h>
int main()
{
        HMODULE lpmodule = {0};
        DWORD nume = 0;
        LPSTR   lpBaseName=NULL;
        int i = 0;
        HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,TRUE,5456);
        if (handle == NULL)
        {
                printf("失败");
                getchar();
        }
        int ss = EnumProcessModules(handle, lpmodule, sizeof(lpmodule), &nume); // 遍历所有模块
        while (lpmodule)
        {
                int s = GetModuleBaseName(handle,lpmodule,lpBaseName,sizeof(lpBaseName));//得到指定模块的名称
                s = GetLastError(); //错误码 87参数错误
                printf("%s\n", lpBaseName);
                i++;
        }
}
这个程序是遍历指定进程的模块并且打印出模块名称
程序编译没有问题就是运行结果错误   调试后发现是GetModuleBaseName这个函数失败   错误码为87   参数错误    请大神们指出错误

shieep 发表于 2023-10-17 16:55

lpBaseName参数错误

银.桑 发表于 2023-10-17 18:04

你提供的lpBaseName是一个指针,要么你申请一块空间并指向这个块空间,要么你写成char BaseName。如果你申请空间的话,第四个参数就不能用sizeof(lpBaseName),要写你实际申请的空间大小

bester 发表于 2023-10-17 18:17

        HMODULE lpmodule = { 0 };
        DWORD nume = 0;
        wchar_t basename = { 0 };
        int i = 0;
        HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, GetCurrentProcessId());
        if (handle == NULL)
        {
                printf("失败");
                getchar();
        }
        int ss = EnumProcessModules(handle, lpmodule, sizeof(lpmodule), &nume); // 遍历所有模块
        while (lpmodule)
        {
                int s = GetModuleBaseName(handle, lpmodule, basename, 1024);//得到指定模块的名称
                s = GetLastError(); //错误码 87参数错误
                wprintf(L"%s\n", basename);
                i++;
        }

因为我设置的是unicode环境 所以默认是调用宽字节,所以basename用的是wchar_t,如果你想用窄字节,就用char basename,然后在 GetModuleBaseName这里改成 GetModuleBaseNameA即可
页: [1]
查看完整版本: windows api