セキュリティで保護されたデバイスのインストールの作成

ドライバー パッケージを作成するときは、デバイスのインストールが常に安全な方法で実行されるようにする必要があります。 安全なデバイスのインストールとは、次のことを満たすものです。

  • デバイスとそのデバイス インターフェイス クラスへのアクセスを制限します

  • は、デバイス用に作成されたドライバー サービスへのアクセスを制限します

  • ドライバー ファイルが変更または削除されるのを防ぎます

  • デバイスのレジストリ エントリへのアクセスを制限する

  • デバイスの WMI クラスへのアクセスを制限します

  • SetupAPI 関数を正しく使用する

デバイスインストールのセキュリティは、 セキュリティ記述子によって制御されます。 セキュリティ記述子を指定するための主なメディアは、INF ファイルです。 システムは既定のセキュリティ記述子を提供します。ほとんどの状況では、これらの記述子をオーバーライドする必要はありません。

デバイスとインターフェイスのセキュリティ設定

システムは、すべてのシステム提供のデバイス セットアップ クラスに既定のセキュリティ記述子を提供します。 通常、これらの記述子により、システム管理者に対するフル アクセスと、ユーザーの読み取り/書き込み/実行アクセスが許可されます。 (デバイスへのアクセスを制御するセキュリティ記述子は、デバイスの デバイス インターフェイス クラスへのアクセスも制御します (存在する場合)。

WDM ドライバーの INF ファイルは、クラスごとまたはデバイスごとに、システムの既定の設定をオーバーライドするセキュリティ設定を指定できます。 新しいデバイス セットアップ クラスを作成するベンダーは、クラスのセキュリティ記述子を指定する必要があります。 一般に、デバイス固有のセキュリティ記述子を指定する必要はありません。 同じクラスに属するデバイスの種類ごとにユーザーの種類が大きく異なる場合は、デバイス固有のセキュリティ記述子を指定すると便利な場合があります。

WDM デバイス セットアップ クラスに属するすべてのデバイスのセキュリティ記述子を指定するには、クラス インストーラーの INF ファイルの INF ClassInstall32 セクション内で INF AddReg ディレクティブを使用します。 AddReg ディレクティブは、add-registry-section を指す必要があります。このセクションでは、DeviceType および Security レジストリ エントリの値を設定します。 これらのレジストリ値は、指定したデバイスの種類のすべてのデバイスのセキュリティ記述子を指定します。

WDM デバイス セットアップ クラスに属する 1 つのデバイスのセキュリティ記述子を指定するには、デバイスの INF ファイルの INF DDInstall.HW セクション内で INF AddReg ディレクティブを使用します。 AddReg ディレクティブは、add-registry-section であり、DeviceType および Security レジストリ エントリの値を設定するものを指す必要があります。 これらのレジストリ値は、関連する INF Models セクション で指定された ハードウェア ID または 互換性のある ID と一致するすべてのデバイスのセキュリティ記述子を指定します。

既定では、システムはデバイス用に設定されたセキュリティ記述子を、そのデバイスを表すデバイス オブジェクトを開く要求に適用します (たとえば、NT デバイス名が \Device\DeviceName のデバイスを開く要求)。

ただし、システムは既定では、デバイスの名前空間内のオブジェクトを開く要求に、デバイスに設定されたセキュリティ記述子を適用しません。ここで、デバイスの名前空間には、名前が \Device\DeviceName\ObjectName の形式であるすべてのオブジェクトが含まれます。 デバイスの名前空間内のオブジェクトに対するオープン要求に同じセキュリティ設定が適用されるようにするには、デバイスのFILE_DEVICE_SECURE_OPENデバイス特性フラグを設定します。 セキュリティで保護されたデバイス アクセスの詳細については、「デバイス名前空間アクセスの制御 (Windows ドライバー)」を参照してください。 FILE_DEVICE_SECURE_OPENデバイス特性フラグを設定する方法については、「デバイス特性の指定 (Windows ドライバー)」を参照してください。

PnP マネージャーは、ドライバーの AddDevice ルーチンを呼び出した後、デバイス オブジェクトのセキュリティ値を設定します。 一部の WDM ドライバーでは、 IoCreateDeviceSecure を呼び出して物理デバイス オブジェクト (PDO) を作成するときに、デバイス固有のセキュリティ記述子を指定できます。 詳細については、「デバイス オブジェクトのセキュリティ保護」を参照してください。

ドライバー ファイルのセキュリティ設定

INF CopyFiles ディレクティブを使用してファイルをコピーする場合は、file-list-section.security セクションを指定できます。 このセクションでは、 CopyFiles ディレクティブによってコピーされるすべてのファイルのセキュリティ記述子を指定します。 ただし、インストール先が%SystemRoot%のシステム サブディレクトリの 1 つである場合、ベンダーはドライバー ファイルのセキュリティ記述子を指定する必要はありません。 (これらのサブディレクトリの詳細については、「Using Dirids」を参照してください。)システムは、これらのサブディレクトリに既定のセキュリティ記述子を提供しており、既定の記述子をオーバーライドするべきではありません。

ドライバー サービスのセキュリティ設定

ドライバー INF ファイルの service-install-section 内 ( INF AddService ディレクティブを参照) には、 セキュリティ エントリを含めることができます。 このエントリは、デバイスに関連付けられているドライバー サービスの開始、停止、構成などの操作を実行するために必要なアクセス許可を指定します。 ただし、システムはドライバー サービスの既定のセキュリティ記述子を提供します。通常、この既定の記述子をオーバーライドする必要はありません。

デバイスとドライバーのレジストリ エントリのセキュリティ設定

INF AddReg ディレクティブを使用して INF ファイルのレジストリ エントリを指定する場合は、各 add-registry-section に対して add-registry-section.Security セクションを含めることができます。 add-registry-section。セキュリティ セクションでは、関連付けられている add-registry-section セクションによって作成される、作成されたレジストリ エントリへのアクセス許可を指定します。 システムは、 HKR 相対ルートの下に作成されたすべてのレジストリ エントリに対して既定のセキュリティ記述子を提供します。 したがって、相対ルートの下にレジストリ エントリを作成するときに、セキュリティ記述子を指定する必要はありません。

WMI クラスのセキュリティ設定

システムは、WMI クラスを識別する GUID に既定のセキュリティ記述子を割り当てます。 Windows XP以前のバージョンのオペレーティング システムの場合、WMI GUID の既定のセキュリティ記述子では、すべてのユーザーにフル アクセスが許可されます。 Windows Server 2003 以降では、既定のセキュリティ記述子は管理者にのみアクセスを許可します。

ドライバーが WMI クラスを定義していて、これらのクラスに対してシステムの既定のセキュリティ記述子を使用しない場合は、デバイスの INF ファイル内の INF DDInstall.WMI セクション を使用してセキュリティ記述子を指定できます。

SetupAPI 関数を正しく使用する

ドライバー パッケージに、SetupAPI 関数を呼び出すインストーラー、共同インストーラー、またはその他のインストール アプリケーションが含まれている場合は、SetupAPI を使用するためのガイドラインに従う必要があります。

インストールのセキュリティ設定のテスト

SetupAPI ログを使用して、デバイスのインストールに関連付けられているセキュリティ設定が正しく指定されていることを確認します。 ログ 記録レベルを詳細 (0x0000FFFF) に設定し、さまざまなインストール シナリオを試みてください。

このようなシナリオには、ユーザー アカウントとシステム管理者アカウントの両方からの初期インストールと再インストールの両方を含める必要があります。 ソフトウェアをインストールする前にデバイスを接続してみてください。その逆も同様です。

インストールが成功した場合は、ログを表示してエラーが発生しなかったことを確認します。 インストールに失敗した場合は、ログを表示してエラーの原因を特定します。

さらに、インストールが完了したら、次の操作を行うことができます。

  • レジストリ エディターを使用して、レジストリ エントリに割り当てられているセキュリティ設定を表示します。

  • マイ コンピューターを使用して、ファイルに割り当てられているセキュリティ設定を表示します。