Browse Source

Fix Auto-Shutdown feature on Windows

adaptive-webui-19844
Christophe Dumez 14 years ago
parent
commit
308e358d3f
  1. 2
      src/bittorrent.cpp
  2. 28
      src/misc.cpp

2
src/bittorrent.cpp

@ -2035,6 +2035,8 @@ void Bittorrent::addConsoleMessage(QString msg, QString) { @@ -2035,6 +2035,8 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
saveFastResumeData();
delete s;
misc::shutdownComputer();
exiting = true;
qApp->exit();
}
}
}

28
src/misc.cpp

@ -234,7 +234,33 @@ void misc::shutdownComputer() { @@ -234,7 +234,33 @@ void misc::shutdownComputer() {
AEDisposeDesc(&eventReply);
#endif
#ifdef Q_WS_WIN
InitiateSystemShutdownA(0, qPrintable(tr("qBittorrent will shutdown the computer now because all downloads are complete.")), 10, true, false);
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return;
// Get the LUID for 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 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)
return;
bool ret = InitiateSystemShutdownA(0, tr("qBittorrent will shutdown the computer now because all downloads are complete.").toLocal8Bit().data(), 10, true, false);
qDebug("ret: %d", (int)ret);
// Disable shutdown privilege.
tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);
#endif
}

Loading…
Cancel
Save