Sichern und Freigeben des Besitzes virtueller Adressen

Der Proxytreiber muss den Besitz der virtuellen Adressen von Benutzermoduspuffern sichern, wenn der SAN-Dienstanbieter für den Proxytreiber diese Puffer zwischenspeichert. Weitere Informationen zum Zwischenspeichern von Puffern finden Sie unter Zwischenspeichern des registrierten Arbeitsspeichers. Der Proxytreiber sichert den Besitz eines Puffers im Benutzermodus, sodass das Betriebssystem den Windows Sockets-Schalter benachrichtigt, wenn der Puffer von einer Anwendung an das Betriebssystem freigegeben wird. Um den Besitz eines Puffers zu sichern, muss der Proxytreiber die MmSecureVirtualMemory-Funktion aufrufen. In diesem Aufruf übergibt der Proxytreiber einen Zeiger auf die Startadresse des Puffers und die Größe des Puffers in Bytes.

Wenn die virtuellen zu physischen Zuordnungen für den zwischengespeicherten Puffer geändert werden sollen, wird der Switch benachrichtigt und ruft die WSPMemoryRegistrationCacheCallback-Funktion des SAN-Dienstanbieters auf, um die Pufferregistrierung aus der SAN-Netzwerkkarte und den Puffer aus dem Cache des SAN-Dienstanbieters zu entfernen. Der Proxytreiber des SAN-Dienstanbieters wiederum muss die MmUnsecureVirtualMemory-Funktion aufrufen, um den Besitz des Puffers freizugeben. In diesem Aufruf übergibt der Proxytreiber das Handle an den Puffer, der zuvor vom MmSecureVirtualMemory-Aufruf zurückgegeben wurde.

Hinweis Ein Treiber, der versucht, auf einen Benutzermoduspuffer zuzugreifen, der durch einen Aufruf von MmSecureVirtualMemory gesichert wurde, kann das Betriebssystem möglicherweise herunterfahren. Wenn der Proxytreiber auf einen solchen Puffer im Benutzermodus zugreift, muss er daher auch den try/except-Mechanismus um den Code verwenden, der auf den Puffer zugreift. Weitere Informationen zu try/except finden Sie in der Visual C++-Dokumentation.

Ein SAN-Dienstanbieter kann E/A-Steuerungsanforderungen (IOCTL) an den Proxytreiber senden, um den Besitz eines Puffers zu sichern und freizugeben. Weitere Informationen finden Sie unter Implementieren von IOCTLs für einen SAN-Dienstanbieter.