Compartilhar via


estrutura WSAPROTOCOL_INFOW (winsock2.h)

A estrutura WSAPROTOCOL_INFOW é usada para armazenar ou recuperar informações completas para um determinado protocolo. O nome do protocolo é representado como uma matriz de caracteres Unicode.

Sintaxe

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;

Membros

dwServiceFlags1

Tipo: DWORD

Uma máscara de bits que descreve os serviços fornecidos pelo protocolo. Os valores possíveis para esse membro são definidos no arquivo de cabeçalho Winsock2.h.

Os valores a seguir são possíveis.

Valor Significado
XP1_CONNECTIONLESS
0x00000001
Fornece um serviço sem conexão (datagram). Se não for definido, o protocolo oferecerá suporte à transferência de dados orientada à conexão.
XP1_GUARANTEED_DELIVERY
0x00000002
Garante que todos os dados enviados cheguem ao destino pretendido.
XP1_GUARANTEED_ORDER
0x00000004
Garante que os dados só cheguem na ordem em que foram enviados e que não sejam duplicados. Essa característica não significa necessariamente que os dados são sempre entregues, mas que todos os dados entregues são entregues na ordem em que foram enviados.
XP1_MESSAGE_ORIENTED
0x00000008
Respeita os limites de mensagens, em oposição a um protocolo orientado a fluxos em que não há nenhum conceito de limites de mensagem.
XP1_PSEUDO_STREAM
0x00000010
Um protocolo orientado a mensagens, mas os limites da mensagem são ignorados para todos os recibos. Isso é conveniente quando um aplicativo não deseja que o enquadramento de mensagens seja feito pelo protocolo.
XP1_GRACEFUL_CLOSE
0x00000020
Dá suporte ao fechamento em duas fases (normal). Se não estiver definido, somente fechamentos anulativos serão executados.
XP1_EXPEDITED_DATA
0x00000040
Dá suporte a dados rápidos (urgentes).
XP1_CONNECT_DATA
0x00000080
Dá suporte a dados de conexão.
XP1_DISCONNECT_DATA
0x00000100
Dá suporte à desconexão de dados.
XP1_SUPPORT_BROADCAST
0x00000200
Dá suporte a um mecanismo de difusão.
XP1_SUPPORT_MULTIPOINT
0x00000400
Dá suporte a um mecanismo multiponto ou multicast. Os atributos de plano de dados e controle são indicados abaixo.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indica se o plano de controle está com raiz (valor = 1) ou não desenraizado (valor = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indica se o plano de dados está com raiz (valor = 1) ou não desenraizado (valor = 0).
XP1_QOS_SUPPORTED
0x00002000
Dá suporte à qualidade das solicitações de serviço.
XP1_INTERRUPT
O bit é reservado.
XP1_UNI_SEND
0x00008000
O protocolo é unidirecional na direção de envio.
XP1_UNI_RECV
0x00010000
O protocolo é unidirecional na direção do recv.
XP1_IFS_HANDLES
0x00020000
Os descritores de soquete retornados pelo provedor são identificadores IFS (Sistema de Arquivos Instalável) do sistema operacional.
XP1_PARTIAL_MESSAGE
0x00040000
O sinalizador MSG_PARTIAL tem suporte em WSASend e WSASendTo.
XP1_SAN_SUPPORT_SDP
0x00080000
O protocolo fornece suporte para SAN.

Esse valor tem suporte no Windows 7 e no Windows Server 2008 R2.

 
Observação Somente um dos valores de XP1_UNI_SEND ou XP1_UNI_RECV pode ser definido. Se um protocolo puder ser unidirecional em qualquer direção, duas estruturas de WSAPROTOCOL_INFOW deverão ser usadas. Quando nenhum dos bits é definido, o protocolo é considerado bidirecional.
 

dwServiceFlags2

Tipo: DWORD

Reservado para definições adicionais de atributo de protocolo.

dwServiceFlags3

Tipo: DWORD

Reservado para definições adicionais de atributo de protocolo.

dwServiceFlags4

Tipo: DWORD

Reservado para definições adicionais de atributo de protocolo.

dwProviderFlags

Tipo: DWORD

Um conjunto de sinalizadores que fornece informações sobre como esse protocolo é representado no catálogo do Winsock. Os valores possíveis para esse membro são definidos no arquivo de cabeçalho Winsock2.h.

Os valores a seguir são possíveis.

Valor Significado
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
Indica que essa é uma das duas ou mais entradas para um único protocolo (de um determinado provedor) que é capaz de implementar vários comportamentos. Um exemplo disso é o SPX que, no lado receptor, pode se comportar como um protocolo orientado a mensagens ou orientado a fluxo.
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
Indica que essa é a entrada recomendada ou usada com mais frequência para um protocolo capaz de implementar vários comportamentos.
PFL_HIDDEN
0x00000004
Definido por um provedor para indicar à Ws2_32.dll que esse protocolo não deve ser retornado no buffer de resultados gerado por WSAEnumProtocols. Obviamente, um aplicativo do Windows Sockets 2 nunca deve ver uma entrada com esse conjunto de bits.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Indica que um valor zero no protocolo parâmetro de de soquete ou WSASocket corresponde a essa entrada de protocolo.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
Definido por um provedor para indicar suporte para acesso direto à rede.

Esse valor tem suporte no Windows 7 e no Windows Server 2008 R2.

ProviderId

Tipo: guid

Um GUID (identificador global exclusivo) atribuído ao provedor pelo fornecedor do provedor de serviços. Esse valor é útil para instâncias em que mais de um provedor de serviços é capaz de implementar um protocolo específico. Um aplicativo pode usar o membro ProviderId para distinguir entre provedores que, de outra forma, podem ser indistinguíveis.

dwCatalogEntryId

Tipo: DWORD

Um identificador exclusivo atribuído pelo WS2_32.DLL para cada estrutura WSAPROTOCOL_INFO.

ProtocolChain

Tipo: WSAPROTOCOLCHAIN

A estrutura WSAPROTOCOLCHAIN associada ao protocolo. Se o comprimento da cadeia for 0, essa entrada WSAPROTOCOL_INFO representará um protocolo em camadas que tem o SPI do Windows Sockets 2 como suas bordas superior e inferior. Se o comprimento da cadeia for igual a 1, essa entrada representará um protocolo base cujo identificador de Entrada de Catálogo está no dwCatalogEntryId membro da estrutura WSAPROTOCOL_INFO. Se o comprimento da cadeia for maior que 1, essa entrada representará uma cadeia de protocolo que consiste em um ou mais protocolos em camadas sobre um protocolo base. Os identificadores de Entrada de Catálogo correspondentes estão na matriz ProtocolChain.ChainEntries começando com o protocolo em camadas na parte superior (o elemento zero na matriz ProtocolChain.ChainEntries) e terminando com o protocolo base. Consulte a especificação da Interface do Provedor de Serviços do Windows Sockets 2 para obter mais informações sobre cadeias de protocolo.

iVersion

Tipo: int

O identificador de versão do protocolo.

iAddressFamily

Tipo: int

Um valor a ser passado como o parâmetro da família de endereços para o soquete ou função WSASocket para abrir um soquete para esse protocolo. Esse valor também define exclusivamente a estrutura de um endereço de protocolo para um sockaddr usado pelo protocolo.

No SDK do Windows lançado para Windows Vista e posterior, os valores possíveis para a família de endereços são definidos no arquivo de cabeçalho Ws2def.h. Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente noWinsock2.h e nunca deve ser usado diretamente.

Em versões do SDK da Plataforma para Windows Server 2003 e anteriores, os valores possíveis para a família de endereços são definidos no arquivo de cabeçalho Winsock2.h.

Os valores atualmente compatíveis são AF_INET ou AF_INET6, que são os formatos de família de endereços da Internet para IPv4 e IPv6. Outras opções para a família de endereços (AF_NETBIOS para uso com NetBIOS, por exemplo) têm suporte se um provedor de serviços do Windows Sockets para a família de endereços estiver instalado. Observe que os valores para a família de endereços AF_ e as constantes da família de protocolos PF_ são idênticos (por exemplo, AF_INET e PF_INET), portanto, qualquer constante pode ser usada.

A tabela a seguir lista valores comuns para a família de endereços, embora muitos outros valores sejam possíveis.

iAddressFamily Significado
AF_INET
2
A família de endereços IPv4 (Protocolo de Internet versão 4).
AF_IPX
6
A família de endereços IPX/SPX. Essa família de endereços só terá suporte se o protocolo NWLink IPX/SPX NetBIOS Compatible Transport estiver instalado.

Não há suporte para essa família de endereços no Windows Vista e posteriores.

AF_APPLETALK
16
A família de endereços AppleTalk. Essa família de endereços só terá suporte se o protocolo AppleTalk estiver instalado.

Não há suporte para essa família de endereços no Windows Vista e posteriores.

AF_NETBIOS
17
A família de endereços NetBIOS. Essa família de endereços só terá suporte se o provedor de Soquetes do Windows para NetBIOS estiver instalado.

O provedor de Soquetes do Windows para NetBIOS tem suporte em versões de 32 bits do Windows. Esse provedor é instalado por padrão em versões de 32 bits do Windows.

O provedor de Soquetes do Windows para NetBIOS não tem suporte em versões de 64 bits do Windows, incluindo Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 ou Windows XP.

O provedor de Soquetes do Windows para NetBIOS só dá suporte a soquetes em que o parâmetro tipo de está definido como SOCK_DGRAM.

O provedor de Soquetes do Windows para NetBIOS não está diretamente relacionado à interface de programação NetBIOS. Não há suporte para a interface de programação NetBIOS no Windows Vista, no Windows Server 2008 e posterior.

AF_INET6
23
A família de endereços IPv6 (Protocolo de Internet versão 6).
AF_IRDA
26
A família de endereços irda (Associação de Dados Infravermelhos).

Essa família de endereços só terá suporte se o computador tiver uma porta infravermelha e o driver instalados.

AF_BTH
32
A família de endereços Bluetooth.

Essa família de endereços terá suporte no Windows XP com SP2 ou posterior se o computador tiver um adaptador Bluetooth e um driver instalados.

iMaxSockAddr

Tipo: int

O comprimento máximo do endereço, em bytes.

iMinSockAddr

Tipo: int

O comprimento mínimo do endereço, em bytes.

iSocketType

Tipo: int

Um valor a ser passado como o parâmetro de tipo de soquete para o soquete ou função WSASocket para abrir um soquete para esse protocolo. Os valores possíveis para o tipo de soquete são definidos no arquivo de cabeçalho Winsock2.h.

A tabela a seguir lista os valores possíveis para o membro do iSocketType com suporte para o Windows Sockets 2:

iSocketType Significado
SOCK_STREAM
1
Um tipo de soquete que fornece fluxos de bytes sequenciados, confiáveis, bidirecionais e baseados em conexão com um mecanismo de transmissão de dados OOB. Esse tipo de soquete usa o Protocolo TCP (Protocolo de Controle de Transmissão) para a família de endereços da Internet (AF_INET ou AF_INET6).
SOCK_DGRAM
2
Um tipo de soquete que dá suporte a datagrams, que são buffers não confiáveis e sem conexão de um comprimento máximo fixo (normalmente pequeno). Esse tipo de soquete usa o UDP (User Datagram Protocol) para a família de endereços da Internet (AF_INET ou AF_INET6).
SOCK_RAW
3
Um tipo de soquete que fornece um soquete bruto que permite que um aplicativo manipule o próximo cabeçalho de protocolo de camada superior. Para manipular o cabeçalho IPv4, a opção de soquete IP_HDRINCL deve ser definida no soquete. Para manipular o cabeçalho IPv6, a opção IPV6_HDRINCL soquete deve ser definida no soquete.
SOCK_RDM
4
Um tipo de soquete que fornece um datagrama de mensagem confiável. Um exemplo desse tipo é a implementação de protocolo multicast (PGM) pragmática no Windows, geralmente conhecida como programação multicast confiável.

Esse valor só terá suporte se o Protocolo Multicast Confiável estiver instalado.

SOCK_SEQPACKET
5
Um tipo de soquete que fornece um pacote pseudo-fluxo com base em datagramas.

iProtocol

Tipo: int

Um valor a ser passado como o protocolo parâmetro para a de soquete ou função de WSASocket para abrir um soquete para esse protocolo. As opções possíveis para o membro do iProtocol são específicas para a família de endereços e o tipo de soquete especificados.

No SDK do Windows lançado para Windows Vista e posterior, esse membro pode ser um dos valores do tipo de enumeração IPPROTO definido no arquivo de cabeçalho Ws2def.h. Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente noWinsock2.h e nunca deve ser usado diretamente.

Nas versões do SDK da Plataforma para Windows Server 2003 e anteriores, os valores possíveis para o membro do do iProtocol são definidos nos arquivos de cabeçalho Winsock2.h e Wsrm.h.

A tabela a seguir lista valores comuns para o iProtocol, embora muitos outros valores sejam possíveis.

iProtocol Significado
IPPROTO_ICMP
1
O Protocolo de Mensagem de Controle da Internet (ICMP).

Esse valor tem suporte no Windows XP e posterior.

IPPROTO_IGMP
2
O Protocolo de Gerenciamento de Grupos da Internet (IGMP).

Esse valor tem suporte no Windows XP e posterior.

BTHPROTO_RFCOMM
3
O protocolo Bluetooth RFCOMM (Comunicações de Radiofrequência bluetooth).

Esse valor tem suporte no Windows XP com SP2 ou posterior.

IPPROTO_TCP
6
O Protocolo de Controle de Transmissão (TCP).
IPPROTO_UDP
17
O UDP (User Datagram Protocol).
IPPROTO_ICMPV6
58
O Protocolo de Mensagem de Controle da Internet versão 6 (ICMPv6).

Esse valor tem suporte no Windows XP e posterior.

IPPROTO_RM
113
O protocolo PGM para multicast confiável. No SDK do Windows lançado para Windows Vista e posterior, esse protocolo também é chamado de IPPROTO_PGM.

Esse valor só terá suporte se o Protocolo Multicast Confiável estiver instalado.

iProtocolMaxOffset

Tipo: int

O valor máximo que pode ser adicionado a membro iProtocol ao fornecer um valor para o protocolo parâmetro para de soquete e WSASocket. Nem todos os protocolos permitem um intervalo de valores. Quando esse for o caso iProtocolMaxOffset for zero.

iNetworkByteOrder

Tipo: int

Atualmente, esses valores são constantes de manifesto (BIGENDIAN e LITTLEENDIAN) que indicam big-endian ou little-endian com os valores 0 e 1, respectivamente.

iSecurityScheme

Tipo: int

O tipo de esquema de segurança empregado (se houver). Um valor de SECURITY_PROTOCOL_NONE (0) é usado para protocolos que não incorporam provisionamentos de segurança.

dwMessageSize

Tipo: DWORD

O tamanho máximo da mensagem, em bytes, compatível com o protocolo. Esse é o tamanho máximo que pode ser enviado de qualquer uma das interfaces locais do host. Para protocolos que não dão suporte ao enquadramento de mensagens, o máximo real que pode ser enviado para um determinado endereço pode ser menor. Não há nenhuma provisão padrão para determinar o tamanho máximo da mensagem de entrada. Os valores especiais a seguir são definidos.

Valor Significado
0
O protocolo é orientado a fluxo e, portanto, o conceito de tamanho da mensagem não é relevante.
0x1
O tamanho máximo da mensagem de saída (envio) depende da MTU de rede subjacente (unidade de transmissão de tamanho máximo) e, portanto, não pode ser conhecido até que um soquete seja associado. Os aplicativos devem usar getsockopt para recuperar o valor de SO_MAX_MSG_SIZE depois que o soquete tiver sido associado a um endereço local.
0xFFFFFFFF
O protocolo é orientado a mensagens, mas não há limite máximo para o tamanho das mensagens que podem ser transmitidas.

dwProviderReserved

Tipo: DWORD

Reservado para uso por provedores de serviços.

szProtocol[WSAPROTOCOL_LEN + 1]

Tipo: WCHAR[WSAPROTOCOL_LEN+1]

Uma matriz de caracteres Unicode que contém um nome legível por humanos que identifica o protocolo, por exemplo, "MSAFD Tcpip [UDP/IP]". O número máximo de caracteres permitido é WSAPROTOCOL_LEN, que é definido como 255.

Observações

Nota

O cabeçalho winsock2.h define WSAPROTOCOL_INFO como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000 Professional [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows 2000 Server [somente aplicativos da área de trabalho]
cabeçalho winsock2.h

Consulte também

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFO

WSASend

WSASendTo

WSASocket

WSCEnumProtocols

WSCEnumProtocols32

de getsockopt

soquete