Condividi tramite


Implementazione di un provider di rete

Un provider di rete è una DLL che consente al sistema operativo Windows di supportare un protocollo di rete specifico. A tale scopo, implementare l'API del provider di rete. Questa API è un set di funzioni delle chiamate MPR ( Multiple Provider Router ) per comunicare con la rete. Il provider di rete converte quindi queste chiamate in chiamate API specifiche della rete per eseguire l'azione specificata da MPR. In questo modo, il sistema operativo Windows può interagire con i nuovi protocolli di rete senza dover comprendere le API specifiche della rete.

Per creare un provider di rete, scrivere una DLL che esporta la funzione NPGetCaps .

Il supporto delle altre funzioni nell'API del provider di rete è facoltativo. Se il provider di rete non richiede una funzione, la DLL non deve implementarla o fornire un'implementazione stub. Per altre informazioni, vedere gli argomenti relativi alle singole funzioni in Funzioni del provider di rete.

L'eccezione è che se si supporta una delle funzioni di enumerazione seguenti, è necessario supportare anche le altre due funzioni: NPOpenEnum, NPEnumResource e NPCloseEnum.

Le linee guida seguenti descrivono come scrivere un provider di rete che interagisce bene con MPR e il sistema operativo Windows. Quando possibile, il provider deve rispettare le linee guida seguenti per velocità, convalida e routing.

speed

Un provider di rete deve determinare rapidamente se una risorsa di rete è propria. Ciò è dovuto al fatto che il mpr potrebbe dover scorrere molti provider per trovare il proprietario di una risorsa.

Se il provider di rete non possiede la risorsa, deve restituire immediatamente il codice di stato WN_BAD_NETNAME.

È anche importante che i provider che supportano NPGetDirectoryType restituiscono rapidamente i risultati per questa funzione perché viene chiamato mentre WinFile sta disegnando l'albero delle directory.

Convalida

L'ordine di convalida è importante. Un provider di rete deve innanzitutto determinare se la rete viene avviata e quindi determinare se la rete e il provider di rete supportano l'operazione. Se, dopo questi controlli, il provider di rete riceve tutte le risorse di rete, deve determinare se è proprietario. Infine, deve convalidare altri parametri.

Routing

Se mpr deve scorrere i provider di rete, tenterà tutti i provider fino a quando non si accetta la chiamata. In altre parole, mpr continua sempre a cercare di trovare un provider di rete.

Prende tuttavia nota del primo errore significativo segnalato da un provider. Gli errori, ad esempio ERROR_BAD_NETPATH, ERROR_BAD_NET_NAME, ERROR_INVALID_PARAMETER, ERROR_INVALID_LEVEL sono considerati insignificanti perché significano semplicemente che il provider non gestisce la risorsa. Tuttavia, se il provider ha esito negativo con l'errore ERROR_INVALID_PASSWORD o un altro errore significativo, MPR registra questo errore e continua il ciclo attraverso i provider di rete. In generale, quando il routing, se nessun provider accetta la chiamata, mpr segnala il primo errore significativo che si verifica durante il ciclo attraverso i provider di rete.

Il provider di rete deve prendere in considerazione questo comportamento di MPR quando si decide quale messaggio di errore restituire.

Nota sull'implementazione

Durante l'implementazione della DLL del provider di rete, il provider non deve chiamare altre funzioni di rete di Windows, API shell o altre query basate su percorso UNC che potrebbero causare la reinsezione nel sottosistema MPR. Se si effettuano chiamate di questo tipo da una DLL del provider di rete, l'applicazione o altri componenti del sistema operativo potrebbero verificarsi conflitti, prestazioni scarse o deadlock all'interno del sottosistema MPR.