次の方法で共有


HID コレクションにセキュリティで保護された読み取りを適用する

この記事では、ユーザー モード アプリケーションまたはカーネル モード ドライバーは、最上位の HID コレクションのセキュリティで保護された読み取りを適用する方法について説明します。

コレクションに対してセキュリティで保護された読み取りが有効になっている場合は、"信頼された" クライアント (SeTcbPrivilege 権限を持つクライアント) のみが、コレクションの開いているファイルから入力を取得できます。 カーネル モード ドライバーには既定で SeTcbPrivilege 権限がありますが、ユーザー モード アプリケーションにはありません。 ユーザー モードでシステム権限を取得する方法については、Microsoft Windows SDK ドキュメントの承認に関する情報を参照してください。

このメカニズムは主に、"信頼された" ユーザー モード システム コンポーネントが、SeTcbPrivilege 権限を持たないユーザー モード アプリケーションが重要なシステム操作中にコレクションから入力を取得できないようにするためです。 たとえば、"信頼された" ユーザー モード システム コンポーネントでは、SeTcbPrivilege 権限を持たないユーザー モード アプリケーションは、ログオン操作中にユーザーが提供する機密情報を取得できないようにすることができます。

"信頼された" クライアントは、IOCTL_HID_ENABLE_SECURE_READ 要求と IOCTL_HID_DISABLE_SECURE_READ 要求を使用して、コレクションのセキュリティで保護された読み取りを有効または無効にします。 SeTcbPrivilege 権限を持たないクライアントがこれらの要求を使用した場合、その要求はコレクションのセキュリティで保護された読み取り状態を変更せず、HID クラス ドライバーは STATUS_PRIVILEGE_NOT_HELD の状態の値を返します。

コレクションのセキュリティで保護された読み取りを有効または無効にすると、次のように機能します。

  • HID クラス ドライバーは、コレクションの開いているファイルごとにファイル固有のセキュリティで保護された読み取りカウントを維持します。 HID クラス ドライバーは、ファイル固有のセキュリティで保護された読み取りカウントの合計である、コレクションのセキュリティで保護された読み取りカウントも維持します。 コレクションのセキュリティで保護された読み取り数は、コレクションの作成時に 0 に初期化され、ファイルのセキュリティで保護された読み取り数は、ファイルが開かれると 0 に初期化されます。

  • HID クラス ドライバーがファイルの有効化要求を受け取ったときは、ファイルのセキュリティで保護された読み取り数を 1 ずつインクリメントします (コレクションのセキュリティで保護された読み取り数を 1 ずつインクリメントします)。

  • HID クラス ドライバーがファイルの無効化要求を受け取ったとき:

    • ファイルのセキュリティで保護された読み取り数が 0 より大きい場合、ドライバーはファイルのセキュリティで保護された読み取り数を 1 ずつデクリメントします (コレクションのセキュリティで保護された読み取り数を 1 ずつデクリメントします)。
    • ファイルのセキュリティで保護された読み取り数が 0 の場合、ドライバーはセキュリティで保護された読み取り数を変更しません。
  • コレクションのセキュリティで保護された読み取り数が 0 より大きい場合、HID クラス ドライバーは、コレクションのセキュリティで保護された読み取りを適用します。 それ以外の場合、ドライバーは、コレクションのセキュリティで保護された読み取りを適用しません。

  • クライアントは無効化要求を使用して、対応する有効化要求を取り消す必要があります。 ただし、クライアントがこれを行わない場合、HID クラス ドライバーは、ファイルの IRP_MJ_CLOSE 要求を処理するときに、コレクションのセキュリティで保護された読み取り数を適切にデクリメントします。 ドライバーは、閉じる要求を処理するときに、閉じているファイルのセキュリティで保護された読み取り数によって、コレクションのセキュリティで保護された読み取り数をデクリメントします。