ストレージ クラス ドライバーは、デバイスを要求する SCSI ポートのアクセス許可を要求する必要があります。 クラス ドライバーがデバイスを要求する方法の詳細については、「ストレージ クラス ドライバーの ClaimDevice ルーチン」を参照してください。
新しいデバイスを検出して列挙するプロセスは、PnP デバイスか前置 PnP ストレージ デバイスかによって異なります。 SCSI ポート ドライバーは、同じデバイスを制御しようとする前置 PnP ドライバーと PnP ドライバーの間を仲裁します。 そのため、ストレージ デバイス ドライバーは、デバイスを操作する前に SCSI ポートからアクセス許可を取得する必要があります。
デバイスを使用するアクセス許可を取得するために、デバイス ドライバーはクレーム要求を SCSI ポート (通常は AddDevice ルーチン) に送信します。 クレーム要求は、IOCTL_SCSI_EXECUTE_NONE の I/O 制御コードと Parameters.Scsi.Srb の SRB へのポインターを持つ IRP で構成されます。 SRB は、SRB_FUNCTION_CLAIM_DEVICE 関数型です。
SCSI ポートは、デバイスが要求されたかどうかを示す各デバイスのフラグを維持します。 SCSI ポートは、SRB_FUNCTION_CLAIM_DEVICE 要求に応答してこのフラグを設定します。SCSI ポートは、SRB_FUNCTION_REMOVE_DEVICE 要求に応答してフラグをクリアします。
上位レベルのドライバーが存在しないデバイスを要求しようとすると、SCSI ポートは、クレーム要求 IRP に失敗し、STATUS_DEVICE_DOES_NOT_EXIST の状態を返します。
上位レベルのドライバーが既に要求されているデバイスを要求しようとすると、SCSI ポートはクレーム要求 IRP に失敗し、STATUS_DEVICE_BUSY の状態を返します。
クレーム要求が成功した場合、SCSI ポートは、SRB のデータ バッファー ポインター内のデバイスの現在のデバイス オブジェクトを返します。
以前に要求されたデバイスを解放するには、上位レベルのドライバーがリリース デバイス要求を SCSI ポート ドライバーに送信する必要があります。リリース デバイス要求は、SRB_FUNCTION_RELEASE_DEVICE の関数 の値を持つ SRB で構成されます。
ストレージ クラス ドライバーの観点からのクレーム デバイス要求の詳細については、「ストレージ クラス ドライバーの ClaimDevice ルーチン」を参照してください。