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

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

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

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

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