コンソール バッファーのセキュリティとアクセス権
Windows セキュリティ モデルを使用すると、コンソール入力バッファーとコンソール スクリーン バッファーへのアクセスを制御できます。 セキュリティに関する詳細については、「アクセス コントロール モデル」を参照してください。
コンソール オブジェクトのセキュリティ記述子
CreateFile 関数または CreateConsoleScreenBuffer 関数を呼び出すときに、コンソール入力バッファーとコンソール スクリーン バッファーのセキュリティ記述子を指定できます。 NULL を指定すると、オブジェクトはデフォルトのセキュリティ記述子を取得します。 コンソール バッファーのデフォルトのセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。
CreateFile、CreateConsoleScreenBuffer、GetStdHandle によって返されるハンドルには、GENERIC_READ と GENERIC_WRITE アクセス権があります。
有効なアクセス権には、 GENERIC_READ と GENERIC_WRITE 一般的なアクセス権が含まれます。
値 | 意味 |
---|---|
GENERIC_READ (0x80000000L) | コンソール スクリーン バッファーへの読み取りアクセスを要求し、バッファーからデータを読み取るプロセスを有効にします。 |
GENERIC_WRITE (0x40000000L) | コンソール スクリーン バッファーへの書き込みアクセスを要求し、プロセスのバッファーへのデータの書き込を有効にします。 |
Note
ユニバーサル Windows プラットフォーム コンソール アプリと接続されたコンソールよりも整合性レベルが低いものに関しては、上記のセキュリティ記述子で通常許可されている場合でも、出力バッファーの読み取りと入力バッファーへの書き込みの両方が禁止されます。 詳細については、以下の「間違った方向の動詞」の説明を参照してください。
間違った方向の動詞
オブジェクトに読み取りまたは書き込みを明示的に許可するように指定されたセキュリティ記述子がある場合でも、コンソール オブジェクトに対する一部の操作は拒否されます。 これは特に、より制限の少ないコンテキストでコマンド ライン アプリケーションによって作成されたコンソール セッションを共有する特権の制限付きコンテキストで実行されているコマンド ライン アプリケーションに関係します。
「間違った方向の動詞」という用語は、コンソール オブジェクトの 1 つの通常のフローの逆である操作に適用することを目的としています。 具体的には、出力バッファーの通常のフローが書き込まれており、入力バッファーの通常のフローが読み取ります。 したがって、「間違った方向」は、出力バッファーの読み取りまたは入力バッファーの書き込みになります。 これらは、低レベルのコンソール I/O 関数 のドキュメントで説明されている関数です。
これが見つかる 2 つのシナリオは次のとおりです。
- ユニバーサル Windows プラットフォーム コンソール アプリ。 これらはその他のユニバーサル Windows プラットフォーム アプリケーションの仲間であるため、その他のアプリケーションから分離され、操作の影響に関するユーザーの保証を提供するという約束を保持しています。
- CreateProcess 中にラベル付けまたはトークン操作で実行できる既存のセッションよりも低い整合性レベルで意図的に起動された任意のコンソール アプリケーション。
これらのシナリオのいずれかが検出された場合、コンソールはコマンド ライン アプリケーション接続に「間違った方向の動詞」フラグを適用し、次の API への呼び出しを拒否して、レベル間の通信のサーフェスを減らします。
拒否された呼び出しは、オブジェクトのセキュリティ記述子によって読み取りまたは書き込みアクセス許可が拒否された場合と同じように、アクセス拒否エラー コードを受信します。