Нужно получить доступ к запущеному процессу, чтобы узнать из какой директории он запустился.
DWORD PIDByName(WCHAR * AProcessName)
{
HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 ProcessEntry;
DWORD pid;
LPWSTR s=NULL;
string str;
TCHAR sttr[MAX_PATH];;
ProcessEntry.dwSize = sizeof(ProcessEntry);
bool Loop = Process32First(pHandle, &ProcessEntry);
while (Loop)
{
if (wcsstr(ProcessEntry.szExeFile, AProcessName))
{
pid = ProcessEntry.th32ProcessID;
CloseHandle(pHandle);
return pid;
}
Loop = Process32Next(pHandle, &ProcessEntry);
}
return 0;
}
этой функцией получаю pid процесса.
if (processHandle != NULL) {
QueryFullProcessImageName(processHandle,0,ss,&pid);
GetProcessImageFileName(processHandle,ss,256);
if (GetModuleFileNameEx(processHandle, NULL, filename, sizeof(char)) == 0) {
cout << GetLastError();
cerr << "Failed to get module filename." << endl;
} else {
cout << "Module filename is: " << filename << endl;
}
CloseHandle(processHandle);
} else {
cerr << "Failed to open process." << endl;
}
здесь хочу вынуть путь функциями QueryFullProcessImageName и GetProcessImageFileName, но выбрасывается "Необработанное исключение по адресу 0x77DD2373 (ntdll.dll) в RLE.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000."
как я понимаю не хватает прав.
Пытаюсь назначить права этим:
SetPrivilege(HANDLE hToken,LPCTSTR Privilege,BOOL bEnablePrivilege);
подключив #pragma comment(lib, "Advapi32.lib").
Но такое ощущение что библиотека не линкуется, потому что выплевывает следующие:
Ошибка 10 error LNK1120: неразрешенных внешних элементов: 1
Ошибка 9 error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl SetPrivilege(void *,wchar_t const *,int)" (?SetPrivilege@@YAHPAXPB_WH@Z) в функции _main
Помогите пожалуйста!!!! Пишу в visual studio 2012