Protegendo e liberando a propriedade de endereços virtuais
O driver proxy deve proteger a propriedade dos endereços virtuais dos buffers do modo de usuário sempre que o provedor de serviços SAN do driver proxy armazenar esses buffers em cache. Para obter mais informações sobre buffers de cache, consulte Cache de memória registrada. O driver proxy protege a propriedade de um buffer do modo de usuário, de modo que o sistema operacional notifique a opção Soquetes do Windows se o buffer for liberado novamente para o sistema operacional por um aplicativo. Para proteger a propriedade de um buffer, o driver proxy deve chamar a função MmSecureVirtualMemory . Nessa chamada, o driver proxy passa um ponteiro para o endereço inicial do buffer e o tamanho, em bytes, do buffer.
Se os mapeamentos virtuais para físicos do buffer armazenado em cache estiverem agendados para serem alterados, a opção será notificada e chamará a função WSPMemoryRegistrationCacheCallback do provedor de serviços SAN para remover o registro de buffer da NIC SAN e o buffer do cache do provedor de serviços SAN. O driver proxy do provedor de serviços SAN, por sua vez, deve chamar a função MmUnsecureVirtualMemory para liberar a propriedade do buffer. Nessa chamada, o driver proxy passa o identificador para o buffer que foi retornado anteriormente da chamada MmSecureVirtualMemory .
Nota Um driver que tenta acessar um buffer do 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 acessa esse buffer de modo de usuário, ele também deve usar o mecanismo try/except em torno do código que acessa o buffer. Para obter mais informações sobre try/except, consulte a documentação do Visual C++.
Um provedor de serviços san pode enviar solicitações de controle de E/S (IOCTL) para o driver proxy para proteger e liberar a propriedade de um buffer. Para obter mais informações, consulte Implementando IOCTLs para um provedor de serviços SAN.