次の方法で共有


デバイス オブジェクトへの排他アクセスの指定

デバイスへの排他アクセスが有効になっている場合は、デバイスへのハンドルを一度に 1 つだけ開くことができます。 I/O マネージャーがデバイスへの排他アクセスを強制するには、デバイス スタック内の名前付きデバイス オブジェクトに排他プロパティを設定する必要があります。

PDO と FDO の両方を持つ WDM デバイス スタックの場合、排他プロパティは、INF AddReg ディレクティブを使用して、INF ファイルによってのみ設定できます。 PDO はスタック内の名前付きオブジェクトですが、(関数ドライバー自体ではなく) バス ドライバーは、関数ドライバーの代わりに PDO を作成します。 PDO の排他フラグを設定するようにバス ドライバーを指示する唯一の方法は、クラスまたはデバイス INF ファイルです。 (IoCreateDevice ルーチンの呼び出しによって FDO が作成されます。FDO の排他フラグを設定しても効果はありません)。

WDM 以外のドライバーや未加工モードで動作するデバイスなど、デバイス オブジェクトがスタックされていないドライバーは、IoCreateDeviceSecure ルーチンを使用して、名前付きデバイス オブジェクトの排他的プロパティを設定できます。

I/O マネージャーは、末尾の名前に関係なく、名前付きデバイス オブジェクトに名前ごとに排他性を適用します。 たとえば、デバイス オブジェクトに "\Device\DeviceName" という名前があるとします。 次に、I/O マネージャーは、"\Device\DeviceName\Filename1" を開き、その後に "\Device\DeviceName\Filename2" を開く要求の排他性を強制します。 デバイス スタック内の 2 つのオブジェクトに名前が付けられている場合 (推奨されません)、I/O マネージャーでは、オブジェクトごとに 1 つのハンドルを開くことができます。 このような状況では、ドライバーは、DRIVER_DISPATCH コールバック関数内で排他性自体を適用する必要があります。 また、I/O マネージャーでは、別のファイル ハンドルに対するオープンの排他性は適用されません。 デバイスの名前空間のファイルオープン要求の詳細については、「デバイス名前空間アクセスの制御」を参照してください。