Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Shutdown - Вопрос избитый но дело не в этом .   Найти похожие ветки 

 
vic_774N ©   (2002-11-19 17:57) [0]

Уважеемые мастера !

Вот этот участок кода написан в отдельном юните и при попытке выполнить главный код
получаю ошибку :

[Error] ShutdownSystem.pas(38): Ambiguous overloaded call to "AdjustTokenPrivileges"
[Fatal Error] Unit1.pas(7): Could not compile used unit "shutdownsystem.pas"

Если код находится в теле основной программы ошибки нет !
как грабли эти обойти ?


function SystemOff(Method: TShutdownType) : Boolean;
label _exit;
var
hToken, ph: THandle;
pid, n: DWORD;
luid: TLargeInteger;
NewState: TTOKENPRIVILEGES;
PreviousState: PTokenPrivileges;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := SizeOf(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
pid := GetCurrentProcessId;
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
if LookupPrivilegeValue(nil, "SeShutdownPrivilege", luid) then
begin
NewState.PrivilegeCount := 1;
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
NewState.Privileges[0].Luid := luid;
PreviousState := nil;
AdjustTokenPrivileges(hToken, false, NewState, SizeOf(PreviousState), PreviousState^, n);
end;
Result := Execute(Method);
goto _exit;
end;
Result := Execute(Method);
_exit:
end;


 
Игорь Шевченко ©   (2002-11-19 18:01) [1]

Нда...ну и программист пошел нынче...


 
vic_774N ©   (2002-11-19 18:07) [2]

Ну так что здесь неоднозначно ?

AdjustTokenPrivileges(hToken, false, NewState, SizeOf(PreviousState), PreviousState^, n);



 
han_malign ©   (2002-11-19 18:11) [3]

из Windows.pas
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
const NewState: TTokenPrivileges; BufferLength: DWORD;
var PreviousState: TTokenPrivileges; var ReturnLength: DWORD): BOOL; stdcall; overload;
{$EXTERNALSYM AdjustTokenPrivileges}
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
const NewState: TTokenPrivileges; BufferLength: DWORD;
PreviousState: PTokenPrivileges; var ReturnLength: DWORD): BOOL; stdcall; overload;
{$EXTERNALSYM AdjustTokenPrivileges}

- отсуда и вылезает неоднозначность перезагрузки функция(хотя и не должна), попробуй убрать ^
З.Ы. Передавать в качестве приемного буфера неинициализированный указатель, да еще указывать вместо размера структуры, размер указателя - не очень хорошая идея. Если бы скомпилировалось, то была совсем другая ошибка и в Run time.


 
vic_774N ©   (2002-11-19 18:14) [4]

to han_malign

попробую поколдовать :)


 
vic_774N ©   (2002-11-19 18:40) [5]

В общем благодаря han_malign грабли я обошел :
проблема оказалась в подключаемых модулях и в моей невнимаельности : модуль Windows - отсутствовал был WinProcs и WinTypes которые впихнул по умолчанию генератор компонент, а я и не заметил. Торопыжка был голодный - проглотил утюг холодный ;)

Тема закрыта !



Страницы: 1 вся ветка

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-15142
Micah'GF
2002-12-23 17:55
2003.01.06
Связь между юнитами


14-15287
^Sanya
2002-12-17 21:24
2003.01.06
У кого-нибудь стоит радио-интернет?


4-15347
VirginKiller
2002-11-18 15:45
2003.01.06
Help мониторинг каталога


3-14908
satron
2002-12-13 11:55
2003.01.06
Help me


1-15064
volph7777
2002-12-24 18:10
2003.01.06
парсинг простого текстового файла