Partager via


WSAPROTOCOL_INFOA structure (winsock2.h)

La structure WSAPROTOCOL_INFO est utilisée pour stocker ou récupérer des informations complètes pour un protocole donné.

Syntaxe

typedef struct _WSAPROTOCOL_INFOA {
  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;
  CHAR             szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;

Membres

dwServiceFlags1

Type : DWORD

Masque de bits qui décrit les services fournis par le protocole. Les valeurs possibles pour ce membre sont définies dans le fichier d’en-tête Winsock2.h .

Les valeurs suivantes sont possibles.

Valeur Signification
XP1_CONNECTIONLESS
0x00000001
Fournit le service sans connexion (datagramme). S’il n’est pas défini, le protocole prend en charge le transfert de données orienté connexion.
XP1_GUARANTEED_DELIVERY
0x00000002
Garantit que toutes les données envoyées atteignent la destination prévue.
XP1_GUARANTEED_ORDER
0x00000004
Garantit que les données arrivent uniquement dans l’ordre dans lequel elles ont été envoyées et qu’elles ne sont pas dupliquées. Cette caractéristique ne signifie pas nécessairement que les données sont toujours remises, mais que toutes les données livrées sont remises dans l’ordre dans lequel elles ont été envoyées.
XP1_MESSAGE_ORIENTED
0x00000008
Respecte les limites des messages, par opposition à un protocole orienté flux où il n’existe aucun concept de limites de message.
XP1_PSEUDO_STREAM
0x00000010
Protocole orienté message, mais les limites de message sont ignorées pour tous les reçus. Cela est pratique lorsqu’une application ne souhaite pas que l’encadrement des messages soit effectué par le protocole.
XP1_GRACEFUL_CLOSE
0x00000020
Prend en charge la fermeture en deux phases (normale). S’il n’est pas défini, seules les fermetures abandonnées sont effectuées.
XP1_EXPEDITED_DATA
0x00000040
Prend en charge les données accélérées (urgentes).
XP1_CONNECT_DATA
0x00000080
Prend en charge la connexion des données.
XP1_DISCONNECT_DATA
0x00000100
Prend en charge la déconnexion des données.
XP1_SUPPORT_BROADCAST
0x00000200
Prend en charge un mécanisme de diffusion.
XP1_SUPPORT_MULTIPOINT
0x00000400
Prend en charge un mécanisme multipoint ou multidiffusion. Les attributs de contrôle et de plan de données sont indiqués ci-dessous.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indique si le plan de contrôle est rooté (valeur = 1) ou non rooté (valeur = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indique si le plan de données est rooté (valeur = 1) ou non rooté (valeur = 0).
XP1_QOS_SUPPORTED
0x00002000
Prend en charge les demandes de qualité de service.
XP1_INTERRUPT
Le bit est réservé.
XP1_UNI_SEND
0x00008000
Le protocole est unidirectionnel dans le sens d’envoi.
XP1_UNI_RECV
0x00010000
Le protocole est unidirectionnel dans le sens recv.
XP1_IFS_HANDLES
0x00020000
Les descripteurs de socket retournés par le fournisseur sont des handles IFS (Installable File System) du système d’exploitation.
XP1_PARTIAL_MESSAGE
0x00040000
L’indicateur MSG_PARTIAL est pris en charge dans WSASend et WSASendTo.
XP1_SAN_SUPPORT_SDP
0x00080000
Le protocole prend en charge SAN.

Cette valeur est prise en charge sur Windows 7 et Windows Server 2008 R2.

 
Note Une seule des valeurs XP1_UNI_SEND ou XP1_UNI_RECV peut être définie. Si un protocole peut être unidirectionnel dans l’une ou l’autre direction, deux structures WSAPROTOCOL_INFOW doivent être utilisées. Quand aucun bit n’est défini, le protocole est considéré comme bidirectionnel.
 

dwServiceFlags2

Type : DWORD

Réservé aux définitions d’attributs de protocole supplémentaires.

dwServiceFlags3

Type : DWORD

Réservé aux définitions d’attributs de protocole supplémentaires.

dwServiceFlags4

Type : DWORD

Réservé aux définitions d’attributs de protocole supplémentaires.

dwProviderFlags

Type : DWORD

Ensemble d’indicateurs qui fournit des informations sur la façon dont ce protocole est représenté dans le catalogue Winsock. Les valeurs possibles pour ce membre sont définies dans le fichier d’en-tête Winsock2.h .

Les valeurs d’indicateur suivantes sont possibles.

Valeur Signification
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
Indique qu’il s’agit de l’une des deux entrées ou plus d’un protocole unique (à partir d’un fournisseur donné) capable d’implémenter plusieurs comportements. Par exemple, SPX, qui, côté réception, peut se comporter comme un protocole orienté message ou un protocole orienté flux.
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
Indique qu’il s’agit de l’entrée recommandée ou la plus fréquemment utilisée pour un protocole capable d’implémenter plusieurs comportements.
PFL_HIDDEN
0x00000004
Défini par un fournisseur pour indiquer au Ws2_32.dll que ce protocole ne doit pas être retourné dans la mémoire tampon de résultats générée par WSAEnumProtocols. De toute évidence, une application Windows Sockets 2 ne doit jamais voir une entrée avec ce bit défini.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Indique qu’une valeur de zéro dans le paramètre de protocole de socket ou WSASocket correspond à cette entrée de protocole.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
Défini par un fournisseur pour indiquer la prise en charge de l’accès direct réseau.

Cette valeur est prise en charge sur Windows 7 et Windows Server 2008 R2.

ProviderId

Type : GUID

Identificateur global unique (GUID) attribué au fournisseur par le fournisseur de services. Cette valeur est utile pour les instances où plusieurs fournisseurs de services sont en mesure d’implémenter un protocole particulier. Une application peut utiliser le membre ProviderId pour faire la distinction entre les fournisseurs qui, autrement, ne peuvent pas être distingués.

dwCatalogEntryId

Type : DWORD

Identificateur unique attribué par le WS2_32.DLL pour chaque structure WSAPROTOCOL_INFO .

ProtocolChain

Type : WSAPROTOCOLCHAIN

Structure WSAPROTOCOLCHAIN associée au protocole. Si la longueur de la chaîne est 0, cette entrée WSAPROTOCOL_INFO représente un protocole en couches qui a Windows Sockets 2 SPI comme bords supérieurs et inférieurs. Si la longueur de la chaîne est égale à 1, cette entrée représente un protocole de base dont l’identificateur d’entrée de catalogue se trouve dans le membre dwCatalogEntryId de la structure WSAPROTOCOL_INFO . Si la longueur de la chaîne est supérieure à 1, cette entrée représente une chaîne de protocole qui se compose d’un ou plusieurs protocoles en couches au-dessus d’un protocole de base. Les identificateurs d’entrée de catalogue correspondants se trouvent dans le tableau ProtocolChain.ChainEntries en commençant par le protocole en couches en haut (l’élément zéro dans le tableau ProtocolChain.ChainEntries) et se terminant par le protocole de base. Pour plus d’informations sur les chaînes de protocole, reportez-vous à la spécification de l’interface de fournisseur de services Windows Sockets 2.

iVersion

Type : int

Identificateur de version du protocole.

iAddressFamily

Type : int

Valeur à passer comme paramètre de famille d’adresses à la fonction socket ou WSASocket afin d’ouvrir un socket pour ce protocole. Cette valeur définit également de manière unique la structure d’une adresse de protocole pour un sockaddr utilisé par le protocole.

Sur le SDK Windows publié pour Windows Vista et versions ultérieures, les valeurs possibles pour la famille d’adresses sont définies dans le fichier d’en-tête Ws2def.h. Notez que le fichier d’en-tête Ws2def.h est automatiquement inclus dans Winsock2.h et ne doit jamais être utilisé directement.

Sur les versions du Kit de développement logiciel (SDK) de plateforme pour Windows Server 2003 et versions antérieures, les valeurs possibles pour la famille d’adresses sont définies dans le fichier d’en-tête Winsock2.h .

Les valeurs actuellement prises en charge sont AF_INET ou AF_INET6, qui sont les formats de famille d’adresses Internet pour IPv4 et IPv6. D’autres options pour la famille d’adresses (AF_NETBIOS à utiliser avec NetBIOS, par exemple) sont prises en charge si un fournisseur de services Windows Sockets pour la famille d’adresses est installé. Notez que les valeurs de la famille d’adresses AF_ et des constantes de famille de protocole PF_ sont identiques (par exemple , AF_INET et PF_INET), de sorte que l’une ou l’autre constante peut être utilisée.

Le tableau ci-dessous répertorie les valeurs courantes pour la famille d’adresses, bien que de nombreuses autres valeurs soient possibles.

iAddressFamily Signification
AF_INET
2
Famille d’adresses IPv4 (Internet Protocol version 4).
AF_IPX
6
Famille d’adresses IPX/SPX. Cette famille d’adresses est uniquement prise en charge si le protocole de transport compatible NWLink IPX/SPX NetBIOS est installé.

Cette famille d’adresses n’est pas prise en charge sur Windows Vista et versions ultérieures.

AF_APPLETALK
16
Famille d’adresses AppleTalk. Cette famille d’adresses est prise en charge uniquement si le protocole AppleTalk est installé.

Cette famille d’adresses n’est pas prise en charge sur Windows Vista et versions ultérieures.

AF_NETBIOS
17
Famille d’adresses NetBIOS. Cette famille d’adresses est prise en charge uniquement si le fournisseur Windows Sockets pour NetBIOS est installé.

Le fournisseur Windows Sockets pour NetBIOS est pris en charge sur les versions 32 bits de Windows. Ce fournisseur est installé par défaut sur les versions 32 bits de Windows.

Le fournisseur Windows Sockets pour NetBIOS n’est pas pris en charge sur les versions 64 bits de Windows, notamment Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 ou Windows XP.

Le fournisseur Windows Sockets pour NetBIOS prend uniquement en charge les sockets pour lesquels le paramètre type est défini sur SOCK_DGRAM.

Le fournisseur Windows Sockets pour NetBIOS n’est pas directement lié à l’interface de programmation NetBIOS . L’interface de programmation NetBIOS n’est pas prise en charge sur Windows Vista, Windows Server 2008 et versions ultérieures.

AF_INET6
23
Famille d’adresses IPv6 (Internet Protocol version 6).
AF_IRDA
26
L’IrDA (Infrared Data Association) adresse la famille.

Cette famille d’adresses est prise en charge uniquement si un port infrarouge et un pilote sont installés sur l’ordinateur.

AF_BTH
32
Famille d’adresses Bluetooth.

Cette famille d’adresses est prise en charge sur Windows XP avec SP2 ou version ultérieure si un adaptateur et un pilote Bluetooth sont installés sur l’ordinateur.

iMaxSockAddr

Type : int

Longueur d’adresse maximale, en octets.

iMinSockAddr

Type : int

Longueur d’adresse minimale, en octets.

iSocketType

Type : int

Valeur à passer en tant que paramètre de type de socket à la fonction socket ou WSASocket afin d’ouvrir un socket pour ce protocole. Les valeurs possibles pour le type de socket sont définies dans le fichier d’en-tête Winsock2.h .

Le tableau suivant répertorie les valeurs possibles pour le membre iSocketType pris en charge pour Windows Sockets 2 :

iSocketType Signification
SOCK_STREAM
1
Type de socket qui fournit des flux d’octets séquencés, fiables, bidirectionnel et basés sur la connexion avec un mécanisme de transmission de données OOB. Ce type de socket utilise le protocole TCP (Transmission Control Protocol) pour la famille d’adresses Internet (AF_INET ou AF_INET6).
SOCK_DGRAM
2
Type de socket qui prend en charge les datagrammes, qui sont des mémoires tampons sans connexion et non fiables d’une longueur maximale fixe (généralement petite). Ce type de socket utilise le protocole UDP (User Datagram Protocol) pour la famille d’adresses Internet (AF_INET ou AF_INET6).
SOCK_RAW
3
Type de socket qui fournit un socket brut qui permet à une application de manipuler l’en-tête de protocole de couche supérieure suivant. Pour manipuler l’en-tête IPv4, l’option de socket IP_HDRINCL doit être définie sur le socket. Pour manipuler l’en-tête IPv6, l’option de socket IPV6_HDRINCL doit être définie sur le socket.
SOCK_RDM
4
Type de socket qui fournit un datagramme de message fiable. Un exemple de ce type est l’implémentation du protocole de multidiffusion général pragmatique (PGM) dans Windows, souvent appelée programmation de multidiffusion fiable.

Cette valeur n’est prise en charge que si le protocole De multidiffusion fiable est installé.

SOCK_SEQPACKET
5
Type de socket qui fournit un paquet de pseudo-flux basé sur des datagrammes.

iProtocol

Type : int

Valeur à passer en tant que paramètre de protocole à la fonction socket ou WSASocket afin d’ouvrir un socket pour ce protocole. Les options possibles pour le membre iProtocol sont spécifiques à la famille d’adresses et au type de socket spécifiés.

Sur le SDK Windows publié pour Windows Vista et versions ultérieures, ce membre peut être l’une des valeurs du type d’énumération IPPROTO défini dans le fichier d’en-tête Ws2def.h. Notez que le fichier d’en-tête Ws2def.h est automatiquement inclus dans Winsock2.h et ne doit jamais être utilisé directement.

Sur les versions du Kit de développement logiciel (SDK) de plateforme pour Windows Server 2003 et versions antérieures, les valeurs possibles pour le membre iProtocol sont définies dans les fichiers d’en-tête Winsock2.h et Wsrm.h .

Le tableau ci-dessous répertorie les valeurs courantes pour l’iProtocol , bien que de nombreuses autres valeurs soient possibles.

iProtocol Signification
IPPROTO_ICMP
1
Protocole ICMP (Internet Control Message Protocol).

Cette valeur est prise en charge sur Windows XP et versions ultérieures.

IPPROTO_IGMP
2
Protocole IGMP (Internet Group Management Protocol).

Cette valeur est prise en charge sur Windows XP et versions ultérieures.

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

Cette valeur est prise en charge sur Windows XP avec SP2 ou version ultérieure.

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

Cette valeur est prise en charge sur Windows XP et versions ultérieures.

IPPROTO_RM
113
Protocole PGM pour une multidiffusion fiable. Sur le SDK Windows publié pour Windows Vista et versions ultérieures, ce protocole est également appelé IPPROTO_PGM.

Cette valeur n’est prise en charge que si le protocole De multidiffusion fiable est installé.

iProtocolMaxOffset

Type : int

Valeur maximale qui peut être ajoutée à iProtocol lors de la fourniture d’une valeur pour le paramètre de protocole à socket ou à la fonction WSASocket . Tous les protocoles n’autorisent pas une plage de valeurs. Dans ce cas, iProtocolMaxOffset est égal à zéro.

iNetworkByteOrder

Type : int

Actuellement, ces valeurs sont des constantes manifestes (BIGENDIAN et LITTLEENDIAN) qui indiquent big-endian ou little-endian avec les valeurs 0 et 1 respectivement.

iSecurityScheme

Type : int

Le type de régime de sécurité employé (le cas échéant). La valeur SECURITY_PROTOCOL_NONE (0) est utilisée pour les protocoles qui n’intègrent pas de dispositions de sécurité.

dwMessageSize

Type : DWORD

Taille maximale du message, en octets, prise en charge par le protocole. Il s’agit de la taille maximale qui peut être envoyée à partir de n’importe quelle interface locale de l’hôte. Pour les protocoles qui ne prennent pas en charge l’encadrement des messages, le maximum réel qui peut être envoyé à une adresse donnée peut être inférieur. Il n’existe pas de provisionnement standard pour déterminer la taille maximale des messages entrants. Les valeurs spéciales suivantes sont définies.

Valeur Signification
0
Le protocole est orienté flux et, par conséquent, le concept de taille de message n’est pas pertinent.
0x1
La taille maximale des messages sortants (d’envoi) dépend de la MTU du réseau sous-jacent (unité de transmission de taille maximale) et ne peut donc pas être connue tant qu’un socket n’est pas lié. Les applications doivent utiliser getsockopt pour récupérer la valeur de SO_MAX_MSG_SIZE une fois que le socket a été lié à une adresse locale.
0xFFFFFFFF
Le protocole est orienté vers les messages, mais il n’existe aucune limite maximale à la taille des messages qui peuvent être transmis.

dwProviderReserved

Type : DWORD

Réservé à l’utilisation par les fournisseurs de services.

szProtocol[WSAPROTOCOL_LEN + 1]

Type : TCHAR[WSAPROTOCOL_LEN+1]

Tableau de caractères qui contient un nom lisible par l’homme identifiant le protocole, par exemple « MSAFD Tcpip [UDP/IP] ». Le nombre maximal de caractères autorisé est WSAPROTOCOL_LEN, qui est défini sur 255.

Remarques

Notes

L’en-tête winsock2.h définit WSAPROTOCOL_INFO en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
En-tête winsock2.h

Voir aussi

WSAEnumProtocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

WSASocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

getsockopt

socket