デバイス アクセスの制御 (WDM)

デバイスへのアクセスは、セキュリティ記述子 (およびそれに含まれる ACL) によって制御されます。 デバイス オブジェクトのセキュリティ記述子は、デバイス オブジェクトの作成時に指定するか、レジストリで設定できます。

WDM ドライバーのデバイス アクセスの制御

WDM ドライバー (特定のバス ドライバー以外) がデバイス オブジェクトを作成すると、プラグ アンド プレイ マネージャーはデバイスのセキュリティ記述子を決定します。 操作の順序は次のとおりです。

  1. PnP マネージャーは、ドライバーの AddDevice ルーチンを呼び出します。

  2. ドライバーのAddDeviceルーチンはIoCreateDeviceを呼び出してデバイス オブジェクトを作成し、デバイス オブジェクト スタックにアタッチします。

  3. PnP マネージャーは、新しく作成されたデバイス オブジェクトのセキュリティ記述子を更新します。

WDM ドライバーの場合、PnP マネージャーは、デバイス オブジェクトのセキュリティ記述子を次のように決定します。

  1. デバイスのレジストリにセキュリティ記述子の設定がある場合は、デバイス スタック内のすべてのオブジェクトに適用されます。

  2. それ以外の場合、デバイスのセットアップ クラスにレジストリにセキュリティ記述子設定がある場合は、デバイス スタック内のすべてのオブジェクトに適用されます。

  3. それ以外の場合、PnP マネージャーは、各オブジェクトの既定のセキュリティ記述子を変更せずに残します。 この場合、スタックの既定のセキュリティ記述子は、PDO のデバイスの種類とデバイス特性によって決まります。

ほとんどのデバイスの種類と特性では、既定のセキュリティ記述子は管理者にフル アクセス (GENERIC_ALL) を提供し、アクセスの読み取り、書き込み、実行 (GENERIC_READ |GENERIC_WRITE |GENERIC_EXECUTE) 他のすべてのユーザーにアクセスできます。

レジストリでデバイスまたはデバイス セットアップ クラスのセキュリティ記述子を設定する方法の詳細については、「レジストリでのデバイス オブジェクトのプロパティの設定」を参照してください

デバイスが未加工モードで動作している場合、PnP マネージャーはデバイス オブジェクトのセキュリティ記述子を特定できません。 その場合、バス ドライバーはセキュリティ記述子を提供する必要があります。以下を参照してください。

WDM バス ドライバーのデバイス アクセスの制御

WDM バス ドライバーは、生モードで操作できるすべてのデバイスの PDO のセキュリティ記述子を提供する必要があります。 IoCreateDeviceSecure を使用して、セキュリティ記述子を持つデバイス オブジェクトを作成します。

バス ドライバーが raw モードでデバイスを操作しない場合は、セキュリティ記述子を指定する必要はありません。 PnP マネージャーは、上記のようにセキュリティ記述子を決定します。 バス ドライバーは、その PDO が既定の記述子よりも厳密なセキュリティ設定を持っていることを確認する必要がある場合は、セキュリティ記述子を提供できます。 バス ドライバーによって指定された記述子は、レジストリの設定によってオーバーライドされます。

デバイス オブジェクトの作成の詳細については、「デバイス オブジェクトの作成」を参照してください。

WDM 以外のドライバーのデバイス アクセスの制御

WDM 以外のドライバーは、作成する名前付きデバイス オブジェクトの既定のセキュリティ記述子とクラス GUID を指定する必要があります。

IoCreateDeviceSecureルーチンを使用して、名前付きデバイス オブジェクトを作成し、そのデバイスの既定のセキュリティ記述子とクラス GUID を指定します。 セキュリティ記述子は、SDDL のサブセットで指定されます。 詳細については、デバイス オブジェクトの SDDLを参照してください。

システムは、既定のセキュリティ記述子を、指定されたクラス GUID のレジストリ内のセキュリティ設定でオーバーライドします。 ドライバーは、デバイスに対して独自の一意の GUID を指定する必要があります。 GuidGen ツールを使用して、一意の GUID を生成します。 (GuidGen は Microsoft Windows SDK に含まれています)。