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

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

Shutdown ;- ;Вопрос избитый но дело не в этом . [D5, WinXP]


vic_774N ©   (2002-11-19 17:57:00) 

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

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

[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;


vic_774N   (2002-11-19 18:40:00) [1]

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

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


vic_774N   (2002-11-19 18:14:00) [2]

to han_malign

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


han_malign   (2002-11-19 18:11:00) [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:07:00) [4]

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

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


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

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


Наверх

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