Compartir a través de


Protección y liberación de la propiedad de direcciones virtuales

El controlador proxy debe proteger la propiedad de las direcciones virtuales de los búferes en modo de usuario cada vez que el proveedor de servicios SAN para el controlador proxy almacena en caché esos búferes. Para obtener más información sobre los búferes de almacenamiento en caché, consulte Almacenamiento en caché de memoria registrada. El controlador proxy protege la propiedad de un búfer en modo de usuario, de modo que el sistema operativo notifique al conmutador Windows Sockets si el búfer vuelve al sistema operativo mediante una aplicación. Para proteger la propiedad de un búfer, el controlador proxy debe llamar a la función MmSecureVirtualMemory . En esta llamada, el controlador proxy pasa un puntero a la dirección inicial del búfer y el tamaño, en bytes, del búfer.

Si las asignaciones virtuales a físicas del búfer almacenado en caché están programadas para cambiar, se notifica el modificador y se llama a la función WSPMemoryRegistrationCacheCallback del proveedor de servicios san para quitar el registro del búfer de la NIC de SAN y el búfer de la memoria caché del proveedor de servicios san. El controlador proxy del proveedor de servicios SAN, a su vez, debe llamar a la función MmUnsecureVirtualMemory para liberar la propiedad del búfer. En esta llamada, el controlador proxy pasa el identificador al búfer que se devolvió anteriormente desde la llamada a MmSecureVirtualMemory .

Nota Un controlador que intenta acceder a un búfer en modo de usuario protegido a través de una llamada a MmSecureVirtualMemory puede reducir el sistema operativo. Por lo tanto, cuando el controlador proxy accede a este búfer en modo de usuario, también debe usar el mecanismo try/except alrededor del código que accede al búfer. Para obtener más información sobre try/except, vea la documentación de Visual C++.

Un proveedor de servicios SAN puede enviar solicitudes de control de E/S (IOCTL) al controlador proxy para proteger y liberar la propiedad de un búfer. Para obtener más información, consulte Implementación de IOCTLs para un proveedor de servicios SAN.