estructura WSAPROTOCOL_INFOW (winsock2.h)

La estructura WSAPROTOCOL_INFOW se usa para almacenar o recuperar información completa de un protocolo determinado. El nombre del protocolo se representa como una matriz de caracteres Unicode.

Sintaxis

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;

Miembros

dwServiceFlags1

Tipo: DWORD

Máscara de bits que describe los servicios proporcionados por el protocolo. Los valores posibles para este miembro se definen en el archivo de encabezado Winsock2.h .

Los siguientes valores son posibles.

Valor Significado
XP1_CONNECTIONLESS
0x00000001
Proporciona un servicio sin conexión (datagrama). Si no se establece, el protocolo admite la transferencia de datos orientada a conexiones.
XP1_GUARANTEED_DELIVERY
0x00000002
Garantiza que todos los datos enviados lleguen al destino previsto.
XP1_GUARANTEED_ORDER
0x00000004
Garantiza que los datos solo llegan en el orden en que se envió y que no están duplicados. Esta característica no significa necesariamente que los datos siempre se entreguen, sino que los datos que se entregan se entregan en el orden en que se envió.
XP1_MESSAGE_ORIENTED
0x00000008
Respeta los límites del mensaje, en lugar de un protocolo orientado a flujos en el que no hay ningún concepto de límites de mensaje.
XP1_PSEUDO_STREAM
0x00000010
Un protocolo orientado a mensajes, pero los límites del mensaje se omiten para todos los recibos. Esto es conveniente cuando una aplicación no desea que el protocolo realice tramas de mensajes.
XP1_GRACEFUL_CLOSE
0x00000020
Admite el cierre de dos fases (correcto). Si no se establece, solo se realizan cierres anulativos.
XP1_EXPEDITED_DATA
0x00000040
Admite datos acelerados (urgentes).
XP1_CONNECT_DATA
0x00000080
Admite la conexión de datos.
XP1_DISCONNECT_DATA
0x00000100
Admite la desconexión de datos.
XP1_SUPPORT_BROADCAST
0x00000200
Admite un mecanismo de difusión.
XP1_SUPPORT_MULTIPOINT
0x00000400
Admite un mecanismo multipunto o multidifusión. A continuación se indican los atributos de plano de datos y control.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indica si el plano de control está modificado (valor = 1) o no raíz (valor = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indica si el plano de datos está modificado (valor = 1) o no raíz (valor = 0).
XP1_QOS_SUPPORTED
0x00002000
Admite la calidad de las solicitudes de servicio.
XP1_INTERRUPT
El bit está reservado.
XP1_UNI_SEND
0x00008000
El protocolo es unidireccional en la dirección de envío.
XP1_UNI_RECV
0x00010000
El protocolo es unidireccional en la dirección del recv.
XP1_IFS_HANDLES
0x00020000
Los descriptores de socket devueltos por el proveedor son identificadores del sistema operativo Sistema de archivos instalables (IFS).
XP1_PARTIAL_MESSAGE
0x00040000
La marca MSG_PARTIAL se admite en WSASend y WSASendTo.
XP1_SAN_SUPPORT_SDP
0x00080000
El protocolo proporciona compatibilidad con SAN.

Este valor es compatible con Windows 7 y Windows Server 2008 R2.

 
Nota Solo se puede establecer uno de los valores de XP1_UNI_SEND o XP1_UNI_RECV. Si un protocolo puede ser unidireccional en cualquier dirección, se deben usar dos estructuras WSAPROTOCOL_INFOW . Cuando no se establece ningún bit, el protocolo se considera bidireccional.
 

dwServiceFlags2

Tipo: DWORD

Reservado para definiciones adicionales de atributo de protocolo.

dwServiceFlags3

Tipo: DWORD

Reservado para definiciones adicionales de atributo de protocolo.

dwServiceFlags4

Tipo: DWORD

Reservado para definiciones adicionales de atributo de protocolo.

dwProviderFlags

Tipo: DWORD

Conjunto de marcas que proporciona información sobre cómo se representa este protocolo en el catálogo winsock. Los valores posibles para este miembro se definen en el archivo de encabezado Winsock2.h .

Los siguientes valores son posibles.

Valor Significado
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
Indica que se trata de una de dos o más entradas para un único protocolo (de un proveedor determinado) que es capaz de implementar varios comportamientos. Un ejemplo de esto es SPX que, en el lado receptor, puede comportarse como un protocolo orientado a mensajes o un protocolo orientado a secuencias.
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
Indica que se trata de la entrada recomendada o usada con más frecuencia para un protocolo que es capaz de implementar varios comportamientos.
PFL_HIDDEN
0x00000004
Establezca por un proveedor para indicar al Ws2_32.dll que este protocolo no debe devolverse en el búfer de resultados generado por WSAEnumProtocols. Obviamente, una aplicación de Windows Sockets 2 nunca debería ver una entrada con este conjunto de bits.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Indica que un valor de cero en el parámetro de protocolo de socket o WSASocket coincide con esta entrada de protocolo.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
Establezca por un proveedor para indicar la compatibilidad con el acceso directo a la red.

Este valor es compatible con Windows 7 y Windows Server 2008 R2.

ProviderId

Tipo: GUID

Identificador único global (GUID) asignado al proveedor por el proveedor de servicios. Este valor es útil para instancias en las que más de un proveedor de servicios puede implementar un protocolo determinado. Una aplicación puede usar el miembro ProviderId para distinguir entre proveedores que, de lo contrario, podrían ser indistinguibles.

dwCatalogEntryId

Tipo: DWORD

Identificador único asignado por el WS2_32.DLL para cada estructura de WSAPROTOCOL_INFO .

ProtocolChain

Tipo: WSAPROTOCOLCHAIN

Estructura WSAPROTOCOLCHAIN asociada al protocolo. Si la longitud de la cadena es 0, esta entrada de WSAPROTOCOL_INFO representa un protocolo en capas que tiene SPI de Windows Sockets 2 como sus bordes superior e inferior. Si la longitud de la cadena es igual a 1, esta entrada representa un protocolo base cuyo identificador de entrada de catálogo está en el miembro dwCatalogEntryId de la estructura WSAPROTOCOL_INFO . Si la longitud de la cadena es mayor que 1, esta entrada representa una cadena de protocolos que consta de uno o varios protocolos en capas sobre un protocolo base. Los identificadores de entrada de catálogo correspondientes están en la matriz ProtocolChain.ChainEntries empezando por el protocolo en capas en la parte superior (el elemento cero de la matriz ProtocolChain.ChainEntries) y finalizando con el protocolo base. Consulte la especificación de interfaz del proveedor de servicios de Windows Sockets 2 para obtener más información sobre las cadenas de protocolo.

iVersion

Tipo: int

Identificador de versión del protocolo.

iAddressFamily

Tipo: int

Valor que se va a pasar como parámetro de familia de direcciones a la función socket o WSASocket para abrir un socket para este protocolo. Este valor también define de forma única la estructura de una dirección de protocolo para un sockaddr usado por el protocolo.

En windows SDK publicado para Windows Vista y versiones posteriores, los valores posibles para la familia de direcciones se definen en el archivo de encabezado Ws2def.h . Tenga en cuenta que el archivo de encabezado Ws2def.h se incluye automáticamente en Winsock2.h y nunca se debe usar directamente.

En las versiones del SDK de plataforma para Windows Server 2003 y versiones anteriores, los valores posibles para la familia de direcciones se definen en el archivo de encabezado Winsock2.h .

Los valores admitidos actualmente son AF_INET o AF_INET6, que son los formatos de familia de direcciones de Internet para IPv4 e IPv6. Se admiten otras opciones para la familia de direcciones (AF_NETBIOS para su uso con NetBIOS, por ejemplo) si se instala un proveedor de servicios de Windows Sockets para la familia de direcciones. Tenga en cuenta que los valores de la familia de direcciones AF_ y las constantes de familia de protocolos PF_ son idénticas (por ejemplo, AF_INET y PF_INET), por lo que se puede usar cualquiera de las constantes.

En la tabla siguiente se enumeran los valores comunes de la familia de direcciones, aunque muchos otros valores son posibles.

iAddressFamily Significado
AF_INET
2
Familia de direcciones del Protocolo de Internet versión 4 (IPv4).
AF_IPX
6
Familia de direcciones IPX/SPX. Esta familia de direcciones solo se admite si está instalado el protocolo de transporte compatible con NWLink IPX/SPX NetBIOS.

Esta familia de direcciones no se admite en Windows Vista y versiones posteriores.

AF_APPLETALK
16
Familia de direcciones de AppleTalk. Esta familia de direcciones solo se admite si está instalado el protocolo AppleTalk.

Esta familia de direcciones no se admite en Windows Vista y versiones posteriores.

AF_NETBIOS
17
Familia de direcciones NetBIOS. Esta familia de direcciones solo se admite si está instalado el proveedor de Windows Sockets para NetBIOS.

El proveedor de Windows Sockets para NetBIOS es compatible con versiones de 32 bits de Windows. Este proveedor se instala de forma predeterminada en versiones de 32 bits de Windows.

El proveedor de Windows Sockets para NetBIOS no se admite en versiones de 64 bits de windows, como Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 o Windows XP.

El proveedor de Windows Sockets para NetBIOS solo admite sockets en los que el parámetro de tipo se establece en SOCK_DGRAM.

El proveedor de Windows Sockets para NetBIOS no está relacionado directamente con la interfaz de programación netBIOS . La interfaz de programación NetBIOS no se admite en Windows Vista, Windows Server 2008 y versiones posteriores.

AF_INET6
23
Familia de direcciones del Protocolo de Internet versión 6 (IPv6).
AF_IRDA
26
Familia de direcciones de la Asociación de datos infrarrojos (IrDA).

Esta familia de direcciones solo se admite si el equipo tiene instalado un puerto infrarrojo y un controlador.

AF_BTH
32
La familia de direcciones Bluetooth.

Esta familia de direcciones es compatible con Windows XP con SP2 o posterior si el equipo tiene instalado un adaptador y un controlador Bluetooth.

iMaxSockAddr

Tipo: int

Longitud máxima de la dirección, en bytes.

iMinSockAddr

Tipo: int

Longitud mínima de la dirección, en bytes.

iSocketType

Tipo: int

Valor que se va a pasar como parámetro de tipo de socket a la función socket o WSASocket para abrir un socket para este protocolo. Los valores posibles para el tipo de socket se definen en el archivo de encabezado Winsock2.h .

En la tabla siguiente se enumeran los valores posibles para el miembro iSocketType admitido para Windows Sockets 2:

iSocketType Significado
SOCK_STREAM
1
Tipo de socket que proporciona flujos de bytes secuenciados, confiables, bidireccionales y basados en conexiones con un mecanismo de transmisión de datos OOB. Este tipo de socket usa el Protocolo de control de transmisión (TCP) para la familia de direcciones de Internet (AF_INET o AF_INET6).
SOCK_DGRAM
2
Tipo de socket que admite datagramas, que son a menos que los búferes no confiables de una longitud máxima fija (normalmente pequeña). Este tipo de socket usa el Protocolo de datagramas de usuario (UDP) para la familia de direcciones de Internet (AF_INET o AF_INET6).
SOCK_RAW
3
Tipo de socket que proporciona un socket sin formato que permite a una aplicación manipular el siguiente encabezado de protocolo de capa superior. Para manipular el encabezado IPv4, la opción de socket IP_HDRINCL debe establecerse en el socket. Para manipular el encabezado IPv6, la opción de socket IPV6_HDRINCL debe establecerse en el socket.
SOCK_RDM
4
Tipo de socket que proporciona un datagrama de mensaje confiable. Un ejemplo de este tipo es la implementación del protocolo multidifusión general pragmático (PGM) en Windows, a menudo denominada programación de multidifusión confiable.

Este valor solo se admite si está instalado el Protocolo de multidifusión confiable.

SOCK_SEQPACKET
5
Tipo de socket que proporciona un paquete de pseudo streaming basado en datagramas.

iProtocol

Tipo: int

Valor que se va a pasar como parámetro de protocolo a la función socket o WSASocket para abrir un socket para este protocolo. Las opciones posibles para el miembro iProtocol son específicas de la familia de direcciones y el tipo de socket especificado.

En Windows SDK publicado para Windows Vista y versiones posteriores, este miembro puede ser uno de los valores del tipo de enumeración IPPROTO definido en el archivo de encabezado Ws2def.h . Tenga en cuenta que el archivo de encabezado Ws2def.h se incluye automáticamente en Winsock2.h y nunca se debe usar directamente.

En las versiones del SDK de plataforma para Windows Server 2003 y versiones anteriores, los valores posibles para el miembro iProtocol se definen en los archivos de encabezado Winsock2.h y Wsrm.h .

En la tabla siguiente se enumeran los valores comunes para iProtocol , aunque muchos otros valores son posibles.

iProtocol Significado
IPPROTO_ICMP
1
Protocolo de mensajes de control de Internet (ICMP).

Este valor se admite en Windows XP y versiones posteriores.

IPPROTO_IGMP
2
El Protocolo de administración de grupos de Internet (IGMP).

Este valor se admite en Windows XP y versiones posteriores.

BTHPROTO_RFCOMM
3
El protocolo Bluetooth Radio Frequency Communications (Bluetooth RFCOMM).

Este valor se admite en Windows XP con SP2 o posterior.

IPPROTO_TCP
6
Protocolo de control de transmisión (TCP).
IPPROTO_UDP
17
Protocolo de datagramas de usuario (UDP).
IPPROTO_ICMPV6
58
Protocolo de mensajes de control de Internet versión 6 (ICMPv6).

Este valor se admite en Windows XP y versiones posteriores.

IPPROTO_RM
113
Protocolo PGM para multidifusión confiable. En Windows SDK publicado para Windows Vista y versiones posteriores, este protocolo también se denomina IPPROTO_PGM.

Este valor solo se admite si está instalado el Protocolo de multidifusión confiable.

iProtocolMaxOffset

Tipo: int

Valor máximo que se puede agregar al miembro iProtocol al proporcionar un valor para el parámetro de protocolo para socket y WSASocket. No todos los protocolos permiten un intervalo de valores. Cuando este es el caso iProtocolMaxOffset es cero.

iNetworkByteOrder

Tipo: int

Actualmente, estos valores son constantes de manifiesto (BIGENDIAN y LITTLEENDIAN) que indican big-endian o little-endian con los valores 0 y 1 respectivamente.

iSecurityScheme

Tipo: int

Tipo de esquema de seguridad empleado (si existe). Se usa un valor de SECURITY_PROTOCOL_NONE (0) para protocolos que no incorporan disposiciones de seguridad.

dwMessageSize

Tipo: DWORD

Tamaño máximo del mensaje, en bytes, admitido por el protocolo. Este es el tamaño máximo que se puede enviar desde cualquiera de las interfaces locales del host. En el caso de los protocolos que no admiten tramas de mensajes, el máximo real que se puede enviar a una dirección determinada puede ser menor. No hay ningún aprovisionamiento estándar para determinar el tamaño máximo del mensaje entrante. Se definen los siguientes valores especiales.

Valor Significado
0
El protocolo está orientado a secuencias y, por tanto, el concepto de tamaño del mensaje no es relevante.
0x1
El tamaño máximo de mensaje de salida (envío) depende de la MTU de red subyacente (unidad de transmisión de tamaño máximo) y, por lo tanto, no se puede conocer hasta después de que un socket esté enlazado. Las aplicaciones deben usar getsockopt para recuperar el valor de SO_MAX_MSG_SIZE después de que el socket se haya enlazado a una dirección local.
0xffffffff
El protocolo está orientado a mensajes, pero no hay ningún límite máximo para el tamaño de los mensajes que se pueden transmitir.

dwProviderReserved

Tipo: DWORD

Reservado para su uso por parte de los proveedores de servicios.

szProtocol[WSAPROTOCOL_LEN + 1]

Tipo: WCHAR[WSAPROTOCOL_LEN+1]

Matriz de caracteres Unicode que contiene un nombre legible que identifica el protocolo, por ejemplo, "MSAFD Tcpip [UDP/IP]". El número máximo de caracteres permitido es WSAPROTOCOL_LEN, que se define como 255.

Comentarios

Nota

El encabezado winsock2.h define WSAPROTOCOL_INFO como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado winsock2.h

Consulte también

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFO

WSASend

WSASendTo

WSASocket

WSCEnumProtocols

WSCEnumProtocols32

getsockopt

socket