Condividi tramite


Allocazione del descrittore

Sebbene i provider di servizi Windows Sockets siano invitati a implementare socket come oggetti IFS (Installable File System), l'architettura Winsock supporta anche provider di servizi i cui handle 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 vantaggi dei provider i cui descrittori di 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 socket, è obbligatorio chiamare il provider WPUModifyIFSHandle prima di fornire il nuovo handle a un client SPI windows Sockets. Questa funzione accetta un identificatore del provider e un handle IFS proposto dal provider come input e restituisce un handle modificato (possibilmente). 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 comodità degli 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 chiamataWPUQuerySocketHandleContext. 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.