Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Вниз
Программное выключение компьютера. В чем ошибка? Найти похожие ветки
← →
stone (2003-01-15 12:51) [0]Доброго времени суток, мастера. Мне нужно программно выключить компьютер. Делаю следующее, но эффекта никакого. В чем моя ошибка?
procedure TfrmMain.ShutDownSystem;
var
handle, ph: THandle;
pid: DWORD;
luid: TLargeInteger;
dummy, priv: TOKEN_PRIVILEGES;
ver: TOSVersionInfo;
begin
ver.dwOSVersionInfoSize := SizeOf(ver);
GetVersionEx(ver);
if ver.dwOSVersionInfoSize = VER_PLATFORM_WIN32_NT then
begin
pid := GetCurrentProcessId;
ph := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
if OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) then
if LookupPrivilegeValue(nil, "SeShutdownPrivilege", luid) then
begin
priv.PrivilegeCount := 1;
priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
priv.Privileges[0].Luid := luid;
AdjustTokenPrivileges(handle, false, priv, 0, dummy, pid);
end;
end;
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;
← →
Александр Спелицин (2003-01-15 13:26) [1]Наверное надо вот так:
if OpenProcessToken(GetCurrentProcessId, TOKEN_ADJUST_PRIVILEGES, handle) then ...
А вот пример из MSDN:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
error("OpenProcessToken");
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError() != ERROR_SUCCESS)
error("AdjustTokenPrivileges");
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
error("ExitWindowsEx");
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.007 c