Показать сообщение отдельно
  #1  
Старый 16.02.2015, 18:33
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию ошибка в AdjustTokenPrivileges

Есть код, вот он

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
     Token           : THandle;
     TokenPrivileges : TTokenPrivileges;
     ProcessHandle   : THandle;
     TokenHandle     : THandle;
     SID             : _SID_AND_ATTRIBUTES;
     Buff            : pointer;
     Snap,d,TypeUser : DWORD;
     Process         : TPROCESSENTRY32;
     user,domain     : array[0..MAX_PATH] of char;
 begin
     if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
     begin
       if LookupPrivilegeValue(nil, PChar('SeDebugPrivilege'), TokenPrivileges.Privileges[0].Luid) then
       begin
         TokenPrivileges.PrivilegeCount := 1;
         TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
         if AdjustTokenPrivileges(Token, false, TokenPrivileges, 0, PTokenPrivileges(nil)^, PDWord(nil)^) then//<- Вот тут
         begin
           Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
           if Snap <> INVALID_HANDLE_VALUE then
           begin
             Process.dwSize := SizeOf(TPROCESSENTRY32);
             if Process32First(Snap, Process) then
             repeat
               ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_TERMINATE,false,Process.th32ProcessID);
               OpenProcessToken(ProcessHandle,TOKEN_QUERY,TokenHandle);
               Buff:= HeapAlloc(GetProcessHeap,0,cbBuff);
               if GetTokenInformation(TokenHandle,TokenUser,buff,cbBuff,d) then
               begin
                 SID := SID_AND_ATTRIBUTES(buff^);
                 d := cbBuff;
                 TypeUser:= SidTypeUser;
                 if LookupAccountSid(nil,sid.Sid,user,d,domain,d,TypeUser) then
                 begin
                   if (lstrcmp(user,'SYSTEM') <> 0) and
                      (lstrcmp(user,'система') <> 0) and
                      (lstrcmp(user,'NETWORK SERVICE') <> 0) and
                      (lstrcmp(user,'LOCAL SERVICE') <> 0)
                   then
                   begin
                     MessageBox(0,user,#0,0);  // показать пользователя процесса
                     TerminateProcess(ProcessHandle,0);// завершить процесс
                   end;
                 end;
               end;
               CloseHandle(TokenHandle);
               CloseHandle(ProcessHandle);
             until
               not Process32Next(Snap, Process);
             CloseHandle(Snap);
           end;
         end;
       end;
     end;
end;
Онзавершает процессы кроме системных, но на строчке отмеченной "Вот тут" при компиляции выдает ошибку
Код:
[dcc32 Error] Unit1.pas(52): E2250 There is no overloaded version of 'AdjustTokenPrivileges' that can be called with these arguments
Посмотрел в интернете вроде все правильно описано, что не так?
Ответить с цитированием