[WinAPI@Vista] TerminateProcess: Odmowa dostępu

0

Chciałem napisać prosty programik który zabija proces taskeng.exe

void *Snap;
  PROCESSENTRY32 proces;
  
  Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);
  proces.dwSize = sizeof(PROCESSENTRY32);
  
  if(Process32First(Snap , &proces))
  {
    do
    {
      if(strcmp(proces.szExeFile, "taskeng.exe") == 0)
      {
         HANDLE hProcess = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE, 
            TRUE, proces.th32ProcessID);
		 if(hProcess == NULL) ErrorExit("OpenProcess");
         TerminateProcess(hProcess, 0);
         CloseHandle(hProcess);
         break;
      }
    }
    while(Process32Next(Snap , &proces));
  }
  CloseHandle(Snap);

Jednak OpenProcess zwraca NULL, a GetLastError zwraca 5 - "Odmowa dostępu". Proces należy do mnie i mam prawa administratora. O co kaman ? Z managera zadań mogę bez problemu zabić ten proces. Pamiętam, że w XP spokojnie sie dało zabić w ten sposób proces. Czyżby Vista coś zmieniła ?

0

To, że pracujesz na koncie administratora nie oznacza, ze masz prawa administratora. Masz aktywne UAC? Przy próbie wykonania tego pojawia ci się dialog UAC?

Musisz powiedzieć systemowi, że potrzebujesz uprawnień administracyjnych.

Ten artykuł chyba wyjaśnia wszystkie problemy:
http://msdn.microsoft.com/msdnmag/issues/07/01/UAC/#S7

0

No tak, pozmieniało sie co nie co. Szczerze mówiąc denerwują mnie te zabezpieczenia. Zwłaszcza, że jakichś szczególnie ważnych danych na kompie nie mam, które ktoś by miał zniszczyć czy ukraść. A i tak pewnie już są łamane :D :D :D

0

UAC możesz wyłączyć przecież. Ale ja ze swojej strony powiem, ze jest to jedna z najgenialniejszych rzeczy - nareszcie użytkownik będzie musiał wyrazić zgodę na zapis wirusa np. do %WINDIR% czy Rejestru w HKLM.
I UAC znacząco ułatwia pracę przy używaniu konta o ograniczonych uprawnieniach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1