2013/09/19

UAC云々

UAC:WindowsVista以降で管理者権限が必要な操作の時に暗転するあれ。
そのUACとドラッグ&ドロップの意外な関係。
意外っていうか、知ってる人には常識?
ドラッグ元とドロップを受け付けるアプリは同じUAC権限でないといけないというもの。
つまり「メモ帳」を管理者権限で立ち上げ、普通にエクスプローラーからテキストファイルをドロップすると開かれませんよ。という話。
一応エクスプローラーを管理者権限に上げれば良いのだが、そのためにはエクスプローラの設定を「プロセスを別で立ち上げる」にしないといけません。いろいろ面倒、というかそんなテクが必要なアプリ受け入れられないでしょうと思うので、結局、管理者権限が必要なアプリにドラッグ&ドロップ機能を付けてもダメってことだと思います。

コマンドラインで動かすCUIアプリで管理者権限が必要な場合、動かすアプリでなくコマンドライン(cmd.exe)に管理者権限が必要となる。
管理者権限でないコマンドラインで動作させると管理者権限が必要な処理のとこで何らかのエラーが起こり、そこで初めて「管理者権限じゃないせいでうまく動かないのかも?」と分かる。しかもこれだけでは別な原因のエラーかも知れない。さてそこで、プログラムの最初に管理者権限かどうかを判断してやりたくなる。
その判断はあんまりいい方法が見つからなくて、%SYSTEMROOT%下に適当なファイルを書込みするようにオープンしてみて出来るかどうか、って判定した。
(いやこんなことしないでもマニフェストでRequireAdministratorとすれば大丈夫なのか?)
#include <fstream>
std::fstream ofs("%SYSTEMROOT%\\new_file", std::ios::out);
if (ofs == NULL) {
   doc->addTextline(L"管理者権限が必要です。");    
}

UACそのものについてですが、「UAC無効」の方がセキュリティ下がるとか、動かなかったものが動くようになるって思ってましたが違います。 「ユーザーアカウント制御を使用している場合の注意事項」 が分かり易いですが、UACが有効だとユーザ権限でも管理者権限に昇格できて動かせます。
逆にUACが無効でユーザ権限の場合は、今まで昇格の確認が出てOKを押すときちんと動いてたものが、昇格確認が出ないで動かないとか、動いても書込み時にエラーになるとかになります。
なんか分かりずらいシステムですねぇ。

無効にしてAdministratorグループのユーザで動かすのが一番楽です。
有効にしてユーザグループのユーザだと昇格の確認が出るのが面倒だけどきちんと理解していれば確認が出るので安全です。
でもUACの確認が出たらノータイムでOK押しちゃうような人だと結局全部管理者権限になるので意味無いし面倒なだけです。
無効にしてユーザグループのユーザだと制限がかけられるので不便な代わりに安全です。 

0 件のコメント:

コメントを投稿