Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не компилится AdJustTokenPrivileges ... [D7, WinXP]


Bestden ©   (2004-02-10 14:36:00) 


Процедура выключения компа:



procedure TMain.ShutDown;
var ph: THandle;
   tp, prevst: TTokenPrivileges;
   rl: DWORD;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ph);
LookupPrivilegeValue(Nil,'SeShutdownPrivilege', tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:= 2;
AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF or EWX_FORCE,0);
end;


Всё вроде бы правильно, но компилятор ругается на ф-цию  AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
Пишет следующее:

 [Error] offer.pas(51): Ambiguous overloaded call to 'AdjustTokenPrivileges'
 [Fatal Error] SD.dpr(6): Could not compile used unit 'offer.pas'

Будьте добры помогите мне, а то мой процесс разработки программы заглох серьёзно и надолго...
Всё спасибо!


Bestden   (2004-02-11 17:59:00) [1]

Всем спасибо!!!
Свою проблему нашел сам :)
то [7]: до нахождения своей ошибки этот вариант никак не проходил...


Игорь Шевченко   (2004-02-11 11:44:00) [2]

AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), nil, rl);


Bestden   (2004-02-10 23:38:00) [3]

Так вот пишу теперь пишу :) не помогает справка!..., вот опять ты говоришь, что у тебя компилится, нифига не понимаю...
перепроверял типы, и часто делаемые ошибки по 10 раз минимум!
Справка объясняет, что не понятно с какой ей функцией работать и приводится пример, но у меня не как вроде в примере! У меня тип другой данных определенный...
Там может глюк в самой делфяхе, но может во мне :)
Там в общем в модуле Windows две процедуры с одним именем:=
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
 const NewState: TTokenPrivileges; BufferLength: DWORD;
 var PreviousState: TTokenPrivileges; var ReturnLength: DWORD): BOOL; external advapi32 name 'AdjustTokenPrivileges';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
 const NewState: TTokenPrivileges; BufferLength: DWORD;
 PreviousState: PTokenPrivileges; var ReturnLength: DWORD): BOOL; external advapi32 name 'AdjustTokenPrivileges';
разница как видите в них только в элементе PreviousState !
Но я то посылаю этой функции определенный тип...., ну млин даж незнаю что делать!
Может кто поможет?
А то моя прога нашла целую ГОРУ предкновения!
Всем спасибо!


VMcL   (2004-02-10 22:46:00) [4]

>>Bestden  (10.02.04 20:45) [2]

P.S. Ты не писал, что справка не помогла, => [1]


VMcL   (2004-02-10 22:44:00) [5]

>>Bestden  (10.02.04 20:45) [2]

Проверь внимательно типы параметров прототипов AdjustTokenPrivileges() и сравни с тем, что написано в твоем приложении. У меня на Д6, скомпилилось. Возможно в Д7 нужно где-то поюзать приведение типов.

>>Vit@ly ©  (10.02.04 21:16) [3]

AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);

Он же привел код.


Vit@ly   (2004-02-10 21:16:00) [6]

Что у тебя в 51 строке offer.pas
Выложи, посмотрим


Bestden   (2004-02-10 20:45:00) [7]

Зря ты так...
Во-первых, если бы мне помог хелп и Ф1, то я бы в инет и не вылазил!
Во-вторых, этот код не в одном факе написан и у других он компилится, но вот у меня не хочет...
В-третьих, ошибка эта указывает на ошибку распознания процедуры(в модуле Windows две функции AdjustTokenPrivileges, с разным четвертым параметром..), но процедура не моя а делфей(т.е. тех ребят что писали делфяхи)!!!
Вот поэтому я и прошу помоч...
А вот рилигия мне позволяет нажимать F1 !!!!!!!!!!!!!!!


VMcL   (2004-02-10 20:13:00) [8]

F1 нажать религия не позволяет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо