保護及釋放虛擬地址的擁有權
每當 Proxy 驅動程式的 SAN 服務提供者快取這些緩衝區時,Proxy 驅動程式必須保護使用者模式緩衝區虛擬位址的擁有權。 如需有關快取緩衝區的更多資訊,請參閱 已註冊記憶體的快取。 代理驅動程式會確保使用者模式緩衝區的擁有權,這樣一來,如果應用程式將緩衝區放回作業系統,作業系統會通知 Windows Sockets 接口。 若要保護緩衝區的擁有權,Proxy 驅動程式必須呼叫 MmSecureVirtualMemory 函式。 在此呼叫中,Proxy 驅動程式會將指標傳遞至緩衝區的起始位址,以及緩衝區的大小,以位元組為單位。
如果已排程變更快取緩衝區的虛擬對實體對應,則會通知交換器,並呼叫 SAN 服務提供者的 WSPMemoryRegistrationCacheCallback 函式,以從 SAN NIC 移除緩衝區註冊,並從 SAN 服務提供者的快取中移除緩衝區註冊。 SAN 服務提供者的 Proxy 驅動程式接著必須呼叫 MmUnsecureVirtualMemory 函式,以釋放緩衝區的擁有權。 在此呼叫中,Proxy 驅動程式會將句柄傳遞至先前從 MmSecureVirtualMemory 呼叫傳回的緩衝區。
注意 嘗試透過呼叫 MmSecureVirtualMemory 保護的使用者模式緩衝區,可能會降低作系統。 因此,當代理程式驅動程式存取這類使用者模式緩衝區時,它也必須以 try/except 機制包圍存取緩衝區的程式碼。 如需 try/except的詳細資訊,請參閱 Visual C++ 檔。
SAN 服務提供者可以將 I/O 控制件 (IOCTL) 要求傳送給 Proxy 驅動程式,以保護和釋放緩衝區的擁有權。 如需詳細資訊,請參閱 為 SAN 服務提供者實作 IOCTL。