次の方法で共有


仮想アドレスの所有権のセキュリティ保護と解放

プロキシ ドライバーの SAN サービス プロバイダーがこれらのバッファーをキャッシュするたびに、プロキシ ドライバーは、ユーザー モード バッファーの仮想アドレスの所有権をセキュリティ保護する必要があります。 バッファーのキャッシュの詳細については、「登録済みメモリのキャッシュ」を参照してください。 プロキシ ドライバーは、ユーザー モード バッファーの所有権をセキュリティ保護するため、オペレーティング システムは、バッファーがアプリケーションによってオペレーティング システムに解放された場合に Windows ソケット スイッチに通知します。 バッファーの所有権をセキュリティ保護するには、プロキシ ドライバーは MmSecureVirtualMemory 関数を呼び出す必要があります。 この呼び出しでは、プロキシ ドライバーは、バッファーの開始アドレスとバッファーのサイズ (バイト単位) にポインターを渡します。

キャッシュされたバッファーの仮想マッピングから物理マッピングへの変更がスケジュールされている場合、スイッチは通知され、SAN サービス プロバイダーの WSPMemoryRegistrationCacheCallback 関数を呼び出して、SAN NIC からバッファー登録を削除し、SAN サービス プロバイダーのキャッシュからバッファーを削除します。 さらに、SAN サービス プロバイダーのプロキシ ドライバーは、MmUnsecureVirtualMemory 関数を呼び出して、バッファーの所有権を解放する必要があります。 この呼び出しでは、プロキシ ドライバーは、MmSecureVirtualMemory 呼び出しから以前に返されたバッファーにハンドルを渡します。

注:MmSecureVirtualMemory への呼び出しによってセキュリティ保護されたユーザー モード バッファーにアクセスしようとするドライバーは、オペレーティング システムをダウンさせる可能性があります。 そのため、プロキシ ドライバーがこのようなユーザー モード バッファーにアクセスする場合は、バッファーにアクセスするコードの try/except メカニズムも使用する必要があります。 try/except の詳細については、Visual C++ のドキュメントを参照してください。

SAN サービス プロバイダーは、バッファーの所有権をセキュリティ保護して解放するために、プロキシ ドライバーに I/O 制御 (IOCTL) 要求を送信できます。 詳細については、「SAN サービス プロバイダーの IOCTL の実装」を参照してください。