WSAPROTOCOL_INFOW struttura (winsock2.h)
La struttura WSAPROTOCOL_INFOW viene usata per archiviare o recuperare informazioni complete per un determinato protocollo. Il nome del protocollo è rappresentato come matrice di caratteri Unicode.
Sintassi
typedef struct _WSAPROTOCOL_INFOW {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
Members
dwServiceFlags1
Tipo: DWORD
Maschera bit che descrive i servizi forniti dal protocollo. I valori possibili per questo membro sono definiti nel file di intestazione Winsock2.h .
I valori seguenti sono possibili.
Valore | Significato |
---|---|
|
Fornisce un servizio senza connessione (datagram). In caso contrario, il protocollo supporta il trasferimento dei dati orientato alla connessione. |
|
Garantisce che tutti i dati inviati raggiungano la destinazione prevista. |
|
Garantisce che i dati arrivino solo nell'ordine in cui è stato inviato e che non sia duplicato. Questa caratteristica non significa necessariamente che i dati vengano sempre recapitati, ma che tutti i dati recapitati vengano recapitati nell'ordine in cui è stato inviato. |
|
Rispetta i limiti dei messaggi, anziché un protocollo orientato al flusso in cui non esiste alcun concetto di limiti dei messaggi. |
|
Un protocollo orientato ai messaggi, ma i limiti dei messaggi vengono ignorati per tutte le ricevute. Ciò è pratico quando un'applicazione non desidera che il frame dei messaggi venga eseguito dal protocollo. |
|
Supporta la chiusura di due fasi (grazia). Se non è impostato, vengono eseguite solo le chiusura interrotte. |
|
Supporta i dati veloci (urgenti). |
|
Supporta i dati di connessione. |
|
Supporta i dati di disconnessione. |
|
Supporta un meccanismo di trasmissione. |
|
Supporta un meccanismo multipoint o multicast. Gli attributi del piano dati e del controllo sono indicati di seguito. |
|
Indica se il piano di controllo è root (valore = 1) o nonrooted (valore = 0). |
|
Indica se il piano dati è root (valore = 1) o nonrooted (valore = 0). |
|
Supporta la qualità delle richieste di servizio. |
|
Bit è riservato. |
|
Il protocollo è unidirectional nella direzione di invio. |
|
Il protocollo è unidirectional nella direzione recv. |
|
I descrittori socket restituiti dal provider sono handle IFS (Installable File System) del sistema operativo. |
|
Il flag MSG_PARTIAL è supportato in WSASend e WSASendTo. |
|
Il protocollo fornisce il supporto per SAN.
Questo valore è supportato in Windows 7 e Windows Server 2008 R2. |
dwServiceFlags2
Tipo: DWORD
Riservato per le definizioni di attributi del protocollo aggiuntive.
dwServiceFlags3
Tipo: DWORD
Riservato per le definizioni di attributi del protocollo aggiuntive.
dwServiceFlags4
Tipo: DWORD
Riservato per le definizioni di attributi del protocollo aggiuntive.
dwProviderFlags
Tipo: DWORD
Set di flag che forniscono informazioni sul modo in cui questo protocollo è rappresentato nel catalogo Winsock. I valori possibili per questo membro sono definiti nel file di intestazione Winsock2.h .
I valori seguenti sono possibili.
Valore | Significato |
---|---|
|
Indica che si tratta di una delle due o più voci per un singolo protocollo (da un determinato provider) che è in grado di implementare più comportamenti. Un esempio di questo è SPX che, sul lato ricevente, può comportarsi come un protocollo orientato ai messaggi o un protocollo orientato al flusso. |
|
Indica che questa è la voce consigliata o più frequentemente usata per un protocollo in grado di implementare più comportamenti. |
|
Impostato da un provider per indicare al Ws2_32.dll che questo protocollo non deve essere restituito nel buffer dei risultati generato da WSAEnumProtocols. Ovviamente, un'applicazione Windows Sockets 2 non dovrebbe mai visualizzare una voce con questo set di bit. |
|
Indica che un valore pari a zero nel parametro del protocollo di socket o WSASocket corrisponde a questa voce di protocollo. |
|
Impostare da un provider per indicare il supporto per l'accesso diretto alla rete.
Questo valore è supportato in Windows 7 e Windows Server 2008 R2. |
ProviderId
Tipo: GUID
Identificatore univoco globale (GUID) assegnato al provider dal fornitore del provider di servizi. Questo valore è utile per le istanze in cui più provider di servizi è in grado di implementare un protocollo specifico. Un'applicazione può usare il membro ProviderId per distinguere tra provider che potrebbero altrimenti essere indistinguishable.
dwCatalogEntryId
Tipo: DWORD
Identificatore univoco assegnato dal WS2_32.DLL per ogni struttura WSAPROTOCOL_INFO .
ProtocolChain
Tipo: WSAPROTOCOLCHAIN
Struttura WSAPROTOCOLCHAIN associata al protocollo. Se la lunghezza della catena è 0 , questa WSAPROTOCOL_INFO voce rappresenta un protocollo a livelli con Windows Sockets 2 SPI sia come bordi superiore che inferiore. Se la lunghezza della catena è uguale a 1, questa voce rappresenta un protocollo di base il cui identificatore di voce del catalogo si trova nel membro dwCatalogEntryId della struttura WSAPROTOCOL_INFO . Se la lunghezza della catena è maggiore di 1, questa voce rappresenta una catena di protocolli costituita da uno o più protocolli a livelli sopra un protocollo di base. Gli identificatori di voce del catalogo corrispondenti si trovano nella matrice ProtocolChain.ChainEntries a partire dal protocollo a livelli nella parte superiore (l'elemento zero nella matrice ProtocolChain.ChainEntries) e terminando con il protocollo di base. Per altre informazioni sulle catene di protocollo, vedere la specifica dell'interfaccia del provider di servizi Windows Sockets 2.
iVersion
Tipo: int
Identificatore della versione del protocollo.
iAddressFamily
Tipo: int
Valore da passare come parametro della famiglia di indirizzi alla funzione socket o WSASocket per aprire un socket per questo protocollo. Questo valore definisce anche in modo univoco la struttura di un indirizzo di protocollo per un sockaddr usato dal protocollo.
In Windows SDK rilasciato per Windows Vista e versioni successive, i valori possibili per la famiglia di indirizzi sono definiti nel file di intestazione Ws2def.h . Si noti che il file di intestazione Ws2def.h viene incluso automaticamente in Winsock2.h e non deve mai essere usato direttamente.
Nelle versioni di Platform SDK per Windows Server 2003 e versioni precedenti, i valori possibili per la famiglia di indirizzi sono definiti nel file di intestazione Winsock2.h .
I valori attualmente supportati sono AF_INET o AF_INET6, ovvero i formati della famiglia di indirizzi Internet per IPv4 e IPv6. Altre opzioni per la famiglia di indirizzi (AF_NETBIOS per l'uso con NetBIOS, ad esempio) sono supportate se è installato un provider di servizi Windows Sockets per la famiglia di indirizzi. Si noti che i valori per la famiglia di indirizzi AF_ e le costanti della famiglia di protocolli di PF_ sono identiche (ad esempio, AF_INET e PF_INET), in modo che sia possibile usare una costante.
La tabella seguente elenca i valori comuni per la famiglia di indirizzi, anche se sono possibili molti altri valori.
iAddressFamily | Significato |
---|---|
|
Famiglia di indirizzi Internet Protocol versione 4 (IPv4). |
|
Famiglia di indirizzi IPX/SPX. Questa famiglia di indirizzi è supportata solo se è installato il protocollo di trasporto compatibile con NWLink IPX/SPX NetBIOS.
Questa famiglia di indirizzi non è supportata in Windows Vista e versioni successive. |
|
Famiglia di indirizzi AppleTalk. Questa famiglia di indirizzi è supportata solo se è installato il protocollo AppleTalk.
Questa famiglia di indirizzi non è supportata in Windows Vista e versioni successive. |
|
Famiglia di indirizzi NetBIOS. Questa famiglia di indirizzi è supportata solo se il provider Windows Sockets per NetBIOS è installato.
Il provider Windows Sockets per NetBIOS è supportato in versioni a 32 bit di Windows. Questo provider viene installato per impostazione predefinita nelle versioni a 32 bit di Windows. Il provider Windows Sockets per NetBIOS non è supportato in versioni a 64 bit di windows, tra cui Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 o Windows XP. Il provider Windows Sockets per NetBIOS supporta solo i socket in cui il parametro di tipo è impostato su SOCK_DGRAM. Il provider Windows Sockets per NetBIOS non è direttamente correlato all'interfaccia di programmazione NetBIOS . L'interfaccia di programmazione NetBIOS non è supportata in Windows Vista, Windows Server 2008 e versioni successive. |
|
Famiglia di indirizzi IPv6 (Internet Protocol 6). |
|
Famiglia di indirizzi IrDA (Infrared Data Association).
Questa famiglia di indirizzi è supportata solo se il computer ha una porta e un driver a infrarossi installati. |
|
Famiglia di indirizzi Bluetooth.
Questa famiglia di indirizzi è supportata in Windows XP con SP2 o versioni successive se il computer ha una scheda Bluetooth e un driver installato. |
iMaxSockAddr
Tipo: int
Lunghezza massima dell'indirizzo, in byte.
iMinSockAddr
Tipo: int
Lunghezza minima dell'indirizzo, in byte.
iSocketType
Tipo: int
Valore da passare come parametro di tipo socket alla funzione socket o WSASocket per aprire un socket per questo protocollo. I valori possibili per il tipo di socket sono definiti nel file di intestazione Winsock2.h .
La tabella seguente elenca i valori possibili per il membro iSocketType supportato per Windows Sockets 2:
iSocketType | Significato |
---|---|
|
Tipo di socket che fornisce flussi di byte basati su byte sequenziati, affidabili e bidirezionali con un meccanismo di trasmissione dati OOB. Questo tipo di socket usa il protocollo TCP (Transmission Control Protocol) per la famiglia di indirizzi Internet (AF_INET o AF_INET6). |
|
Tipo di socket che supporta i datagrammi, senza connessione, buffer non affidabili di una lunghezza massima fissa (in genere piccola). Questo tipo di socket usa il protocollo UDP (User Datagram Protocol) per la famiglia di indirizzi Internet (AF_INET o AF_INET6). |
|
Tipo di socket che fornisce un socket non elaborato che consente a un'applicazione di modificare l'intestazione del protocollo di livello superiore successivo. Per modificare l'intestazione IPv4, l'opzione socket IP_HDRINCL deve essere impostata sul socket. Per modificare l'intestazione IPv6, è necessario impostare l'opzione socket IPV6_HDRINCL sul socket. |
|
Tipo di socket che fornisce un datagramma di messaggi affidabile. Un esempio di questo tipo è l'implementazione del protocollo multicast generale pragmatico (PGM) in Windows, spesso definita programmazione multicast affidabile.
Questo valore è supportato solo se il protocollo Reliable Multicast è installato. |
|
Tipo di socket che fornisce un pacchetto pseudo-flusso basato su datagrammi. |
iProtocol
Tipo: int
Valore da passare come parametro del protocollo alla funzione socket o WSASocket per aprire un socket per questo protocollo. Le opzioni possibili per il membro iProtocol sono specifiche della famiglia di indirizzi e del tipo di socket specificati.
In Windows SDK rilasciato per Windows Vista e versioni successive, questo membro può essere uno dei valori del tipo di enumerazione IPPROTO definito nel file di intestazione Ws2def.h . Si noti che il file di intestazione Ws2def.h viene automaticamente incluso in Winsock2.h e non deve mai essere usato direttamente.
Nelle versioni di Platform SDK per Windows Server 2003 e versioni precedenti, i valori possibili per il membro iProtocol sono definiti nei file di intestazione Winsock2.h e Wsrm.h .
La tabella seguente elenca i valori comuni per iProtocol anche se sono possibili molti altri valori.
iProtocolMaxOffset
Tipo: int
Valore massimo che può essere aggiunto al membro iProtocol quando si specifica un valore per il parametro del protocollo in socket e WSASocket. Non tutti i protocolli consentono un intervallo di valori. Quando questo è il caso iProtocolMaxOffset è zero.
iNetworkByteOrder
Tipo: int
Attualmente questi valori sono costanti manifesto (BIGENDIAN e LITTLEENDIAN) che indicano rispettivamente big-endian o little-endian con i valori 0 e 1.
iSecurityScheme
Tipo: int
Tipo di schema di sicurezza utilizzato (se presente). Il valore SECURITY_PROTOCOL_NONE (0) viene usato per i protocolli che non incorporano le disposizioni di sicurezza.
dwMessageSize
Tipo: DWORD
Dimensione massima del messaggio, in byte, supportata dal protocollo. Questa è la dimensione massima che può essere inviata da qualsiasi interfaccia locale dell'host. Per i protocolli che non supportano il frame dei messaggi, il valore massimo effettivo che può essere inviato a un determinato indirizzo può essere inferiore. Non è previsto alcun provisioning standard per determinare la dimensione massima dei messaggi in ingresso. Vengono definiti i valori speciali seguenti.
Valore | Significato |
---|---|
|
Il protocollo è orientato al flusso e quindi il concetto di dimensione del messaggio non è rilevante. |
|
La dimensione massima dei messaggi in uscita (invia) dipende dalla MTU di rete sottostante (unità di trasmissione con dimensioni massime) e quindi non può essere nota fino a quando non viene associato un socket. Le applicazioni devono usare getsockopt per recuperare il valore di SO_MAX_MSG_SIZE dopo che il socket è stato associato a un indirizzo locale. |
|
Il protocollo è orientato ai messaggi, ma non esiste alcun limite massimo per le dimensioni dei messaggi che possono essere trasmessi. |
dwProviderReserved
Tipo: DWORD
Riservato per l'uso da parte dei provider di servizi.
szProtocol[WSAPROTOCOL_LEN + 1]
Tipo: WCHAR[WSAPROTOCOL_LEN+1]
Matrice di caratteri Unicode che contiene un nome leggibile che identifica il protocollo, ad esempio "MSAFD Tcpip [UDP/IP]". Il numero massimo di caratteri consentiti è WSAPROTOCOL_LEN, che è definito come 255.
Commenti
Nota
L'intestazione winsock2.h definisce WSAPROTOCOL_INFO come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Intestazione | winsock2.h |