【问题标题】:Access Denied When Enumerating Through Process Modules C++通过进程模块 C++ 枚举时访问被拒绝
【发布时间】:2018-03-26 13:41:47
【问题描述】:

我试图通过一个进程的模块进行枚举,以获取它运行的内存地址范围。这个函数可以很好地与其他进程一起使用。但是,在我打算分析的特定过程中,我得到错误代码 5,ERROR_ACCESS_DENIED。请注意,在位置 1 我得到错误代码 0,在位置 2 我得到错误代码 5。我知道可以保护一些内核对象,这可以解释这个错误代码。这是原因吗?如果是这样,是否有可能解决这个问题?

int PrintModules(DWORD processID)
{

HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;

// Print the process identifier.

printf("\nProcess ID: %u\n", processID);

// Get a handle to the process.

hProcess = OpenProcess(PROCESS_ALL_ACCESS,
    FALSE, processID);
std::cout << "POSITION 1 : " << GetLastError() << std::endl;
if (NULL == hProcess)
{
    return 1;
}
// Get a list of all the modules in this process.

if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
    for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
    {
        TCHAR szModName[MAX_PATH];

        // Get the full path to the module's file.

        if (GetModuleFileNameEx(hProcess, hMods[i], szModName,
            sizeof(szModName) / sizeof(TCHAR)))
        {
            // Print the module name and handle value.

            _tprintf(TEXT("\t%s (0x%08X)\n"), szModName, hMods[i]);
        }
    }
}
else {
    std::cout << "POSITION 2 : " <<GetLastError() << std::endl;
}

// Release the handle to the process.

CloseHandle(hProcess);

return 0;
}

【问题讨论】:

  • 在本地管理权限下运行您的应用程序或为您的进程设置正确的权限(AdjustTokenPrivileges())是否没有选项?
  • 我尝试以管理员身份运行应用程序并遇到了同样的问题。
  • 请使用 ProcessExplorer 或同等工具检查您的进程的安全信息。有些像防病毒程序或系统进程不允许读取其他进程。
  • 进程浏览器显示进程不受保护,系统有读/写权限。我已经调整了令牌权限。
  • PROCESS_ALL_ACCESS 是一个很大的需求,它可以让你以任何可以想象的方式搞乱一个进程。当您枚举 所有 正在运行的进程时,您几乎总是会遇到一个您没有足够的访问权限来执行此操作的进程。你必须跳过它。请考虑降低您的需求,看来您不需要更多的 PROCESS_QUERY_INFORMATION。

标签: c++ winapi memory


【解决方案1】:

ERROR_ACCESS_DENIED 表示您的句柄无效。当您出于以下两个原因之一调用 OpenProcess 时,您将获得无效句柄。

要么您的进程 ID 错误,要么您没有以管理员身份运行。您需要以管理员身份运行以获得 PROCESS_ALL_ACCESS 权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-03-24
    相关资源
    最近更新 更多