Compartilhar via


estrutura WSAPROTOCOL_INFOA (winsock2.h)

A estrutura WSAPROTOCOL_INFO é usada para armazenar ou recuperar informações completas para um determinado protocolo.

Sintaxe

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;

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 serviço sem conexão (datagram). Se não estiver 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 sejam sempre entregues, mas que todos os dados entregues sejam entregues na ordem em que foram enviados.
XP1_MESSAGE_ORIENTED
0x00000008
Respeita os limites da mensagem, em vez de um protocolo orientado a fluxo em que não há nenhum conceito de limites de mensagem.
XP1_PSEUDO_STREAM
0x00000010
Um protocolo orientado a mensagens, mas os limites de 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 abortivos serão executados.
XP1_EXPEDITED_DATA
0x00000040
Dá suporte a dados agilizados (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 multipoint ou multicast. Os atributos de controle e plano de dados são indicados abaixo.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indica se o plano de controle está com raiz (valor = 1) ou não gerado (valor = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indica se o plano de dados está com raiz (valor = 1) ou não gerado (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 no WSASend e no 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.

 
Nota Apenas 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 WSAPROTOCOL_INFOW deverão ser usadas. Quando nenhum bit é 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 de sinalizador 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 ao 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 igual a zero no parâmetro de protocolo 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 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 membro dwCatalogEntryId 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 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 a função soquete ou 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.

Na SDK do Windows lançada 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 no Winsock2.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 com suporte no momento 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 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 PF_ constantes da família de protocolos 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 posterior.

AF_APPLETALK
16
A família de endereços do 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 posterior.

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

O provedor do Windows Sockets 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 do Windows Sockets 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 do Windows Sockets para NetBIOS dá suporte apenas a soquetes em que o parâmetro de tipo é definido como SOCK_DGRAM.

O provedor do Windows Sockets 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 (Internet Protocol versão 6).
AF_IRDA
26
A família de endereços da IrDA (Associação de Dados Infravermelhos).

Essa família de endereços só terá suporte se o computador tiver uma porta infravermelha e um 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 a função socket ou 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 iSocketType com suporte para 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 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 datagramas, que são buffers sem conexão e não confiáveis de um comprimento máximo fixo (normalmente pequeno). Esse tipo de soquete usa o UDP (Protocolo de Datagrama do Usuário) 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 de soquete IPV6_HDRINCL 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 Geral Multicast) no Windows, geralmente conhecida como programação multicast confiável.

Esse valor só terá suporte se o Reliable Multicast Protocol 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 parâmetro de protocolo para a função soquete ou WSASocket para abrir um soquete para esse protocolo. As opções possíveis para o membro 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 em Winsock2.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 o membro 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 RADIO FREQUENCY Communications (Bluetooth RFCOMM).

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 (Protocolo de Datagrama do Usuário).
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 o Windows Vista e posterior, esse protocolo também é chamado de IPPROTO_PGM.

Esse valor só terá suporte se o Reliable Multicast Protocol estiver instalado.

iProtocolMaxOffset

Tipo: int

O valor máximo que pode ser adicionado ao iProtocol ao fornecer um valor para o parâmetro de protocolo para a função soquete ou WSASocket . Nem todos os protocolos permitem um intervalo de valores. Quando esse é o caso , iProtocolMaxOffset é 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: TCHAR[WSAPROTOCOL_LEN+1]

Uma matriz de caracteres que contém um nome legível para 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.

Comentários

Observação

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 de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

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

Confira também

Wsaenumprotocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

Wsasocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

Getsockopt

socket