Форум: "WinAPI";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c