何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 591
  • 記事 - 18
  • コメント - 2182
  • トラックバック - 183
ニュース
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2009
サイト内検索
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

オリジナル:msdn オンライン(英文)

この翻訳文は、機械翻訳を元に、日本語として読みやすいように編集しています。また、元のドキュメントはベータ版を対象に書かれているため、製品版とは異なることがあります。

また、現在、この文書の日本語版を確認していないために、翻訳文を掲載しています。正式なドキュメントが公開されたときには、そちらの記述が正式なものとなります。

このエントリは、直訴してみたにて、えむけいさんからいただいた指摘を元に、調査、作成しました。えむけいさん、ありがとうございます。


Windows Vista における、マニフェストを使用したアプリケーションのマーキング

Windows Vista で、アプリケーションを特徴づける正しい方法は、アプリケーションが何を必要とするかをオペレーティング・システムに伝える、アプリケーション マニフェストをプログラムに埋め込むことです。Windows Vista リリースで、明らかにされないか、あるいは無署名のコードが管理上の特権で走ることを可能にする条項があります。将来のリリースでは、昇格させられたアプリケーションを実行する唯一の方法は、アプリケーションが必要とする特権レベルを識別する、署名されたマニフェストを持つことになるでしょう。

アプリケーション マニフェスト スキーマ

アプリケーション マニフェストは Windows Vista リリースで新規に追加されたものではありません。マニフェストは Windows XP において、アプリケーション開発者に対して、アプリケーションが一緒にテストされた DLL のバージョンを識別する助けになるように、使われました。実行レベルを提供することは、その既存のマニフェストスキーマへの拡張子です。

Windows Vista アプリケーション マニフェストは、開発者がそれらのアプリケーションに求められた実行レベルの表わすのを許した属性で拡張されました。次のことはこれのためにフォーマットです。

<requestedExecutionLevel
   level="asInvoker|highestAvailable|requireAdministrator"
   uiAccess="true|false"/>
  

level

  • asInvoker - アプリケーションは親プロセスと同じトークンで実行します。

    重要:Windows Vista ベータ1で、このレベルのために使われた用語は leastPrivilege です。Windows Vista ベータ1でこのレベルのコードを表わすことを望んでいる開発者は、leastPrivilege を使うでしょう。開発者が Windows Vista の後のバージョンで用語 asInvoker を使うように、それらのマニフェストを更新する必要があるでしょう。

  • highestAvailable - アプリケーションは現在のユーザーが得ることができる最も高い特権で実行します。
  • requireAdministrator - アプリケーションは管理者として実行されることを要求します。そして管理者の完全なトークンでアプリケーションが始動されることを要求します。

uiAccess

  • false - アプリケーションはデスクトップでの入力を他のウインドウの UI に中継する必要がありません。アクセシビリティを提供するのではないアプリケーションが、誤ってこのフラグをそうするように設定するかもしれません。オンスクリーン キーボードのような、デスクトップ上の他のアプリケーションに入力を中継するアプリケーションで、true に設定されます。
  • true - アプリケーションは、UI 保護レベルを迂回して、デスクトップ上のより高い特権で実行されているウインドウに入力を中継することを可能にされます。この設定はただ UI アクセさびリティ アプリケーションのためにだけ使われる必要があります。

昇格のための同意ポリシー

同意ポリシーは、特権を求めているアプリケーションを始動すると、ユーザーが与えなくてはならない承認のタイプを決定します。それはローカルなセキュリティー ポリシーによる設定によって制御されます。

システム ポリシーを参照、設定するために

  1. コントロールパネルから、「管理ツール」を開き、「ローカル セキュリティ ポリシー」を実行します(昇格ダイアログが表示されます)。
  2. 「セキュリティの設定」から「ローカル ポリシー」を選びます。そして、「セキュリティ オプション」を選択します。
  3. 「ユーザーアカウント制御:管理者承認モードでの管理者に対する昇格時のプロンプトの動作」を選択します。
    ユーザーアカウント制御:管理者承認モードでの管理者に対する昇格時のプロンプトの動作

    より高い認可でプログラムを実行する前に、ユーザーにどのように促すか決定します。(以下は、Vista RC1 での「説明」を転記しています)

    • 資格を要求しないで昇格する - このオプションにより、承認管理者は、昇格を必要とする操作を、同意または資格情報を入力せずに実行できます。

      注意:このシナリオは、最も制限的な環境でのみ使用する必要があります。

    • 資格情報を要求する - 特権の昇格を必要とする操作を実行すると、承認管理者にユーザの名前とパスワードを入力するようにプロンプトが表示されます。ユーザが有効な資格情報を入力すると、操作は該当する特権で続行されます。
    • 同意を要求する - 特権の昇格を必要とする操作を実行すると、承認管理者に [許可] または [拒否] を選択するようプロンプトが表示されます。承認管理者が [許可] を選択すると、操作は利用可能な最高の特権で続行されます。このオプションにより、ユーザは名前とパスワードを入力して、特権タスクを実行できます。

最後に、昇格を不要とするためのマニフェスト ファイルを載せておきます。ファイル名を「実行ファイル名.exe.manifest」とし、下線部分を適切に書き換えて保存し、実行ファイルと同じディレクトリに置いてください。すでにマニフェストがある場合は、trustInfo セクションを加えてください。

なお、昇格をするためには、コードに対する署名が必要です。


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="application"
     type="win32"/>
  <description>Description of your application</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>
  

本文中で触れられていない項目

  • assemblyIdentity version - ファイルのプロパティを表示したときに表示される、「バージョン情報」の中の、「ファイルバージョン」
  • processorArchitecture - プロセッサのアーキテクチャ
  • name - ファイル名のうち、拡張子を含まないもの
  • type - win32
  • description - 実行ファイルの説明
投稿日時 : 2006年9月26日 21:48
コメント
  • # re: Windows Vista における、マニフェストを使用したアプリケーションのマーキング
    とっちゃん
    Posted @ 2006/09/27 11:19
    ちなみに...

    assemblyIdentity タグ部分は、Win32 Native アプリをさすタグですね。
    これが付いてるものを Win32 アセンブリと呼びます。
    Native アプリであることに変わりはありませんが、より厳密に、チェックが可能となります。

    Native のGACにあたる、System32/SxS フォルダに配置する場合必須となります(もちろん署名も)。
  • # re: Windows Vista における、マニフェストを使用したアプリケーションのマーキング
    Jitta
    Posted @ 2006/09/27 22:07
    とっちゃんさん、補足ありがとうございます。

    今いるところでは、全社的に「署名はつけない」のですが。。。
    高木氏のエントリにもありましたが、つける方向に動かないとダメですね。。。
  • # re: Windows Vista における、マニフェストを使用したアプリケーションのマーキング
    シャノン
    Posted @ 2007/02/01 10:45
    古いエントリですけど…

    > なお、昇格をするためには、コードに対する署名が必要です。

    これはまぢで?
    いよいよ強硬策に出てきましたね…MS。
    Authenticode署名なんて個人じゃ取得できねぇってのに。

    もちろん、昇格が必要ないような設計にするのが第一ですけど、今以上に「オレオレ証明書」が氾濫しそうな予感。
  • # re: Windows Vista における、マニフェストを使用したアプリケーションのマーキング
    すず
    Posted @ 2007/05/21 14:59
    #大変古いエントリですが…
    マニフェストは丁度はまっていた部分だったので本記事は大変参考になりました。
    ところで、まさに"UIアクセサビリティ"の為のソフトウエアを書いているところなのですが、
    uiAccess="true"
    とすると「サーバーから紹介が返ってきました」(Err:8235)というエラーになってしまいます。
    コードに対する署名が必要とか、そういう理由なのでしょうか。ご存知でしたら教えてください。
  • # re: Windows Vista における、マニフェストを使用したアプリケーションのマーキング
    Jitta
    Posted @ 2007/05/23 22:37
    トラックバックはれてない。。。
    すずさんへ
    こちらをどうぞ。特に、コメント内。
    http://blogs.wankuma.com/jitta/archive/2007/05/22/77739.aspx
タイトル  
名前  
Url
コメント