The Windows Sockets WSAPROTOCOL_INFOW structure is used to store or retrieve complete information for a given protocol.


typedef struct _WSAPROTOCOL_INFOW {
  DWORD            dwServiceFlags1;
  DWORD            dwServiceFlags2;
  DWORD            dwServiceFlags3;
  DWORD            dwServiceFlags4;
  DWORD            dwProviderFlags;
  GUID             ProviderId;
  DWORD            dwCatalogEntryId;
  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];


  • dwServiceFlags1
    Bitmask describing the services provided by the protocol. The bitmask can be set with one or more (ORed) of the following flags:

      Protocol provides connectionless (datagram) service. This flag is not set by a SAN service provider, because it only provides connection-oriented data transfers.

      Protocol guarantees that all data that it sends reaches the intended destination.

      Protocol guarantees that data arrives in the order in which the protocol sent it and that it is not duplicated. The protocol does not guarantee that the data was delivered.

      Protocol honors message boundaries, as opposed to a stream-oriented protocol, which does not honor message boundaries.

      Although the protocol is message-oriented, it ignores message boundaries for all receives. This is convenient when an application does not require that the protocol frame messages.

      Protocol supports two-phase (graceful) socket closures. If not set, the protocol performs only abortive closures.

      Protocol supports expedited (urgent) data.

      Protocol supports data related to a connection request.

      Protocol supports data related to a connection shutdown.

      Protocol supports a broadcast mechanism.

      Protocol supports a multipoint or multicast mechanism. Control and data plane attributes are indicated in the following values.

      Indicates whether the control plane is rooted (value = 1) or nonrooted (value = 0).

      Indicates whether the data plane is rooted (value = 1) or nonrooted (value = 0).

      Set by a SAN service provider if it supports quality of service requests.


    • XP1_UNI_SEND
      Protocol is unidirectional in the send direction.

    • XP1_UNI_RECV
      Protocol is unidirectional in the receive direction.

      Socket descriptors returned by the provider are handles to installable file system (IFS) objects. This flag is not set by a SAN service provider, because the socket descriptors it returns are not handles to IFS objects.

      The MSG_PARTIAL flag is supported in WSPSend.


    Note that XP1_UNI_SEND and XP1_UNI_RECV are mutually exclusive. The switch sets neither bit for SAN service providers to indicate that the protocol is bidirectional.

  • dwServiceFlags2
    Reserved for additional protocol-defined attributes.

  • dwServiceFlags3
    Reserved for additional protocol-defined attributes.

  • dwServiceFlags4
    Reserved for additional protocol-defined attributes.

  • dwProviderFlags
    Provides information about how this protocol is represented in the protocol catalog. The following flag values are possible:

      Indicates that this is one of two or more entries for a single protocol (from a given provider) that is capable of implementing multiple behaviors. An example of this is SPX, which, on the receiving side, can behave either as a message-oriented or a stream-oriented protocol.

      Indicates that this is the recommended or most frequently used entry for a protocol that is capable of implementing multiple behaviors.

      Set by a SAN service provider to indicate that it is only indirectly exposed to applications through the Windows Sockets switch.

      Indicates that a value of zero in the protocol parameter of WSPSocket matches this protocol entry.

  • ProviderId
    Unique identifier assigned to the SAN service provider by the SAN NIC vendor. This value is useful when more than one service provider is able to implement a particular protocol. An application can use the ProviderId value to distinguish between providers that might otherwise be indistinguishable.

  • dwCatalogEntryId
    Unique identifier assigned by the Windows Sockets interface ( Ws2_32.dll) for each WSAPROTOCOL_INFOW structure. This identifier can be set anywhere in the range from 0 to 0xFFFFFFFF.

  • ProtocolChain
    A WSAPROTOCOLCHAIN structure that contains a numbered list of Catalog Entry IDs that comprise a protocol chain.

    If the length of the chain is zero, this WSAPROTOCOL_INFOW entry represents a layered protocol that has Windows Sockets 2 SPI as both its top and bottom edges (for example, the Windows Sockets switch). If the length of the chain equals 1, this entry represents a base protocol whose Catalog Entry identifier is in the dwCatalogEntryId member of the WSAPROTOCOL_INFOW structure. If the length of the chain is larger than 1, this entry represents a protocol chain that consists of one or more layered protocols on top of a base protocol. The corresponding Catalog Entry identifiers are in the ProtocolChain.ChainEntries array starting with the layered protocol at the top (the zero element in the ProtocolChain.ChainEntries array) and ending with the base protocol. Refer to the Windows Sockets 2 Service Provider Interface specification For more information about protocol chains.

  • iVersion
    Protocol version identifier.

  • iAddressFamily
    Value to pass as the address family parameter to the WSPSocket function to open a socket for this protocol. This value also uniquely defines the structure of protocol addresses (sockaddr structure) used by the protocol (for example, the sockaddr_in structure for TCP/IP). The Windows Sockets switch sets the address family to one of the WSK address families.

  • iMaxSockAddr
    Maximum address length, in bytes.

  • iMinSockAddr
    Minimum address length, in bytes.

  • iSocketType
    Value to pass as the socket type parameter to the Socket function to open a socket for this protocol. The Windows Sockets switch sets the socket type to SOCK_STREAM.

  • iProtocol
    Value to pass as the protocol parameter to the WSPSocket function to open a socket for this protocol.

  • iProtocolMaxOffset
    Maximum value that may be added to iProtocol when supplying a value for the protocol parameter to the WSPSocket function. Not all protocols allow a range of values. When this is the case, iProtocolMaxOffset is zero.

  • iNetworkByteOrder
    Currently, these values are manifest constants (BIGENDIAN and LITTLEENDIAN) that indicate either big-endian or little-endian with the values zero and 1, respectively.

  • iSecurityScheme
    Type of security scheme employed, if any. A value of SECURITY_PROTOCOL_NONE is used for protocols that do not incorporate security provisions.

  • dwMessageSize
    Maximum message size supported by the protocol. This is the maximum size that can be sent from any of the host's local interfaces. For protocols that do not support message framing, the actual maximum that can be sent to a given address may be less. There is no standard provision to determine the maximum inbound message size. The following special values are defined:

    • 0
      Protocol is stream-oriented; therefore, message size is irrelevant.

    • 0x1
      Maximum outbound (send) message size is dependent on the underlying network MTU (maximum transmission unit) and, therefore, cannot be known until after a socket is bound. The switch should use the WSPGetSockOpt function to retrieve the value of SO_MAX_MSG_SIZE after the socket has been bound to a local address.

    • 0xFFFFFFFF
      Protocol is message-oriented, but there is no maximum limit to the size of messages that may be transmitted.

  • dwProviderReserved
    Reserved for use by service providers. WSD-SAN service providers use this member during socket duplication. A SAN service provider in the destination process uses the value of the dwProviderReserved member to identify the socket context that the SAN provider in source process supplied through a private interface. For more information about how a WSD-SAN provider uses the value of the dwProviderReserved member, see Duplicating Socket Handles for a SAN.

  • szProtocol
    Array of null-terminated characters that contains a human-readable name that identifies the protocol (for example, "TCP"). The maximum number of characters allowed is WSAPROTOCOL_LEN, which is defined to be 256.



Requires Windows Sockets version 2.0.


Winsock2.h (include Winsock2.h)

See also






Send comments about this topic to Microsoft