5

My app uses SetSystemTime() to set the PC clock from a GPS source. This works fine in Windows 7 with User Account Control disabled, but in Windows 8, even with UAC disabled, it fails. The error I get back is ERROR_PRIVILEGE_NOT_HELD. The user logged into the machine is in the Administrators group. I can only get it to work if I run the application as "Run as Administrator" from the file's context menu in Explorer - but the logged-in user IS an Administrator.

So... what do I need to do differently on Windows 8 to get SetSysytemTime() to work? Do I need even more elevated privileges than the current users' Administrator rights? If so, what has higher privileges than Administrator? Or do I need to set the user account up differently to allow these kinds of calls to work on Windows 8?

EDIT: As noted in the comments, manually attempting to enable the SE_SYSTEMTIME_NAME privilege doesn't work. Neither does trying to add the privilege using the suggested MSDN method of LsaAddAccountRights.

4

2 に答える 2

4

[ユーザーアカウント制御の設定]でUACスライダーを完全に下に移動すると、UACはプロンプトを表示しませんが、有効になっていることを意味します。通常のプロセスは引き続き管理者権限なしで実行されますが、昇格(「管理者として実行」または「requireAdministrator」の宣言による)はユーザーの同意なしに行われます。

セキュリティポリシー「ユーザーアカウント制御:すべての管理者を管理者承認モードで実行する」を無効にするか、レジストリキー「EnableLUA」を0に設定すると、この動作は変更されますが、すべての MetroModernUIアプリが実行されなくなります。

ユーザーに管理者権限がない場合、サービスを使用せずにシステム時計を変更することはできません。

通常のユーザーに対してはアプリケーションを通常どおりに(ただし特別な権限なしで)開始し管理者に対しては(自動)昇格させたい場合は、マニフェストで「highestAvailable」を宣言することをお勧めします。

于 2012-11-01T12:40:34.023 に答える
3

これは、Windows 8でUACが無効になっているため、プロセスが(デフォルトで)高整合性ではなく中整合性で実行されるという事実に関連していると思います(この投稿を参照)。

アプリケーションマニフェストrequireAdministratorでリクエストする必要があると思います

于 2012-09-13T10:56:29.430 に答える