![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не компилится 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 нажать религия не позволяет?