たいそうな題をつけておいてなんですが、やっていることはたいしたことありません。。。
UAC を利用した場合、TokenIntegrityLevel に [Mandatory Label\Medium Mandatory Level] が設定されるわけですが、その状態だと restricted token を使って [BUILTIN\Administrators] に 'Deny' が設定されるわけです。
ということはつまり、 [BUILTIN\Administrators] に対してはその ACL が無効化されるわけですが、それ以外に関しては無効化されないわけです。
実際に下記のような ACL を設定したものを用意して実験してみました。
Sample1
Account |
Right |
BUILTIN\Administrators |
フル コントロール |
Sample2
Account |
Right |
BUILTIN\Administrators |
フル コントロール |
起動している account |
フル コントロール |
Sample1 の場合、UAC によって [BUILTIN\Administrators] は無効化されるので、対象に対して操作を行おうとすると昇格 dialog が表示されます。
ですが、Sample2 の場合、UAC によって [BUILTIN\Administrators] は無効化されるものの、[起動している account] が無効化されないため、対象に対して操作を行っても昇格 dialog が表示されません。
これらのことから、Explorer は実際に権限がないことを確認してから昇格 dialog を表示していることが読み取れます。
以前、Jitta さんの blog で議論したのですが、
<参考> UAC の動的昇格
やっぱり動的な昇格を行う場合には、実際に拒否されてから行うのが適切だと思います。