Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il Ws2_32.dll carica la DLL dell'interfaccia del provider di servizi nel sistema usando i meccanismi di caricamento standard della libreria dinamica di Microsoft Windows e lo inizializza chiamando WSPStartup. Questo viene in genere attivato da un'applicazione che chiama socket o WSASocket per creare un nuovo socket da associare a un provider di servizi la cui DLL di interfaccia non è attualmente caricata in memoria. Il percorso della DLL dell'interfaccia di ogni provider di servizi viene archiviato dal Ws2_32.dll al momento dell'installazione del provider di servizi. Per altre informazioni, vedere funzioni di installazione e configurazione.
Nel corso del tempo, possono esistere versioni diverse per le DLL, le applicazioni e i provider di servizi Winsock. Le nuove versioni possono definire nuove funzionalità e nuovi parametri per strutture di dati e parametri di bit e così via. I numeri di versione indicano quindi come interpretare varie strutture di dati.
Per consentire la combinazione e la corrispondenza ottimali di versioni diverse di applicazioni, versioni del Ws2_32.dll stesso e versioni dei provider di servizi da fornitori diversi, spi fornisce un meccanismo di negoziazione della versione per l'uso tra il Ws2_32.dll e i provider di servizi. Questa negoziazione di versione viene gestita da WSPStartup. Fondamentalmente, il Ws2_32.dll passa al provider di servizi i numeri di versione più alti con cui è compatibile. Il provider di servizi confronta questo valore con il proprio intervallo di numeri di versione supportato. Se questi intervalli si sovrappongono, il provider di servizi restituisce un valore all'interno della parte sovrapposta dell'intervallo come risultato della negoziazione. In genere, questo dovrebbe essere il valore più alto possibile. Se gli intervalli non si sovrappongono, le due parti sono incompatibili e la funzione restituisce un errore.
WSPStartup deve essere chiamato almeno una volta da ogni processo client e può essere chiamato più volte da Ws2_32.dll o altre entità. È necessario chiamare un WSPCleanup corrispondente per ogni chiamata WSPStartup. Il provider di servizi deve mantenere un conteggio dei riferimenti per ogni processo. In ogni chiamata di WSPStartup, il chiamante può specificare qualsiasi numero di versione supportato dalla DLL sp.
Un provider di servizi deve archiviare il puntatore alla tabella di invio upcall del client ricevuta come parametro WSPStartup per ogni processo. Se un determinato processo chiama WSPStartup più volte, il provider di servizi deve usare solo il puntatore alla tabella dispatch fornito più di recente.
Come parte del processo di inizializzazione del provider di servizi Il Ws2_32.dll recupera la tabella dispatch del provider di servizi tramite il parametro lpProcTable per ottenere punti di ingresso al resto delle funzioni SPI specificate in questo documento.
L'uso di una tabella dispatch (anziché i normali meccanismi DLL per l'accesso ai punti di ingresso) svolge due scopi:
- È più conveniente per il Ws2_32.dll poiché è possibile effettuare una singola chiamata per individuare l'intero set di punti di ingresso.
- Consente ai provider di servizi a più livelli formati in catene di protocolli di operare in modo più efficiente.
Inizializzazione delle catene di protocolli
Al momento dell'installazione della struttura WSAPROTOCOL_INFO per una catena di protocolli, viene specificato anche il percorso del primo provider a più livelli nella catena. Quando viene inizializzata una catena di protocolli, il Ws2_32.dll usa questo percorso per caricare la DLL del provider e quindi richiama WSPStartup. Poiché WSPStartup include un puntatore alla struttura WSAPROTOCOL_INFO della catena come uno dei relativi parametri, i provider a più livelli possono determinare il tipo di catena in cui vengono inizializzati e l'identità del livello inferiore successivo nella catena. Un provider a più livelli carica quindi il provider di protocollo successivo nella catena e lo inizializza con una chiamata a WSPStartupe così via. Ogni volta che il livello inferiore successivo è un altro provider a più livelli, è necessario fare riferimento alla struttura WSAPROTOCOL_INFO della catena nella chiamata WSPStartup. Quando il livello inferiore successivo è un protocollo di base (che indica la fine della catena), la struttura WSAPROTOCOL_INFO della catena non viene più propagata verso il basso. Al contrario, il livello corrente deve fare riferimento a una struttura WSAPROTOCOL_INFO che corrisponde al protocollo che deve essere utilizzato dal provider di base. Pertanto, il provider di base non ha alcuna nozione di essere coinvolto in una catena di protocolli.
La tabella dispatch fornita da qualsiasi provider a più livelli, in molte istanze, duplica i punti di ingresso di un provider sottostante. Il provider a più livelli inserisce solo i propri punti di ingresso per le funzioni in cui è necessario coinvolgere direttamente. Si noti, tuttavia, che è fondamentale che un provider a più livelli non modifichi il contenuto della tabella upcall ricevuta durante la chiamata WSPStartup sul livello inferiore successivo in una catena di protocolli. Queste chiamate devono essere effettuate direttamente alla DLL di Windows Sockets 2.