- Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall CloseProcess(String ProcesName)
{
HANDLE Snap;
PROCESSENTRY32 proces;
Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
proces.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(Snap, &proces))
{
do
{
if(proces.szExeFile[0] != '[')
{
if(SameText(proces.szExeFile, ProcesName))
{
ShowMessage("Proces odnaleziono - pobieram uchwyt"); /* komunikat kontrolny, sprawdzajÄ…cy czy odnaleziono proces */
HANDLE hWnd = OpenProcess(PROCESS_ALL_ACCESS, false, proces.th32ProcessID);
if(hWnd)
{
TerminateProcess(hWnd, ExitCode);
}
CloseHandle(hWnd);
return;
}
}
}
while(Process32Next(Snap , &proces));
}
CloseHandle(Snap);
}
//---------------------------------------------------------------------------
Po skompilowaniu programu, po uruchomieniu z poziomu środowiska C++Builder 2010 i wywołaniu funkcji, wszystko działa poprawnie, proces zostaje odnaleziony, uchwyt jest pobierany do zmiennej hWnd poprzez funkcję OpenProcess, ale po uruchomieniu aplikacji bez środowiska C++builder, proces zostaje odnaleziony ale funkcja nie pobiera uchwytu do zmiennej hWnd i otrzymuję komunikat odmowa dostępu, co sprawdziłem funkcją GetLastError(). Próbowałem zmienić przywileje za pomocą funkcji AdjustTokenPrivileges, ale to nic nie zmienia:
- Kod: Zaznacz cały
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
HANDLE hWnd = OpenProcess(PROCESS_ALL_ACCESS, false, proces.th32ProcessID);
Ten fragment kodu nie działa prawidłowo:
- Kod: Zaznacz cały
HANDLE hWnd = OpenProcess(PROCESS_ALL_ACCESS, false, proces.th32ProcessID);
Jakieś pomysły?



