Protegendo e liberando a propriedade de endereços virtuais
O driver de proxy deve assegurar a propriedade dos endereços virtuais dos buffers em modo de utilizador sempre que o provedor de serviços SAN para o driver de proxy os armazene em cache. Para obter mais informações sobre buffers de cache, consulte Caching Registered Memory. O driver de proxy protege a propriedade de um buffer no modo de utilizador, para que o sistema operativo notifique o comutador Windows Sockets se o buffer for liberado de volta para o sistema operativo por uma aplicação. Para garantir a propriedade de um buffer, o driver de proxy deve chamar a funçãoMmSecureVirtualMemory. Nessa chamada, o driver de proxy passa um ponteiro para o endereço inicial do buffer e o tamanho, em bytes, do buffer.
Se os mapeamentos virtual-para-físico para o buffer armazenado em cache estiverem agendados para serem alterados, o switch será notificado e chamará a função de WSPMemoryRegistrationCacheCallback do provedor de serviços de SAN para remover o registro de buffer da SAN NIC e o buffer do cache do provedor de serviços de SAN. O driver de proxy do provedor de serviços SAN, por sua vez, deve chamar a função MmUnsecureVirtualMemory para liberar a propriedade do buffer. Nesta chamada, o driver de proxy passa o identificador para o buffer que foi retornado anteriormente da chamada MmSecureVirtualMemory.
Observação Um driver que tenta acessar um buffer de modo de usuário que foi protegido por meio de uma chamada para MmSecureVirtualMemory pode potencialmente derrubar o sistema operacional. Portanto, quando o driver proxy acede a esse buffer de modo de utilizador, deve também utilizar o mecanismo try/except em torno do código que acede ao buffer. Para obter mais informações sobre try/except, consulte a documentação do Visual C++.
Um provedor de serviços de SAN pode enviar solicitações de controle de I/O (IOCTL) para o driver de proxy para proteger e liberar a propriedade de um buffer. Para obter mais informações, consulte Implementação de IOCTLs para um Provedor de Serviços SAN.