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 |
---|---|
|
Proporciona un servicio sin conexión (datagrama). Si no se establece, el protocolo admite la transferencia de datos orientada a conexiones. |
|
Garantiza que todos los datos enviados lleguen al destino previsto. |
|
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ó. |
|
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. |
|
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. |
|
Admite el cierre de dos fases (correcto). Si no se establece, solo se realizan cierres anulativos. |
|
Admite datos acelerados (urgentes). |
|
Admite la conexión de datos. |
|
Admite la desconexión de datos. |
|
Admite un mecanismo de difusión. |
|
Admite un mecanismo multipunto o multidifusión. A continuación se indican los atributos de plano de datos y control. |
|
Indica si el plano de control está modificado (valor = 1) o no raíz (valor = 0). |
|
Indica si el plano de datos está modificado (valor = 1) o no raíz (valor = 0). |
|
Admite la calidad de las solicitudes de servicio. |
|
El bit está reservado. |
|
El protocolo es unidireccional en la dirección de envío. |
|
El protocolo es unidireccional en la dirección del recv. |
|
Los descriptores de socket devueltos por el proveedor son identificadores del sistema operativo Sistema de archivos instalables (IFS). |
|
La marca MSG_PARTIAL se admite en WSASend y WSASendTo. |
|
El protocolo proporciona compatibilidad con SAN.
Este valor es compatible con Windows 7 y Windows Server 2008 R2. |
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 |
---|---|
|
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. |
|
Indica que se trata de la entrada recomendada o usada con más frecuencia para un protocolo que es capaz de implementar varios comportamientos. |
|
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. |
|
Indica que un valor de cero en el parámetro de protocolo de socket o WSASocket coincide con esta entrada de protocolo. |
|
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 |
---|---|
|
Familia de direcciones del Protocolo de Internet versión 4 (IPv4). |
|
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. |
|
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. |
|
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. |
|
Familia de direcciones del Protocolo de Internet versión 6 (IPv6). |
|
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. |
|
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 |
---|---|
|
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). |
|
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). |
|
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. |
|
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. |
|
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.
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 |
---|---|
|
El protocolo está orientado a secuencias y, por tanto, el concepto de tamaño del mensaje no es relevante. |
|
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. |
|
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 |