要求の所有権

I/O マネージャーが I/O 要求をフレームワークベースのドライバーに送信すると、フレームワークはその要求を途中で取得して、フレームワーク要求オブジェクトを作成します。このとき、要求にアクセスして要求オブジェクトを操作できるのはフレームワークだけであるため、フレームワークがこのオブジェクトを "所有" していることになります。

要求オブジェクトの作成後、フレークワークは、ドライバーのいずれかの I/O キューにそのオブジェクトを追加します。フレームワークは、キューから要求を取り出してドライバーに送信するまで、この要求オブジェクトを引き続き所有します。

ドライバーが要求オブジェクトを受信した後は、ドライバーが要求を所有します。ドライバーは、ハンドルを介して要求オブジェクトにアクセスし、そのオブジェクトを操作できます。要求オブジェクトを所有している間、ドライバーは、要求をキューに再配置する完了する取り消す、または転送することができます。いずれかの操作の実行後、ドライバーは要求オブジェクトの所有権を失い、そのオブジェクトにアクセスできなくなります。

要求オブジェクトの所有権がドライバーとフレームワークの間でやり取りされている間、オブジェクトのハンドルの値は変化しません。たとえば、ドライバーが I/O キューから要求を受信し、別のキューに再配置した後、要求を再度受信した場合でも、ハンドルの値は変化しません。同様に、ドライバーが要求を I/O ターゲットに転送し、I/O ターゲットによって要求が完了したという通知を後から受信する場合も、ドライバーの通知コールバック関数は、ドライバーが I/O ターゲットに指定したハンドル値と同じハンドル値を受け取ります。