Implementando um provedor de rede

Um provedor de rede é uma DLL que permite que o sistema operacional Windows dê suporte a um protocolo de rede específico. Ele faz isso implementando a API do Provedor de Rede. Essa API é um conjunto de funções que o MPR ( Roteador de Vários Provedores ) chama para se comunicar com a rede. Em seguida, o provedor de rede converte essas chamadas em chamadas à API específicas da rede para executar a ação especificada pelo MPR. Dessa forma, o sistema operacional Windows pode interagir com novos protocolos de rede sem precisar entender suas APIs específicas de rede.

Para criar um provedor de rede, escreva uma DLL que exporte a função NPGetCaps .

O suporte das outras funções na API do Provedor de Rede é opcional. Se o provedor de rede não exigir uma função, sua DLL não precisará implementá-la ou fornecer uma implementação de stub. Para obter mais informações, consulte os tópicos de função individuais em Funções do Provedor de Rede.

A exceção é que, se você der suporte a uma das seguintes funções de enumeração, também deverá dar suporte às outras duas funções: NPOpenEnum, NPEnumResource e NPCloseEnum.

As diretrizes a seguir descrevem como escrever um provedor de rede que interaja bem com o MPR e o sistema operacional Windows. Sempre que possível, seu provedor deve seguir as diretrizes a seguir para velocidade, validação e roteamento.

Velocidade

Um provedor de rede deve determinar rapidamente se um recurso de rede é seu. Isso ocorre porque o MPR pode ter que percorrer vários provedores para encontrar o proprietário de um recurso.

Se o provedor de rede não possuir o recurso, ele deverá retornar imediatamente o código WN_BAD_NETNAME status.

Também é importante que os provedores que dão suporte a NPGetDirectoryType retornem resultados para essa função rapidamente porque ela é chamada enquanto WinFile está pintando a árvore de diretório.

Validação

A ordem de validação é importante. Um provedor de rede deve primeiro determinar se sua rede foi iniciada e, em seguida, determinar se a rede e o provedor de rede dão suporte à operação. Se, após essas verificações, o provedor de rede receber todos os recursos de rede, ele deverá determinar se ele é o proprietário deles. Por fim, ele deve validar outros parâmetros.

Roteamento

Se o MPR precisar percorrer provedores de rede, ele tentará todos os provedores até que um aceite a chamada. Em outras palavras, o MPR sempre continua tentando encontrar um provedor de rede.

No entanto, ele anotará o primeiro erro significativo relatado por um provedor. Erros como ERROR_BAD_NETPATH, ERROR_BAD_NET_NAME, ERROR_INVALID_PARAMETER ERROR_INVALID_LEVEL são considerados insignificantes porque eles simplesmente significam que o provedor não gerencia o recurso. No entanto, se o provedor falhar com o erro ERROR_INVALID_PASSWORD ou algum outro erro significativo, o MPR registrará esse erro e continuará circulando pelos provedores de rede. Em geral, ao rotear, se nenhum provedor aceitar a chamada, o MPR relatará o primeiro erro significativo que encontra ao percorrer os provedores de rede.

Seu provedor de rede deve levar esse comportamento do MPR em conta ao decidir qual mensagem de erro retornar.

Nota de implementação

Ao implementar DLL do Provedor de Rede, o provedor não deve chamar outras funções de rede do Windows, APIs do Shell ou outras consultas baseadas em caminho UNC que possam causar reentrada no subsistema MPR. Se você fizer essas chamadas de uma DLL do Provedor de Rede, o aplicativo ou outros componentes do sistema operacional poderão enfrentar contenção, baixo desempenho ou deadlocks dentro do subsistema MPR.