1

Windows 7 でシャットダウンを防止したい se_shutdown_privilege の取得は成功するが、AbortSystemShutdown は常に失敗する AbortSystemShutdown(NULL),AbortSystemShutdown("127.0.0.1"),AbortSystemShutdown(PcName) を試しました。

これまでのところ成功していません。

4

2 に答える 2

2

どうやら、InitiateSystemShutdown (およびその関数のExAbortSystemShutDownバージョン)によって呼び出されたシャットダウンを中止するようです。ExitWindows

InitiateSystemShutdown および InitiateSystemShutdownEx 関数は、システムがシャットダウン中であることをユーザーに通知するダイアログ ボックスを表示します。シャットダウンのタイムアウト期間中、AbortSystemShutdown 関数はシステムのシャットダウンを防ぐことができます。

于 2012-06-12T20:49:59.170 に答える
1

これは、Windows 7 x64 で問題なく動作します。あなたはコードを投稿していないので、あなたが何をしているのかわかりません。関数はこのSetPrivilegeMSDN ページからコピーされました: http://msdn.microsoft.com/en-us/library/windows/desktop/aa446619%28v=vs.85%29.aspx

コマンドプロンプトで「shutdown /s /t 500000」と入力してシャットダウンを開始し、プログラムを実行するとキャンセルされます。

#include <Windows.h>
#include <stdio.h>

BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege) 
{
    TOKEN_PRIVILEGES tp;
    LUID luid;

    if ( !LookupPrivilegeValue(NULL, lpszPrivilege, &luid ) )
    {
        printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
        return FALSE; 
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0;

    if ( !AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) )
    { 
        printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); 
        return FALSE; 
    } 

    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
    {
        printf("The token does not have the specified privilege. \n");
        return FALSE;
    } 
    return TRUE;
}

int main()
{
    HANDLE hToken;
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
    if(!SetPrivilege(hToken, SE_SHUTDOWN_NAME, TRUE))
    {
        printf("Could not adjust privileges\n");
    }
    if(!AbortSystemShutdown(NULL))
    {
        printf("AbortSystemShutdown failed (%08x)", GetLastError());
    }
    CloseHandle(hToken);
    return 0;
}
于 2012-06-13T02:19:55.013 に答える