3

私はwinapi をプログラムしたことがないので、ここで少し問題があります

アプリケーションから PC の電源を切る必要があります。

このリンクテキストの例を見つけた後、この例を見つけて権限リンクテキストを変更する方法を見つけました

しかし、そのパラメーターを取得する方法に問題があります HANDLE hToken //アクセストークンハンドル

パラメータ OpenProcessToken LookupPrivilegeValue AdjustTokenPrivileges を取得するには、次の順序で作成する必要があると思いますが、どうすればよいかわからないパラメータがたくさんあります。

たぶん、あなたはそのHANDLE hTokenパラメータを取得してそれを機能させる方法の例をいくつか持っています。

ちなみに、私はすでに次の投稿リンクテキストを見ました

どうもありがとうございました。

4

6 に答える 6

5

ShellExecute()を使用してshutdown.exeを呼び出すことができます

于 2009-10-01T13:19:55.533 に答える
4

これはダニエルの答えに対するコメントには少し多いので、ここに置きます。

この時点での主な問題は、システムのシャットダウンを実行するために必要な特権でプロセスが実行されていないことです。

ExitWindowsExのドキュメントには、次の行が含まれています。

システムをシャットダウンまたは再起動するには、呼び出し元のプロセスが関数を使用し て特権AdjustTokenPrivilegesを有効にする必要があります。SE_SHUTDOWN_NAME詳細については、「特別な権限で実行する」を参照してください。

また、いくつかのサンプルコードもあります。ピンチでは、それをコピーすることができます。

于 2009-10-01T14:00:02.707 に答える
4

http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx

試す

ExitWindowsEx(EWX_POWEROFF, 0);
于 2009-10-01T13:21:47.930 に答える
0
#include<iostream>
using namespace std;
int main(){
system("shutdown -s -f -t 0");
}
于 2014-04-12T08:07:43.337 に答える
0

のいくつかの作業コードInitiateSystemShutdownEx:

// Get the process token
HANDLE hToken;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
    &hToken);

// Build a token privilege request object for shutdown
TOKEN_PRIVILEGES tk;
tk.PrivilegeCount = 1;
tk.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue(NULL, TEXT("SeShutdownPrivilege"), &tk.Privileges[0].Luid);

// Adjust privileges
AdjustTokenPrivileges(hToken, FALSE, &tk, 0, NULL, 0);

// Go ahead and shut down
InitiateSystemShutdownEx(NULL, NULL, 0, FALSE, FALSE, 0);

私が知る限り、ExitWindowsExソリューションに対するこれの利点は、呼び出しプロセスがアクティブなユーザーに属する必要がないことです。

于 2014-05-01T03:36:03.310 に答える