Condividi tramite


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
XP1_CONNECTIONLESS
0x00000001
Fornisce un servizio senza connessione (datagram). In caso contrario, il protocollo supporta il trasferimento dei dati orientato alla connessione.
XP1_GUARANTEED_DELIVERY
0x00000002
Garantisce che tutti i dati inviati raggiungano la destinazione prevista.
XP1_GUARANTEED_ORDER
0x00000004
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.
XP1_MESSAGE_ORIENTED
0x00000008
Rispetta i limiti dei messaggi, anziché un protocollo orientato al flusso in cui non esiste alcun concetto di limiti dei messaggi.
XP1_PSEUDO_STREAM
0x00000010
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.
XP1_GRACEFUL_CLOSE
0x00000020
Supporta la chiusura di due fasi (grazia). Se non è impostato, vengono eseguite solo le chiusura interrotte.
XP1_EXPEDITED_DATA
0x00000040
Supporta i dati veloci (urgenti).
XP1_CONNECT_DATA
0x00000080
Supporta i dati di connessione.
XP1_DISCONNECT_DATA
0x00000100
Supporta i dati di disconnessione.
XP1_SUPPORT_BROADCAST
0x00000200
Supporta un meccanismo di trasmissione.
XP1_SUPPORT_MULTIPOINT
0x00000400
Supporta un meccanismo multipoint o multicast. Gli attributi del piano dati e del controllo sono indicati di seguito.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indica se il piano di controllo è root (valore = 1) o nonrooted (valore = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indica se il piano dati è root (valore = 1) o nonrooted (valore = 0).
XP1_QOS_SUPPORTED
0x00002000
Supporta la qualità delle richieste di servizio.
XP1_INTERRUPT
Bit è riservato.
XP1_UNI_SEND
0x00008000
Il protocollo è unidirectional nella direzione di invio.
XP1_UNI_RECV
0x00010000
Il protocollo è unidirectional nella direzione recv.
XP1_IFS_HANDLES
0x00020000
I descrittori socket restituiti dal provider sono handle IFS (Installable File System) del sistema operativo.
XP1_PARTIAL_MESSAGE
0x00040000
Il flag MSG_PARTIAL è supportato in WSASend e WSASendTo.
XP1_SAN_SUPPORT_SDP
0x00080000
Il protocollo fornisce il supporto per SAN.

Questo valore è supportato in Windows 7 e Windows Server 2008 R2.

 
Nota È possibile impostare solo uno dei valori XP1_UNI_SEND o XP1_UNI_RECV. Se un protocollo può essere unidirectional in entrambe le direzioni, è necessario usare due strutture WSAPROTOCOL_INFOW . Quando nessun bit è impostato, il protocollo viene considerato bidirezionale.
 

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
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
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.
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
Indica che questa è la voce consigliata o più frequentemente usata per un protocollo in grado di implementare più comportamenti.
PFL_HIDDEN
0x00000004
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.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Indica che un valore pari a zero nel parametro del protocollo di socket o WSASocket corrisponde a questa voce di protocollo.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
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
AF_INET
2
Famiglia di indirizzi Internet Protocol versione 4 (IPv4).
AF_IPX
6
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.

AF_APPLETALK
16
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.

AF_NETBIOS
17
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.

AF_INET6
23
Famiglia di indirizzi IPv6 (Internet Protocol 6).
AF_IRDA
26
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.

AF_BTH
32
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
SOCK_STREAM
1
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).
SOCK_DGRAM
2
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).
SOCK_RAW
3
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.
SOCK_RDM
4
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.

SOCK_SEQPACKET
5
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.

iProtocol Significato
IPPROTO_ICMP
1
Protocollo ICMP (Internet Control Message Protocol).

Questo valore è supportato in Windows XP e versioni successive.

IPPROTO_IGMP
2
IGMP (Internet Group Management Protocol).

Questo valore è supportato in Windows XP e versioni successive.

BTHPROTO_RFCOMM
3
Protocollo Bluetooth Radio Frequency Communications (Bluetooth RFCOMM).

Questo valore è supportato in Windows XP con SP2 o versione successiva.

IPPROTO_TCP
6
TCP (Transmission Control Protocol).
IPPROTO_UDP
17
Protocollo UDP (User Datagram Protocol).
IPPROTO_ICMPV6
58
Internet Control Message Protocol versione 6 (ICMPv6).

Questo valore è supportato in Windows XP e versioni successive.

IPPROTO_RM
113
Protocollo PGM per multicast affidabile. In Windows SDK rilasciato per Windows Vista e versioni successive, questo protocollo viene chiamato anche IPPROTO_PGM.

Questo valore è supportato solo se il protocollo Reliable Multicast è installato.

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
0
Il protocollo è orientato al flusso e quindi il concetto di dimensione del messaggio non è rilevante.
0x1
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.
0xffffffff
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

Vedi anche

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFO

WSASend

WSASendTo

WSASocket

WSCEnumProtocols

WSCEnumProtocols32

getsockopt

Socket