Condividi tramite


Allocazione del descrittore

Anche se i provider di servizi Windows Sockets sono invitati a implementare socket come oggetti IFS (Installable File System), l'architettura Winsock supporta anche provider di servizi i cui handle di socket non sono oggetti IFS. I provider con handle IFS indicano questa operazione tramite il bit dell'attributo XP1_IFS_HANDLES nella struttura WSAPROTOCOL_INFO . Nota: il bit dell'attributo XP1_IFS_HANDLES non è stato incluso nella versione 2.0.8 della specifica dell'API, ma è stato aggiunto tramite il meccanismo errata. I client SPI Winsock possono sfruttare i provider i cui descrittori socket sono handle IFS usando questi descrittori con funzionalità di I/O Windows standard, ad esempio ReadFile e WriteFile.

Ogni volta che un provider IFS crea un nuovo descrittore di socket, è obbligatorio che il provider chiami WPUModifyIFSHandle prima di fornire il nuovo handle a un client SPI Di Windows Sockets. Questa funzione accetta un identificatore del provider e un handle IFS proposto dal provider come input e restituisce un handle (possibilmente) modificato. Il provider IFS deve fornire solo l'handle modificato al client e tutte le richieste provenienti dal client faranno riferimento solo a questo handle modificato. L'handle modificato è garantito che sia indistinguibile dall'handle proposto per quanto riguarda il sistema operativo. Pertanto, nella maggior parte dei casi, il provider di servizi sceglierà semplicemente di usare solo l'handle modificato in tutta l'elaborazione interna. Lo scopo di questa funzione di modifica è consentire al Ws2_32.dll di semplificare notevolmente il processo di identificazione del provider di servizi associato a un determinato socket.

I provider che non restituiscono handle IFS devono ottenere un handle valido dal Ws2_32.dll tramite la chiamata WPUCreateSocketHandle . Il provider nonIFS deve offrire solo un handle fornito da Windows Sockets 2.DLL al client e tutte le richieste provenienti dal client faranno riferimento solo a questi handle. Per praticità agli implementatori del provider di servizi, uno dei parametri di input forniti da un provider in WPUCreateSocketHandle è un valore di contesto DWORD. Il Ws2_32.dll associa questo valore di contesto all'handle socket allocato e consente a un provider di servizi di recuperare il valore di contesto in qualsiasi momento tramite la chiamata WPUQuerySocketHandleContext . Un uso tipico per questo valore di contesto è quello di archiviare un puntatore a un provider di servizi che gestisce la struttura dei dati utilizzata per archiviare le informazioni sullo stato del socket.