Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2015, 18:33   #1
helper999999
Пользователь
 
Регистрация: 22.02.2014
Сообщений: 45
По умолчанию ошибка в 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
Посмотрел в интернете вроде все правильно описано, что не так?
helper999999 вне форума Ответить с цитированием
Старый 16.02.2015, 19:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Код:
AdjustTokenPrivileges(Token, false, @TokenPrivileges, 0,nil, nil)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 20:09   #3
helper999999
Пользователь
 
Регистрация: 22.02.2014
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
AdjustTokenPrivileges(Token, false, @TokenPrivileges, 0,nil, nil)
пробывал, увы тоже самое, я уже как только не менял значения, всегда одна и та же ошибка...
helper999999 вне форума Ответить с цитированием
Старый 16.02.2015, 20:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Делфи у меня нет, а вот Лазарус говорит что твой код, что ты разместил в топе правильный. По крайней мере именно эта функция воспринимается им без проблем.
Наведи на нее мышку и посмотри каких параметров она тут требует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 20:45   #5
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

оказалось все елементарно нужно было добавить в VAR

Код:
var
ReturnLength:Cardinal;
и сделать так:
Код:
AdjustTokenPrivileges(Token, false, TokenPrivileges, 0, PTokenPrivileges(nil)^, ReturnLength)
Странно но переменной ReturnLength ни чего не присваивается но бещ нее отказывается работать странно) а темерь все ок
HTTqp вне форума Ответить с цитированием
Старый 16.02.2015, 21:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
ни чего не присваивается
А ты почитай для чего она. Есть in и out параметры. Вот почитай что они из себя представляют и все поймешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44