Я пытаюсь решить проблему, когда моя программа не может получить путь к процессу по идентификатору процесса (csrss.exe).
Ниже приведен мой самый простой воспроизводимый код C ++ в Visual Studio 2012:
#include "stdafx.h"
#include <iostream>
#include <psapi.h>
int get_proc_path_by_id(const DWORD dwProcID, TCHAR* procPath)
{
HANDLE h = ::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION , FALSE, dwProcID);
if (h)
{
if (::GetProcessImageFileName(h, procPath, MAX_PATH))
{
return ERROR_SUCCESS;
}
else
{
return GetLastError();
}
}
else
{
return GetLastError();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD procID = 1256; // csrss.exe ProcID
TCHAR procPath[MAX_PATH];
int procPathErrorCode = get_proc_path_by_id(procID, procPath);
if(procPathErrorCode == ERROR_SUCCESS)
{
std::wcout << procPath;
}
else
{
std::cout << "Failed with error code : " << procPathErrorCode;
}
return 0;
}
Я тестирую эту программу с процессом "csrss.exe", так как с помощью этого процесса был протестирован исходный код в моем продукте.
Я могу получить путь к процессу при запуске кода с правами администратора Visual Studio 2012.
![enter image description here](https://i.stack.imgur.com/oLzHj.png)
Но когда я откройте командную строку с правами администратора и запустите этот исполняемый файл, функция get_proc_path_by_id вернет код ошибки «5» (нарушение прав доступа).
Как я могу получить программу, способную получить путь процесса с помощью Admin CMD?