Главная страница
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.014 c
1-15022
кондратий
2002-12-19 11:28
2003.01.06
unicode....


1-15085
dkDimon
2002-12-21 19:13
2003.01.06
Иконка приложения


14-15260
Мазут Береговой
2002-12-16 21:49
2003.01.06
теорией реляционных баз данных


1-15098
PVOzerski
2002-12-22 12:09
2003.01.06
Есть ли резон привлекать DirectX?


3-14937
iKS1
2002-12-11 15:55
2003.01.06
PReport