xpmgr/BuildTools/Include/WebServices.h

9080 lines
274 KiB
C

#ifndef __WEBSERVICES_H__
#define __WEBSERVICES_H__
#if defined (_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#include <windows.h>
#include <wtypes.h>
#include <wincrypt.h>
#ifdef __cplusplus
extern "C"
{
#endif
// HANDLES
typedef struct _WS_XML_READER WS_XML_READER;
typedef struct _WS_XML_WRITER WS_XML_WRITER;
typedef struct _WS_XML_BUFFER WS_XML_BUFFER;
typedef struct _WS_CHANNEL WS_CHANNEL;
typedef struct _WS_OPERATION_CONTEXT WS_OPERATION_CONTEXT;
typedef struct _WS_ERROR WS_ERROR;
typedef struct _WS_HEAP WS_HEAP;
typedef struct _WS_LISTENER WS_LISTENER;
typedef struct _WS_MESSAGE WS_MESSAGE;
typedef struct _WS_SECURITY_TOKEN WS_SECURITY_TOKEN;
typedef struct _WS_SECURITY_CONTEXT WS_SECURITY_CONTEXT;
typedef struct _WS_SERVICE_HOST WS_SERVICE_HOST;
typedef struct _WS_SERVICE_PROXY WS_SERVICE_PROXY;
typedef struct _WS_METADATA WS_METADATA;
typedef struct _WS_POLICY WS_POLICY;
// STRUCT DECLARATIONS
typedef struct _WS_XML_DICTIONARY WS_XML_DICTIONARY;
typedef struct _WS_XML_STRING WS_XML_STRING;
typedef struct _WS_XML_QNAME WS_XML_QNAME;
typedef struct _WS_XML_NODE_POSITION WS_XML_NODE_POSITION;
typedef struct _WS_XML_READER_PROPERTY WS_XML_READER_PROPERTY;
typedef struct _WS_XML_CANONICALIZATION_INCLUSIVE_PREFIXES WS_XML_CANONICALIZATION_INCLUSIVE_PREFIXES;
typedef struct _WS_XML_CANONICALIZATION_PROPERTY WS_XML_CANONICALIZATION_PROPERTY;
typedef struct _WS_XML_WRITER_PROPERTY WS_XML_WRITER_PROPERTY;
typedef struct _WS_XML_BUFFER_PROPERTY WS_XML_BUFFER_PROPERTY;
typedef struct _WS_XML_TEXT WS_XML_TEXT;
typedef struct _WS_XML_UTF8_TEXT WS_XML_UTF8_TEXT;
typedef struct _WS_XML_UTF16_TEXT WS_XML_UTF16_TEXT;
typedef struct _WS_XML_BASE64_TEXT WS_XML_BASE64_TEXT;
typedef struct _WS_XML_BOOL_TEXT WS_XML_BOOL_TEXT;
typedef struct _WS_XML_INT32_TEXT WS_XML_INT32_TEXT;
typedef struct _WS_XML_INT64_TEXT WS_XML_INT64_TEXT;
typedef struct _WS_XML_UINT64_TEXT WS_XML_UINT64_TEXT;
typedef struct _WS_XML_FLOAT_TEXT WS_XML_FLOAT_TEXT;
typedef struct _WS_XML_DOUBLE_TEXT WS_XML_DOUBLE_TEXT;
typedef struct _WS_XML_DECIMAL_TEXT WS_XML_DECIMAL_TEXT;
typedef struct _WS_XML_GUID_TEXT WS_XML_GUID_TEXT;
typedef struct _WS_XML_UNIQUE_ID_TEXT WS_XML_UNIQUE_ID_TEXT;
typedef struct _WS_DATETIME WS_DATETIME;
typedef struct _WS_XML_DATETIME_TEXT WS_XML_DATETIME_TEXT;
typedef struct _WS_TIMESPAN WS_TIMESPAN;
typedef struct _WS_XML_TIMESPAN_TEXT WS_XML_TIMESPAN_TEXT;
typedef struct _WS_XML_QNAME_TEXT WS_XML_QNAME_TEXT;
typedef struct _WS_XML_LIST_TEXT WS_XML_LIST_TEXT;
typedef struct _WS_XML_NODE WS_XML_NODE;
typedef struct _WS_XML_ATTRIBUTE WS_XML_ATTRIBUTE;
typedef struct _WS_XML_ELEMENT_NODE WS_XML_ELEMENT_NODE;
typedef struct _WS_XML_TEXT_NODE WS_XML_TEXT_NODE;
typedef struct _WS_XML_COMMENT_NODE WS_XML_COMMENT_NODE;
typedef struct _WS_XML_READER_INPUT WS_XML_READER_INPUT;
typedef struct _WS_XML_READER_BUFFER_INPUT WS_XML_READER_BUFFER_INPUT;
typedef struct _WS_XML_READER_STREAM_INPUT WS_XML_READER_STREAM_INPUT;
typedef struct _WS_XML_READER_ENCODING WS_XML_READER_ENCODING;
typedef struct _WS_XML_READER_TEXT_ENCODING WS_XML_READER_TEXT_ENCODING;
typedef struct _WS_XML_READER_BINARY_ENCODING WS_XML_READER_BINARY_ENCODING;
typedef struct _WS_STRING WS_STRING;
typedef struct _WS_XML_READER_MTOM_ENCODING WS_XML_READER_MTOM_ENCODING;
typedef struct _WS_XML_READER_RAW_ENCODING WS_XML_READER_RAW_ENCODING;
typedef struct _WS_XML_WRITER_ENCODING WS_XML_WRITER_ENCODING;
typedef struct _WS_XML_WRITER_TEXT_ENCODING WS_XML_WRITER_TEXT_ENCODING;
typedef struct _WS_XML_WRITER_BINARY_ENCODING WS_XML_WRITER_BINARY_ENCODING;
typedef struct _WS_XML_WRITER_MTOM_ENCODING WS_XML_WRITER_MTOM_ENCODING;
typedef struct _WS_XML_WRITER_RAW_ENCODING WS_XML_WRITER_RAW_ENCODING;
typedef struct _WS_XML_WRITER_OUTPUT WS_XML_WRITER_OUTPUT;
typedef struct _WS_XML_WRITER_BUFFER_OUTPUT WS_XML_WRITER_BUFFER_OUTPUT;
typedef struct _WS_XML_WRITER_STREAM_OUTPUT WS_XML_WRITER_STREAM_OUTPUT;
typedef struct _WS_XML_WRITER_PROPERTIES WS_XML_WRITER_PROPERTIES;
typedef struct _WS_XML_READER_PROPERTIES WS_XML_READER_PROPERTIES;
typedef struct _WS_ASYNC_CONTEXT WS_ASYNC_CONTEXT;
typedef struct _WS_ASYNC_STATE WS_ASYNC_STATE;
typedef struct _WS_ASYNC_OPERATION WS_ASYNC_OPERATION;
typedef struct _WS_CHANNEL_PROPERTY WS_CHANNEL_PROPERTY;
typedef struct _WS_CUSTOM_HTTP_PROXY WS_CUSTOM_HTTP_PROXY;
typedef struct _WS_CHANNEL_PROPERTIES WS_CHANNEL_PROPERTIES;
typedef struct _WS_CUSTOM_CHANNEL_CALLBACKS WS_CUSTOM_CHANNEL_CALLBACKS;
typedef struct _WS_HTTP_HEADER_MAPPING WS_HTTP_HEADER_MAPPING;
typedef struct _WS_HTTP_MESSAGE_MAPPING WS_HTTP_MESSAGE_MAPPING;
typedef struct _WS_ELEMENT_DESCRIPTION WS_ELEMENT_DESCRIPTION;
typedef struct _WS_MESSAGE_DESCRIPTION WS_MESSAGE_DESCRIPTION;
typedef struct _WS_CHANNEL_ENCODER WS_CHANNEL_ENCODER;
typedef struct _WS_CHANNEL_DECODER WS_CHANNEL_DECODER;
typedef struct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT WS_HTTP_REDIRECT_CALLBACK_CONTEXT;
typedef struct _WS_ENDPOINT_IDENTITY WS_ENDPOINT_IDENTITY;
typedef struct _WS_ENDPOINT_ADDRESS WS_ENDPOINT_ADDRESS;
typedef struct _WS_DNS_ENDPOINT_IDENTITY WS_DNS_ENDPOINT_IDENTITY;
typedef struct _WS_UPN_ENDPOINT_IDENTITY WS_UPN_ENDPOINT_IDENTITY;
typedef struct _WS_SPN_ENDPOINT_IDENTITY WS_SPN_ENDPOINT_IDENTITY;
typedef struct _WS_BYTES WS_BYTES;
typedef struct _WS_RSA_ENDPOINT_IDENTITY WS_RSA_ENDPOINT_IDENTITY;
typedef struct _WS_CERT_ENDPOINT_IDENTITY WS_CERT_ENDPOINT_IDENTITY;
typedef struct _WS_UNKNOWN_ENDPOINT_IDENTITY WS_UNKNOWN_ENDPOINT_IDENTITY;
typedef struct _WS_ERROR_PROPERTY WS_ERROR_PROPERTY;
typedef struct _WS_FAULT_REASON WS_FAULT_REASON;
typedef struct _WS_FAULT_CODE WS_FAULT_CODE;
typedef struct _WS_FAULT WS_FAULT;
typedef struct _WS_FAULT_DETAIL_DESCRIPTION WS_FAULT_DETAIL_DESCRIPTION;
typedef struct _WS_HEAP_PROPERTY WS_HEAP_PROPERTY;
typedef struct _WS_HEAP_PROPERTIES WS_HEAP_PROPERTIES;
typedef struct _WS_LISTENER_PROPERTY WS_LISTENER_PROPERTY;
typedef struct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS WS_DISALLOWED_USER_AGENT_SUBSTRINGS;
typedef struct _WS_LISTENER_PROPERTIES WS_LISTENER_PROPERTIES;
typedef struct _WS_HOST_NAMES WS_HOST_NAMES;
typedef struct _WS_CUSTOM_LISTENER_CALLBACKS WS_CUSTOM_LISTENER_CALLBACKS;
typedef struct _WS_MESSAGE_PROPERTY WS_MESSAGE_PROPERTY;
typedef struct _WS_MESSAGE_PROPERTIES WS_MESSAGE_PROPERTIES;
typedef struct _WS_SECURITY_ALGORITHM_PROPERTY WS_SECURITY_ALGORITHM_PROPERTY;
typedef struct _WS_SECURITY_ALGORITHM_SUITE WS_SECURITY_ALGORITHM_SUITE;
typedef struct _WS_SECURITY_PROPERTY WS_SECURITY_PROPERTY;
typedef struct _WS_SECURITY_PROPERTIES WS_SECURITY_PROPERTIES;
typedef struct _WS_SECURITY_BINDING_PROPERTY WS_SECURITY_BINDING_PROPERTY;
typedef struct _WS_SECURITY_BINDING_PROPERTIES WS_SECURITY_BINDING_PROPERTIES;
typedef struct _WS_SERVICE_SECURITY_IDENTITIES WS_SERVICE_SECURITY_IDENTITIES;
typedef struct _WS_CERT_CREDENTIAL WS_CERT_CREDENTIAL;
typedef struct _WS_SUBJECT_NAME_CERT_CREDENTIAL WS_SUBJECT_NAME_CERT_CREDENTIAL;
typedef struct _WS_THUMBPRINT_CERT_CREDENTIAL WS_THUMBPRINT_CERT_CREDENTIAL;
typedef struct _WS_CUSTOM_CERT_CREDENTIAL WS_CUSTOM_CERT_CREDENTIAL;
typedef struct _WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL;
typedef struct _WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL;
typedef struct _WS_DEFAULT_WINDOWS_INTEGRATED_AUTH_CREDENTIAL WS_DEFAULT_WINDOWS_INTEGRATED_AUTH_CREDENTIAL;
typedef struct _WS_OPAQUE_WINDOWS_INTEGRATED_AUTH_CREDENTIAL WS_OPAQUE_WINDOWS_INTEGRATED_AUTH_CREDENTIAL;
typedef struct _WS_USERNAME_CREDENTIAL WS_USERNAME_CREDENTIAL;
typedef struct _WS_STRING_USERNAME_CREDENTIAL WS_STRING_USERNAME_CREDENTIAL;
typedef struct _WS_SECURITY_KEY_HANDLE WS_SECURITY_KEY_HANDLE;
typedef struct _WS_RAW_SYMMETRIC_SECURITY_KEY_HANDLE WS_RAW_SYMMETRIC_SECURITY_KEY_HANDLE;
typedef struct _WS_NCRYPT_ASYMMETRIC_SECURITY_KEY_HANDLE WS_NCRYPT_ASYMMETRIC_SECURITY_KEY_HANDLE;
typedef struct _WS_CAPI_ASYMMETRIC_SECURITY_KEY_HANDLE WS_CAPI_ASYMMETRIC_SECURITY_KEY_HANDLE;
typedef struct _WS_SECURITY_BINDING WS_SECURITY_BINDING;
typedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING WS_SSL_TRANSPORT_SECURITY_BINDING;
typedef struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING;
typedef struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING WS_HTTP_HEADER_AUTH_SECURITY_BINDING;
typedef struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING;
typedef struct _WS_USERNAME_MESSAGE_SECURITY_BINDING WS_USERNAME_MESSAGE_SECURITY_BINDING;
typedef struct _WS_SECURITY_DESCRIPTION WS_SECURITY_DESCRIPTION;
typedef struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING;
typedef struct _WS_SECURITY_CONTEXT_PROPERTY WS_SECURITY_CONTEXT_PROPERTY;
typedef struct _WS_XML_SECURITY_TOKEN_PROPERTY WS_XML_SECURITY_TOKEN_PROPERTY;
typedef struct _WS_XML_TOKEN_MESSAGE_SECURITY_BINDING WS_XML_TOKEN_MESSAGE_SECURITY_BINDING;
typedef struct _WS_SAML_AUTHENTICATOR WS_SAML_AUTHENTICATOR;
typedef struct _WS_CERT_SIGNED_SAML_AUTHENTICATOR WS_CERT_SIGNED_SAML_AUTHENTICATOR;
typedef struct _WS_SAML_MESSAGE_SECURITY_BINDING WS_SAML_MESSAGE_SECURITY_BINDING;
typedef struct _WS_REQUEST_SECURITY_TOKEN_PROPERTY WS_REQUEST_SECURITY_TOKEN_PROPERTY;
typedef struct _WS_ANY_ATTRIBUTE WS_ANY_ATTRIBUTE;
typedef struct _WS_ANY_ATTRIBUTES WS_ANY_ATTRIBUTES;
typedef struct _WS_BOOL_DESCRIPTION WS_BOOL_DESCRIPTION;
typedef struct _WS_GUID_DESCRIPTION WS_GUID_DESCRIPTION;
typedef struct _WS_DATETIME_DESCRIPTION WS_DATETIME_DESCRIPTION;
typedef struct _WS_DURATION WS_DURATION;
typedef struct _WS_DURATION_DESCRIPTION WS_DURATION_DESCRIPTION;
typedef struct _WS_TIMESPAN_DESCRIPTION WS_TIMESPAN_DESCRIPTION;
typedef struct _WS_UNIQUE_ID_DESCRIPTION WS_UNIQUE_ID_DESCRIPTION;
typedef struct _WS_STRING_DESCRIPTION WS_STRING_DESCRIPTION;
typedef struct _WS_XML_STRING_DESCRIPTION WS_XML_STRING_DESCRIPTION;
typedef struct _WS_XML_QNAME_DESCRIPTION WS_XML_QNAME_DESCRIPTION;
typedef struct _WS_CHAR_ARRAY_DESCRIPTION WS_CHAR_ARRAY_DESCRIPTION;
typedef struct _WS_BYTE_ARRAY_DESCRIPTION WS_BYTE_ARRAY_DESCRIPTION;
typedef struct _WS_UTF8_ARRAY_DESCRIPTION WS_UTF8_ARRAY_DESCRIPTION;
typedef struct _WS_WSZ_DESCRIPTION WS_WSZ_DESCRIPTION;
typedef struct _WS_INT8_DESCRIPTION WS_INT8_DESCRIPTION;
typedef struct _WS_UINT8_DESCRIPTION WS_UINT8_DESCRIPTION;
typedef struct _WS_INT16_DESCRIPTION WS_INT16_DESCRIPTION;
typedef struct _WS_UINT16_DESCRIPTION WS_UINT16_DESCRIPTION;
typedef struct _WS_INT32_DESCRIPTION WS_INT32_DESCRIPTION;
typedef struct _WS_UINT32_DESCRIPTION WS_UINT32_DESCRIPTION;
typedef struct _WS_INT64_DESCRIPTION WS_INT64_DESCRIPTION;
typedef struct _WS_UINT64_DESCRIPTION WS_UINT64_DESCRIPTION;
typedef struct _WS_FLOAT_DESCRIPTION WS_FLOAT_DESCRIPTION;
typedef struct _WS_DOUBLE_DESCRIPTION WS_DOUBLE_DESCRIPTION;
typedef struct _WS_DECIMAL_DESCRIPTION WS_DECIMAL_DESCRIPTION;
typedef struct _WS_BYTES_DESCRIPTION WS_BYTES_DESCRIPTION;
typedef struct _WS_ENUM_VALUE WS_ENUM_VALUE;
typedef struct _WS_ENUM_DESCRIPTION WS_ENUM_DESCRIPTION;
typedef struct _WS_ITEM_RANGE WS_ITEM_RANGE;
typedef struct _WS_DEFAULT_VALUE WS_DEFAULT_VALUE;
typedef struct _WS_FIELD_DESCRIPTION WS_FIELD_DESCRIPTION;
typedef struct _WS_UNION_FIELD_DESCRIPTION WS_UNION_FIELD_DESCRIPTION;
typedef struct _WS_STRUCT_DESCRIPTION WS_STRUCT_DESCRIPTION;
typedef struct _WS_UNION_DESCRIPTION WS_UNION_DESCRIPTION;
typedef struct _WS_ENDPOINT_ADDRESS_DESCRIPTION WS_ENDPOINT_ADDRESS_DESCRIPTION;
typedef struct _WS_FAULT_DESCRIPTION WS_FAULT_DESCRIPTION;
typedef struct _WS_VOID_DESCRIPTION WS_VOID_DESCRIPTION;
typedef struct _WS_CUSTOM_TYPE_DESCRIPTION WS_CUSTOM_TYPE_DESCRIPTION;
typedef struct _WS_ATTRIBUTE_DESCRIPTION WS_ATTRIBUTE_DESCRIPTION;
typedef struct _WS_PARAMETER_DESCRIPTION WS_PARAMETER_DESCRIPTION;
typedef struct _WS_OPERATION_DESCRIPTION WS_OPERATION_DESCRIPTION;
typedef struct _WS_CONTRACT_DESCRIPTION WS_CONTRACT_DESCRIPTION;
typedef struct _WS_SERVICE_CONTRACT WS_SERVICE_CONTRACT;
typedef struct _WS_SERVICE_PROPERTY WS_SERVICE_PROPERTY;
typedef struct _WS_SERVICE_ENDPOINT_PROPERTY WS_SERVICE_ENDPOINT_PROPERTY;
typedef struct _WS_SERVICE_PROPERTY_ACCEPT_CALLBACK WS_SERVICE_PROPERTY_ACCEPT_CALLBACK;
typedef struct _WS_SERVICE_METADATA_DOCUMENT WS_SERVICE_METADATA_DOCUMENT;
typedef struct _WS_SERVICE_METADATA WS_SERVICE_METADATA;
typedef struct _WS_SERVICE_PROPERTY_CLOSE_CALLBACK WS_SERVICE_PROPERTY_CLOSE_CALLBACK;
typedef struct _WS_SERVICE_ENDPOINT_METADATA WS_SERVICE_ENDPOINT_METADATA;
typedef struct _WS_SERVICE_ENDPOINT WS_SERVICE_ENDPOINT;
typedef struct _WS_PROXY_PROPERTY WS_PROXY_PROPERTY;
typedef struct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT WS_PROXY_MESSAGE_CALLBACK_CONTEXT;
typedef struct _WS_CALL_PROPERTY WS_CALL_PROPERTY;
typedef struct _WS_URL WS_URL;
typedef struct _WS_HTTP_URL WS_HTTP_URL;
typedef struct _WS_HTTPS_URL WS_HTTPS_URL;
typedef struct _WS_NETTCP_URL WS_NETTCP_URL;
typedef struct _WS_SOAPUDP_URL WS_SOAPUDP_URL;
typedef struct _WS_UNIQUE_ID WS_UNIQUE_ID;
typedef struct _WS_BUFFERS WS_BUFFERS;
typedef struct _WS_METADATA_ENDPOINT WS_METADATA_ENDPOINT;
typedef struct _WS_METADATA_ENDPOINTS WS_METADATA_ENDPOINTS;
typedef struct _WS_METADATA_PROPERTY WS_METADATA_PROPERTY;
typedef struct _WS_POLICY_PROPERTY WS_POLICY_PROPERTY;
typedef struct _WS_POLICY_PROPERTIES WS_POLICY_PROPERTIES;
typedef struct _WS_SECURITY_BINDING_PROPERTY_CONSTRAINT WS_SECURITY_BINDING_PROPERTY_CONSTRAINT;
typedef struct _WS_SECURITY_BINDING_CONSTRAINT WS_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT;
typedef struct _WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_SECURITY_PROPERTY_CONSTRAINT WS_SECURITY_PROPERTY_CONSTRAINT;
typedef struct _WS_SECURITY_CONSTRAINTS WS_SECURITY_CONSTRAINTS;
typedef struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT;
typedef struct _WS_CHANNEL_PROPERTY_CONSTRAINT WS_CHANNEL_PROPERTY_CONSTRAINT;
typedef struct _WS_POLICY_EXTENSION WS_POLICY_EXTENSION;
typedef struct _WS_ENDPOINT_POLICY_EXTENSION WS_ENDPOINT_POLICY_EXTENSION;
typedef struct _WS_POLICY_CONSTRAINTS WS_POLICY_CONSTRAINTS;
typedef struct _WS_HTTP_POLICY_DESCRIPTION WS_HTTP_POLICY_DESCRIPTION;
typedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_POLICY_DESCRIPTION WS_HTTP_SSL_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_HEADER_AUTH_POLICY_DESCRIPTION WS_HTTP_HEADER_AUTH_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_HEADER_AUTH_POLICY_DESCRIPTION WS_HTTP_SSL_HEADER_AUTH_POLICY_DESCRIPTION;
typedef struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_USERNAME_POLICY_DESCRIPTION WS_HTTP_SSL_USERNAME_POLICY_DESCRIPTION;
typedef struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_KERBEROS_APREQ_POLICY_DESCRIPTION WS_HTTP_SSL_KERBEROS_APREQ_POLICY_DESCRIPTION;
typedef struct _WS_TCP_POLICY_DESCRIPTION WS_TCP_POLICY_DESCRIPTION;
typedef struct _WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_TCP_SSPI_POLICY_DESCRIPTION WS_TCP_SSPI_POLICY_DESCRIPTION;
typedef struct _WS_TCP_SSPI_USERNAME_POLICY_DESCRIPTION WS_TCP_SSPI_USERNAME_POLICY_DESCRIPTION;
typedef struct _WS_TCP_SSPI_KERBEROS_APREQ_POLICY_DESCRIPTION WS_TCP_SSPI_KERBEROS_APREQ_POLICY_DESCRIPTION;
typedef struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION;
typedef struct _WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION;
typedef struct _WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION;
typedef struct _WS_HTTP_BINDING_TEMPLATE WS_HTTP_BINDING_TEMPLATE;
typedef struct _WS_TCP_BINDING_TEMPLATE WS_TCP_BINDING_TEMPLATE;
typedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_BINDING_TEMPLATE WS_HTTP_SSL_BINDING_TEMPLATE;
typedef struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_BINDING_TEMPLATE WS_TCP_SSPI_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE;
typedef struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE;
typedef struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE;
typedef struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TEMPLATE WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE;
typedef struct _WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE;
typedef struct _WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE;
// ENUM DEFINITIONS
// XML Reader enum
//
// Each xml reader property is identified by an ID and has an associated
// value.
//
typedef enum
{
WS_XML_READER_PROPERTY_MAX_DEPTH = 0,
WS_XML_READER_PROPERTY_ALLOW_FRAGMENT = 1,
WS_XML_READER_PROPERTY_MAX_ATTRIBUTES = 2,
WS_XML_READER_PROPERTY_READ_DECLARATION = 3,
WS_XML_READER_PROPERTY_CHARSET = 4,
WS_XML_READER_PROPERTY_ROW = 5,
WS_XML_READER_PROPERTY_COLUMN = 6,
WS_XML_READER_PROPERTY_UTF8_TRIM_SIZE = 7,
WS_XML_READER_PROPERTY_STREAM_BUFFER_SIZE = 8,
WS_XML_READER_PROPERTY_IN_ATTRIBUTE = 9,
WS_XML_READER_PROPERTY_STREAM_MAX_ROOT_MIME_PART_SIZE = 10,
WS_XML_READER_PROPERTY_STREAM_MAX_MIME_HEADERS_SIZE = 11,
WS_XML_READER_PROPERTY_MAX_MIME_PARTS = 12,
WS_XML_READER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES = 13,
WS_XML_READER_PROPERTY_MAX_NAMESPACES = 14,
} WS_XML_READER_PROPERTY_ID;
// XML Canonicalization enum
//
// Defines the values for the XML canonicalization algorithms.
//
typedef enum
{
WS_EXCLUSIVE_XML_CANONICALIZATION_ALGORITHM = 0,
WS_EXCLUSIVE_WITH_COMMENTS_XML_CANONICALIZATION_ALGORITHM = 1,
WS_INCLUSIVE_XML_CANONICALIZATION_ALGORITHM = 2,
WS_INCLUSIVE_WITH_COMMENTS_XML_CANONICALIZATION_ALGORITHM = 3,
} WS_XML_CANONICALIZATION_ALGORITHM;
// XML Canonicalization enum
//
// Each XML canonicalization property is identified by an ID and has an associated
// value.
//
typedef enum
{
WS_XML_CANONICALIZATION_PROPERTY_ALGORITHM = 0,
WS_XML_CANONICALIZATION_PROPERTY_INCLUSIVE_PREFIXES = 1,
WS_XML_CANONICALIZATION_PROPERTY_OMITTED_ELEMENT = 2,
WS_XML_CANONICALIZATION_PROPERTY_OUTPUT_BUFFER_SIZE = 3,
} WS_XML_CANONICALIZATION_PROPERTY_ID;
// XML Writer enum
//
// Each xml writer property is identified by an ID and has an associated value.
//
typedef enum
{
WS_XML_WRITER_PROPERTY_MAX_DEPTH = 0,
WS_XML_WRITER_PROPERTY_ALLOW_FRAGMENT = 1,
WS_XML_WRITER_PROPERTY_MAX_ATTRIBUTES = 2,
WS_XML_WRITER_PROPERTY_WRITE_DECLARATION = 3,
WS_XML_WRITER_PROPERTY_INDENT = 4,
WS_XML_WRITER_PROPERTY_BUFFER_TRIM_SIZE = 5,
WS_XML_WRITER_PROPERTY_CHARSET = 6,
WS_XML_WRITER_PROPERTY_BUFFERS = 7,
WS_XML_WRITER_PROPERTY_BUFFER_MAX_SIZE = 8,
WS_XML_WRITER_PROPERTY_BYTES = 9,
WS_XML_WRITER_PROPERTY_IN_ATTRIBUTE = 10,
WS_XML_WRITER_PROPERTY_MAX_MIME_PARTS_BUFFER_SIZE = 11,
WS_XML_WRITER_PROPERTY_INITIAL_BUFFER = 12,
WS_XML_WRITER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES = 13,
WS_XML_WRITER_PROPERTY_MAX_NAMESPACES = 14,
WS_XML_WRITER_PROPERTY_BYTES_WRITTEN = 15,
WS_XML_WRITER_PROPERTY_BYTES_TO_CLOSE = 16,
WS_XML_WRITER_PROPERTY_COMPRESS_EMPTY_ELEMENTS = 17,
} WS_XML_WRITER_PROPERTY_ID;
// XML Buffer enum
//
// Each xml buffer property is identified by an ID and has an associated
// value.
//
typedef enum
{
} WS_XML_BUFFER_PROPERTY_ID;
// XML Node enum
//
// Indicates the type of WS_XML_TEXT structure.
//
typedef enum
{
WS_XML_TEXT_TYPE_UTF8 = 1,
WS_XML_TEXT_TYPE_UTF16 = 2,
WS_XML_TEXT_TYPE_BASE64 = 3,
WS_XML_TEXT_TYPE_BOOL = 4,
WS_XML_TEXT_TYPE_INT32 = 5,
WS_XML_TEXT_TYPE_INT64 = 6,
WS_XML_TEXT_TYPE_UINT64 = 7,
WS_XML_TEXT_TYPE_FLOAT = 8,
WS_XML_TEXT_TYPE_DOUBLE = 9,
WS_XML_TEXT_TYPE_DECIMAL = 10,
WS_XML_TEXT_TYPE_GUID = 11,
WS_XML_TEXT_TYPE_UNIQUE_ID = 12,
WS_XML_TEXT_TYPE_DATETIME = 13,
WS_XML_TEXT_TYPE_TIMESPAN = 14,
WS_XML_TEXT_TYPE_QNAME = 15,
WS_XML_TEXT_TYPE_LIST = 16,
} WS_XML_TEXT_TYPE;
// XML Node enum
//
// Indicates the type of WS_XML_NODE structure.
//
typedef enum
{
WS_XML_NODE_TYPE_ELEMENT = 1,
WS_XML_NODE_TYPE_TEXT = 2,
WS_XML_NODE_TYPE_END_ELEMENT = 3,
WS_XML_NODE_TYPE_COMMENT = 4,
WS_XML_NODE_TYPE_CDATA = 6,
WS_XML_NODE_TYPE_END_CDATA = 7,
WS_XML_NODE_TYPE_EOF = 8,
WS_XML_NODE_TYPE_BOF = 9,
} WS_XML_NODE_TYPE;
// XML Buffer enum
//
// This enumeration identifies the various ways to move about an xml document.
//
typedef enum
{
WS_MOVE_TO_ROOT_ELEMENT = 0,
WS_MOVE_TO_NEXT_ELEMENT = 1,
WS_MOVE_TO_PREVIOUS_ELEMENT = 2,
WS_MOVE_TO_CHILD_ELEMENT = 3,
WS_MOVE_TO_END_ELEMENT = 4,
WS_MOVE_TO_PARENT_ELEMENT = 5,
WS_MOVE_TO_NEXT_NODE = 6,
WS_MOVE_TO_PREVIOUS_NODE = 7,
WS_MOVE_TO_FIRST_NODE = 8,
WS_MOVE_TO_BOF = 9,
WS_MOVE_TO_EOF = 10,
WS_MOVE_TO_CHILD_NODE = 11,
} WS_MOVE_TO;
// XML Node enum
//
// An enumeration of the different types of fixed-size primitives.
//
typedef enum
{
WS_BOOL_VALUE_TYPE = 0,
WS_INT8_VALUE_TYPE = 1,
WS_INT16_VALUE_TYPE = 2,
WS_INT32_VALUE_TYPE = 3,
WS_INT64_VALUE_TYPE = 4,
WS_UINT8_VALUE_TYPE = 5,
WS_UINT16_VALUE_TYPE = 6,
WS_UINT32_VALUE_TYPE = 7,
WS_UINT64_VALUE_TYPE = 8,
WS_FLOAT_VALUE_TYPE = 9,
WS_DOUBLE_VALUE_TYPE = 10,
WS_DECIMAL_VALUE_TYPE = 11,
WS_DATETIME_VALUE_TYPE = 12,
WS_TIMESPAN_VALUE_TYPE = 13,
WS_GUID_VALUE_TYPE = 14,
WS_DURATION_VALUE_TYPE = 15,
} WS_VALUE_TYPE;
// XML Reader enum
//
// Indicates the type of WS_XML_READER_INPUT structure.
//
typedef enum
{
WS_XML_READER_INPUT_TYPE_BUFFER = 1,
WS_XML_READER_INPUT_TYPE_STREAM = 2,
} WS_XML_READER_INPUT_TYPE;
// XML Reader enum
//
// Indicates the type of WS_XML_READER_ENCODING structure.
//
typedef enum
{
WS_XML_READER_ENCODING_TYPE_TEXT = 1,
WS_XML_READER_ENCODING_TYPE_BINARY = 2,
WS_XML_READER_ENCODING_TYPE_MTOM = 3,
WS_XML_READER_ENCODING_TYPE_RAW = 4,
} WS_XML_READER_ENCODING_TYPE;
// XML Writer enum
typedef enum
{
WS_CHARSET_AUTO = 0,
WS_CHARSET_UTF8 = 1,
WS_CHARSET_UTF16LE = 2,
WS_CHARSET_UTF16BE = 3,
} WS_CHARSET;
// XML Writer enum
//
// Indicates the type of WS_XML_WRITER_ENCODING structure.
//
typedef enum
{
WS_XML_WRITER_ENCODING_TYPE_TEXT = 1,
WS_XML_WRITER_ENCODING_TYPE_BINARY = 2,
WS_XML_WRITER_ENCODING_TYPE_MTOM = 3,
WS_XML_WRITER_ENCODING_TYPE_RAW = 4,
} WS_XML_WRITER_ENCODING_TYPE;
// XML Writer enum
//
// Indicates the type of WS_XML_WRITER_OUTPUT structure.
//
typedef enum
{
WS_XML_WRITER_OUTPUT_TYPE_BUFFER = 1,
WS_XML_WRITER_OUTPUT_TYPE_STREAM = 2,
} WS_XML_WRITER_OUTPUT_TYPE;
// Async Model enum
//
// Used to specify the threading behavior of a callback (for example, a WS_ASYNC_CALLBACK).
//
typedef enum
{
WS_SHORT_CALLBACK = 0,
WS_LONG_CALLBACK = 1,
} WS_CALLBACK_MODEL;
// Channel enum
//
// An enumeration of the different encodings (message formats).
typedef enum
{
WS_ENCODING_XML_BINARY_1 = 0,
WS_ENCODING_XML_BINARY_SESSION_1 = 1,
WS_ENCODING_XML_MTOM_UTF8 = 2,
WS_ENCODING_XML_MTOM_UTF16BE = 3,
WS_ENCODING_XML_MTOM_UTF16LE = 4,
WS_ENCODING_XML_UTF8 = 5,
WS_ENCODING_XML_UTF16BE = 6,
WS_ENCODING_XML_UTF16LE = 7,
WS_ENCODING_RAW = 8,
} WS_ENCODING;
// Channel enum
// An enumeration of the different states that a channel can be in.
typedef enum
{
WS_CHANNEL_STATE_CREATED = 0,
WS_CHANNEL_STATE_OPENING = 1,
WS_CHANNEL_STATE_ACCEPTING = 2,
WS_CHANNEL_STATE_OPEN = 3,
WS_CHANNEL_STATE_FAULTED = 4,
WS_CHANNEL_STATE_CLOSING = 5,
WS_CHANNEL_STATE_CLOSED = 6,
} WS_CHANNEL_STATE;
// Channel enum
//
// Specifies whether a message is required or not when receiving from a channel.
//
typedef enum
{
WS_RECEIVE_REQUIRED_MESSAGE = 1,
WS_RECEIVE_OPTIONAL_MESSAGE = 2,
} WS_RECEIVE_OPTION;
// Channel enum
//
// The channel binding indicates the protocol stack to use for the channel.
//
typedef enum
{
WS_HTTP_CHANNEL_BINDING = 0,
WS_TCP_CHANNEL_BINDING = 1,
WS_UDP_CHANNEL_BINDING = 2,
WS_CUSTOM_CHANNEL_BINDING = 3,
} WS_CHANNEL_BINDING;
// Channel enum
//
// The channel type indicates the basic characteristics of the channel, such as whether it is
// sessionful, and what directions of communication are supported.
//
typedef enum
{
WS_CHANNEL_TYPE_INPUT = 0x1,
WS_CHANNEL_TYPE_OUTPUT = 0x2,
WS_CHANNEL_TYPE_SESSION = 0x4,
WS_CHANNEL_TYPE_INPUT_SESSION = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_SESSION),
WS_CHANNEL_TYPE_OUTPUT_SESSION = (WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION),
WS_CHANNEL_TYPE_DUPLEX = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_OUTPUT),
WS_CHANNEL_TYPE_DUPLEX_SESSION = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION),
WS_CHANNEL_TYPE_REQUEST = 0x8,
WS_CHANNEL_TYPE_REPLY = 0x10,
} WS_CHANNEL_TYPE;
// Channel enum
//
// The transfer mode indicates whether messages that are sent or received are streamed or buffered.
//
typedef enum
{
WS_STREAMED_INPUT_TRANSFER_MODE = 0x1,
WS_STREAMED_OUTPUT_TRANSFER_MODE = 0x2,
WS_BUFFERED_TRANSFER_MODE = 0x0,
WS_STREAMED_TRANSFER_MODE = (WS_STREAMED_INPUT_TRANSFER_MODE | WS_STREAMED_OUTPUT_TRANSFER_MODE),
} WS_TRANSFER_MODE;
// Channel enum
//
// Proxy setting indicates HTTP proxy setting for the channel with binding WS_HTTP_CHANNEL_BINDING.
// This is specified as part of WS_CHANNEL_PROPERTY_HTTP_PROXY_SETTING_MODE channel property.
//
typedef enum
{
WS_HTTP_PROXY_SETTING_MODE_AUTO = 0x1,
WS_HTTP_PROXY_SETTING_MODE_NONE = 0x2,
WS_HTTP_PROXY_SETTING_MODE_CUSTOM = 0x3,
} WS_HTTP_PROXY_SETTING_MODE;
// Channel enum
//
// Each channel property is identified by an ID and has an associated
// value. If a property is not specified when the channel is created,
// then its default value is used.
//
typedef enum
{
WS_CHANNEL_PROPERTY_MAX_BUFFERED_MESSAGE_SIZE = 0,
WS_CHANNEL_PROPERTY_MAX_STREAMED_MESSAGE_SIZE = 1,
WS_CHANNEL_PROPERTY_MAX_STREAMED_START_SIZE = 2,
WS_CHANNEL_PROPERTY_MAX_STREAMED_FLUSH_SIZE = 3,
WS_CHANNEL_PROPERTY_ENCODING = 4,
WS_CHANNEL_PROPERTY_ENVELOPE_VERSION = 5,
WS_CHANNEL_PROPERTY_ADDRESSING_VERSION = 6,
WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE = 7,
WS_CHANNEL_PROPERTY_STATE = 8,
WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL = 9,
WS_CHANNEL_PROPERTY_IP_VERSION = 10,
WS_CHANNEL_PROPERTY_RESOLVE_TIMEOUT = 11,
WS_CHANNEL_PROPERTY_CONNECT_TIMEOUT = 12,
WS_CHANNEL_PROPERTY_SEND_TIMEOUT = 13,
WS_CHANNEL_PROPERTY_RECEIVE_RESPONSE_TIMEOUT = 14,
WS_CHANNEL_PROPERTY_RECEIVE_TIMEOUT = 15,
WS_CHANNEL_PROPERTY_CLOSE_TIMEOUT = 16,
WS_CHANNEL_PROPERTY_ENABLE_TIMEOUTS = 17,
WS_CHANNEL_PROPERTY_TRANSFER_MODE = 18,
WS_CHANNEL_PROPERTY_MULTICAST_INTERFACE = 19,
WS_CHANNEL_PROPERTY_MULTICAST_HOPS = 20,
WS_CHANNEL_PROPERTY_REMOTE_ADDRESS = 21,
WS_CHANNEL_PROPERTY_REMOTE_IP_ADDRESS = 22,
WS_CHANNEL_PROPERTY_HTTP_CONNECTION_ID = 23,
WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_CALLBACKS = 24,
WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_PARAMETERS = 25,
WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_INSTANCE = 26,
WS_CHANNEL_PROPERTY_TRANSPORT_URL = 27,
WS_CHANNEL_PROPERTY_NO_DELAY = 28,
WS_CHANNEL_PROPERTY_SEND_KEEP_ALIVES = 29,
WS_CHANNEL_PROPERTY_KEEP_ALIVE_TIME = 30,
WS_CHANNEL_PROPERTY_KEEP_ALIVE_INTERVAL = 31,
WS_CHANNEL_PROPERTY_MAX_HTTP_SERVER_CONNECTIONS = 32,
WS_CHANNEL_PROPERTY_IS_SESSION_SHUT_DOWN = 33,
WS_CHANNEL_PROPERTY_CHANNEL_TYPE = 34,
WS_CHANNEL_PROPERTY_TRIM_BUFFERED_MESSAGE_SIZE = 35,
WS_CHANNEL_PROPERTY_ENCODER = 36,
WS_CHANNEL_PROPERTY_DECODER = 37,
WS_CHANNEL_PROPERTY_PROTECTION_LEVEL = 38,
WS_CHANNEL_PROPERTY_COOKIE_MODE = 39,
WS_CHANNEL_PROPERTY_HTTP_PROXY_SETTING_MODE = 40,
WS_CHANNEL_PROPERTY_CUSTOM_HTTP_PROXY = 41,
WS_CHANNEL_PROPERTY_HTTP_MESSAGE_MAPPING = 42,
WS_CHANNEL_PROPERTY_ENABLE_HTTP_REDIRECT = 43,
WS_CHANNEL_PROPERTY_HTTP_REDIRECT_CALLBACK_CONTEXT = 44,
WS_CHANNEL_PROPERTY_FAULTS_AS_ERRORS = 45,
WS_CHANNEL_PROPERTY_ALLOW_UNSECURED_FAULTS = 46,
WS_CHANNEL_PROPERTY_HTTP_SERVER_SPN = 47,
WS_CHANNEL_PROPERTY_HTTP_PROXY_SPN = 48,
WS_CHANNEL_PROPERTY_MAX_HTTP_REQUEST_HEADERS_BUFFER_SIZE = 49,
} WS_CHANNEL_PROPERTY_ID;
// Channel enum
//
// A set of flags that control how mapped headers appear in an HTTP request or response.
//
enum
{
WS_HTTP_HEADER_MAPPING_COMMA_SEPARATOR = 0x1,
WS_HTTP_HEADER_MAPPING_SEMICOLON_SEPARATOR = 0x2,
WS_HTTP_HEADER_MAPPING_QUOTED_VALUE = 0x4,
};
// Channel enum
//
// A set of flags that control how HTTP responses
// are mapped to the message object.
//
enum
{
WS_HTTP_RESPONSE_MAPPING_STATUS_CODE = 0x1,
WS_HTTP_RESPONSE_MAPPING_STATUS_TEXT = 0x2,
};
// Channel enum
//
// A set of flags that control how HTTP requests
// are mapped to the message object.
//
enum
{
WS_HTTP_REQUEST_MAPPING_VERB = 0x2,
};
// Channel enum
//
// An enumeration used to specify how to handle HTTP cookies.
//
typedef enum
{
WS_MANUAL_COOKIE_MODE = 1,
WS_AUTO_COOKIE_MODE = 2,
} WS_COOKIE_MODE;
// Context enum
//
// Each property represents a property available on the Context. Not all properties may be available
// at a given point on a context. All context properties are available through WsGetOperationContextProperty.
//
typedef enum
{
WS_OPERATION_CONTEXT_PROPERTY_CHANNEL = 0,
WS_OPERATION_CONTEXT_PROPERTY_CONTRACT_DESCRIPTION = 1,
WS_OPERATION_CONTEXT_PROPERTY_HOST_USER_STATE = 2,
WS_OPERATION_CONTEXT_PROPERTY_CHANNEL_USER_STATE = 3,
WS_OPERATION_CONTEXT_PROPERTY_INPUT_MESSAGE = 4,
WS_OPERATION_CONTEXT_PROPERTY_OUTPUT_MESSAGE = 5,
WS_OPERATION_CONTEXT_PROPERTY_HEAP = 6,
WS_OPERATION_CONTEXT_PROPERTY_LISTENER = 7,
WS_OPERATION_CONTEXT_PROPERTY_ENDPOINT_ADDRESS = 8,
} WS_OPERATION_CONTEXT_PROPERTY_ID;
// Endpoint Identity enum
//
// The type of the endpoint identity, used as a selector for subtypes of
// WS_ENDPOINT_IDENTITY.
//
typedef enum
{
WS_DNS_ENDPOINT_IDENTITY_TYPE = 1,
WS_UPN_ENDPOINT_IDENTITY_TYPE = 2,
WS_SPN_ENDPOINT_IDENTITY_TYPE = 3,
WS_RSA_ENDPOINT_IDENTITY_TYPE = 4,
WS_CERT_ENDPOINT_IDENTITY_TYPE = 5,
WS_UNKNOWN_ENDPOINT_IDENTITY_TYPE = 6,
} WS_ENDPOINT_IDENTITY_TYPE;
// Endpoint Identity enum
//
// This identifies a type of extension within the extensions field of the
// WS_ENDPOINT_ADDRESS.
//
typedef enum
{
WS_ENDPOINT_ADDRESS_EXTENSION_METADATA_ADDRESS = 1,
} WS_ENDPOINT_ADDRESS_EXTENSION_TYPE;
// Errors enum
//
// A set of property values associated with the error. They are set
// and retrieved using WsGetErrorProperty and
// WsSetErrorProperty.
//
typedef enum
{
WS_ERROR_PROPERTY_STRING_COUNT = 0,
WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE = 1,
WS_ERROR_PROPERTY_LANGID = 2,
} WS_ERROR_PROPERTY_ID;
// Errors enum
//
// An enumeration of structured exception codes thrown by this component. These
// exceptions are fatal and should not be handled by the application.
//
typedef enum
{
WS_EXCEPTION_CODE_USAGE_FAILURE = 0xC03D0000,
WS_EXCEPTION_CODE_INTERNAL_FAILURE = 0xc03d0001,
} WS_EXCEPTION_CODE;
// Faults enum
//
// A set of values used with WsSetFaultErrorProperty and
// WsGetFaultErrorProperty.
//
typedef enum
{
WS_FAULT_ERROR_PROPERTY_FAULT = 0,
WS_FAULT_ERROR_PROPERTY_ACTION = 1,
WS_FAULT_ERROR_PROPERTY_HEADER = 2,
} WS_FAULT_ERROR_PROPERTY_ID;
// Faults enum
//
// Controls how much error information is included in a fault.
//
typedef enum
{
WS_MINIMAL_FAULT_DISCLOSURE = 0,
WS_FULL_FAULT_DISCLOSURE = 1,
} WS_FAULT_DISCLOSURE;
// Heap enum
//
// Each heap property is identified by an ID and has an associated value.
//
typedef enum
{
WS_HEAP_PROPERTY_MAX_SIZE = 0,
WS_HEAP_PROPERTY_TRIM_SIZE = 1,
WS_HEAP_PROPERTY_REQUESTED_SIZE = 2,
WS_HEAP_PROPERTY_ACTUAL_SIZE = 3,
} WS_HEAP_PROPERTY_ID;
// Listener enum
// And enumeration of the different states that a listener can be in.
typedef enum
{
WS_LISTENER_STATE_CREATED = 0,
WS_LISTENER_STATE_OPENING = 1,
WS_LISTENER_STATE_OPEN = 2,
WS_LISTENER_STATE_FAULTED = 3,
WS_LISTENER_STATE_CLOSING = 4,
WS_LISTENER_STATE_CLOSED = 5,
} WS_LISTENER_STATE;
// Listener enum
//
// Each listener property is of type WS_LISTENER_PROPERTY and is
// is identified by an ID and has an associated value. If a property
// is not specified when the listener is created, then its default value is used.
//
typedef enum
{
WS_LISTENER_PROPERTY_LISTEN_BACKLOG = 0,
WS_LISTENER_PROPERTY_IP_VERSION = 1,
WS_LISTENER_PROPERTY_STATE = 2,
WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL = 3,
WS_LISTENER_PROPERTY_CHANNEL_TYPE = 4,
WS_LISTENER_PROPERTY_CHANNEL_BINDING = 5,
WS_LISTENER_PROPERTY_CONNECT_TIMEOUT = 6,
WS_LISTENER_PROPERTY_IS_MULTICAST = 7,
WS_LISTENER_PROPERTY_MULTICAST_INTERFACES = 8,
WS_LISTENER_PROPERTY_MULTICAST_LOOPBACK = 9,
WS_LISTENER_PROPERTY_CLOSE_TIMEOUT = 10,
WS_LISTENER_PROPERTY_TO_HEADER_MATCHING_OPTIONS = 11,
WS_LISTENER_PROPERTY_TRANSPORT_URL_MATCHING_OPTIONS = 12,
WS_LISTENER_PROPERTY_CUSTOM_LISTENER_CALLBACKS = 13,
WS_LISTENER_PROPERTY_CUSTOM_LISTENER_PARAMETERS = 14,
WS_LISTENER_PROPERTY_CUSTOM_LISTENER_INSTANCE = 15,
WS_LISTENER_PROPERTY_DISALLOWED_USER_AGENT = 16,
} WS_LISTENER_PROPERTY_ID;
// Listener enum
//
// Specifies an IP version.
//
typedef enum
{
WS_IP_VERSION_4 = 1,
WS_IP_VERSION_6 = 2,
WS_IP_VERSION_AUTO = 3,
} WS_IP_VERSION;
// Listener enum
//
// A set of flags used to specify how to match a URL.
//
enum
{
WS_MATCH_URL_DNS_HOST = 0x1,
WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST = 0x2,
WS_MATCH_URL_NETBIOS_HOST = 0x4,
WS_MATCH_URL_LOCAL_HOST = 0x8,
WS_MATCH_URL_HOST_ADDRESSES = 0x10,
WS_MATCH_URL_THIS_HOST = (WS_MATCH_URL_DNS_HOST | WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST | WS_MATCH_URL_NETBIOS_HOST | WS_MATCH_URL_LOCAL_HOST | WS_MATCH_URL_HOST_ADDRESSES),
WS_MATCH_URL_PORT = 0x20,
WS_MATCH_URL_EXACT_PATH = 0x40,
WS_MATCH_URL_PREFIX_PATH = 0x80,
WS_MATCH_URL_NO_QUERY = 0x100,
};
// Message enum
//
// The different states that a message can be in.
//
typedef enum
{
WS_MESSAGE_STATE_EMPTY = 1,
WS_MESSAGE_STATE_INITIALIZED = 2,
WS_MESSAGE_STATE_READING = 3,
WS_MESSAGE_STATE_WRITING = 4,
WS_MESSAGE_STATE_DONE = 5,
} WS_MESSAGE_STATE;
// Message enum
//
// The following values specify what headers the
// WsInitializeMessage
// should add to the message.
//
typedef enum
{
WS_BLANK_MESSAGE = 0,
WS_DUPLICATE_MESSAGE = 1,
WS_REQUEST_MESSAGE = 2,
WS_REPLY_MESSAGE = 3,
WS_FAULT_MESSAGE = 4,
} WS_MESSAGE_INITIALIZATION;
// Message enum
//
// This enum is used to specify whether a header is expected
// to appear more than once in a message.
//
typedef enum
{
WS_REPEATING_HEADER = 1,
WS_SINGLETON_HEADER = 2,
} WS_REPEATING_HEADER_OPTION;
// Message enum
//
// Identifies a type of header.
//
typedef enum
{
WS_ACTION_HEADER = 1,
WS_TO_HEADER = 2,
WS_MESSAGE_ID_HEADER = 3,
WS_RELATES_TO_HEADER = 4,
WS_FROM_HEADER = 5,
WS_REPLY_TO_HEADER = 6,
WS_FAULT_TO_HEADER = 7,
} WS_HEADER_TYPE;
// Message enum
//
// A set of flags representing the SOAP mustUnderstand and relay attributes of a header.
//
enum
{
WS_MUST_UNDERSTAND_HEADER_ATTRIBUTE = 0x1,
WS_RELAY_HEADER_ATTRIBUTE = 0x2,
};
// Message enum
//
// The following values identify the version of the specification used for
// the addressing headers.
typedef enum
{
WS_ADDRESSING_VERSION_0_9 = 1,
WS_ADDRESSING_VERSION_1_0 = 2,
WS_ADDRESSING_VERSION_TRANSPORT = 3,
} WS_ADDRESSING_VERSION;
// Message enum
//
// Identifies the version of the specification used for the envelope
// structure.
//
typedef enum
{
WS_ENVELOPE_VERSION_SOAP_1_1 = 1,
WS_ENVELOPE_VERSION_SOAP_1_2 = 2,
WS_ENVELOPE_VERSION_NONE = 3,
} WS_ENVELOPE_VERSION;
// Message enum
//
// Each message property is identified by an ID and has an associated
// value.
//
typedef enum
{
WS_MESSAGE_PROPERTY_STATE = 0,
WS_MESSAGE_PROPERTY_HEAP = 1,
WS_MESSAGE_PROPERTY_ENVELOPE_VERSION = 2,
WS_MESSAGE_PROPERTY_ADDRESSING_VERSION = 3,
WS_MESSAGE_PROPERTY_HEADER_BUFFER = 4,
WS_MESSAGE_PROPERTY_HEADER_POSITION = 5,
WS_MESSAGE_PROPERTY_BODY_READER = 6,
WS_MESSAGE_PROPERTY_BODY_WRITER = 7,
WS_MESSAGE_PROPERTY_IS_ADDRESSED = 8,
WS_MESSAGE_PROPERTY_HEAP_PROPERTIES = 9,
WS_MESSAGE_PROPERTY_XML_READER_PROPERTIES = 10,
WS_MESSAGE_PROPERTY_XML_WRITER_PROPERTIES = 11,
WS_MESSAGE_PROPERTY_IS_FAULT = 12,
WS_MESSAGE_PROPERTY_MAX_PROCESSED_HEADERS = 13,
WS_MESSAGE_PROPERTY_USERNAME = 14,
WS_MESSAGE_PROPERTY_ENCODED_CERT = 15,
WS_MESSAGE_PROPERTY_TRANSPORT_SECURITY_WINDOWS_TOKEN = 16,
WS_MESSAGE_PROPERTY_HTTP_HEADER_AUTH_WINDOWS_TOKEN = 17,
WS_MESSAGE_PROPERTY_MESSAGE_SECURITY_WINDOWS_TOKEN = 18,
WS_MESSAGE_PROPERTY_SAML_ASSERTION = 19,
WS_MESSAGE_PROPERTY_SECURITY_CONTEXT = 20,
WS_MESSAGE_PROPERTY_PROTECTION_LEVEL = 21,
} WS_MESSAGE_PROPERTY_ID;
// Security Bindings enum
//
// The type of the security binding, used as a selector for subtypes of
// WS_SECURITY_BINDING. In general, the type name of the
// security binding (one of the values defined here) specifies how the
// security token used with that security binding is obtained and used.
//
typedef enum
{
WS_SSL_TRANSPORT_SECURITY_BINDING_TYPE = 1,
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TYPE = 2,
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TYPE = 3,
WS_USERNAME_MESSAGE_SECURITY_BINDING_TYPE = 4,
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TYPE = 5,
WS_XML_TOKEN_MESSAGE_SECURITY_BINDING_TYPE = 6,
WS_SAML_MESSAGE_SECURITY_BINDING_TYPE = 7,
WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TYPE = 8,
} WS_SECURITY_BINDING_TYPE;
// Security Binding Settings enum
//
// Defines the options for performing client authentication using HTTP
// authentication headers.
//
enum
{
WS_HTTP_HEADER_AUTH_SCHEME_NONE = 0x1,
WS_HTTP_HEADER_AUTH_SCHEME_BASIC = 0x2,
WS_HTTP_HEADER_AUTH_SCHEME_DIGEST = 0x4,
WS_HTTP_HEADER_AUTH_SCHEME_NTLM = 0x8,
WS_HTTP_HEADER_AUTH_SCHEME_NEGOTIATE = 0x10,
WS_HTTP_HEADER_AUTH_SCHEME_PASSPORT = 0x20,
};
// Security Binding Settings enum
//
// Defines the target for the HTTP header authentication security binding.
//
typedef enum
{
WS_HTTP_HEADER_AUTH_TARGET_SERVICE = 1,
WS_HTTP_HEADER_AUTH_TARGET_PROXY = 2,
} WS_HTTP_HEADER_AUTH_TARGET;
// Security Binding Settings enum
//
// Defines the specific SSP package to be used for Windows Integrated
// Authentication.
//
typedef enum
{
WS_WINDOWS_INTEGRATED_AUTH_PACKAGE_KERBEROS = 1,
WS_WINDOWS_INTEGRATED_AUTH_PACKAGE_NTLM = 2,
WS_WINDOWS_INTEGRATED_AUTH_PACKAGE_SPNEGO = 3,
} WS_WINDOWS_INTEGRATED_AUTH_PACKAGE;
// Security Channel Settings enum
//
// Defines the WS-Security specification version to be used with message
// security and mixed-mode security.
//
typedef enum
{
WS_SECURITY_HEADER_VERSION_1_0 = 0x1,
WS_SECURITY_HEADER_VERSION_1_1 = 0x2,
} WS_SECURITY_HEADER_VERSION;
// Security Binding Settings enum
//
// Defines the WS-Trust specification version to be used with message
// security and mixed-mode security.
//
typedef enum
{
WS_TRUST_VERSION_FEBRUARY_2005 = 0x1,
WS_TRUST_VERSION_1_3 = 0x2,
} WS_TRUST_VERSION;
// Security Binding Settings enum
//
// Defines which set of actions to use when negotiating security tokens using WS-Trust.
//
typedef enum
{
WS_REQUEST_SECURITY_TOKEN_ACTION_ISSUE = 1,
WS_REQUEST_SECURITY_TOKEN_ACTION_NEW_CONTEXT = 2,
WS_REQUEST_SECURITY_TOKEN_ACTION_RENEW_CONTEXT = 3,
} WS_REQUEST_SECURITY_TOKEN_ACTION;
// Security Channel Settings enum
//
// Defines the WS-SecureCoversation specification version to be used with message
// security and mixed-mode security.
//
typedef enum
{
WS_SECURE_CONVERSATION_VERSION_FEBRUARY_2005 = 0x1,
WS_SECURE_CONVERSATION_VERSION_1_3 = 0x2,
} WS_SECURE_CONVERSATION_VERSION;
// Security Channel Settings enum
//
// With message security and mixed-mode security, this defines when a
// timestamp element should be generated and demanded in the WS-Security
// header.
//
typedef enum
{
WS_SECURITY_TIMESTAMP_USAGE_ALWAYS = 1,
WS_SECURITY_TIMESTAMP_USAGE_NEVER = 2,
WS_SECURITY_TIMESTAMP_USAGE_REQUESTS_ONLY = 3,
} WS_SECURITY_TIMESTAMP_USAGE;
// Security Channel Settings enum
//
// Defines the layout rules applied to the elements of the WS-Security
// security header. This setting is relevant to message security
// bindings and mixed-mode security bindings.
//
typedef enum
{
WS_SECURITY_HEADER_LAYOUT_STRICT = 1,
WS_SECURITY_HEADER_LAYOUT_LAX = 2,
WS_SECURITY_HEADER_LAYOUT_LAX_WITH_TIMESTAMP_FIRST = 3,
WS_SECURITY_HEADER_LAYOUT_LAX_WITH_TIMESTAMP_LAST = 4,
} WS_SECURITY_HEADER_LAYOUT;
// Security Channel Settings enum
//
// Identifies the properties representing security algorithm knobs.
//
typedef enum
{
} WS_SECURITY_ALGORITHM_PROPERTY_ID;
// Security Channel Settings enum
//
// Defines the security algorithms to be used with WS-Security.
// These values are relevant to message security bindings
// and mixed-mode security bindings.
//
typedef enum
{
WS_SECURITY_ALGORITHM_DEFAULT = 0,
WS_SECURITY_ALGORITHM_CANONICALIZATION_EXCLUSIVE = 1,
WS_SECURITY_ALGORITHM_CANONICALIZATION_EXCLUSIVE_WITH_COMMENTS = 2,
WS_SECURITY_ALGORITHM_DIGEST_SHA1 = 3,
WS_SECURITY_ALGORITHM_DIGEST_SHA_256 = 4,
WS_SECURITY_ALGORITHM_DIGEST_SHA_384 = 5,
WS_SECURITY_ALGORITHM_DIGEST_SHA_512 = 6,
WS_SECURITY_ALGORITHM_SYMMETRIC_SIGNATURE_HMAC_SHA1 = 7,
WS_SECURITY_ALGORITHM_SYMMETRIC_SIGNATURE_HMAC_SHA_256 = 8,
WS_SECURITY_ALGORITHM_SYMMETRIC_SIGNATURE_HMAC_SHA_384 = 9,
WS_SECURITY_ALGORITHM_SYMMETRIC_SIGNATURE_HMAC_SHA_512 = 10,
WS_SECURITY_ALGORITHM_ASYMMETRIC_SIGNATURE_RSA_SHA1 = 11,
WS_SECURITY_ALGORITHM_ASYMMETRIC_SIGNATURE_DSA_SHA1 = 12,
WS_SECURITY_ALGORITHM_ASYMMETRIC_SIGNATURE_RSA_SHA_256 = 13,
WS_SECURITY_ALGORITHM_ASYMMETRIC_SIGNATURE_RSA_SHA_384 = 14,
WS_SECURITY_ALGORITHM_ASYMMETRIC_SIGNATURE_RSA_SHA_512 = 15,
WS_SECURITY_ALGORITHM_ASYMMETRIC_KEYWRAP_RSA_1_5 = 16,
WS_SECURITY_ALGORITHM_ASYMMETRIC_KEYWRAP_RSA_OAEP = 17,
WS_SECURITY_ALGORITHM_KEY_DERIVATION_P_SHA1 = 18,
} WS_SECURITY_ALGORITHM_ID;
// Security Channel Settings enum
//
// Defines the required integrity and confidentiality levels for sent and
// received messages. With transport and mixed-mode security bindings,
// this setting applies to each message as a whole. With message
// security, the protection level is specified at the granularity of a
// message header or body. The default value defined applies only to
// transport and mixed-mode security.
//
typedef enum
{
WS_PROTECTION_LEVEL_NONE = 1,
WS_PROTECTION_LEVEL_SIGN = 2,
WS_PROTECTION_LEVEL_SIGN_AND_ENCRYPT = 3,
} WS_PROTECTION_LEVEL;
// Security Channel Settings enum
//
// Identifies the properties representing channel-wide security knobs.
//
typedef enum
{
WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL = 1,
WS_SECURITY_PROPERTY_ALGORITHM_SUITE = 2,
WS_SECURITY_PROPERTY_ALGORITHM_SUITE_NAME = 3,
WS_SECURITY_PROPERTY_MAX_ALLOWED_LATENCY = 4,
WS_SECURITY_PROPERTY_TIMESTAMP_VALIDITY_DURATION = 5,
WS_SECURITY_PROPERTY_MAX_ALLOWED_CLOCK_SKEW = 6,
WS_SECURITY_PROPERTY_TIMESTAMP_USAGE = 7,
WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT = 8,
WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION = 9,
WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_POLICY = 10,
WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_SCENARIO = 11,
WS_SECURITY_PROPERTY_SERVICE_IDENTITIES = 12,
} WS_SECURITY_PROPERTY_ID;
// Security Binding Settings enum
//
// The key type of a security token. It is used as the return type when
// a security token is queried about its key. It is also used to specify
// the required key type when requesting a security token from a security
// token service.
//
typedef enum
{
WS_SECURITY_KEY_TYPE_NONE = 1,
WS_SECURITY_KEY_TYPE_SYMMETRIC = 2,
WS_SECURITY_KEY_TYPE_ASYMMETRIC = 3,
} WS_SECURITY_KEY_TYPE;
// Security Binding Settings enum
//
// A suite of security algorithms used for tasks such as signing and encryting.
// The values in this enumeration correspond to the suites defined in
// (http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/) WS-SecurityPolicy 1.1
// section 7.1.
//
typedef enum
{
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC256 = 1,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC192 = 2,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC128 = 3,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC256_RSA15 = 4,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC192_RSA15 = 5,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC128_RSA15 = 6,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC256_SHA256 = 7,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC192_SHA256 = 8,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC128_SHA256 = 9,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC256_SHA256_RSA15 = 10,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC192_SHA256_RSA15 = 11,
WS_SECURITY_ALGORITHM_SUITE_NAME_BASIC128_SHA256_RSA15 = 12,
} WS_SECURITY_ALGORITHM_SUITE_NAME;
// Security Binding Settings enum
//
// With message and mixed-mode security bindings, the mechanism to use to
// refer to a security token from signatures, encrypted items and derived
// tokens. The security runtime can use the right reference on its own
// most of the time, and this needs to be explicitly set only when a
// specific reference mechanism is required, typically for interop with
// another platform that supports only that reference form.
//
typedef enum
{
WS_SECURITY_TOKEN_REFERENCE_MODE_LOCAL_ID = 1,
WS_SECURITY_TOKEN_REFERENCE_MODE_XML_BUFFER = 2,
WS_SECURITY_TOKEN_REFERENCE_MODE_CERT_THUMBPRINT = 3,
WS_SECURITY_TOKEN_REFERENCE_MODE_SECURITY_CONTEXT_ID = 4,
WS_SECURITY_TOKEN_REFERENCE_MODE_SAML_ASSERTION_ID = 5,
} WS_SECURITY_TOKEN_REFERENCE_MODE;
// Security Binding Settings enum
//
// Defines failures related to certificate validation. Can be used with WS_SECURITY_BINDING_PROPERTY_CERT_FAILURES_TO_IGNORE to
// specify which certificate verification failures should be ignored.
//
enum
{
WS_CERT_FAILURE_CN_MISMATCH = 0x1,
WS_CERT_FAILURE_INVALID_DATE = 0x2,
WS_CERT_FAILURE_UNTRUSTED_ROOT = 0x4,
WS_CERT_FAILURE_WRONG_USAGE = 0x8,
WS_CERT_FAILURE_REVOCATION_OFFLINE = 0x10,
};
// Security Binding Settings enum
//
// Defines how randomness should be contributed to the issued key during
// a security token negotiation done with message and mixed-mode security.
//
typedef enum
{
WS_SECURITY_KEY_ENTROPY_MODE_CLIENT_ONLY = 1,
WS_SECURITY_KEY_ENTROPY_MODE_SERVER_ONLY = 2,
WS_SECURITY_KEY_ENTROPY_MODE_COMBINED = 3,
} WS_SECURITY_KEY_ENTROPY_MODE;
// Extended Protection enum
//
// Defines if Extended Protection data should be validated. This property is only available on the server,
// and can only be set when WS_HTTP_CHANNEL_BINDING with WS_SSL_TRANSPORT_SECURITY_BINDING and either WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING
// or WS_HTTP_HEADER_AUTH_SECURITY_BINDING is used.
//
typedef enum
{
WS_EXTENDED_PROTECTION_POLICY_NEVER = 1,
WS_EXTENDED_PROTECTION_POLICY_WHEN_SUPPORTED = 2,
WS_EXTENDED_PROTECTION_POLICY_ALWAYS = 3,
} WS_EXTENDED_PROTECTION_POLICY;
// Extended Protection enum
//
// Defines how Extended Protection is validated. For most configurations, the runtime can automatically determine what needs to
// be validated based on the presence of the WS_SSL_TRANSPORT_SECURITY_BINDING. However, if the SSL connection is terminated at
// an intermediary such as a proxy prior to reaching the server then the validation method must change, and this scenario cannot be automatically detected.
//
// Only available on the server.
//
typedef enum
{
WS_EXTENDED_PROTECTION_SCENARIO_BOUND_SERVER = 1,
WS_EXTENDED_PROTECTION_SCENARIO_TERMINATED_SSL = 2,
} WS_EXTENDED_PROTECTION_SCENARIO;
// Security Binding Settings enum
//
// Identifies the properties used to specify security
// binding settings. Security binding settings are present
// in (WS_SECURITY_BINDING) security bindings
// that are used, in turn, in a (WS_SECURITY_DESCRIPTION) security description.
//
// Note that the related enum WS_SECURITY_TOKEN_PROPERTY_ID
// defines the keys for extracting fields from a security token instance.
// Thus, WS_SECURITY_BINDING_PROPERTY enables specifying security binding
// settings at channel / listener creation time to influence how a
// security token is created and used, whereas WS_SECURITY_TOKEN_PROPERTY_ID
// enables extracting fields out of a security token -- typically a
// security token from a received message when the channel and security
// are 'live'.
//
typedef enum
{
WS_SECURITY_BINDING_PROPERTY_REQUIRE_SSL_CLIENT_CERT = 1,
WS_SECURITY_BINDING_PROPERTY_WINDOWS_INTEGRATED_AUTH_PACKAGE = 2,
WS_SECURITY_BINDING_PROPERTY_REQUIRE_SERVER_AUTH = 3,
WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS = 4,
WS_SECURITY_BINDING_PROPERTY_ALLOWED_IMPERSONATION_LEVEL = 5,
WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_SCHEME = 6,
WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET = 7,
WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_BASIC_REALM = 8,
WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_REALM = 9,
WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_DOMAIN = 10,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_SIZE = 11,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_ENTROPY_MODE = 12,
WS_SECURITY_BINDING_PROPERTY_MESSAGE_PROPERTIES = 13,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS = 14,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS = 15,
WS_SECURITY_BINDING_PROPERTY_SECURE_CONVERSATION_VERSION = 16,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_SUPPORT_RENEW = 17,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL = 18,
WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL = 19,
WS_SECURITY_BINDING_PROPERTY_CERT_FAILURES_TO_IGNORE = 20,
WS_SECURITY_BINDING_PROPERTY_DISABLE_CERT_REVOCATION_CHECK = 21,
} WS_SECURITY_BINDING_PROPERTY_ID;
// Security Credentials enum
//
// The type of the certificate credential, used as a selector for
// subtypes of WS_CERT_CREDENTIAL.
//
typedef enum
{
WS_SUBJECT_NAME_CERT_CREDENTIAL_TYPE = 1,
WS_THUMBPRINT_CERT_CREDENTIAL_TYPE = 2,
WS_CUSTOM_CERT_CREDENTIAL_TYPE = 3,
} WS_CERT_CREDENTIAL_TYPE;
// Security Credentials enum
//
// The type of the Windows Integrated Authentication credential, used as
// a selector for subtypes of WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL.
//
typedef enum
{
WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE = 1,
WS_DEFAULT_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE = 2,
WS_OPAQUE_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE = 3,
} WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE;
// Security Credentials enum
//
// The type of the username/password credential, used as a selector for
// subtypes of WS_USERNAME_CREDENTIAL.
//
typedef enum
{
WS_STRING_USERNAME_CREDENTIAL_TYPE = 1,
} WS_USERNAME_CREDENTIAL_TYPE;
// Security Processing Results enum
//
// Defines the keys for the fields and properties that can be extracted
// from a security token. Not all properties are valid for all security
// token types. The function WsGetSecurityTokenProperty uses
// the values defined here as keys.
//
// See also WS_SECURITY_BINDING_PROPERTY.
//
typedef enum
{
WS_SECURITY_TOKEN_PROPERTY_KEY_TYPE = 1,
WS_SECURITY_TOKEN_PROPERTY_VALID_FROM_TIME = 2,
WS_SECURITY_TOKEN_PROPERTY_VALID_TILL_TIME = 3,
WS_SECURITY_TOKEN_PROPERTY_SERIALIZED_XML = 4,
WS_SECURITY_TOKEN_PROPERTY_ATTACHED_REFERENCE_XML = 5,
WS_SECURITY_TOKEN_PROPERTY_UNATTACHED_REFERENCE_XML = 6,
WS_SECURITY_TOKEN_PROPERTY_SYMMETRIC_KEY = 7,
} WS_SECURITY_TOKEN_PROPERTY_ID;
// Security Bindings enum
//
// Types of security keys.
//
typedef enum
{
WS_RAW_SYMMETRIC_SECURITY_KEY_HANDLE_TYPE = 1,
WS_NCRYPT_ASYMMETRIC_SECURITY_KEY_HANDLE_TYPE = 2,
WS_CAPI_ASYMMETRIC_SECURITY_KEY_HANDLE_TYPE = 3,
} WS_SECURITY_KEY_HANDLE_TYPE;
// Security Bindings enum
//
// Defines how a message security binding attaches the security token
// corresponding to it to a message using WS-Security mechanisms.
//
typedef enum
{
WS_SUPPORTING_MESSAGE_SECURITY_USAGE = 1,
} WS_MESSAGE_SECURITY_USAGE;
// Security Context enum
//
// Identifies a property of a security context object.
//
typedef enum
{
WS_SECURITY_CONTEXT_PROPERTY_IDENTIFIER = 1,
WS_SECURITY_CONTEXT_PROPERTY_USERNAME = 2,
WS_SECURITY_CONTEXT_PROPERTY_MESSAGE_SECURITY_WINDOWS_TOKEN = 3,
WS_SECURITY_CONTEXT_PROPERTY_SAML_ASSERTION = 4,
} WS_SECURITY_CONTEXT_PROPERTY_ID;
// Security Channel Settings enum
//
// Identifies the properties for the creation of XML security tokens.
//
typedef enum
{
WS_XML_SECURITY_TOKEN_PROPERTY_ATTACHED_REFERENCE = 1,
WS_XML_SECURITY_TOKEN_PROPERTY_UNATTACHED_REFERENCE = 2,
WS_XML_SECURITY_TOKEN_PROPERTY_VALID_FROM_TIME = 3,
WS_XML_SECURITY_TOKEN_PROPERTY_VALID_TILL_TIME = 4,
} WS_XML_SECURITY_TOKEN_PROPERTY_ID;
// Security Bindings enum
//
// The type ids of the SAML token authenticators used on the server side
// (i.e., relying party) to validate incoming SAML tokens.
//
typedef enum
{
WS_CERT_SIGNED_SAML_AUTHENTICATOR_TYPE = 1,
} WS_SAML_AUTHENTICATOR_TYPE;
// Security Channel Settings enum
//
// Identifies the properties for requesting a security token from an issuer.
//
typedef enum
{
WS_REQUEST_SECURITY_TOKEN_PROPERTY_APPLIES_TO = 1,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_TRUST_VERSION = 2,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_SECURE_CONVERSATION_VERSION = 3,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ISSUED_TOKEN_TYPE = 4,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_REQUEST_ACTION = 5,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_EXISTING_TOKEN = 6,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ISSUED_TOKEN_KEY_TYPE = 7,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ISSUED_TOKEN_KEY_SIZE = 8,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ISSUED_TOKEN_KEY_ENTROPY = 9,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_LOCAL_REQUEST_PARAMETERS = 10,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_SERVICE_REQUEST_PARAMETERS = 11,
WS_REQUEST_SECURITY_TOKEN_PROPERTY_MESSAGE_PROPERTIES = 12,
} WS_REQUEST_SECURITY_TOKEN_PROPERTY_ID;
// Serialization enum
//
// An enumeration of the different types supported for serialization.
//
typedef enum
{
WS_BOOL_TYPE = 0,
WS_INT8_TYPE = 1,
WS_INT16_TYPE = 2,
WS_INT32_TYPE = 3,
WS_INT64_TYPE = 4,
WS_UINT8_TYPE = 5,
WS_UINT16_TYPE = 6,
WS_UINT32_TYPE = 7,
WS_UINT64_TYPE = 8,
WS_FLOAT_TYPE = 9,
WS_DOUBLE_TYPE = 10,
WS_DECIMAL_TYPE = 11,
WS_DATETIME_TYPE = 12,
WS_TIMESPAN_TYPE = 13,
WS_GUID_TYPE = 14,
WS_UNIQUE_ID_TYPE = 15,
WS_STRING_TYPE = 16,
WS_WSZ_TYPE = 17,
WS_BYTES_TYPE = 18,
WS_XML_STRING_TYPE = 19,
WS_XML_QNAME_TYPE = 20,
WS_XML_BUFFER_TYPE = 21,
WS_CHAR_ARRAY_TYPE = 22,
WS_UTF8_ARRAY_TYPE = 23,
WS_BYTE_ARRAY_TYPE = 24,
WS_DESCRIPTION_TYPE = 25,
WS_STRUCT_TYPE = 26,
WS_CUSTOM_TYPE = 27,
WS_ENDPOINT_ADDRESS_TYPE = 28,
WS_FAULT_TYPE = 29,
WS_VOID_TYPE = 30,
WS_ENUM_TYPE = 31,
WS_DURATION_TYPE = 32,
WS_UNION_TYPE = 33,
WS_ANY_ATTRIBUTES_TYPE = 34,
} WS_TYPE;
// Serialization enum
//
// Specifies how a field of a structure is represented in XML. This is used within
// a WS_FIELD_DESCRIPTION.
//
typedef enum
{
WS_TYPE_ATTRIBUTE_FIELD_MAPPING = 0,
WS_ATTRIBUTE_FIELD_MAPPING = 1,
WS_ELEMENT_FIELD_MAPPING = 2,
WS_REPEATING_ELEMENT_FIELD_MAPPING = 3,
WS_TEXT_FIELD_MAPPING = 4,
WS_NO_FIELD_MAPPING = 5,
WS_XML_ATTRIBUTE_FIELD_MAPPING = 6,
WS_ELEMENT_CHOICE_FIELD_MAPPING = 7,
WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING = 8,
WS_ANY_ELEMENT_FIELD_MAPPING = 9,
WS_REPEATING_ANY_ELEMENT_FIELD_MAPPING = 10,
WS_ANY_CONTENT_FIELD_MAPPING = 11,
WS_ANY_ATTRIBUTES_FIELD_MAPPING = 12,
} WS_FIELD_MAPPING;
// Serialization enum
//
// A set of flags used within a WS_STRUCT_DESCRIPTION.
//
enum
{
WS_STRUCT_ABSTRACT = 0x1,
WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT = 0x2,
WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES = 0x4,
};
// Serialization enum
//
// A set of flags used within a WS_FIELD_DESCRIPTION.
//
enum
{
WS_FIELD_POINTER = 0x1,
WS_FIELD_OPTIONAL = 0x2,
WS_FIELD_NILLABLE = 0x4,
WS_FIELD_NILLABLE_ITEM = 0x8,
WS_FIELD_OTHER_NAMESPACE = 0x10,
};
// Serialization enum
//
// Specifies how a WS_TYPE maps to/from XML when serialized
// or deserialized.
//
typedef enum
{
WS_ELEMENT_TYPE_MAPPING = 1,
WS_ATTRIBUTE_TYPE_MAPPING = 2,
WS_ELEMENT_CONTENT_TYPE_MAPPING = 3,
WS_ANY_ELEMENT_TYPE_MAPPING = 4,
} WS_TYPE_MAPPING;
// Serialization enum
//
// Specifies whether a value is required, and how the value should be allocated.
//
typedef enum
{
WS_READ_REQUIRED_VALUE = 1,
WS_READ_REQUIRED_POINTER = 2,
WS_READ_OPTIONAL_POINTER = 3,
WS_READ_NILLABLE_POINTER = 4,
WS_READ_NILLABLE_VALUE = 5,
} WS_READ_OPTION;
// Serialization enum
//
// Specifies whether a storage specified contains the value, or a pointer to the value,
// and whether the value can be represented as nil in the XML content.
//
typedef enum
{
WS_WRITE_REQUIRED_VALUE = 1,
WS_WRITE_REQUIRED_POINTER = 2,
WS_WRITE_NILLABLE_VALUE = 3,
WS_WRITE_NILLABLE_POINTER = 4,
} WS_WRITE_OPTION;
// Service Operation enum
//
// An enumeration of the different reasons for which a cancel can occur.
//
typedef enum
{
WS_SERVICE_HOST_ABORT = 0,
WS_SERVICE_CHANNEL_FAULTED = 1,
} WS_SERVICE_CANCEL_REASON;
// Service Operation enum
//
// An enumeration of the different operation styles.
//
typedef enum
{
WS_NON_RPC_LITERAL_OPERATION = 0,
WS_RPC_LITERAL_OPERATION = 1,
} WS_OPERATION_STYLE;
// Service Operation enum
//
// An enumeration of the different parameter types.
//
typedef enum
{
WS_PARAMETER_TYPE_NORMAL = 0,
WS_PARAMETER_TYPE_ARRAY = 1,
WS_PARAMETER_TYPE_ARRAY_COUNT = 2,
WS_PARAMETER_TYPE_MESSAGES = 3,
} WS_PARAMETER_TYPE;
// Service Operation enum
//
// A set of flags used within a WS_OPERATION_DESCRIPTION.
//
enum
{
WS_SERVICE_OPERATION_MESSAGE_NILLABLE_ELEMENT = 0x1,
};
// Service Host enum
//
// Each property represents optional parameters for configuring
// the given WS_SERVICE_ENDPOINT.
//
typedef enum
{
WS_SERVICE_ENDPOINT_PROPERTY_ACCEPT_CHANNEL_CALLBACK = 0,
WS_SERVICE_ENDPOINT_PROPERTY_CLOSE_CHANNEL_CALLBACK = 1,
WS_SERVICE_ENDPOINT_PROPERTY_MAX_ACCEPTING_CHANNELS = 2,
WS_SERVICE_ENDPOINT_PROPERTY_MAX_CONCURRENCY = 3,
WS_SERVICE_ENDPOINT_PROPERTY_BODY_HEAP_MAX_SIZE = 4,
WS_SERVICE_ENDPOINT_PROPERTY_BODY_HEAP_TRIM_SIZE = 5,
WS_SERVICE_ENDPOINT_PROPERTY_MESSAGE_PROPERTIES = 6,
WS_SERVICE_ENDPOINT_PROPERTY_MAX_CALL_POOL_SIZE = 7,
WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNEL_POOL_SIZE = 8,
WS_SERVICE_ENDPOINT_PROPERTY_LISTENER_PROPERTIES = 9,
WS_SERVICE_ENDPOINT_PROPERTY_CHECK_MUST_UNDERSTAND = 10,
WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_TYPE = 11,
WS_SERVICE_ENDPOINT_PROPERTY_METADATA = 12,
WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX = 13,
WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNELS = 14,
} WS_SERVICE_ENDPOINT_PROPERTY_ID;
// Service Metadata enum
typedef enum
{
WS_METADATA_EXCHANGE_TYPE_NONE = 0,
WS_METADATA_EXCHANGE_TYPE_MEX = 1,
WS_METADATA_EXCHANGE_TYPE_HTTP_GET = 2,
} WS_METADATA_EXCHANGE_TYPE;
// Service Host enum
//
// Each property represents optional parameters for configuring the service host.
//
typedef enum
{
WS_SERVICE_PROPERTY_HOST_USER_STATE = 0,
WS_SERVICE_PROPERTY_FAULT_DISCLOSURE = 1,
WS_SERVICE_PROPERTY_FAULT_LANGID = 2,
WS_SERVICE_PROPERTY_HOST_STATE = 3,
WS_SERVICE_PROPERTY_METADATA = 4,
WS_SERVICE_PROPERTY_CLOSE_TIMEOUT = 5,
} WS_SERVICE_PROPERTY_ID;
// Service Host enum
// An enumeration of the different states that a service host can be in.
typedef enum
{
WS_SERVICE_HOST_STATE_CREATED = 0,
WS_SERVICE_HOST_STATE_OPENING = 1,
WS_SERVICE_HOST_STATE_OPEN = 2,
WS_SERVICE_HOST_STATE_CLOSING = 3,
WS_SERVICE_HOST_STATE_CLOSED = 4,
WS_SERVICE_HOST_STATE_FAULTED = 5,
} WS_SERVICE_HOST_STATE;
// Service Proxy State Machine enum
//
// See Service Proxy State Machine for detail.
//
typedef enum
{
WS_SERVICE_PROXY_STATE_CREATED = 0,
WS_SERVICE_PROXY_STATE_OPENING = 1,
WS_SERVICE_PROXY_STATE_OPEN = 2,
WS_SERVICE_PROXY_STATE_CLOSING = 3,
WS_SERVICE_PROXY_STATE_CLOSED = 4,
WS_SERVICE_PROXY_STATE_FAULTED = 5,
} WS_SERVICE_PROXY_STATE;
// Service Proxy enum
//
// Optional parameters for configuring the service proxy. With an exception of
// WS_PROXY_PROPERTY_STATE all the values are only supported for
// use with WsCreateServiceProxy.
//
typedef enum
{
WS_PROXY_PROPERTY_CALL_TIMEOUT = 0,
WS_PROXY_PROPERTY_MESSAGE_PROPERTIES = 1,
WS_PROXY_PROPERTY_MAX_CALL_POOL_SIZE = 2,
WS_PROXY_PROPERTY_STATE = 3,
WS_PROXY_PROPERTY_MAX_PENDING_CALLS = 4,
WS_PROXY_PROPERTY_MAX_CLOSE_TIMEOUT = 5,
WS_PROXY_FAULT_LANG_ID = 6,
} WS_PROXY_PROPERTY_ID;
// Service Proxy enum
//
// Optional parameters for configuring a call on a client side service operation.
//
typedef enum
{
WS_CALL_PROPERTY_CALL_ID = 0,
WS_CALL_PROPERTY_SEND_MESSAGE_CONTEXT = 1,
WS_CALL_PROPERTY_RECEIVE_MESSAGE_CONTEXT = 2,
WS_CALL_PROPERTY_CHECK_MUST_UNDERSTAND = 3,
} WS_CALL_PROPERTY_ID;
// Tracing enum
typedef enum
{
WS_TRACE_API_NONE = -1,
WS_TRACE_API_START_READER_CANONICALIZATION = 0,
WS_TRACE_API_END_READER_CANONICALIZATION = 1,
WS_TRACE_API_START_WRITER_CANONICALIZATION = 2,
WS_TRACE_API_END_WRITER_CANONICALIZATION = 3,
WS_TRACE_API_CREATE_XML_BUFFER = 4,
WS_TRACE_API_REMOVE_NODE = 5,
WS_TRACE_API_CREATE_READER = 6,
WS_TRACE_API_SET_INPUT = 7,
WS_TRACE_API_SET_INPUT_TO_BUFFER = 8,
WS_TRACE_API_FREE_XML_READER = 9,
WS_TRACE_API_GET_READER_PROPERTY = 10,
WS_TRACE_API_GET_READER_NODE = 11,
WS_TRACE_API_FILL_READER = 12,
WS_TRACE_API_READ_START_ELEMENT = 13,
WS_TRACE_API_READ_TO_START_ELEMENT = 14,
WS_TRACE_API_READ_START_ATTRIBUTE = 15,
WS_TRACE_API_READ_END_ATTRIBUTE = 16,
WS_TRACE_API_READ_NODE = 17,
WS_TRACE_API_SKIP_NODE = 18,
WS_TRACE_API_READ_END_ELEMENT = 19,
WS_TRACE_API_FIND_ATTRIBUTE = 20,
WS_TRACE_API_READ_ELEMENT_VALUE = 21,
WS_TRACE_API_READ_CHARS = 22,
WS_TRACE_API_READ_CHARS_UTF8 = 23,
WS_TRACE_API_READ_BYTES = 24,
WS_TRACE_API_READ_ARRAY = 25,
WS_TRACE_API_GET_READER_POSITION = 26,
WS_TRACE_API_SET_READER_POSITION = 27,
WS_TRACE_API_MOVE_READER = 28,
WS_TRACE_API_CREATE_WRITER = 29,
WS_TRACE_API_FREE_XML_WRITER = 30,
WS_TRACE_API_SET_OUTPUT = 31,
WS_TRACE_API_SET_OUTPUT_TO_BUFFER = 32,
WS_TRACE_API_GET_WRITER_PROPERTY = 33,
WS_TRACE_API_FLUSH_WRITER = 34,
WS_TRACE_API_WRITE_START_ELEMENT = 35,
WS_TRACE_API_WRITE_END_START_ELEMENT = 36,
WS_TRACE_API_WRITE_XMLNS_ATTRIBUTE = 37,
WS_TRACE_API_WRITE_START_ATTRIBUTE = 38,
WS_TRACE_API_WRITE_END_ATTRIBUTE = 39,
WS_TRACE_API_WRITE_VALUE = 40,
WS_TRACE_API_WRITE_XML_BUFFER = 41,
WS_TRACE_API_READ_XML_BUFFER = 42,
WS_TRACE_API_WRITE_XML_BUFFER_TO_BYTES = 43,
WS_TRACE_API_READ_XML_BUFFER_FROM_BYTES = 44,
WS_TRACE_API_WRITE_ARRAY = 45,
WS_TRACE_API_WRITE_QUALIFIED_NAME = 46,
WS_TRACE_API_WRITE_CHARS = 47,
WS_TRACE_API_WRITE_CHARS_UTF8 = 48,
WS_TRACE_API_WRITE_BYTES = 49,
WS_TRACE_API_PUSH_BYTES = 50,
WS_TRACE_API_PULL_BYTES = 51,
WS_TRACE_API_WRITE_END_ELEMENT = 52,
WS_TRACE_API_WRITE_TEXT = 53,
WS_TRACE_API_WRITE_START_CDATA = 54,
WS_TRACE_API_WRITE_END_CDATA = 55,
WS_TRACE_API_WRITE_NODE = 56,
WS_TRACE_API_PREFIX_FROM_NAMESPACE = 57,
WS_TRACE_API_GET_WRITER_POSITION = 58,
WS_TRACE_API_SET_WRITER_POSITION = 59,
WS_TRACE_API_MOVE_WRITER = 60,
WS_TRACE_API_TRIM_XML_WHITESPACE = 61,
WS_TRACE_API_VERIFY_XML_NCNAME = 62,
WS_TRACE_API_XML_STRING_EQUALS = 63,
WS_TRACE_API_NAMESPACE_FROM_PREFIX = 64,
WS_TRACE_API_READ_QUALIFIED_NAME = 65,
WS_TRACE_API_GET_XML_ATTRIBUTE = 66,
WS_TRACE_API_COPY_NODE = 67,
WS_TRACE_API_ASYNC_EXECUTE = 68,
WS_TRACE_API_CREATE_CHANNEL = 69,
WS_TRACE_API_OPEN_CHANNEL = 70,
WS_TRACE_API_SEND_MESSAGE = 71,
WS_TRACE_API_RECEIVE_MESSAGE = 72,
WS_TRACE_API_REQUEST_REPLY = 73,
WS_TRACE_API_SEND_REPLY_MESSAGE = 74,
WS_TRACE_API_SEND_FAULT_MESSAGE_FOR_ERROR = 75,
WS_TRACE_API_GET_CHANNEL_PROPERTY = 76,
WS_TRACE_API_SET_CHANNEL_PROPERTY = 77,
WS_TRACE_API_WRITE_MESSAGE_START = 78,
WS_TRACE_API_WRITE_MESSAGE_END = 79,
WS_TRACE_API_READ_MESSAGE_START = 80,
WS_TRACE_API_READ_MESSAGE_END = 81,
WS_TRACE_API_CLOSE_CHANNEL = 82,
WS_TRACE_API_ABORT_CHANNEL = 83,
WS_TRACE_API_FREE_CHANNEL = 84,
WS_TRACE_API_RESET_CHANNEL = 85,
WS_TRACE_API_ABANDON_MESSAGE = 86,
WS_TRACE_API_SHUTDOWN_SESSION_CHANNEL = 87,
WS_TRACE_API_GET_CONTEXT_PROPERTY = 88,
WS_TRACE_API_GET_DICTIONARY = 89,
WS_TRACE_API_READ_ENDPOINT_ADDRESS_EXTENSION = 90,
WS_TRACE_API_CREATE_ERROR = 91,
WS_TRACE_API_ADD_ERROR_STRING = 92,
WS_TRACE_API_GET_ERROR_STRING = 93,
WS_TRACE_API_COPY_ERROR = 94,
WS_TRACE_API_GET_ERROR_PROPERTY = 95,
WS_TRACE_API_SET_ERROR_PROPERTY = 96,
WS_TRACE_API_RESET_ERROR = 97,
WS_TRACE_API_FREE_ERROR = 98,
WS_TRACE_API_GET_FAULT_ERROR_PROPERTY = 99,
WS_TRACE_API_SET_FAULT_ERROR_PROPERTY = 100,
WS_TRACE_API_CREATE_FAULT_FROM_ERROR = 101,
WS_TRACE_API_SET_FAULT_ERROR_DETAIL = 102,
WS_TRACE_API_GET_FAULT_ERROR_DETAIL = 103,
WS_TRACE_API_CREATE_HEAP = 104,
WS_TRACE_API_ALLOC = 105,
WS_TRACE_API_GET_HEAP_PROPERTY = 106,
WS_TRACE_API_RESET_HEAP = 107,
WS_TRACE_API_FREE_HEAP = 108,
WS_TRACE_API_CREATE_LISTENER = 109,
WS_TRACE_API_OPEN_LISTENER = 110,
WS_TRACE_API_ACCEPT_CHANNEL = 111,
WS_TRACE_API_CLOSE_LISTENER = 112,
WS_TRACE_API_ABORT_LISTENER = 113,
WS_TRACE_API_RESET_LISTENER = 114,
WS_TRACE_API_FREE_LISTENER = 115,
WS_TRACE_API_GET_LISTENER_PROPERTY = 116,
WS_TRACE_API_SET_LISTENER_PROPERTY = 117,
WS_TRACE_API_CREATE_CHANNEL_FOR_LISTENER = 118,
WS_TRACE_API_CREATE_MESSAGE = 119,
WS_TRACE_API_CREATE_MESSAGE_FOR_CHANNEL = 120,
WS_TRACE_API_INITIALIZE_MESSAGE = 121,
WS_TRACE_API_RESET_MESSAGE = 122,
WS_TRACE_API_FREE_MESSAGE = 123,
WS_TRACE_API_GET_HEADER_ATTRIBUTES = 124,
WS_TRACE_API_GET_HEADER = 125,
WS_TRACE_API_GET_CUSTOM_HEADER = 126,
WS_TRACE_API_REMOVE_HEADER = 127,
WS_TRACE_API_SET_HEADER = 128,
WS_TRACE_API_REMOVE_CUSTOM_HEADER = 129,
WS_TRACE_API_ADD_CUSTOM_HEADER = 130,
WS_TRACE_API_ADD_MAPPED_HEADER = 131,
WS_TRACE_API_REMOVE_MAPPED_HEADER = 132,
WS_TRACE_API_GET_MAPPED_HEADER = 133,
WS_TRACE_API_WRITE_BODY = 134,
WS_TRACE_API_READ_BODY = 135,
WS_TRACE_API_WRITE_ENVELOPE_START = 136,
WS_TRACE_API_WRITE_ENVELOPE_END = 137,
WS_TRACE_API_READ_ENVELOPE_START = 138,
WS_TRACE_API_READ_ENVELOPE_END = 139,
WS_TRACE_API_GET_MESSAGE_PROPERTY = 140,
WS_TRACE_API_SET_MESSAGE_PROPERTY = 141,
WS_TRACE_API_ADDRESS_MESSAGE = 142,
WS_TRACE_API_CHECK_MUST_UNDERSTAND_HEADERS = 143,
WS_TRACE_API_MARK_HEADER_AS_UNDERSTOOD = 144,
WS_TRACE_API_FILL_BODY = 145,
WS_TRACE_API_FLUSH_BODY = 146,
WS_TRACE_API_REQUEST_SECURITY_TOKEN = 147,
WS_TRACE_API_GET_SECURITY_TOKEN_PROPERTY = 148,
WS_TRACE_API_CREATE_XML_SECURITY_TOKEN = 149,
WS_TRACE_API_FREE_SECURITY_TOKEN = 150,
WS_TRACE_API_REVOKE_SECURITY_CONTEXT = 151,
WS_TRACE_API_GET_SECURITY_CONTEXT_PROPERTY = 152,
WS_TRACE_API_READ_ELEMENT_TYPE = 153,
WS_TRACE_API_READ_ATTRIBUTE_TYPE = 154,
WS_TRACE_API_READ_TYPE = 155,
WS_TRACE_API_WRITE_ELEMENT_TYPE = 156,
WS_TRACE_API_WRITE_ATTRIBUTE_TYPE = 157,
WS_TRACE_API_WRITE_TYPE = 158,
WS_TRACE_API_SERVICE_REGISTER_FOR_CANCEL = 159,
WS_TRACE_API_GET_SERVICE_HOST_PROPERTY = 160,
WS_TRACE_API_CREATE_SERVICE_HOST = 161,
WS_TRACE_API_OPEN_SERVICE_HOST = 162,
WS_TRACE_API_CLOSE_SERVICE_HOST = 163,
WS_TRACE_API_ABORT_SERVICE_HOST = 164,
WS_TRACE_API_FREE_SERVICE_HOST = 165,
WS_TRACE_API_RESET_SERVICE_HOST = 166,
WS_TRACE_API_GET_SERVICE_PROXY_PROPERTY = 167,
WS_TRACE_API_CREATE_SERVICE_PROXY = 168,
WS_TRACE_API_OPEN_SERVICE_PROXY = 169,
WS_TRACE_API_CLOSE_SERVICE_PROXY = 170,
WS_TRACE_API_ABORT_SERVICE_PROXY = 171,
WS_TRACE_API_FREE_SERVICE_PROXY = 172,
WS_TRACE_API_RESET_SERVICE_PROXY = 173,
WS_TRACE_API_ABORT_CALL = 174,
WS_TRACE_API_CALL = 175,
WS_TRACE_API_DECODE_URL = 176,
WS_TRACE_API_ENCODE_URL = 177,
WS_TRACE_API_COMBINE_URL = 178,
WS_TRACE_API_DATETIME_TO_FILETIME = 179,
WS_TRACE_API_FILETIME_TO_DATETIME = 180,
WS_TRACE_API_DUMP_MEMORY = 181,
WS_TRACE_API_SET_AUTOFAIL = 182,
WS_TRACE_API_CREATE_METADATA = 183,
WS_TRACE_API_READ_METADATA = 184,
WS_TRACE_API_FREE_METADATA = 185,
WS_TRACE_API_RESET_METADATA = 186,
WS_TRACE_API_GET_METADATA_PROPERTY = 187,
WS_TRACE_API_GET_MISSING_METADATA_DOCUMENT_ADDRESS = 188,
WS_TRACE_API_GET_METADATA_ENDPOINTS = 189,
WS_TRACE_API_MATCH_POLICY_ALTERNATIVE = 190,
WS_TRACE_API_GET_POLICY_PROPERTY = 191,
WS_TRACE_API_GET_POLICY_ALTERNATIVE_COUNT = 192,
WS_TRACE_API_WS_CREATE_SERVICE_PROXY_FROM_TEMPLATE = 193,
WS_TRACE_API_WS_CREATE_SERVICE_HOST_FROM_TEMPLATE = 194,
} WS_TRACE_API;
// Url enum
//
// The set of schemes used with WsDecodeUrl, WsEncodeUrl,
// and WsCombineUrl.
//
typedef enum
{
WS_URL_HTTP_SCHEME_TYPE = 0,
WS_URL_HTTPS_SCHEME_TYPE = 1,
WS_URL_NETTCP_SCHEME_TYPE = 2,
WS_URL_SOAPUDP_SCHEME_TYPE = 3,
} WS_URL_SCHEME_TYPE;
// Url enum
//
// Flags that control behavior of WsDecodeUrl, WsEncodeUrl,
// and WsCombineUrl.
//
enum
{
WS_URL_FLAGS_ALLOW_HOST_WILDCARDS = 0x1,
WS_URL_FLAGS_NO_PATH_COLLAPSE = 0x2,
WS_URL_FLAGS_ZERO_TERMINATE = 0x4,
};
// Utilities enum
//
// Specifies the textual format of a WS_DATETIME.
//
typedef enum
{
WS_DATETIME_FORMAT_UTC = 0,
WS_DATETIME_FORMAT_LOCAL = 1,
WS_DATETIME_FORMAT_NONE = 2,
} WS_DATETIME_FORMAT;
// Metadata Import enum
//
// The state of the metadata object.
//
typedef enum
{
WS_METADATA_STATE_CREATED = 1,
WS_METADATA_STATE_RESOLVED = 2,
WS_METADATA_STATE_FAULTED = 3,
} WS_METADATA_STATE;
// Metadata Import enum
//
// Each metadata property is identified by an ID and has an associated
// value. If a property is not specified when the metadata is created,
// then its default value is used.
//
typedef enum
{
WS_METADATA_PROPERTY_STATE = 1,
WS_METADATA_PROPERTY_HEAP_PROPERTIES = 2,
WS_METADATA_PROPERTY_POLICY_PROPERTIES = 3,
WS_METADATA_PROPERTY_HEAP_REQUESTED_SIZE = 4,
WS_METADATA_PROPERTY_MAX_DOCUMENTS = 5,
WS_METADATA_PROPERTY_HOST_NAMES = 6,
WS_METADATA_PROPERTY_VERIFY_HOST_NAMES = 7,
} WS_METADATA_PROPERTY_ID;
// Metadata Import enum
//
// The state of the policy object.
//
typedef enum
{
WS_POLICY_STATE_CREATED = 1,
WS_POLICY_STATE_FAULTED = 2,
} WS_POLICY_STATE;
// Metadata Import enum
//
// Each policy property is identified by an ID and has an associated
// value.
//
typedef enum
{
WS_POLICY_PROPERTY_STATE = 1,
WS_POLICY_PROPERTY_MAX_ALTERNATIVES = 2,
WS_POLICY_PROPERTY_MAX_DEPTH = 3,
WS_POLICY_PROPERTY_MAX_EXTENSIONS = 4,
} WS_POLICY_PROPERTY_ID;
// Metadata Import enum
//
// The values in this enumeration are used to identify the sub-types of WS_SECURITY_BINDING_CONSTRAINT.
//
typedef enum
{
WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT_TYPE = 1,
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT_TYPE = 2,
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT_TYPE = 3,
WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT_TYPE = 4,
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT_TYPE = 5,
WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT_TYPE = 6,
WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT_TYPE = 7,
WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT_TYPE = 8,
} WS_SECURITY_BINDING_CONSTRAINT_TYPE;
// Metadata Import enum
//
// The values in this enumeration are used to identify the sub-types of WS_POLICY_EXTENSION.
//
typedef enum
{
WS_ENDPOINT_POLICY_EXTENSION_TYPE = 1,
} WS_POLICY_EXTENSION_TYPE;
// Policy Support enum
//
// An enumeration of the different security binding combinations that
// are supported in current product.
//
typedef enum
{
WS_HTTP_BINDING_TEMPLATE_TYPE = 0,
WS_HTTP_SSL_BINDING_TEMPLATE_TYPE = 1,
WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE_TYPE = 2,
WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE_TYPE = 3,
WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE_TYPE = 4,
WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE = 5,
WS_TCP_BINDING_TEMPLATE_TYPE = 6,
WS_TCP_SSPI_BINDING_TEMPLATE_TYPE = 7,
WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE_TYPE = 8,
WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE = 9,
WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE = 10,
WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE = 11,
WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE = 12,
WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE = 13,
} WS_BINDING_TEMPLATE_TYPE;
struct _CERT_CONTEXT;
struct _SecPkgContext_IssuerListInfoEx;
struct _WS_FAULT_CODE;
// CALLBACK DEFINITIONS
// XML Reader callback
//
// A user-defined callback used by the WS_XML_READER
// to read from some source into a buffer.
//
typedef HRESULT (CALLBACK* WS_READ_CALLBACK)(
__in void* callbackState,
__out_bcount_part(maxSize, *actualSize) void* bytes,
__in ULONG maxSize,
__out ULONG* actualSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Writer callback
//
// A user-defined callback used by the WS_XML_WRITER
// to write a buffer to some destination.
//
typedef HRESULT (CALLBACK* WS_WRITE_CALLBACK)(
__in void* callbackState,
__in_ecount(count) const WS_BYTES* buffers,
__in ULONG count,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Writer callback
//
// A user-defined callback used by WsPushBytes to request that data be written.
//
typedef HRESULT (CALLBACK* WS_PUSH_BYTES_CALLBACK)(
__in void* callbackState,
__in WS_WRITE_CALLBACK writeCallback,
__in void* writeCallbackState,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Writer callback
//
// A user-defined callback used by WsPullBytes to request
// the data that should be written.
//
typedef HRESULT (CALLBACK* WS_PULL_BYTES_CALLBACK)(
__in void* callbackState,
__out_bcount_part(maxSize, *actualSize) void* bytes,
__in ULONG maxSize,
__out ULONG* actualSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Writer callback
//
// A user-defined callback used in WS_XML_WRITER_BINARY_ENCODING
// that determines whether the string can be written in an optimized form.
//
typedef HRESULT (CALLBACK* WS_DYNAMIC_STRING_CALLBACK)(
__in void* callbackState,
__in const WS_XML_STRING* string,
__out BOOL* found,
__out ULONG* id,
__in_opt WS_ERROR* error);
// Async Model callback
//
// The type of a callback used in the Async Model.
//
typedef void (CALLBACK* WS_ASYNC_CALLBACK)(
__in HRESULT errorCode,
__in WS_CALLBACK_MODEL callbackModel,
__in void* callbackState);
// Async Model callback
//
// Used with the WsAsyncExecute to specify the next
// function to invoke in a series of async operations.
//
typedef HRESULT (CALLBACK* WS_ASYNC_FUNCTION)(
__in HRESULT hr,
__in WS_CALLBACK_MODEL callbackModel,
__in void* callbackState,
__inout WS_ASYNC_OPERATION* next,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsCreateChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_CREATE_CHANNEL_CALLBACK)(
__in WS_CHANNEL_TYPE channelType,
__in_bcount(channelParametersSize) const void* channelParameters,
__in ULONG channelParametersSize,
__deref_out void** channelInstance,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsFreeChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef void (CALLBACK* WS_FREE_CHANNEL_CALLBACK)(__in void* channelInstance);
// Channel callback
//
// This callback handles the WsResetChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_RESET_CHANNEL_CALLBACK)(
__in void* channelInstance,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsAbortChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_ABORT_CHANNEL_CALLBACK)(
__in void* channelInstance,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsOpenChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_OPEN_CHANNEL_CALLBACK)(
__in void* channelInstance,
__in const WS_ENDPOINT_ADDRESS* endpointAddress,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsCloseChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_CLOSE_CHANNEL_CALLBACK)(
__in void* channelInstance,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsSetChannelProperty call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_SET_CHANNEL_PROPERTY_CALLBACK)(
__in void* channelInstance,
__in WS_CHANNEL_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsGetChannelProperty call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_GET_CHANNEL_PROPERTY_CALLBACK)(
__in void* channelInstance,
__in WS_CHANNEL_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsReadMessageStart call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_READ_MESSAGE_START_CALLBACK)(
__in void* channelInstance,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsReadMessageEnd call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_READ_MESSAGE_END_CALLBACK)(
__in void* channelInstance,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsWriteMessageStart call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_WRITE_MESSAGE_START_CALLBACK)(
__in void* channelInstance,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsWriteMessageEnd call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_WRITE_MESSAGE_END_CALLBACK)(
__in void* channelInstance,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsAbandonMessage call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_ABANDON_MESSAGE_CALLBACK)(
__in void* channelInstance,
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles the WsShutdownSessionChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK)(
__in void* channelInstance,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles creating an encoder instance.
//
typedef HRESULT (CALLBACK* WS_CREATE_ENCODER_CALLBACK)(
__in void* createContext,
__in WS_WRITE_CALLBACK writeCallback,
__in void* writeContext,
__deref_out void** encoderContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to get the content type of the message.
//
typedef HRESULT (CALLBACK* WS_ENCODER_GET_CONTENT_TYPE_CALLBACK)(
__in void* encoderContext,
__in const WS_STRING* contentType,
__out WS_STRING* newContentType,
__out WS_STRING* contentEncoding,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to start encoding a message.
//
typedef HRESULT (CALLBACK* WS_ENCODER_START_CALLBACK)(
__in void* encoderContext,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to encode a message.
//
typedef HRESULT (CALLBACK* WS_ENCODER_ENCODE_CALLBACK)(
__in void* encoderContext,
__in_ecount(count) const WS_BYTES* buffers,
__in ULONG count,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to encode the end of a message.
//
typedef HRESULT (CALLBACK* WS_ENCODER_END_CALLBACK)(
__in void* encoderContext,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles freeing an encoder instance.
//
typedef void (CALLBACK* WS_FREE_ENCODER_CALLBACK)(__in void* encoderContext);
// Channel callback
//
// This callback handles creating an decoder instance.
//
typedef HRESULT (CALLBACK* WS_CREATE_DECODER_CALLBACK)(
__in void* createContext,
__in WS_READ_CALLBACK readCallback,
__in void* readContext,
__deref_out void** decoderContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to get the content type of the message.
//
typedef HRESULT (CALLBACK* WS_DECODER_GET_CONTENT_TYPE_CALLBACK)(
__in void* decoderContext,
__in const WS_STRING* contentType,
__in_opt const WS_STRING* contentEncoding,
__out WS_STRING* newContentType,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to start decoding a message.
//
typedef HRESULT (CALLBACK* WS_DECODER_START_CALLBACK)(
__in void* encoderContext,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to decode a message.
//
typedef HRESULT (CALLBACK* WS_DECODER_DECODE_CALLBACK)(
__in void* encoderContext,
__out_bcount_part(maxLength, *length) void* buffer,
__in ULONG maxLength,
__out ULONG* length,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback is invoked to decode the end of a message.
//
typedef HRESULT (CALLBACK* WS_DECODER_END_CALLBACK)(
__in void* encoderContext,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel callback
//
// This callback handles freeing an decoder instance.
//
typedef void (CALLBACK* WS_FREE_DECODER_CALLBACK)(__in void* decoderContext);
// Channel callback
//
// This callback is invoked when a message is about to be automatically
// redirected to another service utilizing HTTP auto redirect functionality
// as described in RFC2616. If the redirection should not be allowed, this
// callback should return S_FALSE or an error value. Otherwise the auto
// HTTP redirection will proceed.
//
typedef HRESULT (CALLBACK* WS_HTTP_REDIRECT_CALLBACK)(
__in void* state,
__in const WS_STRING* originalUrl,
__in const WS_STRING* newUrl);
// Listener callback
//
// This callback handles the WsCreateListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_CREATE_LISTENER_CALLBACK)(
__in WS_CHANNEL_TYPE channelType,
__in_bcount(listenerParametersSize) const void* listenerParameters,
__in ULONG listenerParametersSize,
__deref_out void** listenerInstance,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsFreeListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef void (CALLBACK* WS_FREE_LISTENER_CALLBACK)(__in void* listenerInstance);
// Listener callback
//
// This callback handles the WsResetListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_RESET_LISTENER_CALLBACK)(
__in void* listenerInstance,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsOpenListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_OPEN_LISTENER_CALLBACK)(
__in void* listenerInstance,
__in const WS_STRING* url,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsCloseListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_CLOSE_LISTENER_CALLBACK)(
__in void* listenerInstance,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsGetListenerProperty call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_GET_LISTENER_PROPERTY_CALLBACK)(
__in void* listenerInstance,
__in WS_LISTENER_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsSetListenerProperty call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_SET_LISTENER_PROPERTY_CALLBACK)(
__in void* listenerInstance,
__in WS_LISTENER_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsAcceptChannel call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_ACCEPT_CHANNEL_CALLBACK)(
__in void* listenerInstance,
__in void* channelInstance,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsAbortListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_ABORT_LISTENER_CALLBACK)(
__in void* listenerInstance,
__in_opt WS_ERROR* error);
// Listener callback
//
// This callback handles the WsCreateChannelForListener call
// for a WS_CUSTOM_CHANNEL_BINDING.
//
typedef HRESULT (CALLBACK* WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK)(
__in void* listenerInstance,
__in_bcount(channelParametersSize) const void* channelParameters,
__in ULONG channelParametersSize,
__deref_out void** channelInstance,
__in_opt WS_ERROR* error);
// Message callback
//
// This callback is used as a notification that the message is done using
// the WS_XML_READER supplied to WsReadEnvelopeStart
// or the WS_XML_WRITER supplied to WsWriteEnvelopeStart.
//
typedef void (CALLBACK* WS_MESSAGE_DONE_CALLBACK)(__in void* doneCallbackState);
// Security Credentials callback
//
// Callback for providing a certificate to the security runtime. This
// callback is specified as part of the WS_CUSTOM_CERT_CREDENTIAL,
// which in turn may be specified as part of a security binding that requires a
// certificate credential. The runtime will invoke this callback when the channel
// (client-side) or the listener (server-side) is opened.
//
// Cert ownership: If this callback returns a success HRESULT, the caller
// (namely, the security runtime) will take ownership of the returned
// certificate, and will free it when the containing channel no longer
// needs it. If this callback returns a failure HRESULT, the caller will
// NOT take ownership of, or even look at, the value returned in the out
// parameter 'cert'.
//
typedef HRESULT (CALLBACK* WS_GET_CERT_CALLBACK)(
__in void* getCertCallbackState,
__in_opt const WS_ENDPOINT_ADDRESS* targetAddress,
__in_opt const WS_STRING* viaUri,
__deref_out const struct _CERT_CONTEXT** cert,
__in_opt WS_ERROR* error);
// Security Credentials callback
//
// The callback to notify the client of the list of certificate issuers
// that are acceptable to the server. With some protocols such as SSL,
// the server may optionally send such an issuer list to help the client
// choose a certificate.
//
// This callback is an optional part of the WS_CUSTOM_CERT_CREDENTIAL.
// If the (possibly NULL) certificate returned by the WS_GET_CERT_CALLBACK is
// accepted by the server, then this callback is never invoked. If the
// server rejects it and sends back an issuer list, then this callback
// will be invoked. The client may then choose a certificate based on
// the issuer list and supply that certificate when the channel is opened
// next and WS_GET_CERT_CALLBACK is invoked again.
//
// The parameters supplied during this callback are valid only for the
// duration of the callback.
//
typedef HRESULT (CALLBACK* WS_CERT_ISSUER_LIST_NOTIFICATION_CALLBACK)(
__in void* certIssuerListNotificationCallbackState,
__in const struct _SecPkgContext_IssuerListInfoEx* issuerList,
__in_opt WS_ERROR* error);
// Security Credentials callback
//
// Application supplied callback for validating a username/password pair
// on the receiver side. When a WS_USERNAME_MESSAGE_SECURITY_BINDING
// containing this callback is included in the security description, this callback
// is invoked for each received message at the server. This callback is expected
// to return S_OKif the username/password pair was successfully validated, S_FALSE
// when the pair could not be validated and an error value if an unexpected error occurred.
// Returning any result other than S_OK from this callback will result in
// the associated receive message failing with a security error.
//
// As with all security callbacks, the application should expect to
// receive this callback any time between channel/listener open and close,
// but it will never be invoked when a channel is not open. In the
// current drop, this callback is always invoked synchronously. In the
// next drop, this callback will be invoked synchronously for synchronous
// message receives and asynchronously for asynchronous message receives,
// but it will always be invoked (WS_SHORT_CALLBACK) short
// when it is invoked asynchronously.
//
typedef HRESULT (CALLBACK* WS_VALIDATE_PASSWORD_CALLBACK)(
__in_opt void* passwordValidatorCallbackState,
__in const WS_STRING* username,
__in const WS_STRING* password,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Security Bindings callback
//
// Application supplied callback for validating a SAML assertion. If a
// received SAML assertion passes the signature verification checks that
// ensure the SAML was issued by a trusted issuer, then this callback is
// invoked to enable the application to do additional validation on the
// XML form of the SAML assertion. This callback is expected to return
// S_OK if the SAML assertion was successfully validated, S_FALSE when
// the assertion could not be validated and an error value if an
// unexpected error occurred. Returning any result other than S_OK from
// this callback will result in the associated receive message failing
// with a security error.
//
// As with all security callbacks, the application should expect to
// receive this callback any time between listener open and close, but it
// will never be invoked when a listener is not open.
//
typedef HRESULT (CALLBACK* WS_VALIDATE_SAML_CALLBACK)(
__in_opt void* samlValidatorCallbackState,
__in WS_XML_BUFFER* samlAssertion,
__in_opt WS_ERROR* error);
// Serialization callback
//
// This callback is invoked to compare two durations.
//
typedef HRESULT (CALLBACK* WS_DURATION_COMPARISON_CALLBACK)(
__in const WS_DURATION* duration1,
__in const WS_DURATION* duration2,
__out int* result,
__in_opt WS_ERROR* error);
// Serialization callback
//
// This callback is invoked to read an value when WS_CUSTOM_TYPE
// has been specified. This allows reading of XML constructs which do not easily
// map to the core serialization model.
//
typedef HRESULT (CALLBACK* WS_READ_TYPE_CALLBACK)(
__in WS_XML_READER* reader,
__in WS_TYPE_MAPPING typeMapping,
__in const void* descriptionData,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization callback
//
// This callback is invoked to write an element when WS_CUSTOM_TYPE
// has been specified. This allows writing of XML constructs which do not easily
// map to the core serialization model.
//
typedef HRESULT (CALLBACK* WS_WRITE_TYPE_CALLBACK)(
__in WS_XML_WRITER* writer,
__in WS_TYPE_MAPPING typeMapping,
__in const void* descriptionData,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization callback
//
// This callback is invoked before a value that is handled
// by a WS_CUSTOM_TYPE is serialized in order to
// determine if the value is the default value. Support
// for default values is enabled by specifying
// when WS_FIELD_OPTIONAL in the WS_FIELD_DESCRIPTION.
//
typedef HRESULT (CALLBACK* WS_IS_DEFAULT_VALUE_CALLBACK)(
__in const void* descriptionData,
__in_bcount(valueSize) const void* value,
__in_bcount_opt(valueSize) const void* defaultValue,
__in ULONG valueSize,
__out BOOL* isDefault,
__in_opt WS_ERROR* error);
// Contract callback
//
// It is invoked when a WS_MESSAGE is received on an endpoint configured
// with a WS_SERVICE_CONTRACT which has defaultMessageHandlerCallback set.
//
// The incoming WS_MESSAGE, the serviceProxy along with other parameters
// is made available to the callback through WS_OPERATION_CONTEXT.
//
typedef HRESULT (CALLBACK* WS_SERVICE_MESSAGE_RECEIVE_CALLBACK)(
__in const WS_OPERATION_CONTEXT* context,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Call cancellation callback
//
// This callback is invoked by service model to notify a cancellation of an
// async service operation call as a result of an aborted shutdown of service host.
//
typedef void (CALLBACK* WS_OPERATION_CANCEL_CALLBACK)(
__in const WS_SERVICE_CANCEL_REASON reason,
__in void* state);
// Call cancellation callback
//
// This callback is invoked by service model to allow application to cleanup
// state that was registered with cancellation callback.
//
typedef void (CALLBACK* WS_OPERATION_FREE_STATE_CALLBACK)(__in void* state);
// Contract callback
//
// This callback is invoked by service model to delegate to the service
// operation call. This callback is generated by (Web Service Compiler Tool) wsutil.exe
// for every service operation. It is defined on the WS_OPERATION_DESCRIPTION for each
// service operation.
//
typedef HRESULT (CALLBACK* WS_SERVICE_STUB_CALLBACK)(
__in const WS_OPERATION_CONTEXT* context,
__in void* frame,
__in const void* callback,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Host callback
//
// This callback is invoked when a channel is accepted on an endpoint
// listener by service host.
//
// For (Contract) session based service contract, this notification signifies session initiation.
// Thus an application state scoped for the session can be created within this callback.
//
typedef HRESULT (CALLBACK* WS_SERVICE_ACCEPT_CHANNEL_CALLBACK)(
__in const WS_OPERATION_CONTEXT* context,
__deref_out void** channelState,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Host callback
//
// This callback is invoked when a channel is closed/or aborted on an endpoint.
// This callback is called right before we are about to close the channel.
//
// For normal operation when service host is running and the client cleanly
// closed the channel, this implies that we have received a session closure
// from the client and we are about to close the channel.
//
// The other scenario is when service host is going through an Abort Shutdown
// or during the processing of the message an unrecoverable error condition is
// met, as a result of this we attempt to abort and then close the channel.
// In this case as well right before the abort we will call upon this callback.
//
// For (Contract) session based service contract, this notification
// signifies session tear down. Thus an application state scoped for the session
// can be destroyed within this callback.
//
typedef HRESULT (CALLBACK* WS_SERVICE_CLOSE_CHANNEL_CALLBACK)(
__in const WS_OPERATION_CONTEXT* context,
__in_opt const WS_ASYNC_CONTEXT* asyncContext);
// Service Authorization callback
//
// This callback is invoked when headers of the incoming message
// are received and the body is not processed.
//
typedef HRESULT (CALLBACK* WS_SERVICE_SECURITY_CALLBACK)(
__in const WS_OPERATION_CONTEXT* context,
__out BOOL* authorized,
__in_opt WS_ERROR* error);
// Service Proxy callback
//
// The callback is invoked when the headers of the input message are
// about to be sent through, or when an output message headers are just received.
//
typedef HRESULT (CALLBACK* WS_PROXY_MESSAGE_CALLBACK)(
__in WS_MESSAGE* message,
__in WS_HEAP* heap,
__in void* state,
__in_opt WS_ERROR* error);
// STRUCT DEFINITIONS
// XML Node structure
//
// Represents a set of unique strings. This information is used by the binary
// encoding to write a more compact xml document.
//
struct _WS_XML_DICTIONARY {
GUID guid;
WS_XML_STRING* strings;
ULONG stringCount;
BOOL isConst;
};
// XML Node structure
//
// Represents a string that optionally has (WS_XML_DICTIONARY) dictionary
// information associated with it. The xml APIs use WS_XML_STRINGs to identify prefixes,
// localNames and namespaces.
//
struct _WS_XML_STRING {
ULONG length;
BYTE* bytes;
WS_XML_DICTIONARY* dictionary;
ULONG id;
};
// XML Node structure
//
// A structure used to specify an XML name (of an element or an attribute) as
// a local name, namespace pair.
//
struct _WS_XML_QNAME {
WS_XML_STRING localName;
WS_XML_STRING ns;
};
// XML Buffer structure
//
// Represents a position within an XML Buffer. The current position within
// a reader or writer may be obtained by calling WsGetReaderPosition or
// WsGetWriterPosition. The current position within a reader or writer
// may be set by calling WsSetReaderPosition or WsSetWriterPosition.
//
// Using WsRemoveNode to remove a node that corresponds to or contains a
// position will cause subsequent use of the position to fail. The position itself
// remains valid, but operations that depend on that position will fail.
//
// Positions may be used as long as the containing XML buffer is valid. Using a position
// after its corresponding buffer has been deleted will exhibit undefined behavior.
//
struct _WS_XML_NODE_POSITION {
WS_XML_BUFFER* buffer;
void* node;
};
// XML Reader structure
//
// Specifies a reader specific setting.
//
struct _WS_XML_READER_PROPERTY {
WS_XML_READER_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// XML Canonicalization structure
//
// An array of XML prefixes that should be treated as
// inclusive prefixes during exclusive XML canonicalization. The
// treatment of inclusive prefixes is defined in
// (http://tools.ietf.org/html/rfc3741) RFC 3741.
//
struct _WS_XML_CANONICALIZATION_INCLUSIVE_PREFIXES {
ULONG prefixCount;
WS_XML_STRING* prefixes;
};
// XML Canonicalization structure
//
// Specifies a setting that controls how XML canonicalization is done.
//
struct _WS_XML_CANONICALIZATION_PROPERTY {
WS_XML_CANONICALIZATION_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// XML Writer structure
//
// Specifies a writer specific setting.
//
struct _WS_XML_WRITER_PROPERTY {
WS_XML_WRITER_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// XML Buffer structure
//
// Specifies an xml buffer specific setting.
//
struct _WS_XML_BUFFER_PROPERTY {
WS_XML_BUFFER_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// XML Node structure
//
// Represents a node of text content in xml.
//
struct _WS_XML_TEXT {
WS_XML_TEXT_TYPE textType;
};
// XML Node structure
//
// Represents text encoded as UTF-8 bytes.
//
struct _WS_XML_UTF8_TEXT {
WS_XML_TEXT text;
WS_XML_STRING value;
};
// XML Node structure
//
// Represents text encoded as UTF-16 bytes.
//
struct _WS_XML_UTF16_TEXT {
WS_XML_TEXT text;
BYTE* bytes;
ULONG byteCount;
};
// XML Node structure
//
// Represents base64 encoded data. (e.g. The three bytes { 0, 0, 0 } represent the text "AAAA".)
//
struct _WS_XML_BASE64_TEXT {
WS_XML_TEXT text;
BYTE* bytes;
ULONG length;
};
// XML Node structure
//
// A boolean that represents the text "true" or "false".
//
struct _WS_XML_BOOL_TEXT {
WS_XML_TEXT text;
BOOL value;
};
// XML Node structure
//
// Represents a signed 32 bit integer. (e.g. The value 255 represents the text "255")
//
struct _WS_XML_INT32_TEXT {
WS_XML_TEXT text;
__int32 value;
};
// XML Node structure
//
// Represents a signed 64 bit integer. (e.g. The value 255 represents the text "255")
//
struct _WS_XML_INT64_TEXT {
WS_XML_TEXT text;
__int64 value;
};
// XML Node structure
//
// Represents an unsigned 64 bit integer. (e.g. The value 255 represents the text "255")
//
struct _WS_XML_UINT64_TEXT {
WS_XML_TEXT text;
unsigned __int64 value;
};
// XML Node structure
//
// Represents a 4 byte floating point value. (e.g. The value 0.0 represents the text "0")
//
struct _WS_XML_FLOAT_TEXT {
WS_XML_TEXT text;
float value;
};
// XML Node structure
//
// Represents an 8 byte floating point value. (e.g. The value 0.0 represents the text "0")
//
struct _WS_XML_DOUBLE_TEXT {
WS_XML_TEXT text;
double value;
};
// XML Node structure
//
// Represents a 12 byte fixed point value. (e.g. The value 1.23 represents the text "1.23")
//
struct _WS_XML_DECIMAL_TEXT {
WS_XML_TEXT text;
DECIMAL value;
};
// XML Node structure
//
// Represents a guid formatted as the text "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".
//
struct _WS_XML_GUID_TEXT {
WS_XML_TEXT text;
GUID value;
};
// XML Node structure
//
// Represents a guid formatted as the text "urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".
//
struct _WS_XML_UNIQUE_ID_TEXT {
WS_XML_TEXT text;
GUID value;
};
// Utilities structure
//
// This structure is used to represent dates and times.
//
// Represents dates and times with values ranging from 12:00:00 midnight,
// January 1, 0001 Anno Domini (Common Era) through 11:59:59 P.M.,
// December 31, 9999 A.D. (C.E.) to an accuracy of 100 nanoseconds.
//
// The functions WsDateTimeToFileTime and WsFileTimeToDateTime
// can be used to convert a WS_DATETIME to and from a FILETIME.
//
struct _WS_DATETIME {
unsigned __int64 ticks;
WS_DATETIME_FORMAT format;
};
// XML Node structure
//
// Represents a datetime formatted as an
// (http://www.w3.org/TR/xmlschema-2/#dateTime) xsd:dateTime.
//
// Negative datetime values are not supported.
//
struct _WS_XML_DATETIME_TEXT {
WS_XML_TEXT text;
WS_DATETIME value;
};
// Utilities structure
//
// Represents a signed 64-bit time interval in 100 nanosecond units.
//
struct _WS_TIMESPAN {
__int64 ticks;
};
// XML Node structure
//
// Represents a time span formatted as the text "[+|-][d?.]HH:mm:ss[.fffffff]"
//
// .d is a series of digits representing the day.
//
// .HH is a two digit number representing the hour of the day, from to 0 to 23.
//
// .mm is a two digit number representing the minute of the hour, from to 0 to 59.
//
// .ss is a two digit number representing the second of the minute, from to 0 to 59.
//
// .fffffff is up to 7 decimal digits representing the fraction of a second.
//
struct _WS_XML_TIMESPAN_TEXT {
WS_XML_TEXT text;
WS_TIMESPAN value;
};
// XML Node structure
//
// Represents a qname formatted as the text "prefix:localName"
//
struct _WS_XML_QNAME_TEXT {
WS_XML_TEXT text;
WS_XML_STRING* prefix;
WS_XML_STRING* localName;
WS_XML_STRING* ns;
};
// XML Node structure
//
// Represents a list of text values separated by a single whitespace character.
//
// (e.g. The list { { WS_XML_TEXT_TYPE_INT32 }, 123},
// { { WS_XML_TEXT_TYPE_BOOL }, 1 } represents the text "123 true")
//
struct _WS_XML_LIST_TEXT {
WS_XML_TEXT text;
ULONG itemCount;
WS_XML_TEXT** items;
};
// XML Node structure
//
// An xml node is unit of data in xml. This structure is the base type
// for all the different kinds of nodes.
//
struct _WS_XML_NODE {
WS_XML_NODE_TYPE nodeType;
};
// XML Node structure
//
// Represents an attribute (e.g. <a:purchaseOrder xmlns:a="http://tempuri.org" id="5">)
//
struct _WS_XML_ATTRIBUTE {
BYTE singleQuote;
BYTE isXmlNs;
WS_XML_STRING* prefix;
WS_XML_STRING* localName;
WS_XML_STRING* ns;
WS_XML_TEXT* value;
};
// XML Node structure
//
// Represents a start element in xml (e.g.
// "<a:purchaseOrder xmlns:a="http://tempuri.org" id="5">")
//
struct _WS_XML_ELEMENT_NODE {
WS_XML_NODE node;
WS_XML_STRING* prefix;
WS_XML_STRING* localName;
WS_XML_STRING* ns;
ULONG attributeCount;
WS_XML_ATTRIBUTE** attributes;
BOOL isEmpty;
};
// XML Node structure
//
// Represents an element, attribute, or CDATA content.
//
struct _WS_XML_TEXT_NODE {
WS_XML_NODE node;
WS_XML_TEXT* text;
};
// XML Node structure
//
// Represents a comment. (e.g. "<!--The message follows-->")
//
struct _WS_XML_COMMENT_NODE {
WS_XML_NODE node;
WS_XML_STRING value;
};
// XML Reader structure
//
// Specifies where the reader should obtain the bytes that comprise the xml document.
//
struct _WS_XML_READER_INPUT {
WS_XML_READER_INPUT_TYPE inputType;
};
// XML Reader structure
//
// Specifies that the source of the xml input is a buffer.
//
struct _WS_XML_READER_BUFFER_INPUT {
WS_XML_READER_INPUT input;
void* encodedData;
ULONG encodedDataSize;
};
// XML Reader structure
//
// Specifies that the source of the xml should be obtained from a callback.
//
struct _WS_XML_READER_STREAM_INPUT {
WS_XML_READER_INPUT input;
WS_READ_CALLBACK readCallback;
void* readCallbackState;
};
// XML Reader structure
//
// This structure is the base type for all the different kinds of reader encodings.
//
struct _WS_XML_READER_ENCODING {
WS_XML_READER_ENCODING_TYPE encodingType;
};
// XML Reader structure
//
// Used to indicate that the reader should interpret the bytes it reads as textual xml.
//
struct _WS_XML_READER_TEXT_ENCODING {
WS_XML_READER_ENCODING encoding;
WS_CHARSET charSet;
};
// XML Reader structure
//
// Used to indicate that the reader should interpret the bytes it reads as binary xml.
//
struct _WS_XML_READER_BINARY_ENCODING {
WS_XML_READER_ENCODING encoding;
WS_XML_DICTIONARY* staticDictionary;
WS_XML_DICTIONARY* dynamicDictionary;
};
// Utilities structure
//
// An array of unicode characters and a length.
//
struct _WS_STRING {
ULONG length;
WCHAR* chars;
};
// XML Reader structure
//
// Used to indicate that the reader should interpret the bytes it reads as in MTOM format.
//
struct _WS_XML_READER_MTOM_ENCODING {
WS_XML_READER_ENCODING encoding;
WS_XML_READER_ENCODING* textEncoding;
BOOL readMimeHeader;
WS_STRING startInfo;
WS_STRING boundary;
WS_STRING startUri;
};
// XML Reader structure
//
// Used to indicate that the reader should surface the bytes of the document as base64 encoded characters.
//
struct _WS_XML_READER_RAW_ENCODING {
WS_XML_READER_ENCODING encoding;
};
// XML Writer structure
//
// This structure is the base type for all the different kinds of writer encodings.
//
struct _WS_XML_WRITER_ENCODING {
WS_XML_WRITER_ENCODING_TYPE encodingType;
};
// XML Writer structure
//
// Used to indicate that the reader should emit bytes as textual xml.
//
struct _WS_XML_WRITER_TEXT_ENCODING {
WS_XML_WRITER_ENCODING encoding;
WS_CHARSET charSet;
};
// XML Writer structure
//
// Used to indicate that the writer should emit bytes as binary xml.
//
struct _WS_XML_WRITER_BINARY_ENCODING {
WS_XML_WRITER_ENCODING encoding;
WS_XML_DICTIONARY* staticDictionary;
WS_DYNAMIC_STRING_CALLBACK dynamicStringCallback;
void* dynamicStringCallbackState;
};
// XML Writer structure
//
// Used to indicate that the reader should emit bytes in MTOM format.
// The MTOM format will represent bytes written to it as binary mime
// parts rather than embedded base64 encoded text.
//
struct _WS_XML_WRITER_MTOM_ENCODING {
WS_XML_WRITER_ENCODING encoding;
WS_XML_WRITER_ENCODING* textEncoding;
BOOL writeMimeHeader;
WS_STRING boundary;
WS_STRING startInfo;
WS_STRING startUri;
ULONG maxInlineByteCount;
};
// XML Writer structure
//
// Used to indicate that the writer should emit bytes from decoded base64 characters.
//
struct _WS_XML_WRITER_RAW_ENCODING {
WS_XML_WRITER_ENCODING encoding;
};
// XML Writer structure
//
// Specifies where the writer should emit the bytes that comprise the xml document.
//
struct _WS_XML_WRITER_OUTPUT {
WS_XML_WRITER_OUTPUT_TYPE outputType;
};
// XML Writer structure
//
// Specifies that the generated bytes should be placed in a buffer.
//
struct _WS_XML_WRITER_BUFFER_OUTPUT {
WS_XML_WRITER_OUTPUT output;
};
// XML Writer structure
//
// Specifies that the generated bytes should be sent to callback.
//
struct _WS_XML_WRITER_STREAM_OUTPUT {
WS_XML_WRITER_OUTPUT output;
WS_WRITE_CALLBACK writeCallback;
void* writeCallbackState;
};
// XML Writer structure
//
// A structure that is used to specify a set of WS_XML_WRITER_PROPERTYs.
//
struct _WS_XML_WRITER_PROPERTIES {
WS_XML_WRITER_PROPERTY* properties;
ULONG propertyCount;
};
// XML Reader structure
//
// A structure that is used to specify a set of WS_XML_READER_PROPERTYs.
//
struct _WS_XML_READER_PROPERTIES {
WS_XML_READER_PROPERTY* properties;
ULONG propertyCount;
};
// Async Model structure
//
// Used with the Async Model to specify the async callback and
// a pointer which will be passed to the async callback.
//
struct _WS_ASYNC_CONTEXT {
WS_ASYNC_CALLBACK callback;
void* callbackState;
};
// Async Model structure
//
// Used by WsAsyncExecute to manage the state of an asynchronous operation.
//
struct _WS_ASYNC_STATE {
void* internal0;
void* internal1;
void* internal2;
void* internal3;
void* internal4;
};
// Async Model structure
//
// Used with the WsAsyncExecute to specify the next function
// to invoke in a series of async operations.
//
struct _WS_ASYNC_OPERATION {
WS_ASYNC_FUNCTION function;
};
// Channel structure
//
// Specifies a channel specific setting.
//
struct _WS_CHANNEL_PROPERTY {
WS_CHANNEL_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Channel structure
//
// A structure that is used to specify the custom proxy for the channel, using
// the WS_CHANNEL_PROPERTY_CUSTOM_HTTP_PROXY.
//
struct _WS_CUSTOM_HTTP_PROXY {
WS_STRING servers;
WS_STRING bypass;
};
// Channel structure
//
// A structure that is used to specify a set of WS_CHANNEL_PROPERTYs.
//
struct _WS_CHANNEL_PROPERTIES {
WS_CHANNEL_PROPERTY* properties;
ULONG propertyCount;
};
// Channel structure
//
// A structure that is used to specify a set of callbacks
// that form the implementation of a custom channel.
//
struct _WS_CUSTOM_CHANNEL_CALLBACKS {
WS_CREATE_CHANNEL_CALLBACK createChannelCallback;
WS_FREE_CHANNEL_CALLBACK freeChannelCallback;
WS_RESET_CHANNEL_CALLBACK resetChannelCallback;
WS_OPEN_CHANNEL_CALLBACK openChannelCallback;
WS_CLOSE_CHANNEL_CALLBACK closeChannelCallback;
WS_ABORT_CHANNEL_CALLBACK abortChannelCallback;
WS_GET_CHANNEL_PROPERTY_CALLBACK getChannelPropertyCallback;
WS_SET_CHANNEL_PROPERTY_CALLBACK setChannelPropertyCallback;
WS_WRITE_MESSAGE_START_CALLBACK writeMessageStartCallback;
WS_WRITE_MESSAGE_END_CALLBACK writeMessageEndCallback;
WS_READ_MESSAGE_START_CALLBACK readMessageStartCallback;
WS_READ_MESSAGE_END_CALLBACK readMessageEndCallback;
WS_ABANDON_MESSAGE_CALLBACK abandonMessageCallback;
WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK shutdownSessionChannelCallback;
};
// Channel structure
//
// Specifies an individual header that is mapped as part of WS_HTTP_MESSAGE_MAPPING.
//
struct _WS_HTTP_HEADER_MAPPING {
WS_XML_STRING headerName;
ULONG headerMappingOptions;
};
// Channel structure
//
// Specifies information about how an HTTP request or response should be
// represented in a message object.
//
struct _WS_HTTP_MESSAGE_MAPPING {
ULONG requestMappingOptions;
ULONG responseMappingOptions;
WS_HTTP_HEADER_MAPPING** requestHeaderMappings;
ULONG requestHeaderMappingCount;
WS_HTTP_HEADER_MAPPING** responseHeaderMappings;
ULONG responseHeaderMappingCount;
};
// Serialization structure
//
// Represents a mapping between a C data type and an XML element.
//
struct _WS_ELEMENT_DESCRIPTION {
WS_XML_STRING* elementLocalName;
WS_XML_STRING* elementNs;
WS_TYPE type;
void* typeDescription;
};
// Channel structure
//
// The description of the format of a message.
//
struct _WS_MESSAGE_DESCRIPTION {
WS_XML_STRING* action;
WS_ELEMENT_DESCRIPTION* bodyElementDescription;
};
// Channel structure
//
// A structure that is used to specify a set of callbacks
// that can transform the content type and encoded bytes of a sent message.
//
struct _WS_CHANNEL_ENCODER {
void* createContext;
WS_CREATE_ENCODER_CALLBACK createEncoderCallback;
WS_ENCODER_GET_CONTENT_TYPE_CALLBACK encoderGetContentTypeCallback;
WS_ENCODER_START_CALLBACK encoderStartCallback;
WS_ENCODER_ENCODE_CALLBACK encoderEncodeCallback;
WS_ENCODER_END_CALLBACK encoderEndCallback;
WS_FREE_ENCODER_CALLBACK freeEncoderCallback;
};
// Channel structure
//
// A structure that is used to specify a set of callbacks
// that can transform the content type and encoded bytes of a received message.
//
struct _WS_CHANNEL_DECODER {
void* createContext;
WS_CREATE_DECODER_CALLBACK createDecoderCallback;
WS_DECODER_GET_CONTENT_TYPE_CALLBACK decoderGetContentTypeCallback;
WS_DECODER_START_CALLBACK decoderStartCallback;
WS_DECODER_DECODE_CALLBACK decoderDecodeCallback;
WS_DECODER_END_CALLBACK decoderEndCallback;
WS_FREE_DECODER_CALLBACK freeDecoderCallback;
};
// Channel structure
//
// Specifies the callback function and state for controlling the HTTP auto redirection behavior.
//
// See also, WS_HTTP_REDIRECT_CALLBACK_CONTEXT
// and WS_CHANNEL_PROPERTY_HTTP_REDIRECT_CALLBACK_CONTEXT.
//
struct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT {
WS_HTTP_REDIRECT_CALLBACK callback;
void* state;
};
// Endpoint Identity structure
//
// The base type for all endpoint identities.
//
struct _WS_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY_TYPE identityType;
};
// Endpoint Address structure
//
// Represents the network address of an endpoint.
//
struct _WS_ENDPOINT_ADDRESS {
WS_STRING url;
WS_XML_BUFFER* headers;
WS_XML_BUFFER* extensions;
WS_ENDPOINT_IDENTITY* identity;
};
// Endpoint Identity structure
//
// Type for specifying an endpoint identity represented by a DNS name.
//
struct _WS_DNS_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_STRING dns;
};
// Endpoint Identity structure
//
//
// Type for specifying an endpoint identity represented by a UPN (user principal name).
//
//
struct _WS_UPN_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_STRING upn;
};
// Endpoint Identity structure
//
// Type for specifying an endpoint identity represented by an SPN (service principal name).
//
struct _WS_SPN_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_STRING spn;
};
// Utilities structure
// A structure used to serialize and deserialize an array of bytes.
struct _WS_BYTES {
ULONG length;
BYTE* bytes;
};
// Endpoint Identity structure
//
// Type for RSA endpoint identity.
//
struct _WS_RSA_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_BYTES modulus;
WS_BYTES exponent;
};
// Endpoint Identity structure
//
// Type for certificate endpoint identity
//
struct _WS_CERT_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_BYTES rawCertificateData;
};
// Endpoint Identity structure
//
// Type for unknown endpoint identity. This type is only used to represent
// an endpoint identity type that was deserialized but was not understood.
//
struct _WS_UNKNOWN_ENDPOINT_IDENTITY {
WS_ENDPOINT_IDENTITY identity;
WS_XML_BUFFER* element;
};
// Errors structure
//
// Specifies an error specific setting.
//
struct _WS_ERROR_PROPERTY {
WS_ERROR_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Faults structure
//
// A fault reason is a human-readable description of the failure conveyed
// by the fault. This structure is used within the WS_FAULT structure.
// For more information about faults, see Faults.
//
struct _WS_FAULT_REASON {
WS_STRING text;
WS_STRING lang;
};
// Faults structure
//
// A fault code identifies the type of failure conveyed by a fault message.
// This structure is used within the WS_FAULT structure.
// For more information about faults, see Faults.
//
struct _WS_FAULT_CODE {
WS_XML_QNAME value;
struct _WS_FAULT_CODE* subCode;
};
// Faults structure
//
// A Fault is a value carried in the body of a message which conveys a
// processing failure. Faults are modeled using the WS_FAULT structure.
// See Faults for more information.
//
struct _WS_FAULT {
WS_FAULT_CODE* code;
WS_FAULT_REASON* reasons;
ULONG reasonCount;
WS_STRING actor;
WS_STRING node;
WS_XML_BUFFER* detail;
};
// Faults structure
//
// A description of the detail element of a fault message.
//
struct _WS_FAULT_DETAIL_DESCRIPTION {
WS_XML_STRING* action;
WS_ELEMENT_DESCRIPTION* detailElementDescription;
};
// Heap structure
//
// Specifies a heap specific setting.
//
struct _WS_HEAP_PROPERTY {
WS_HEAP_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Heap structure
//
// A structure that is used to specify a set of WS_HEAP_PROPERTYs.
//
struct _WS_HEAP_PROPERTIES {
WS_HEAP_PROPERTY* properties;
ULONG propertyCount;
};
// Listener structure
//
// Specifies a listener specific setting.
//
struct _WS_LISTENER_PROPERTY {
WS_LISTENER_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Listener structure
//
// Specifies the list of blocked UserAgent sub-string's. This is
// used with the WS_LISTENER_PROPERTY_DISALLOWED_USER_AGENT
// listener property.
//
struct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS {
ULONG subStringCount;
WS_STRING** subStrings;
};
// Listener structure
//
// A structure that is used to specify a set of WS_LISTENER_PROPERTYs.
//
struct _WS_LISTENER_PROPERTIES {
WS_LISTENER_PROPERTY* properties;
ULONG propertyCount;
};
// Listener structure
//
// A structure containing a list of host names.
//
struct _WS_HOST_NAMES {
WS_STRING* hostNames;
ULONG hostNameCount;
};
// Listener structure
//
// A structure that is used to specify a set of callbacks
// that form the implementation of a custom
// listener.
//
struct _WS_CUSTOM_LISTENER_CALLBACKS {
WS_CREATE_LISTENER_CALLBACK createListenerCallback;
WS_FREE_LISTENER_CALLBACK freeListenerCallback;
WS_RESET_LISTENER_CALLBACK resetListenerCallback;
WS_OPEN_LISTENER_CALLBACK openListenerCallback;
WS_CLOSE_LISTENER_CALLBACK closeListenerCallback;
WS_ABORT_LISTENER_CALLBACK abortListenerCallback;
WS_GET_LISTENER_PROPERTY_CALLBACK getListenerPropertyCallback;
WS_SET_LISTENER_PROPERTY_CALLBACK setListenerPropertyCallback;
WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK createChannelForListenerCallback;
WS_ACCEPT_CHANNEL_CALLBACK acceptChannelCallback;
};
// Message structure
//
// Specifies a message specific setting.
//
struct _WS_MESSAGE_PROPERTY {
WS_MESSAGE_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Message structure
//
// A structure that is used to specify a set of WS_MESSAGE_PROPERTYs.
//
struct _WS_MESSAGE_PROPERTIES {
WS_MESSAGE_PROPERTY* properties;
ULONG propertyCount;
};
// Security Channel Settings structure
//
// Specifies a crypto algorithm setting.
//
struct _WS_SECURITY_ALGORITHM_PROPERTY {
WS_SECURITY_ALGORITHM_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Security Channel Settings structure
//
// Defines the security algorithms and key lengths to be used with
// WS-Security. This setting is relevant to message security bindings
// and mixed-mode security bindings.
//
struct _WS_SECURITY_ALGORITHM_SUITE {
WS_SECURITY_ALGORITHM_ID canonicalizationAlgorithm;
WS_SECURITY_ALGORITHM_ID digestAlgorithm;
WS_SECURITY_ALGORITHM_ID symmetricSignatureAlgorithm;
WS_SECURITY_ALGORITHM_ID asymmetricSignatureAlgorithm;
WS_SECURITY_ALGORITHM_ID encryptionAlgorithm;
WS_SECURITY_ALGORITHM_ID keyDerivationAlgorithm;
WS_SECURITY_ALGORITHM_ID symmetricKeyWrapAlgorithm;
WS_SECURITY_ALGORITHM_ID asymmetricKeyWrapAlgorithm;
ULONG minSymmetricKeyLength;
ULONG maxSymmetricKeyLength;
ULONG minAsymmetricKeyLength;
ULONG maxAsymmetricKeyLength;
WS_SECURITY_ALGORITHM_PROPERTY* properties;
ULONG propertyCount;
};
// Security Channel Settings structure
//
// Specifies a channel-wide security setting.
//
struct _WS_SECURITY_PROPERTY {
WS_SECURITY_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Security Channel Settings structure
//
// Specifies an array of channel-wide security settings.
//
struct _WS_SECURITY_PROPERTIES {
WS_SECURITY_PROPERTY* properties;
ULONG propertyCount;
};
// Security Binding Settings structure
//
// Specifies a security binding specific setting.
//
struct _WS_SECURITY_BINDING_PROPERTY {
WS_SECURITY_BINDING_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Security Channel Settings structure
//
// Specifies an array of security binding settings.
//
struct _WS_SECURITY_BINDING_PROPERTIES {
WS_SECURITY_BINDING_PROPERTY* properties;
ULONG propertyCount;
};
// Extended Protection structure
//
// A list of Server Principal Names (SPNs) that are used to validate Extended Protection.
//
// Only available on the server.
//
struct _WS_SERVICE_SECURITY_IDENTITIES {
WS_STRING* serviceIdentities;
ULONG serviceIdentityCount;
};
// Security Credentials structure
//
// The abstract base type for all certificate credential types.
//
struct _WS_CERT_CREDENTIAL {
WS_CERT_CREDENTIAL_TYPE credentialType;
};
// Security Credentials structure
//
// The type for specifying a certificate credential using the
// certificate's subject name, store location and store name. The
// specified credential is loaded when the containing channel or listener
// is opened.
//
struct _WS_SUBJECT_NAME_CERT_CREDENTIAL {
WS_CERT_CREDENTIAL credential;
ULONG storeLocation;
WS_STRING storeName;
WS_STRING subjectName;
};
// Security Credentials structure
//
// The type for specifying a certificate credential using the
// certificate's thumbprint, store location and store name. The
// specified credential is loaded when the containing channel or listener
// is opened.
//
// The thumbprint is the best option for specifying a certificate when
// subject name based specification is expected to be ambiguous due to
// the presence of multiple certificates with matching subject names in
// the cert store being specified.
//
struct _WS_THUMBPRINT_CERT_CREDENTIAL {
WS_CERT_CREDENTIAL credential;
ULONG storeLocation;
WS_STRING storeName;
WS_STRING thumbprint;
};
// Security Credentials structure
//
// The type for specifying a certificate credential that is to be
// supplied by a callback to the application. This callback is invoked
// to get the certificate during WsOpenChannel on the client
// side and during WsOpenListener on the server side. It is
// always invoked (WS_SHORT_CALLBACK) short.
//
struct _WS_CUSTOM_CERT_CREDENTIAL {
WS_CERT_CREDENTIAL credential;
WS_GET_CERT_CALLBACK getCertCallback;
void* getCertCallbackState;
WS_CERT_ISSUER_LIST_NOTIFICATION_CALLBACK certIssuerListNotificationCallback;
void* certIssuerListNotificationCallbackState;
};
// Security Credentials structure
//
// The abstract base type for all credential types used with Windows
// Integrated Authentication.
//
struct _WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL {
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE credentialType;
};
// Security Credentials structure
//
// Type for supplying a Windows credential as username, password, domain strings.
//
struct _WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL {
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL credential;
WS_STRING username;
WS_STRING password;
WS_STRING domain;
};
// Security Credentials structure
//
// Type for supplying a Windows Integrated Authentication credential based on the current Windows identity.
// If this credential subtype is used for a security binding, the current thread token on the thread that calls
// WsOpenChannel or WsOpenServiceProxy is used as the Windows
// identity when sending messages or making service calls. WsAcceptChannel and WsOpenServiceHost do not support this credential type when called
// from an impersonating thread.
//
struct _WS_DEFAULT_WINDOWS_INTEGRATED_AUTH_CREDENTIAL {
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL credential;
};
// Security Credentials structure
//
// Type for supplying a Windows Integrated Authentication credential as an opaque handle created by
// SspiPromptForCredentials and the related family of APIs. This feature
// is available only on Windows 7 and later.
//
struct _WS_OPAQUE_WINDOWS_INTEGRATED_AUTH_CREDENTIAL {
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL credential;
void* opaqueAuthIdentity;
};
// Security Credentials structure
//
// The abstract base type for all username/password credentials.
//
// Note that WS_USERNAME_CREDENTIAL and its concrete subtypes
// are used with the WS-Security WS_USERNAME_MESSAGE_SECURITY_BINDING.
// They are best suitable for application-level username/password pairs, such as
// those used for online customer accounts. The usernames and passwords specified
// are not interpreted by the security runtime, and are merely carried
// client-to-server for authentication by the specified server-side
// username/password validator specified by the application.
//
// In contrast, the WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL and
// its concrete subtypes are used for Windows Integrated Authentication
// and the security bindings that use it.
//
struct _WS_USERNAME_CREDENTIAL {
WS_USERNAME_CREDENTIAL_TYPE credentialType;
};
// Security Credentials structure
//
// The type for supplying a username/password pair as strings.
//
struct _WS_STRING_USERNAME_CREDENTIAL {
WS_USERNAME_CREDENTIAL credential;
WS_STRING username;
WS_STRING password;
};
// Security Bindings structure
//
// The abstract base type for all types that specify a cryptographic key.
// Such a key is typically specified for a generic XML security token or
// a custom security token.
//
struct _WS_SECURITY_KEY_HANDLE {
WS_SECURITY_KEY_HANDLE_TYPE keyHandleType;
};
// Security Bindings structure
//
// The type for specifying a symmetric cryptographic key as raw bytes.
//
struct _WS_RAW_SYMMETRIC_SECURITY_KEY_HANDLE {
WS_SECURITY_KEY_HANDLE keyHandle;
WS_BYTES rawKeyBytes;
};
// Security Bindings structure
//
// The type for specifying asymmetric cryptographic keys as a CryptoNG
// NCRYPT_KEY_HANDLE.
//
// When this structure is used in an API (such as with
// (WsCreateXmlSecurityToken) XML token creation) and subsequent
// (WS_XML_TOKEN_MESSAGE_SECURITY_BINDING) use of that XML
// token for a channel), the application is responsible for making
// sure that the NCRYPT_KEY_HANDLE remains valid as long as the key is in
// use. The application is also responsible for freeing the handle when
// it is no longer in use.
//
// This type is supported only on Windows Vista and later platforms.
//
struct _WS_NCRYPT_ASYMMETRIC_SECURITY_KEY_HANDLE {
WS_SECURITY_KEY_HANDLE keyHandle;
NCRYPT_KEY_HANDLE asymmetricKey;
};
// Security Bindings structure
//
// The type for specifying asymmetric cryptographic keys as CAPI 1.0 key
// handles.
//
// When this structure is used in an API (such as
// with (WsCreateXmlSecurityToken) XML token creation and subsequent
// (WS_XML_TOKEN_MESSAGE_SECURITY_BINDING) use of that XML
// token for a channel), the application is responsible for making
// sure that the HCRYPTPROV remains valid as long as the key is in
// use. The application is also responsible for freeing the handle when
// it is no longer in use.
//
// This type is supported only on pre-Windows Vista platforms: for
// Windows Vista and later, please use WS_NCRYPT_ASYMMETRIC_SECURITY_KEY_HANDLE.
//
struct _WS_CAPI_ASYMMETRIC_SECURITY_KEY_HANDLE {
WS_SECURITY_KEY_HANDLE keyHandle;
HCRYPTPROV provider;
ULONG keySpec;
};
// Security Bindings structure
//
// The abstract base type for all security bindings. One or more
// concrete subtypes of this are specified in the
// (WS_SECURITY_DESCRIPTION) security description that is
// supplied during channel and listener creation. Each concrete subtype
// of this corresponds to a security protocol and a way of using it to
// provide authentication and/or protection to a channel.
//
// Each security binding subtype instance in the security description
// contributes one security token at runtime. Thus, the fields of this
// type can be viewed as specifying a security token, how to obtain it,
// how to use it for channel security, and how to modify its behavior
// using the optional settings.
//
struct _WS_SECURITY_BINDING {
WS_SECURITY_BINDING_TYPE bindingType;
WS_SECURITY_BINDING_PROPERTY* properties;
ULONG propertyCount;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of SSL/TLS
// protocol based transport security.
//
// This security binding is supported only with the
// WS_HTTP_CHANNEL_BINDING.
//
// With this security binding, the following security binding property may be specified:
//
// . WS_SECURITY_BINDING_PROPERTY_CERT_FAILURES_TO_IGNORE (client side only)
//
// . WS_SECURITY_BINDING_PROPERTY_DISABLE_CERT_REVOCATION_CHECK (client side only)
//
// . WS_SECURITY_BINDING_PROPERTY_REQUIRE_SSL_CLIENT_CERT (server side only)
//
//
struct _WS_SSL_TRANSPORT_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_CERT_CREDENTIAL* localCertCredential;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of the Windows
// Integrated Authentication protocol (such as Kerberos, NTLM or SPNEGO)
// with the TCP transport. A specific SSP package may be chosen using
// the security binding property
// WS_SECURITY_BINDING_PROPERTY_WINDOWS_INTEGRATED_AUTH_PACKAGE;
// if that property is not specified, SPNEGO is used by default. The use
// of NTLM is strongly discouraged due to its security weakness
// (specifically, lack of server authentication). If NTLM is to be
// allowed, the security binding property WS_SECURITY_BINDING_PROPERTY_REQUIRE_SERVER_AUTH
// must be set to FALSE.
//
// This security binding operates at the transport security level and is
// supported only with the WS_TCP_CHANNEL_BINDING. The
// TCP/Windows SSPI combination uses the wire form defined by the
// (http://msdn.microsoft.com/en-us/library/cc219293.aspx) NegotiateStream
// protocol and the (http://msdn.microsoft.com/en-us/library/cc236723.aspx) .Net Message Framing specification.
//
// On the client side, the security identity of the target server is
// specified using the identity field of the WS_ENDPOINT_ADDRESS
// parameter supplied during WsOpenChannel. If the identity is a
// WS_SPN_ENDPOINT_IDENTITY or a WS_UPN_ENDPOINT_IDENTITY,
// that string identity value is used directly with the SSP. If the identity is a
// WS_DNS_ENDPOINT_IDENTITY and the value of its dns field is
// 'd1', or if no identity is specified in the WS_ENDPOINT_ADDRESS
// and the host component (according to Section 3.2.2 of
// (http://tools.ietf.org/html/rfc2396) RFC2396) the address URI
// is 'd1', then the form 'host/d1' is used as the server SPN.
// Specifying any other WS_ENDPOINT_IDENTITY subtype in
// WS_ENDPOINT_ADDRESS will cause WsOpenChannel to fail.
//
// With this security binding, the following security binding properties may be specified:
//
// . WS_SECURITY_BINDING_PROPERTY_WINDOWS_INTEGRATED_AUTH_PACKAGE
// . WS_SECURITY_BINDING_PROPERTY_REQUIRE_SERVER_AUTH (client side only)
//
// . WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS (server side only)
//
// . WS_SECURITY_BINDING_PROPERTY_ALLOWED_IMPERSONATION_LEVEL (client side only)
//
struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of HTTP header authentication against a target service or a HTTP proxy server
// based on the basic, digest ( (http://tools.ietf.org/html/rfc2617) RFC 2617) and the SPNEGO ( (http://tools.ietf.org/html/rfc4559) RFC4559) protocols.
// Since this security binding operates at the HTTP header level, it is supported only with the WS_HTTP_CHANNEL_BINDING.
// By default, this security binding is used for the target service. However WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET
// security binding property can be specified to use it for a HTTP proxy server. This binding provides client authentication, but not message protection
// since the HTTP body is unaffected by this binding. While this security binding can be used alone, such usage is not recommended;
// more typically, HTTP header authentication is done in conjunction with transport level security provided by a security binding such as the
// WS_SSL_TRANSPORT_SECURITY_BINDING. To use this binding without SSL, the the security description property
// WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL must be explicitly set to WS_PROTECTION_LEVEL_NONE or WS_PROTECTION_LEVEL_SIGN.
//
// With this security binding, the following security binding properties may be specified:
//
// . WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_SCHEME
// . WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET (client side only)
//
// . WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_BASIC_REALM (server side only)
//
// . WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_REALM (server side only)
//
// . WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_DOMAIN (server side only)
//
struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of the Kerberos
// AP_REQ ticket as a direct (i.e., without establishing a session)
// security token with WS-Security.
//
// Only one instance of this binding may be present in a (WS_SECURITY_DESCRIPTION) security description.
//
// With this security binding, the following security binding properties may be specified:
//
// . WS_SECURITY_BINDING_PROPERTY_ALLOWED_IMPERSONATION_LEVEL (client side only)
//
// . WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS (server side only)
//
// Client side on Vista and above, using this binding with HTTP will result in the message being sent using chunked transfer.
//
struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of an application
// supplied username / password pair as a direct (i.e., one-shot)
// security token. This security binding may be used only with message
// security. It provides client authentication, but not traffic signing
// or encryption. So, it is used in conjunction with another transport
// security or message security binding that provides message protection.
//
// Only one instance of this binding may be present in a (WS_SECURITY_DESCRIPTION) security description.
//
// With this security binding, no security binding properties may be specified.
//
struct _WS_USERNAME_MESSAGE_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_USERNAME_CREDENTIAL* clientCredential;
WS_VALIDATE_PASSWORD_CALLBACK passwordValidator;
void* passwordValidatorCallbackState;
};
// Security Description structure
//
//
// The top-level structure used to specify the security requirements for
// a (WsCreateChannel) channel (on the client side) or a (WsCreateListener) listener (on the server side).
//
//
struct _WS_SECURITY_DESCRIPTION {
WS_SECURITY_BINDING** securityBindings;
ULONG securityBindingCount;
WS_SECURITY_PROPERTY* properties;
ULONG propertyCount;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of a security context
// token negotiated between the client and server using
// WS-SecureConversation. This security binding may be used only with
// message security. It is used to establish a message-level security
// context. Another set of one or more security bindings, specified in the
// bootstrapSecurityDescription field, is used to the bootstrap the context.
//
// Only one instance of this binding may be present in a (WS_SECURITY_DESCRIPTION) security description.
//
// When this binding is used, the channel must complete the receive of at least one
// message before it can be used to send messages.
//
// With this security binding, the following security binding properties may be specified:
//
// . WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_SIZE
// . WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_ENTROPY_MODE
// . WS_SECURITY_BINDING_PROPERTY_MESSAGE_PROPERTIES
// . WS_SECURITY_BINDING_PROPERTY_SECURE_CONVERSATION_VERSION
// . WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_SUPPORT_RENEW
// . WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
// . WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL
struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_SECURITY_DESCRIPTION* bootstrapSecurityDescription;
};
// Security Context structure
//
// Defines a property of a WS_SECURITY_CONTEXT
struct _WS_SECURITY_CONTEXT_PROPERTY {
WS_SECURITY_CONTEXT_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Security Channel Settings structure
//
// Specifies a property for an XML security token.
//
struct _WS_XML_SECURITY_TOKEN_PROPERTY {
WS_XML_SECURITY_TOKEN_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of a security
// token that is already available to the application in XML form. The
// security token that is supplied by the application in this binding is
// presented to a service in a WS-Security header according to the
// bindingUsage specified. This security binding may be included in a
// (WS_SECURITY_DESCRIPTION) security description only on the
// client side.
//
// Although this binding can be used with any token available in XML
// form, this is commonly used in (Federation) federation
// scenarios. For example, a client side token provider such as
// CardSpace may be used to get a token from a security token service,
// and that token may then be presented to a Web Service using this
// security binding.
//
// Security note: As with other security tokens and credentials, the
// application is in charge of the risk assessment decision to disclose a
// given XML token (supplied by the application in a
// (WS_SECURITY_DESCRIPTION) security description) to a given
// server (supplied by the application when
// (WsOpenChannel) opening the channel). In particular, the
// application should consider the threat that the server might use the
// XML token it receives from the client, in turn, to pretend to be the
// client to a 3rd party. For this threat, the following mitigations
// exist: (A) the server authentication process makes sure that the
// message (and hence the token) is sent only to a server that can speak
// for the address specified by the client application; (B) keyless
// (bearer) tokens are typically usable only at one server (e.g.,
// contoso.com gains little from passing on a contoso.com
// username/password token to another site -- the application security
// design should make sure this property holds); (C) symmetric keyed
// tokens are unusable at any server that doesn't share the same
// symmetric key; (D) asymmetric keyed tokens will sign the timestamp and
// the 'To' header, limiting their applicability to the intended 'To' for
// a narrow time duration.
//
// With this security binding, no security binding properties may be specified:
//
struct _WS_XML_TOKEN_MESSAGE_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_SECURITY_TOKEN* xmlToken;
};
// Security Bindings structure
//
// The abstract base type for all SAML authenticators used on the server
// side to validate incoming SAML tokens.
//
struct _WS_SAML_AUTHENTICATOR {
WS_SAML_AUTHENTICATOR_TYPE authenticatorType;
};
// Security Bindings structure
//
// The type for specifying a SAML token authenticator based on an array
// of expected issuer certificates. When an authenticator of this type
// is used, an incoming SAML token will be accepted if only if it has a
// valid XML signature created with any one of the specified X.509
// certificates. Thus, the specified X.509 certificates represent a
// 'allow list' of trusted SAML issuers.
//
// No revocation or chain trust checks are done by the runtime on the
// specified certificates: so, it is up to the application to make sure
// that the certificates are valid before they are specified in this
// structure.
//
// As indicated above, the validation of the received SAML is limited to
// making sure that it was signed correctly by one of the specified
// certificates. The application may then extract the SAML assertion
// using WsGetMessageProperty with the key
// WS_MESSAGE_PROPERTY_SAML_ASSERTION and do
// additional validator or processing.
//
struct _WS_CERT_SIGNED_SAML_AUTHENTICATOR {
WS_SAML_AUTHENTICATOR authenticator;
const struct _CERT_CONTEXT** trustedIssuerCerts;
ULONG trustedIssuerCertCount;
const struct _CERT_CONTEXT* decryptionCert;
WS_VALIDATE_SAML_CALLBACK samlValidator;
void* samlValidatorCallbackState;
};
// Security Bindings structure
//
// The security binding subtype for specifying the use of a SAML
// assertion as a message security token. The SAML token is expected to
// be presented to a service in a WS-Security header according to the
// bindingUsage specified. This security binding may be included in a
// (WS_SECURITY_DESCRIPTION) security description only on the
// server side.
//
// Only one instance of this binding may be present in a (WS_SECURITY_DESCRIPTION) security description.
//
// For a (Federation) federated security scenario that
// involves getting a security token from an issuer and then presenting
// it to a service, one may use WsRequestSecurityToken
// together with the WS_XML_TOKEN_MESSAGE_SECURITY_BINDING on
// the client side, and this binding on the server side.
//
// The extent of validation performed on the received SAML depends on the
// authenticator specified. If additional validation is required, the
// application may get the received SAML assertion using
// WsGetMessageProperty with the key WS_MESSAGE_PROPERTY_SAML_ASSERTION
// and do further processing.
//
// With this security binding, no security binding properties may be specified:
//
struct _WS_SAML_MESSAGE_SECURITY_BINDING {
WS_SECURITY_BINDING binding;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_SAML_AUTHENTICATOR* authenticator;
};
// Security Channel Settings structure
//
// Specifies a property for requesting a security token from an issuer.
//
struct _WS_REQUEST_SECURITY_TOKEN_PROPERTY {
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Serialization structure
//
// This type is used to store an attribute
// that has not been directly mapped to a field.
//
struct _WS_ANY_ATTRIBUTE {
WS_XML_STRING localName;
WS_XML_STRING ns;
WS_XML_TEXT* value;
};
// Serialization structure
//
// This type is used to store a set of attributes
// that have not been directly mapped to field of
// a structure.
//
struct _WS_ANY_ATTRIBUTES {
WS_ANY_ATTRIBUTE* attributes;
ULONG attributeCount;
};
// Serialization structure
//
// This type description is used with WS_BOOL_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_BOOL_DESCRIPTION {
BOOL value;
};
// Serialization structure
//
// This type description is used with WS_GUID_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_GUID_DESCRIPTION {
GUID value;
};
// Serialization structure
//
// This type description is used with WS_DATETIME_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
// Only the ticks field of the WS_DATETIME is compared.
//
struct _WS_DATETIME_DESCRIPTION {
WS_DATETIME minValue;
WS_DATETIME maxValue;
};
// Utilities structure
//
// Represents a (http://www.w3.org/TR/xmlschema-2/#duration) xsd:duration.
//
struct _WS_DURATION {
BOOL negative;
ULONG years;
ULONG months;
ULONG days;
ULONG hours;
ULONG minutes;
ULONG seconds;
ULONG milliseconds;
ULONG ticks;
};
// Serialization structure
//
// This type description is used with WS_DURATION_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_DURATION_DESCRIPTION {
WS_DURATION minValue;
WS_DURATION maxValue;
WS_DURATION_COMPARISON_CALLBACK comparer;
};
// Serialization structure
//
// This type description is used with WS_TIMESPAN_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_TIMESPAN_DESCRIPTION {
WS_TIMESPAN minValue;
WS_TIMESPAN maxValue;
};
// Serialization structure
//
// This type description is used with WS_UNIQUE_ID_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UNIQUE_ID_DESCRIPTION {
ULONG minCharCount;
ULONG maxCharCount;
};
// Serialization structure
//
// This type description is used with WS_STRING_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_STRING_DESCRIPTION {
ULONG minCharCount;
ULONG maxCharCount;
};
// Serialization structure
//
// This type description is used with WS_XML_STRING_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_XML_STRING_DESCRIPTION {
ULONG minByteCount;
ULONG maxByteCount;
};
// Serialization structure
//
// This type description is used with WS_XML_QNAME_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_XML_QNAME_DESCRIPTION {
ULONG minLocalNameByteCount;
ULONG maxLocalNameByteCount;
ULONG minNsByteCount;
ULONG maxNsByteCount;
};
// Serialization structure
//
// This type description is used with WS_CHAR_ARRAY_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_CHAR_ARRAY_DESCRIPTION {
ULONG minCharCount;
ULONG maxCharCount;
};
// Serialization structure
//
// This type description is used with WS_BYTE_ARRAY_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_BYTE_ARRAY_DESCRIPTION {
ULONG minByteCount;
ULONG maxByteCount;
};
// Serialization structure
//
// This type description is used with WS_UTF8_ARRAY_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UTF8_ARRAY_DESCRIPTION {
ULONG minByteCount;
ULONG maxByteCount;
};
// Serialization structure
//
// This type description is used with WS_WSZ_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_WSZ_DESCRIPTION {
ULONG minCharCount;
ULONG maxCharCount;
};
// Serialization structure
//
// This type description is used with WS_INT8_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_INT8_DESCRIPTION {
char minValue;
char maxValue;
};
// Serialization structure
//
// This type description is used with WS_UINT8_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UINT8_DESCRIPTION {
BYTE minValue;
BYTE maxValue;
};
// Serialization structure
//
// This type description is used with WS_INT16_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_INT16_DESCRIPTION {
short minValue;
short maxValue;
};
// Serialization structure
//
// This type description is used with WS_UINT16_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UINT16_DESCRIPTION {
USHORT minValue;
USHORT maxValue;
};
// Serialization structure
//
// This type description is used with WS_INT32_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_INT32_DESCRIPTION {
int minValue;
int maxValue;
};
// Serialization structure
//
// This type description is used with WS_UINT32_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UINT32_DESCRIPTION {
ULONG minValue;
ULONG maxValue;
};
// Serialization structure
//
// This type description is used with WS_INT64_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_INT64_DESCRIPTION {
__int64 minValue;
__int64 maxValue;
};
// Serialization structure
//
// This type description is used with WS_UINT64_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_UINT64_DESCRIPTION {
unsigned __int64 minValue;
unsigned __int64 maxValue;
};
// Serialization structure
//
// This type description is used with WS_FLOAT_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_FLOAT_DESCRIPTION {
float minValue;
float maxValue;
};
// Serialization structure
//
// This type description is used with WS_DOUBLE_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_DOUBLE_DESCRIPTION {
double minValue;
double maxValue;
};
// Serialization structure
//
// This type description is used with WS_DECIMAL_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_DECIMAL_DESCRIPTION {
DECIMAL minValue;
DECIMAL maxValue;
};
// Serialization structure
//
// This type description is used with WS_BYTES_TYPE and is optional.
// It is used to specify constraints on the set of values
// which can be deserialized.
//
struct _WS_BYTES_DESCRIPTION {
ULONG minByteCount;
ULONG maxByteCount;
};
// Serialization structure
//
// Provides serialization information about a single value that
// is part of an enumeration ( WS_ENUM_DESCRIPTION).
//
struct _WS_ENUM_VALUE {
int value;
WS_XML_STRING* name;
};
// Serialization structure
//
// This type description is used with WS_ENUM_TYPE and is required.
// It provides information used in serializing and deserializing
// values of an enumeration.
//
struct _WS_ENUM_DESCRIPTION {
WS_ENUM_VALUE* values;
ULONG valueCount;
ULONG maxByteCount;
ULONG* nameIndices;
};
// Serialization structure
//
// Defines the minimum and maximum number of items that may appear
// when using WS_REPEATING_ELEMENT_FIELD_MAPPING,
// WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING,
// or WS_REPEATING_ANY_ELEMENT_FIELD_MAPPING within
// a WS_FIELD_DESCRIPTION. The constraint is only
// enforced during deserialization.
//
struct _WS_ITEM_RANGE {
ULONG minItemCount;
ULONG maxItemCount;
};
// Serialization structure
//
// Defines a default value for a field. This is used
// in a WS_FIELD_DESCRIPTION.
//
struct _WS_DEFAULT_VALUE {
void* value;
ULONG valueSize;
};
// Serialization structure
//
// Used within a WS_STRUCT_DESCRIPTION to represent a field
// of a structure that is mapped to XML content according to a particular
// WS_FIELD_MAPPING.
//
struct _WS_FIELD_DESCRIPTION {
WS_FIELD_MAPPING mapping;
WS_XML_STRING* localName;
WS_XML_STRING* ns;
WS_TYPE type;
void* typeDescription;
ULONG offset;
ULONG options;
WS_DEFAULT_VALUE* defaultValue;
ULONG countOffset;
WS_XML_STRING* itemLocalName;
WS_XML_STRING* itemNs;
WS_ITEM_RANGE* itemRange;
};
// Serialization structure
//
// Represents serialization information about a field within a union.
// See WS_UNION_DESCRIPTION.
//
struct _WS_UNION_FIELD_DESCRIPTION {
int value;
WS_FIELD_DESCRIPTION field;
};
// Serialization structure
//
// Information about C struct type, and how it maps to an XML element.
// This is used with WS_STRUCT_TYPE.
//
struct _WS_STRUCT_DESCRIPTION {
ULONG size;
ULONG alignment;
WS_FIELD_DESCRIPTION** fields;
ULONG fieldCount;
WS_XML_STRING* typeLocalName;
WS_XML_STRING* typeNs;
WS_STRUCT_DESCRIPTION* parentType;
WS_STRUCT_DESCRIPTION** subTypes;
ULONG subTypeCount;
ULONG structOptions;
};
// Serialization structure
//
// Information about the choices within a union type.
// This is used with WS_UNION_TYPE.
//
struct _WS_UNION_DESCRIPTION {
ULONG size;
ULONG alignment;
WS_UNION_FIELD_DESCRIPTION** fields;
ULONG fieldCount;
ULONG enumOffset;
int noneEnumValue;
ULONG* valueIndices;
};
// Serialization structure
//
// Information about a mapping between an WS_ENDPOINT_ADDRESS
// and an XML element.
//
struct _WS_ENDPOINT_ADDRESS_DESCRIPTION {
WS_ADDRESSING_VERSION addressingVersion;
};
// Serialization structure
//
// Information about a mapping between an WS_FAULT and an XML element.
//
struct _WS_FAULT_DESCRIPTION {
WS_ENVELOPE_VERSION envelopeVersion;
};
// Serialization structure
//
// Specifies information about a field which is neither serialized nor
// deserialized.
//
// This is used with WS_VOID_TYPE and WS_NO_FIELD_MAPPING
// within a WS_FIELD_DESCRIPTION.
//
// This type description is only required when WS_FIELD_POINTER is not
// being used.
//
struct _WS_VOID_DESCRIPTION {
ULONG size;
};
// Serialization structure
//
// Represents a custom mapping between a C data type and an XML element.
// User-defined callbacks are invoked to do the actual reading and
// writing.
//
struct _WS_CUSTOM_TYPE_DESCRIPTION {
ULONG size;
ULONG alignment;
WS_READ_TYPE_CALLBACK readCallback;
WS_WRITE_TYPE_CALLBACK writeCallback;
void* descriptionData;
WS_IS_DEFAULT_VALUE_CALLBACK isDefaultValueCallback;
};
// Serialization structure
//
// Represents a mapping between a C data type and an XML attribute.
//
struct _WS_ATTRIBUTE_DESCRIPTION {
WS_XML_STRING* attributeLocalName;
WS_XML_STRING* attributeNs;
WS_TYPE type;
void* typeDescription;
};
// Service Operation structure
//
// The index of the parameters in the incoming/outgoing messages field descriptions.
//
struct _WS_PARAMETER_DESCRIPTION {
WS_PARAMETER_TYPE parameterType;
USHORT inputMessageIndex;
USHORT outputMessageIndex;
};
// Service Operation structure
//
// Metadata for the service operation.
//
struct _WS_OPERATION_DESCRIPTION {
ULONG versionInfo;
WS_MESSAGE_DESCRIPTION* inputMessageDescription;
WS_MESSAGE_DESCRIPTION* outputMessageDescription;
ULONG inputMessageOptions;
ULONG outputMessageOptions;
USHORT parameterCount;
WS_PARAMETER_DESCRIPTION* parameterDescription;
WS_SERVICE_STUB_CALLBACK stubCallback;
WS_OPERATION_STYLE style;
};
// Contract structure
//
// The metadata for a service contract for service model.
//
struct _WS_CONTRACT_DESCRIPTION {
ULONG operationCount;
WS_OPERATION_DESCRIPTION** operations;
};
// Contract structure
//
// Used to specify a service contract on an (WS_SERVICE_ENDPOINT) endpoint.
//
struct _WS_SERVICE_CONTRACT {
const WS_CONTRACT_DESCRIPTION* contractDescription;
WS_SERVICE_MESSAGE_RECEIVE_CALLBACK defaultMessageHandlerCallback;
const void* methodTable;
};
// Service Host structure
//
// Specifies a service specific setting.
//
struct _WS_SERVICE_PROPERTY {
WS_SERVICE_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Service Host structure
//
// Specifies a service specific setting.
//
struct _WS_SERVICE_ENDPOINT_PROPERTY {
WS_SERVICE_ENDPOINT_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Service Host structure
//
// Specifies the callback which is called when a channel is successfully accepted.
//
struct _WS_SERVICE_PROPERTY_ACCEPT_CALLBACK {
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK callback;
};
// Service Metadata structure
//
// Specifies the individual documents that make up the service metadata.
//
struct _WS_SERVICE_METADATA_DOCUMENT {
WS_XML_STRING* content;
WS_STRING* name;
};
// Service Metadata structure
//
// Specifies the service metadata documents array. This can be a collection of
// WSDL/XSD documents represented as an array of WS_STRING.
//
struct _WS_SERVICE_METADATA {
ULONG documentCount;
WS_SERVICE_METADATA_DOCUMENT** documents;
WS_XML_STRING* serviceName;
WS_XML_STRING* serviceNs;
};
// Service Host structure
//
// Specifies the callback which is called when a channel is about to be closed.
// See, WS_SERVICE_CLOSE_CHANNEL_CALLBACK for details.
//
struct _WS_SERVICE_PROPERTY_CLOSE_CALLBACK {
WS_SERVICE_CLOSE_CHANNEL_CALLBACK callback;
};
// Service Metadata structure
//
// Represents the port element for the endpoint. The port element is
// generated for the service element as specified by serviceName and
// serviceNs for WS_SERVICE_PROPERTY_METADATA property
// on the WS_SERVICE_HOST.
//
// Note, the port type will only be generated into the WSDL document if the service
// element is indeed generated by the runtime.
//
struct _WS_SERVICE_ENDPOINT_METADATA {
WS_XML_STRING* portName;
WS_XML_STRING* bindingName;
WS_XML_STRING* bindingNs;
};
// Service Host structure
//
// Represents an individual endpoint on a service host. The properties on the endpoint
// are used to specify the address, binding and contract.
//
struct _WS_SERVICE_ENDPOINT {
WS_ENDPOINT_ADDRESS address;
WS_CHANNEL_BINDING channelBinding;
WS_CHANNEL_TYPE channelType;
const WS_SECURITY_DESCRIPTION* securityDescription;
const WS_SERVICE_CONTRACT* contract;
WS_SERVICE_SECURITY_CALLBACK authorizationCallback;
const WS_SERVICE_ENDPOINT_PROPERTY* properties;
ULONG propertyCount;
WS_CHANNEL_PROPERTIES channelProperties;
};
// Service Proxy structure
//
// Specifies a proxy property.
//
struct _WS_PROXY_PROPERTY {
WS_PROXY_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Service Proxy structure
//
// Specifies the callback function and state for an application that wishes
// to associate or inspect headers in an input or an output message respectively.
//
// See also, WS_CALL_PROPERTY_SEND_MESSAGE_CONTEXT and
// WS_CALL_PROPERTY_RECEIVE_MESSAGE_CONTEXT.
//
struct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT {
WS_PROXY_MESSAGE_CALLBACK callback;
void* state;
};
// Service Proxy structure
//
// Specifies a proxy property.
//
struct _WS_CALL_PROPERTY {
WS_CALL_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Url structure
//
// The abstract base type for all URL schemes used with WsDecodeUrl and WsEncodeUrl APIs.
//
struct _WS_URL {
WS_URL_SCHEME_TYPE scheme;
};
// Url structure
//
// The URL subtype for specifying an http URL.
//
struct _WS_HTTP_URL {
WS_URL url;
WS_STRING host;
USHORT port;
WS_STRING portAsString;
WS_STRING path;
WS_STRING query;
WS_STRING fragment;
};
// Url structure
//
// The URL subtype for specifying an https URL.
//
struct _WS_HTTPS_URL {
WS_URL url;
WS_STRING host;
USHORT port;
WS_STRING portAsString;
WS_STRING path;
WS_STRING query;
WS_STRING fragment;
};
// Url structure
//
// The URL subtype for specifying an net.tcp URL.
//
struct _WS_NETTCP_URL {
WS_URL url;
WS_STRING host;
USHORT port;
WS_STRING portAsString;
WS_STRING path;
WS_STRING query;
WS_STRING fragment;
};
// Url structure
//
// The URL subtype for specifying an soap.udp URL.
//
struct _WS_SOAPUDP_URL {
WS_URL url;
WS_STRING host;
USHORT port;
WS_STRING portAsString;
WS_STRING path;
WS_STRING query;
WS_STRING fragment;
};
// Utilities structure
//
// Represents a unique ID URI.
//
struct _WS_UNIQUE_ID {
WS_STRING uri;
GUID guid;
};
// Utilities structure
// A structure used to represent a discontiguous array of WS_BYTES.
struct _WS_BUFFERS {
ULONG bufferCount;
WS_BYTES* buffers;
};
// Metadata Import structure
//
// Information about a single endpoint that was
// read from metadata documents.
//
struct _WS_METADATA_ENDPOINT {
WS_ENDPOINT_ADDRESS endpointAddress;
WS_POLICY* endpointPolicy;
WS_XML_STRING* portName;
WS_XML_STRING* serviceName;
WS_XML_STRING* serviceNs;
WS_XML_STRING* bindingName;
WS_XML_STRING* bindingNs;
WS_XML_STRING* portTypeName;
WS_XML_STRING* portTypeNs;
};
// Metadata Import structure
//
// Information about all endpoints that were
// read from metadata documents.
//
struct _WS_METADATA_ENDPOINTS {
WS_METADATA_ENDPOINT* endpoints;
ULONG endpointCount;
};
// Metadata Import structure
//
// Specifies a metadata object setting.
//
struct _WS_METADATA_PROPERTY {
WS_METADATA_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Metadata Import structure
//
// Specifies a policy object setting.
//
struct _WS_POLICY_PROPERTY {
WS_POLICY_PROPERTY_ID id;
void* value;
ULONG valueSize;
};
// Metadata Import structure
//
// A structure that is used to specify a set of WS_POLICY_PROPERTYs.
//
struct _WS_POLICY_PROPERTIES {
WS_POLICY_PROPERTY* properties;
ULONG propertyCount;
};
// Metadata Import structure
//
// This structure is used to specify a set of constraints
// for a particular security binding property.
// Any property constraints that are not specified will use
// the default constraints.
//
struct _WS_SECURITY_BINDING_PROPERTY_CONSTRAINT {
WS_SECURITY_BINDING_PROPERTY_ID id;
void* allowedValues;
ULONG allowedValuesSize;
struct
{
WS_SECURITY_BINDING_PROPERTY securityBindingProperty;
} out;
};
// Metadata Import structure
//
// The base class for all security binding constraint structures.
//
struct _WS_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT_TYPE type;
WS_SECURITY_BINDING_PROPERTY_CONSTRAINT* propertyConstraints;
ULONG propertyConstraintCount;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to the
// WS_SSL_TRANSPORT_SECURITY_BINDING.
//
struct _WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
struct
{
BOOL clientCertCredentialRequired;
} out;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to the
// WS_USERNAME_MESSAGE_SECURITY_BINDING.
//
struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to the
// WS_HTTP_HEADER_AUTH_SECURITY_BINDING.
//
struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to the
// WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING.
//
struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
};
// Metadata Import structure
//
// A security binding constraint that can be used with
// WS_XML_TOKEN_MESSAGE_SECURITY_BINDING.
//
struct _WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to the
// WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING.
//
struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Metadata Import structure
//
// This structure is used to specify a set of constraints
// for a particular request security token property.
// Any property constraints that are not specified will use
// the default constraints.
//
struct _WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT {
WS_REQUEST_SECURITY_TOKEN_PROPERTY_ID id;
void* allowedValues;
ULONG allowedValuesSize;
struct
{
WS_REQUEST_SECURITY_TOKEN_PROPERTY requestSecurityTokenProperty;
} out;
};
// Metadata Import structure
//
// A security binding constraint that can be used to extract information
// about how to obtain an issued token from an issuing party.
//
struct _WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_XML_STRING* claimConstraints;
ULONG claimConstraintCount;
WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT* requestSecurityTokenPropertyConstraints;
ULONG requestSecurityTokenPropertyConstraintCount;
struct
{
WS_ENDPOINT_ADDRESS* issuerAddress;
WS_XML_BUFFER* requestSecurityTokenTemplate;
} out;
};
// Metadata Import structure
//
// This structure is used to specify a set of constraints
// for a particular security property.
// Any property constraints that are not specified will use
// the default constraints.
//
struct _WS_SECURITY_PROPERTY_CONSTRAINT {
WS_SECURITY_PROPERTY_ID id;
void* allowedValues;
ULONG allowedValuesSize;
struct
{
WS_SECURITY_PROPERTY securityProperty;
} out;
};
// Metadata Import structure
//
// This structure specifies the security related constraints
// as part of WS_POLICY_CONSTRAINTS.
//
struct _WS_SECURITY_CONSTRAINTS {
WS_SECURITY_PROPERTY_CONSTRAINT* securityPropertyConstraints;
ULONG securityPropertyConstraintCount;
WS_SECURITY_BINDING_CONSTRAINT** securityBindingConstraints;
ULONG securityBindingConstraintCount;
};
// Metadata Import structure
//
// A security binding constraint that corresponds to
// the WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING.
//
struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT {
WS_SECURITY_BINDING_CONSTRAINT bindingConstraint;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
WS_SECURITY_CONSTRAINTS* bootstrapSecurityConstraint;
};
// Metadata Import structure
//
// This structure is used to specify a set of constraints
// for a particular channel property.
// Any property constraints that are not specified will use
// the default constraints.
//
struct _WS_CHANNEL_PROPERTY_CONSTRAINT {
WS_CHANNEL_PROPERTY_ID id;
void* allowedValues;
ULONG allowedValuesSize;
struct
{
WS_CHANNEL_PROPERTY channelProperty;
} out;
};
// Metadata Import structure
//
// The base class for all policy extension structures. Policy extensions
// are assertions that are directly handled by applications such as custom assertions.
//
struct _WS_POLICY_EXTENSION {
WS_POLICY_EXTENSION_TYPE type;
};
// Metadata Import structure
//
// This structure is used to specify an endpoint policy extension.
//
struct _WS_ENDPOINT_POLICY_EXTENSION {
WS_POLICY_EXTENSION policyExtension;
WS_XML_STRING* assertionName;
WS_XML_STRING* assertionNs;
struct
{
WS_XML_BUFFER* assertionValue;
} out;
};
// Metadata Import structure
//
// This structure is used to specify policy constraints for a channel.
//
struct _WS_POLICY_CONSTRAINTS {
WS_CHANNEL_BINDING channelBinding;
WS_CHANNEL_PROPERTY_CONSTRAINT* channelPropertyConstraints;
ULONG channelPropertyConstraintCount;
WS_SECURITY_CONSTRAINTS* securityConstraints;
WS_POLICY_EXTENSION** policyExtensions;
ULONG policyExtensionCount;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding.
//
struct _WS_HTTP_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
// See also,
// WsCreateServiceProxyFromTemplate,
// WsCreateServiceEndpointFromTemplate
struct _WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding.
//
struct _WS_HTTP_SSL_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
// See also,
// WsCreateServiceProxyFromTemplate,
// WsCreateServiceEndpointFromTemplate
struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding.
//
struct _WS_HTTP_HEADER_AUTH_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION httpHeaderAuthSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding with SSL transport security and
// header authentication.
//
struct _WS_HTTP_SSL_HEADER_AUTH_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION httpHeaderAuthSecurityBinding;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
// See also,
// WsCreateServiceProxyFromTemplate,
// WsCreateServiceEndpointFromTemplate
struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding with SSL transport security and
// username/password message security.
//
struct _WS_HTTP_SSL_USERNAME_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION usernameMessageSecurityBinding;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
// See also,
// WsCreateServiceProxyFromTemplate,
// WsCreateServiceEndpointFromTemplate
struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding with SSL transport security
// and KERBEROS AP_REQ message security.
//
struct _WS_HTTP_SSL_KERBEROS_APREQ_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION kerberosApreqMessageSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying http channel binding.
//
struct _WS_TCP_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
// See also,
// WsCreateServiceProxyFromTemplate,
// WsCreateServiceEndpointFromTemplate
struct _WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
};
// Policy Support structure
//
// Describes the policy specifying TCP channel binding with windows SSPI.
//
struct _WS_TCP_SSPI_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sspiTransportSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying TCP channel binding with windows SSPI transport
// security and username/password message security.
//
struct _WS_TCP_SSPI_USERNAME_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sspiTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION usernameMessageSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying TCP channel binding with windows SSPI transport
// security, and kerberos message security.
//
struct _WS_TCP_SSPI_KERBEROS_APREQ_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sspiTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION kerberosApreqMessageSecurityBinding;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the templates generated accordingly to input policy setting.
//
struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_MESSAGE_SECURITY_USAGE bindingUsage;
};
// Policy Support structure
//
// This type description is used with template APIs to describe
// the security context related templates generated accordingly to input policy setting.
//
struct _WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION {
WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION securityContextMessageSecurityBinding;
WS_SECURITY_PROPERTIES securityProperties;
};
// Policy Support structure
//
// Describes the policy specifying security context message binding using TCP channel binding
// with windows SSPI transport security. The bootstrap channel uses TCP channel binding with
// windows SSPI transport security and kerberos message security.
//
struct _WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sspiTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION kerberosApreqMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION securityContextSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying security context message binding using TCP channel binding with windows SSPI transport
// security. The bootstrap channel uses TCP channel binding with windows SSPI transport
// security and username/password message security.
//
struct _WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sspiTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION usernameMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION securityContextSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying security context message binding over http channel binding, with SSL
// transport security. The bootstrap channel uses http channel binding with SSL transport security
// and username/password message security.
//
struct _WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION usernameMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION securityContextSecurityBinding;
};
// Policy Support structure
//
// Describes the policy specifying security context message binding over http channel binding, with SSL
// transport security. The bootstrap channel uses http channel binding with SSL transport security
// and KERBEROS AP_REQ message security.
//
struct _WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION sslTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION kerberosApreqMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION securityContextSecurityBinding;
};
// Policy Support structure
//
// HTTP template structure to be filled in by application for http binding.
//
struct _WS_HTTP_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
};
// Policy Support structure
//
// TCP template structure to be filled in by application for TCP binding.
//
struct _WS_TCP_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
};
// Policy Support structure
//
// The security binding template for specifying the use of SSL/TLS
// protocol based transport security.
// See Also WS_SSL_TRANSPORT_SECURITY_BINDING
// This security binding is supported only with WS_HTTP_CHANNEL_BINDING.
//
struct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_CERT_CREDENTIAL* localCertCredential;
};
// Policy Support structure
//
// SSL security template information to be filled in by application.
// Associated with WS_HTTP_SSL_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
};
// Policy Support structure
//
// The security binding template for specifying the use of HTP header authentication
// protocol based security.
// See also WS_HTTP_HEADER_AUTH_SECURITY_BINDING
struct _WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Policy Support structure
//
// HTTP header authentication security template information to be filled in by application.
// Associated with WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE httpHeaderAuthSecurityBinding;
};
// Policy Support structure
//
// The security binding template for specifying the use of Windows SSPI
// protocol based transport security.
//
// See also WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING.
//
struct _WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Policy Support structure
//
// HTTP header authentication security template information to be filled in by application.
// Associated with WS_TCP_SSPI_BINDING_TEMPLATE_TYPE.
//
struct _WS_TCP_SSPI_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE sspiTransportSecurityBinding;
};
// Policy Support structure
//
// Username/password security template information to be filled in by application.
// Associated with WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE httpHeaderAuthSecurityBinding;
};
// Policy Support structure
//
// The security binding template for specifying the use of an application
// supplied username / password pair as a direct (i.e., one-shot)
// security token. This security binding may be used only with message
// security. It provides client authentication, but not traffic signing
// or encryption. So, it is used in conjunction with another transport
// security or message security binding that provides message protection.
// See also WS_USERNAME_MESSAGE_SECURITY_BINDING
struct _WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_USERNAME_CREDENTIAL* clientCredential;
WS_VALIDATE_PASSWORD_CALLBACK passwordValidator;
void* passwordValidatorCallbackState;
};
// Policy Support structure
//
// Username/password security template information to be filled in by application.
// Associated with WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE usernameMessageSecurityBinding;
};
// Policy Support structure
//
// The security binding template for specifying the use of the Kerberos
// AP_REQ ticket as a direct (i.e., without establishing a session)
// security token with WS-Security.
// See also WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING
struct _WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
WS_WINDOWS_INTEGRATED_AUTH_CREDENTIAL* clientCredential;
};
// Policy Support structure
//
// Username/password security template information to be filled in by application.
// Associated with WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE kerberosApreqMessageSecurityBinding;
};
// Policy Support structure
//
// Username/password security template information to be filled in by application.
// Associated with WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE_TYPE.
//
struct _WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE sspiTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE usernameMessageSecurityBinding;
};
// Policy Support structure
//
// Username/password security template information to be filled in by application.
// Associated with WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE.
//
struct _WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE sspiTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE kerberosApreqMessageSecurityBinding;
};
// Policy Support structure
//
// The security binding template for specifying the use of an application
// supplied security context security binding. This security binding may
// be used only with message security. So, it is used in conjunction with another transport
// security or message security binding that provides message protection.
//
// See also WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING
struct _WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;
};
// Policy Support structure
//
// The security binding template for specifying the use of an application
// supplied security context security binding. This security binding may
// be used only with message security. So, it is used in conjunction with another transport
// security binding that provides message protection. The security properties are
// used to establish the secure conversation.
//
// See also WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING
struct _WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE {
WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TEMPLATE securityContextMessageSecurityBinding;
WS_SECURITY_PROPERTIES securityProperties;
};
// Policy Support structure
//
// Security template information to be filled in by application.
// Associated with WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE usernameMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE securityContextSecurityBinding;
};
// Policy Support structure
//
// Security template information to be filled in by application.
// Associated with WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE.
//
struct _WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE kerberosApreqMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE securityContextSecurityBinding;
};
// Policy Support structure
//
// Security template information to be filled in by application.
// Associated with WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE.
//
struct _WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE sspiTransportSecurityBinding;
WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE usernameMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE securityContextSecurityBinding;
};
// Policy Support structure
//
// Security template information to be filled in by application.
// Associated with WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE.
//
struct _WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE {
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE sspiTransportSecurityBinding;
WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE kerberosApreqMessageSecurityBinding;
WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE securityContextSecurityBinding;
};
// MACRO DEFINITIONS
// XML Node macro
//
// Provides an initializer for a WS_XML_STRING structure when there is an associated dictionary ID.
//
#define WS_XML_STRING_DICTIONARY_VALUE(S, D, I) { sizeof(S)-1, (BYTE*)RTL_CONST_CAST(char*)(S), RTL_CONST_CAST(WS_XML_DICTIONARY*)(D), I }
// XML Node macro
//
// Provides an initializer for a WS_XML_STRING structure when there is no associated dictionary ID.
//
#define WS_XML_STRING_VALUE(S) { sizeof(S)-1, (BYTE*)RTL_CONST_CAST(char*)(S), NULL, 0 }
// XML Node macro
//
// Provides an an empty string initializer for a WS_XML_STRING structure.
//
#define WS_XML_STRING_NULL { 0, NULL, NULL, NULL }
// Utilities macro
//
// A macro to initialize a WS_STRING structure given a constant string.
//
#define WS_STRING_VALUE(S) { WsCountOf(S) - 1, S }
// Utilities macro
//
// A macro to initialize a WS_STRING structure to a zero-length string.
//
#define WS_STRING_EMPTY { 0, NULL }
// Utilities macro
//
// Returns the number of elements of an array.
//
#define WsCountOf(arrayValue) RTL_NUMBER_OF(arrayValue)
// Utilities macro
//
// Returns the offset, in bytes, of a field within a contained structure, given the name
// of the structure and the name of the field.
//
#define WsOffsetOf(type, field) FIELD_OFFSET(type, field)
// FUNCTION DEFINITIONS
// XML Canonicalization function
//
// Starts canonicalization on the specified XML reader.
//
HRESULT WINAPI WsStartReaderCanonicalization(
__in WS_XML_READER* reader,
__in WS_WRITE_CALLBACK writeCallback,
__in void* writeCallbackState,
__in_ecount_opt(propertyCount) const WS_XML_CANONICALIZATION_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Canonicalization function
//
// Stops XML canonicalization started by the preceding WsStartReaderCanonicalization call.
//
HRESULT WINAPI WsEndReaderCanonicalization(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Canonicalization function
//
// Starts canonicalization on the specified XML writer.
//
HRESULT WINAPI WsStartWriterCanonicalization(
__in WS_XML_WRITER* writer,
__in WS_WRITE_CALLBACK writeCallback,
__in void* writeCallbackState,
__in_ecount_opt(propertyCount) const WS_XML_CANONICALIZATION_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Canonicalization function
//
// Stops XML canonicalization started by the preceding WsStartWriterCanonicalization call.
//
HRESULT WINAPI WsEndWriterCanonicalization(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Creates an XML Buffer which can be used to process xml data in-memory. It can be
// navigated through, written to, and read from.
//
HRESULT WINAPI WsCreateXmlBuffer(
__in WS_HEAP* heap,
__in_ecount_opt(propertyCount) const WS_XML_BUFFER_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_XML_BUFFER** buffer,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Removes the node at the specified position from the xml buffer. If positioned
// on an element it will remove the element including all of its children and its
// corresponding end element, otherwise it will remove a single node.
//
// The use of any API with a WS_XML_READER or WS_XML_WRITER that
// currently depends on this position or a child of this position will fail. The
// WS_XML_READER or WS_XML_WRITER must be repositioned
// before using further.
//
// It will return WS_E_INVALID_OPERATION if the node is positioned on an end
// element or the root of the document.
//
// Calling WsSetReaderPosition or WsSetWriterPosition after calling WsRemoveNode will fail.
//
HRESULT WINAPI WsRemoveNode(
__in const WS_XML_NODE_POSITION* nodePosition,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Creates an instance of a WS_XML_READER. Use WsSetInput or WsSetInputToBuffer
// to choose the encoding of the reader and to indicate the source of the input.
//
HRESULT WINAPI WsCreateReader(
__in_ecount_opt(propertyCount) const WS_XML_READER_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_XML_READER** reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Sets the encoding and input sources for the reader.
//
HRESULT WINAPI WsSetInput(
__in WS_XML_READER* reader,
__in_opt const WS_XML_READER_ENCODING* encoding,
__in_opt const WS_XML_READER_INPUT* input,
__in_ecount_opt(propertyCount) const WS_XML_READER_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Sets the reader to use a specified xml buffer as the input source.
//
HRESULT WINAPI WsSetInputToBuffer(
__in WS_XML_READER* reader,
__in WS_XML_BUFFER* buffer,
__in_ecount_opt(propertyCount) const WS_XML_READER_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Releases the memory associated with the WS_XML_READER object.
//
void WINAPI WsFreeReader(__in WS_XML_READER* reader);
// XML Reader function
// Returns a property of the specified xml reader.
HRESULT WINAPI WsGetReaderProperty(
__in WS_XML_READER* reader,
__in WS_XML_READER_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Returns the (WS_XML_NODE) node that the (WS_XML_READER) reader is currently positioned on.
//
HRESULT WINAPI WsGetReaderNode(
__in WS_XML_READER* xmlReader,
__deref_out const WS_XML_NODE** node,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Ensures that the reader has at least a specified amount of data available to it for reading.
//
HRESULT WINAPI WsFillReader(
__in WS_XML_READER* reader,
__in ULONG minSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Advances the reader past a start element skipping any whitespace in front of it.
//
HRESULT WINAPI WsReadStartElement(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Advances the reader to the next start element skipping whitespace and comments if necessary. Optionally,
// it may also verify the localName and namespace of the element.
//
HRESULT WINAPI WsReadToStartElement(
__in WS_XML_READER* reader,
__in_opt const WS_XML_STRING* localName,
__in_opt const WS_XML_STRING* ns,
__out_opt BOOL* found,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Moves the reader to the specified attribute so that its content may be read using ReadValue, ReadChars, or ReadBytes.
//
HRESULT WINAPI WsReadStartAttribute(
__in WS_XML_READER* reader,
__in ULONG attributeIndex,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Moves the reader back to the element node containing the attribute that was read.
//
HRESULT WINAPI WsReadEndAttribute(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Advances the reader to the next (WS_XML_NODE) node in the input stream.
//
HRESULT WINAPI WsReadNode(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Advances the reader in the input stream. If the current node is an element,
// all of the children of that element are skipped, and the reader is positioned
// on the node following its end element. Otherwise, the reader is positioned
// on the next node in the same manner as WsReadNode.
//
HRESULT WINAPI WsSkipNode(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Checks that the current (WS_XML_NODE) node of reader is an end element,
// and advances the reader to the next (WS_XML_NODE) node.
//
HRESULT WINAPI WsReadEndElement(
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Searches the attributes of the current element for an attribute with the
// specified name and namespace and returns its index which may be passed
// to WsReadStartAttribute.
//
HRESULT WINAPI WsFindAttribute(
__in WS_XML_READER* reader,
__in const WS_XML_STRING* localName,
__in const WS_XML_STRING* ns,
__in BOOL required,
__out ULONG* attributeIndex,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads text from the reader and parses it according to the specified value type.
//
HRESULT WINAPI WsReadValue(
__in WS_XML_READER* reader,
__in WS_VALUE_TYPE valueType,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads a specified number of text characters from the reader.
//
HRESULT WINAPI WsReadChars(
__in WS_XML_READER* reader,
__out_ecount_part(maxCharCount, *actualCharCount) WCHAR* chars,
__in ULONG maxCharCount,
__out ULONG* actualCharCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads a specified number of text characters from the reader and returns them encoded in UTF-8.
//
HRESULT WINAPI WsReadCharsUtf8(
__in WS_XML_READER* reader,
__out_ecount_part(maxByteCount, *actualByteCount) BYTE* bytes,
__in ULONG maxByteCount,
__out ULONG* actualByteCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads text from the reader and decodes the characters as bytes according to the base64 specification.
//
HRESULT WINAPI WsReadBytes(
__in WS_XML_READER* reader,
__out_bcount_part(maxByteCount, *actualByteCount) void* bytes,
__in ULONG maxByteCount,
__out ULONG* actualByteCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads a series of elements from the reader and interprets their
// content according to the specified value type.
//
HRESULT WINAPI WsReadArray(
__in WS_XML_READER* reader,
__in const WS_XML_STRING* localName,
__in const WS_XML_STRING* ns,
__in WS_VALUE_TYPE valueType,
__out_bcount_opt(arraySize) void* array,
__in ULONG arraySize,
__in ULONG itemOffset,
__in ULONG itemCount,
__out ULONG* actualItemCount,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Returns the current position of the reader. This can only be used on a reader
// that is set to an XmlBuffer.
//
HRESULT WINAPI WsGetReaderPosition(
__in WS_XML_READER* reader,
__out WS_XML_NODE_POSITION* nodePosition,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Sets the current position of the reader. The position must have been obtained by a call to
// WsGetReaderPosition or WsGetWriterPosition.
//
HRESULT WINAPI WsSetReaderPosition(
__in WS_XML_READER* reader,
__in const WS_XML_NODE_POSITION* nodePosition,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Moves the current position of the reader as specified by the moveTo parameter.
//
HRESULT WINAPI WsMoveReader(
__in WS_XML_READER* reader,
__in WS_MOVE_TO moveTo,
__out_opt BOOL* found,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Creates an instance of a WS_XML_WRITER. Use WsSetOutput or WsSetOutputToBuffer
// to choose the encoding of the writer and to indicate where to direct the output.
//
HRESULT WINAPI WsCreateWriter(
__in_ecount_opt(propertyCount) const WS_XML_WRITER_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_XML_WRITER** writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Releases the memory associated with the WS_XML_WRITER object.
//
void WINAPI WsFreeWriter(__in WS_XML_WRITER* writer);
// XML Writer function
//
// Sets the encoding and output callbacks for the writer. The callbacks are used to
// provides buffers to the writer and to perform asynchronous i/o.
//
HRESULT WINAPI WsSetOutput(
__in WS_XML_WRITER* writer,
__in_opt const WS_XML_WRITER_ENCODING* encoding,
__in_opt const WS_XML_WRITER_OUTPUT* output,
__in_ecount_opt(propertyCount) const WS_XML_WRITER_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Sets the writer to emit xml data at the end of the specified buffer.
//
HRESULT WINAPI WsSetOutputToBuffer(
__in WS_XML_WRITER* writer,
__in WS_XML_BUFFER* buffer,
__in_ecount_opt(propertyCount) const WS_XML_WRITER_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt WS_ERROR* error);
// XML Writer function
// Returns a property of the specified xml writer.
HRESULT WINAPI WsGetWriterProperty(
__in WS_XML_WRITER* writer,
__in WS_XML_WRITER_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Instructs the writer to invoke the (WS_WRITE_CALLBACK) callback
// specified in WS_XML_WRITER_STREAM_OUTPUT if sufficient data has been buffered.
//
HRESULT WINAPI WsFlushWriter(
__in WS_XML_WRITER* writer,
__in ULONG minSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes a start element to the writer.
//
HRESULT WINAPI WsWriteStartElement(
__in WS_XML_WRITER* writer,
__in_opt const WS_XML_STRING* prefix,
__in const WS_XML_STRING* localName,
__in const WS_XML_STRING* ns,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Forces the writer to commit the current element and prevent further attributes
// from being written to the element.
//
HRESULT WINAPI WsWriteEndStartElement(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes an xmlns attribute to the current element.
//
HRESULT WINAPI WsWriteXmlnsAttribute(
__in WS_XML_WRITER* writer,
__in_opt const WS_XML_STRING* prefix,
__in const WS_XML_STRING* ns,
__in BOOL singleQuote,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Starts writing an attribute to the current element.
//
HRESULT WINAPI WsWriteStartAttribute(
__in WS_XML_WRITER* writer,
__in_opt const WS_XML_STRING* prefix,
__in const WS_XML_STRING* localName,
__in const WS_XML_STRING* ns,
__in BOOL singleQuote,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Finishes writing an attribute to the current element.
//
HRESULT WINAPI WsWriteEndAttribute(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes a primitive value to the writer.
//
HRESULT WINAPI WsWriteValue(
__in WS_XML_WRITER* writer,
__in WS_VALUE_TYPE valueType,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Writes a WS_XML_BUFFER to a writer.
//
HRESULT WINAPI WsWriteXmlBuffer(
__in WS_XML_WRITER* writer,
__in WS_XML_BUFFER* xmlBuffer,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Reads the current node from a reader into a WS_XML_BUFFER.
//
HRESULT WINAPI WsReadXmlBuffer(
__in WS_XML_READER* reader,
__in WS_HEAP* heap,
__deref_out WS_XML_BUFFER** xmlBuffer,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Uses a writer to convert a WS_XML_BUFFER to an encoded set of bytes.
//
HRESULT WINAPI WsWriteXmlBufferToBytes(
__in WS_XML_WRITER* writer,
__in WS_XML_BUFFER* xmlBuffer,
__in_opt const WS_XML_WRITER_ENCODING* encoding,
__in_ecount_opt(propertyCount) const WS_XML_WRITER_PROPERTY* properties,
__in ULONG propertyCount,
__in WS_HEAP* heap,
__deref_out_bcount(*byteCount) void** bytes,
__out ULONG* byteCount,
__in_opt WS_ERROR* error);
// XML Buffer function
//
// Uses a reader to convert a set of encoded bytes to a WS_XML_BUFFER.
//
HRESULT WINAPI WsReadXmlBufferFromBytes(
__in WS_XML_READER* reader,
__in_opt const WS_XML_READER_ENCODING* encoding,
__in_ecount_opt(propertyCount) const WS_XML_READER_PROPERTY* properties,
__in ULONG propertyCount,
__in_bcount(byteCount) const void* bytes,
__in ULONG byteCount,
__in WS_HEAP* heap,
__deref_out WS_XML_BUFFER** xmlBuffer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes a series of elements to the writer.
//
HRESULT WINAPI WsWriteArray(
__in WS_XML_WRITER* writer,
__in const WS_XML_STRING* localName,
__in const WS_XML_STRING* ns,
__in WS_VALUE_TYPE valueType,
__in_bcount_opt(arraySize) const void* array,
__in ULONG arraySize,
__in ULONG itemOffset,
__in ULONG itemCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes an xml qualified name to the writer.
//
HRESULT WINAPI WsWriteQualifiedName(
__in WS_XML_WRITER* writer,
__in_opt const WS_XML_STRING* prefix,
__in const WS_XML_STRING* localName,
__in_opt const WS_XML_STRING* ns,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes a series of characters to an element or attribute.
//
HRESULT WINAPI WsWriteChars(
__in WS_XML_WRITER* writer,
__in_ecount(charCount) const WCHAR* chars,
__in ULONG charCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes a series of characters encoded as UTF-8 to an element or attribute.
//
HRESULT WINAPI WsWriteCharsUtf8(
__in WS_XML_WRITER* writer,
__in_ecount(byteCount) const BYTE* bytes,
__in ULONG byteCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes bytes to the writer in a format optimized for the encoding. When writing
// in a text encoding, it will emit the bytes encoded in base64. When writing to
// a binary format, it will emit the bytes directly.
//
HRESULT WINAPI WsWriteBytes(
__in WS_XML_WRITER* writer,
__in_bcount(byteCount) const void* bytes,
__in ULONG byteCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Sets up a callback to be invoked to write bytes within an element. In some encodings this can
// be more efficient by eliminating a copy of the data.
//
HRESULT WINAPI WsPushBytes(
__in WS_XML_WRITER* writer,
__in WS_PUSH_BYTES_CALLBACK callback,
__in_opt void* callbackState,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Sets up a callback to be invoked to obtain the bytes to be written within an element.
// In some encodings this can be more efficient by eliminating a copy of the data.
//
HRESULT WINAPI WsPullBytes(
__in WS_XML_WRITER* writer,
__in WS_PULL_BYTES_CALLBACK callback,
__in_opt void* callbackState,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes an end element to the writer.
//
HRESULT WINAPI WsWriteEndElement(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes the specified text the XML writer.
//
HRESULT WINAPI WsWriteText(
__in WS_XML_WRITER* writer,
__in const WS_XML_TEXT* text,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Starts a CDATA section in the writer.
//
HRESULT WINAPI WsWriteStartCData(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Ends a CDATA section in the writer.
//
HRESULT WINAPI WsWriteEndCData(
__in WS_XML_WRITER* writer,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Writes the specified node to the XML Writer.
//
HRESULT WINAPI WsWriteNode(
__in WS_XML_WRITER* writer,
__in const WS_XML_NODE* node,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Returns a prefix to which the namespace is bound.
//
HRESULT WINAPI WsGetPrefixFromNamespace(
__in WS_XML_WRITER* writer,
__in const WS_XML_STRING* ns,
__in BOOL required,
__deref_out const WS_XML_STRING** prefix,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Returns the current position of the writer. This can only be used on a
// writer that is set to an XmlBuffer. When writing to a buffer, the position
// represents the xml node before which new data will be placed.
//
HRESULT WINAPI WsGetWriterPosition(
__in WS_XML_WRITER* writer,
__out WS_XML_NODE_POSITION* nodePosition,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Sets the current position of the writer. The position must have been obtained by a
// call to WsGetReaderPosition or WsGetWriterPosition.
//
HRESULT WINAPI WsSetWriterPosition(
__in WS_XML_WRITER* writer,
__in const WS_XML_NODE_POSITION* nodePosition,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Moves the current position of the writer as specified by the moveTo parameter.
//
HRESULT WINAPI WsMoveWriter(
__in WS_XML_WRITER* writer,
__in WS_MOVE_TO moveTo,
__out_opt BOOL* found,
__in_opt WS_ERROR* error);
// XML Node function
//
// Removes leading and trailing whitespace from a sequence of characters.
//
HRESULT WINAPI WsTrimXmlWhitespace(
__in_ecount(charCount) WCHAR* chars,
__in ULONG charCount,
__deref_out_ecount(*trimmedCount) WCHAR** trimmedChars,
__out ULONG* trimmedCount,
__in_opt WS_ERROR* error);
// XML Node function
//
// Verifies whether the input string is a valid XML NCName.
//
HRESULT WINAPI WsVerifyXmlNCName(
__in_ecount(ncNameCharCount) const WCHAR* ncNameChars,
__in ULONG ncNameCharCount,
__in_opt WS_ERROR* error);
// XML Node function
//
// Compares two WS_XML_STRING's for equality by performing an ordinal comparison
// of the character values.
//
HRESULT WINAPI WsXmlStringEquals(
__in const WS_XML_STRING* string1,
__in const WS_XML_STRING* string2,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Returns the namespace to which the prefix is bound.
//
HRESULT WINAPI WsGetNamespaceFromPrefix(
__in WS_XML_READER* reader,
__in const WS_XML_STRING* prefix,
__in BOOL required,
__deref_out const WS_XML_STRING** ns,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Reads a qualified name and separates it into its prefix, localName
// and namespace based on the current namespace scope of the XML_READER.
// If the ns parameter is specified, then the namespace that the prefix
// is bound to will be returned, or WS_E_INVALID_FORMAT
// will be returned. The strings are placed in the specified heap.
//
HRESULT WINAPI WsReadQualifiedName(
__in WS_XML_READER* reader,
__in WS_HEAP* heap,
__out_opt WS_XML_STRING* prefix,
__out WS_XML_STRING* localName,
__out_opt WS_XML_STRING* ns,
__in_opt WS_ERROR* error);
// XML Reader function
//
// Finds the nearest xml attribute in scope with the specified localName and returns its value.
// The returned value is placed on the specified heap.
//
HRESULT WINAPI WsGetXmlAttribute(
__in WS_XML_READER* reader,
__in const WS_XML_STRING* localName,
__in WS_HEAP* heap,
__deref_out_ecount_opt(*valueCharCount) WCHAR** valueChars,
__out ULONG* valueCharCount,
__in_opt WS_ERROR* error);
// XML Writer function
//
// Copies the current node from the specified reader to the specified writer.
//
HRESULT WINAPI WsCopyNode(
__in WS_XML_WRITER* writer,
__in WS_XML_READER* reader,
__in_opt WS_ERROR* error);
// Async Model function
//
// WsAsyncExecute is a helper that can be used to implement an asynchronous operation.
//
HRESULT WINAPI WsAsyncExecute(
__in WS_ASYNC_STATE* asyncState,
__in WS_ASYNC_FUNCTION operation,
__in WS_CALLBACK_MODEL callbackModel,
__in void* callbackState,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Create a channel used to initiate a message exchange to some endpoint.
//
HRESULT WINAPI WsCreateChannel(
__in WS_CHANNEL_TYPE channelType,
__in WS_CHANNEL_BINDING channelBinding,
__in_ecount_opt(propertyCount) const WS_CHANNEL_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt const WS_SECURITY_DESCRIPTION* securityDescription,
__deref_out WS_CHANNEL** channel,
__in_opt WS_ERROR* error);
// Channel function
//
// Open a channel to an endpoint.
//
HRESULT WINAPI WsOpenChannel(
__in WS_CHANNEL* channel,
__in const WS_ENDPOINT_ADDRESS* endpointAddress,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Send a message on a channel using serialization to write the body element.
//
HRESULT WINAPI WsSendMessage(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in const WS_MESSAGE_DESCRIPTION* messageDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(bodyValueSize) const void* bodyValue,
__in ULONG bodyValueSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Receive a message and deserialize the body of the message as a value.
//
HRESULT WINAPI WsReceiveMessage(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_ecount(messageDescriptionCount) const WS_MESSAGE_DESCRIPTION** messageDescriptions,
__in ULONG messageDescriptionCount,
__in WS_RECEIVE_OPTION receiveOption,
__in WS_READ_OPTION readBodyOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__out_opt ULONG* index,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Used to send a request message and receive a correlated reply message.
//
HRESULT WINAPI WsRequestReply(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* requestMessage,
__in const WS_MESSAGE_DESCRIPTION* requestMessageDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(requestBodyValueSize) const void* requestBodyValue,
__in ULONG requestBodyValueSize,
__in WS_MESSAGE* replyMessage,
__in const WS_MESSAGE_DESCRIPTION* replyMessageDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount_opt(valueSize) void* value,
__in ULONG valueSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Sends a message which is a reply to a received message.
//
HRESULT WINAPI WsSendReplyMessage(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* replyMessage,
__in const WS_MESSAGE_DESCRIPTION* replyMessageDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(replyBodyValueSize) const void* replyBodyValue,
__in ULONG replyBodyValueSize,
__in WS_MESSAGE* requestMessage,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Sends a fault message given a WS_ERROR object.
//
HRESULT WINAPI WsSendFaultMessageForError(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* replyMessage,
__in WS_ERROR* faultError,
__in HRESULT faultErrorCode,
__in WS_FAULT_DISCLOSURE faultDisclosure,
__in WS_MESSAGE* requestMessage,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Retrieve a property of the channel.
//
HRESULT WINAPI WsGetChannelProperty(
__in WS_CHANNEL* channel,
__in WS_CHANNEL_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Channel function
//
// Set a property of the channel.
//
HRESULT WINAPI WsSetChannelProperty(
__in WS_CHANNEL* channel,
__in WS_CHANNEL_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Channel function
//
// Write out all the headers of the message to the channel, and prepare to write the body elements.
//
HRESULT WINAPI WsWriteMessageStart(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Write the closing elements of the message to the channel.
//
HRESULT WINAPI WsWriteMessageEnd(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Read the headers of the next message from the channel, and prepare to read the body elements.
//
HRESULT WINAPI WsReadMessageStart(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Read the closing elements of a message from a channel.
//
HRESULT WINAPI WsReadMessageEnd(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Close a channel.
//
HRESULT WINAPI WsCloseChannel(
__in WS_CHANNEL* channel,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Channel function
//
// Abort all pending IO for a channel.
//
HRESULT WINAPI WsAbortChannel(
__in WS_CHANNEL* channel,
__in_opt WS_ERROR* error);
// Channel function
//
// Free a channel.
//
void WINAPI WsFreeChannel(__in WS_CHANNEL* channel);
// Channel function
//
// Reset a channel so it can be reused.
//
HRESULT WINAPI WsResetChannel(
__in WS_CHANNEL* channel,
__in_opt WS_ERROR* error);
// Channel function
//
// Used to skip the remainder of a message for a channel.
//
HRESULT WINAPI WsAbandonMessage(
__in WS_CHANNEL* channel,
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Channel function
//
// Used to signal the end of messages for a session channel.
//
HRESULT WINAPI WsShutdownSessionChannel(
__in WS_CHANNEL* channel,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Context function
//
// Returns a property of the specified operation context. It should be noted that the
// validity of these property is limited to the lifetime of the operation context itself.
// See Operation Context Lifetime and Threading for details around accessing
// these properties and the lifetime of the operation context.
//
HRESULT WINAPI WsGetOperationContextProperty(
__in const WS_OPERATION_CONTEXT* context,
__in const WS_OPERATION_CONTEXT_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Dictionaries function
HRESULT WINAPI WsGetDictionary(
__in WS_ENCODING encoding,
__deref_out_opt WS_XML_DICTIONARY** dictionary,
__in_opt WS_ERROR* error);
// Message function
//
// Reads an extension of the WS_ENDPOINT_ADDRESS.
//
HRESULT WINAPI WsReadEndpointAddressExtension(
__in WS_XML_READER* reader,
__in WS_ENDPOINT_ADDRESS* endpointAddress,
__in WS_ENDPOINT_ADDRESS_EXTENSION_TYPE extensionType,
__in WS_READ_OPTION readOption,
__in WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Errors function
//
// Creates an error object that can passed to functions to in order to
// record rich error information.
//
HRESULT WINAPI WsCreateError(
__in_ecount_opt(propertyCount) const WS_ERROR_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_ERROR** error);
// Errors function
//
// Add an error string to the error object.
//
HRESULT WINAPI WsAddErrorString(
__in WS_ERROR* error,
__in const WS_STRING* string);
// Errors function
//
// Retrieves an error string from an error object.
//
HRESULT WINAPI WsGetErrorString(
__in WS_ERROR* error,
__in ULONG index,
__out WS_STRING* string);
// Errors function
//
// Copies the error object from source to destination.
//
HRESULT WINAPI WsCopyError(
__in WS_ERROR* source,
__in WS_ERROR* destination);
// Errors function
//
// Retrieve a property of the error.
//
HRESULT WINAPI WsGetErrorProperty(
__in WS_ERROR* error,
__in WS_ERROR_PROPERTY_ID id,
__out_bcount(bufferSize) void* buffer,
__in ULONG bufferSize);
// Errors function
//
// Set a property of the error.
//
HRESULT WINAPI WsSetErrorProperty(
__in WS_ERROR* error,
__in WS_ERROR_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize);
// Errors function
//
// Frees the contents of the error object, but does not free the error object itself.
//
HRESULT WINAPI WsResetError(__in WS_ERROR* error);
// Errors function
//
// Free the error object created by WsCreateError.
//
void WINAPI WsFreeError(__in WS_ERROR* error);
// Faults function
//
// Retrieve a fault-related property of the error object.
//
HRESULT WINAPI WsGetFaultErrorProperty(
__in WS_ERROR* error,
__in WS_FAULT_ERROR_PROPERTY_ID id,
__out_bcount(bufferSize) void* buffer,
__in ULONG bufferSize);
// Faults function
//
// Set a fault-related property of the error object.
//
HRESULT WINAPI WsSetFaultErrorProperty(
__in WS_ERROR* error,
__in WS_FAULT_ERROR_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize);
// Faults function
//
// Construct a WS_FAULT given an error object.
//
HRESULT WINAPI WsCreateFaultFromError(
__in WS_ERROR* error,
__in HRESULT faultErrorCode,
__in WS_FAULT_DISCLOSURE faultDisclosure,
__in WS_HEAP* heap,
__out WS_FAULT* fault);
// Faults function
//
// Write the fault detail stored in a WS_ERROR object.
//
HRESULT WINAPI WsSetFaultErrorDetail(
__in WS_ERROR* error,
__in const WS_FAULT_DETAIL_DESCRIPTION* faultDetailDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(valueSize) const void* value,
__in ULONG valueSize);
// Faults function
//
// Read the fault detail stored in a WS_ERROR object.
//
HRESULT WINAPI WsGetFaultErrorDetail(
__in WS_ERROR* error,
__in const WS_FAULT_DETAIL_DESCRIPTION* faultDetailDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize);
// Heap function
//
// Create a heap object.
//
HRESULT WINAPI WsCreateHeap(
__in SIZE_T maxSize,
__in SIZE_T trimSize,
__in_opt const WS_HEAP_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_HEAP** heap,
__in_opt WS_ERROR* error);
// Heap function
// Allocate a chunk of data from the heap.
HRESULT WINAPI WsAlloc(
__in WS_HEAP* heap,
__in SIZE_T size,
__deref_out_bcount(size) void** ptr,
__in_opt WS_ERROR* error);
// Heap function
// Returns a property of the specified heap.
HRESULT WINAPI WsGetHeapProperty(
__in WS_HEAP* heap,
__in WS_HEAP_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Heap function
//
// This resets the heap to have no allocations. All allocations made on the heap
// using WsAlloc are no longer valid. However, this call does not actually
// free the heap object.
//
HRESULT WINAPI WsResetHeap(
__in WS_HEAP* heap,
__in_opt WS_ERROR* error);
// Heap function
//
// This frees the heap object, and the memory associated with any allocations
// made on it using WsAlloc.
//
void WINAPI WsFreeHeap(__in WS_HEAP* heap);
// Listener function
//
// Create a listener object.
//
HRESULT WINAPI WsCreateListener(
__in WS_CHANNEL_TYPE channelType,
__in WS_CHANNEL_BINDING channelBinding,
__in_ecount_opt(propertyCount) const WS_LISTENER_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt const WS_SECURITY_DESCRIPTION* securityDescription,
__deref_out WS_LISTENER** listener,
__in_opt WS_ERROR* error);
// Listener function
//
// Start listening.
//
HRESULT WINAPI WsOpenListener(
__in WS_LISTENER* listener,
__in const WS_STRING* url,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener function
//
// Accepts the next incoming message exchange from a listener.
//
HRESULT WINAPI WsAcceptChannel(
__in WS_LISTENER* listener,
__in WS_CHANNEL* channel,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener function
//
// Stop listening.
//
HRESULT WINAPI WsCloseListener(
__in WS_LISTENER* listener,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Listener function
//
// Cancel any pending IO for the listener.
//
HRESULT WINAPI WsAbortListener(
__in WS_LISTENER* listener,
__in_opt WS_ERROR* error);
// Listener function
//
// Reset a listener so it can be reused.
//
HRESULT WINAPI WsResetListener(
__in WS_LISTENER* listener,
__in_opt WS_ERROR* error);
// Listener function
//
// Free the listener.
//
void WINAPI WsFreeListener(__in WS_LISTENER* listener);
// Listener function
//
// Retrieve a property of the listener.
//
HRESULT WINAPI WsGetListenerProperty(
__in WS_LISTENER* listener,
__in WS_LISTENER_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Listener function
//
// Set a property of the listener.
//
HRESULT WINAPI WsSetListenerProperty(
__in WS_LISTENER* listener,
__in WS_LISTENER_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Listener function
//
// Create a channel that is used to accept incoming message exchanges from a listener.
//
HRESULT WINAPI WsCreateChannelForListener(
__in WS_LISTENER* listener,
__in_ecount_opt(propertyCount) const WS_CHANNEL_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_CHANNEL** channel,
__in_opt WS_ERROR* error);
// Message function
//
// Creates a message object.
//
HRESULT WINAPI WsCreateMessage(
__in WS_ENVELOPE_VERSION envelopeVersion,
__in WS_ADDRESSING_VERSION addressingVersion,
__in_ecount_opt(propertyCount) const WS_MESSAGE_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_MESSAGE** message,
__in_opt WS_ERROR* error);
// Message function
//
// Creates a message that is appropriate for use with a particular channel.
//
HRESULT WINAPI WsCreateMessageForChannel(
__in WS_CHANNEL* channel,
__in_ecount_opt(propertyCount) const WS_MESSAGE_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_MESSAGE** message,
__in_opt WS_ERROR* error);
// Message function
//
// Sets up the initial set of headers for the message in preparation for
// sending/writing the message.
//
HRESULT WINAPI WsInitializeMessage(
__in WS_MESSAGE* message,
__in WS_MESSAGE_INITIALIZATION initialization,
__in_opt WS_MESSAGE* sourceMessage,
__in_opt WS_ERROR* error);
// Message function
//
// Prepare the message for reuse.
//
HRESULT WINAPI WsResetMessage(
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Message function
//
// Releases the memory associated with the message object.
//
void WINAPI WsFreeMessage(__in WS_MESSAGE* message);
// Message function
//
// Returns the WS_HEADER_ATTRIBUTES for the header element the reader is positioned on. The
// envelope version of the message is used to determine which attributes to return.
//
HRESULT WINAPI WsGetHeaderAttributes(
__in WS_MESSAGE* message,
__in WS_XML_READER* reader,
__out ULONG* headerAttributes,
__in_opt WS_ERROR* error);
// Message function
//
// Finds a particular standard header in the message and deserializes it.
//
HRESULT WINAPI WsGetHeader(
__in WS_MESSAGE* message,
__in WS_HEADER_TYPE headerType,
__in WS_TYPE valueType,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Finds an application-defined header of the message and deserializes it.
//
HRESULT WINAPI WsGetCustomHeader(
__in WS_MESSAGE* message,
__in const WS_ELEMENT_DESCRIPTION* customHeaderDescription,
__in WS_REPEATING_HEADER_OPTION repeatingOption,
__in ULONG headerIndex,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__out_opt ULONG* headerAttributes,
__in_opt WS_ERROR* error);
// Message function
//
// Removes all instances of the specified standard header from the message.
//
HRESULT WINAPI WsRemoveHeader(
__in WS_MESSAGE* message,
__in WS_HEADER_TYPE headerType,
__in_opt WS_ERROR* error);
// Message function
//
// Adds or replaces the specified standard header in the message.
//
HRESULT WINAPI WsSetHeader(
__in WS_MESSAGE* message,
__in WS_HEADER_TYPE headerType,
__in WS_TYPE valueType,
__in WS_WRITE_OPTION writeOption,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Removes all instances of the application defined header from the message.
//
HRESULT WINAPI WsRemoveCustomHeader(
__in WS_MESSAGE* message,
__in const WS_XML_STRING* headerName,
__in const WS_XML_STRING* headerNs,
__in_opt WS_ERROR* error);
// Message function
//
// Adds the specified application defined header to the message.
//
HRESULT WINAPI WsAddCustomHeader(
__in WS_MESSAGE* message,
__in const WS_ELEMENT_DESCRIPTION* headerDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in ULONG headerAttributes,
__in_opt WS_ERROR* error);
// Message function
//
// Adds a specified mapped header to the message.
//
HRESULT WINAPI WsAddMappedHeader(
__in WS_MESSAGE* message,
__in const WS_XML_STRING* headerName,
__in WS_TYPE valueType,
__in WS_WRITE_OPTION writeOption,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Removes all instances of a mapped header from the message.
//
HRESULT WINAPI WsRemoveMappedHeader(
__in WS_MESSAGE* message,
__in const WS_XML_STRING* headerName,
__in_opt WS_ERROR* error);
// Message function
//
// Finds a mapped header in the message and deserializes it.
//
HRESULT WINAPI WsGetMappedHeader(
__in WS_MESSAGE* message,
__in const WS_XML_STRING* headerName,
__in WS_REPEATING_HEADER_OPTION repeatingOption,
__in ULONG headerIndex,
__in WS_TYPE valueType,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Serialize a value in the body of the message.
//
HRESULT WINAPI WsWriteBody(
__in WS_MESSAGE* message,
__in const WS_ELEMENT_DESCRIPTION* bodyDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Deserialize a value from the body of the message.
//
HRESULT WINAPI WsReadBody(
__in WS_MESSAGE* message,
__in const WS_ELEMENT_DESCRIPTION* bodyDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Write out all the headers of the message and prepare to write the body elements.
//
HRESULT WINAPI WsWriteEnvelopeStart(
__in WS_MESSAGE* message,
__in WS_XML_WRITER* writer,
__in_opt WS_MESSAGE_DONE_CALLBACK doneCallback,
__in_opt void* doneCallbackState,
__in_opt WS_ERROR* error);
// Message function
//
// Write the closing elements of the message.
//
HRESULT WINAPI WsWriteEnvelopeEnd(
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Message function
//
// Read the headers of the message and prepare to read the body elements.
//
HRESULT WINAPI WsReadEnvelopeStart(
__in WS_MESSAGE* message,
__in WS_XML_READER* reader,
__in_opt WS_MESSAGE_DONE_CALLBACK doneCallback,
__in_opt void* doneCallbackState,
__in_opt WS_ERROR* error);
// Message function
//
// Read the closing elements of a message.
//
HRESULT WINAPI WsReadEnvelopeEnd(
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Message function
// Returns a property of the specified message.
HRESULT WINAPI WsGetMessageProperty(
__in WS_MESSAGE* message,
__in WS_MESSAGE_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Set a property of the message.
//
HRESULT WINAPI WsSetMessageProperty(
__in WS_MESSAGE* message,
__in WS_MESSAGE_PROPERTY_ID id,
__in_bcount(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Message function
//
// Addresses a message given an Endpoint Address.
//
HRESULT WINAPI WsAddressMessage(
__in WS_MESSAGE* message,
__in_opt const WS_ENDPOINT_ADDRESS* address,
__in_opt WS_ERROR* error);
// Message function
//
// Verifies that all headers that were specified to be required to be
// understood by the receiver were actually understood.
//
HRESULT WINAPI WsCheckMustUnderstandHeaders(
__in WS_MESSAGE* message,
__in_opt WS_ERROR* error);
// Message function
//
// Marks a header as one that was understood by the application.
//
HRESULT WINAPI WsMarkHeaderAsUnderstood(
__in WS_MESSAGE* message,
__in const WS_XML_NODE_POSITION* headerPosition,
__in_opt WS_ERROR* error);
// Message function
//
// Ensures that the message has at least a specified amount of body data available to it for reading.
//
HRESULT WINAPI WsFillBody(
__in WS_MESSAGE* message,
__in ULONG minSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Message function
//
// Flushes all accumulated body data that has been written for the message.
//
HRESULT WINAPI WsFlushBody(
__in WS_MESSAGE* message,
__in ULONG minSize,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Security Bindings function
//
// Get a security token from a security token service (STS) that acts as
// the token issuer in a (Federation) federation scenario.
// This function is used on the client side, and performs the WS-Trust
// based negotiation steps with the STS until the security token is
// obtained or the negotiation process fails.
//
HRESULT WINAPI WsRequestSecurityToken(
__in WS_CHANNEL* channel,
__in_ecount_opt(propertyCount) const WS_REQUEST_SECURITY_TOKEN_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_SECURITY_TOKEN** token,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Security Processing Results function
//
// Extract a field or a property from a security token. If the queried property does not use the 'heap' parameter, the returned
// data is owned by the security token and remains valid as long as the security token itself remains valid. Specifically, for
// security tokens extracted from a received message, the security token and fields extracted from it are valid only as long as
// the message is not reset or freed.
// If the 'heap' parameter is required by the property, then the returned data is stored on the heap, with its lifetime
// detached from the underlying token.
//
HRESULT WINAPI WsGetSecurityTokenProperty(
__in WS_SECURITY_TOKEN* securityToken,
__in WS_SECURITY_TOKEN_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_HEAP* heap,
__in_opt WS_ERROR* error);
// Security Bindings function
//
// Create a security token from its XML form.
//
HRESULT WINAPI WsCreateXmlSecurityToken(
__in_opt WS_XML_BUFFER* tokenXml,
__in_opt WS_SECURITY_KEY_HANDLE* tokenKey,
__in_ecount_opt(propertyCount) const WS_XML_SECURITY_TOKEN_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_SECURITY_TOKEN** token,
__in_opt WS_ERROR* error);
// Security Bindings function
//
// Free a security token.
//
void WINAPI WsFreeSecurityToken(__in WS_SECURITY_TOKEN* token);
// Security Context function
//
// Revokes a security context. Can only be called on the server side.
//
// This function can be used when the server knows that no more messages are
// coming and does not want to wait for the client or the context timeouts to
// trigger the reclaiming of resources, or when the server wants to engage in
// active context management.
//
HRESULT WINAPI WsRevokeSecurityContext(
__in WS_SECURITY_CONTEXT* securityContext,
__in_opt WS_ERROR* error);
// Security Context function
//
// Gets a property of the specified security context.
//
HRESULT WINAPI WsGetSecurityContextProperty(
__in WS_SECURITY_CONTEXT* securityContext,
__in WS_SECURITY_CONTEXT_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Read an element producing a value of the specified WS_TYPE.
//
HRESULT WINAPI WsReadElement(
__in WS_XML_READER* reader,
__in const WS_ELEMENT_DESCRIPTION* elementDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Read an attribute producing a value of the specified WS_TYPE.
//
HRESULT WINAPI WsReadAttribute(
__in WS_XML_READER* reader,
__in const WS_ATTRIBUTE_DESCRIPTION* attributeDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Read a value of a given WS_TYPE from XML according to the WS_TYPE_MAPPING.
//
HRESULT WINAPI WsReadType(
__in WS_XML_READER* reader,
__in WS_TYPE_MAPPING typeMapping,
__in WS_TYPE type,
__in_opt const void* typeDescription,
__in WS_READ_OPTION readOption,
__in_opt WS_HEAP* heap,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Write a typed value as an XML element.
//
HRESULT WINAPI WsWriteElement(
__in WS_XML_WRITER* writer,
__in const WS_ELEMENT_DESCRIPTION* elementDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Write a typed value as an XML attribute.
//
HRESULT WINAPI WsWriteAttribute(
__in WS_XML_WRITER* writer,
__in const WS_ATTRIBUTE_DESCRIPTION* attributeDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Serialization function
//
// Write a value of a given WS_TYPE to XML according to the WS_TYPE_MAPPING.
//
HRESULT WINAPI WsWriteType(
__in WS_XML_WRITER* writer,
__in WS_TYPE_MAPPING typeMapping,
__in WS_TYPE type,
__in_opt const void* typeDescription,
__in WS_WRITE_OPTION writeOption,
__in_bcount_opt(valueSize) const void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Call cancellation function
//
// A service operation can use this function to register for a cancel notification.
// It is only valid to call this API when the service operation is executing. The behavior
// for calling it after the completion of Service Operation is not supported.
//
// While this API is being called and the runtime has determined that the cancellation of the
// service operation is necessary, it can call the callback during the call to this API by the application.
//
// The caller should therefore assume that the runtime may call on the callback
// WS_OPERATION_CANCEL_CALLBACK as soon as the WsRegisterOperationForCancel is called.
//
HRESULT WINAPI WsRegisterOperationForCancel(
__in const WS_OPERATION_CONTEXT* context,
__in WS_OPERATION_CANCEL_CALLBACK cancelCallback,
__in_opt WS_OPERATION_FREE_STATE_CALLBACK freestateCallback,
__in_opt void* userState,
__in_opt WS_ERROR* error);
// Service Host function
//
// Retrieve a property of the service host.
//
HRESULT WINAPI WsGetServiceHostProperty(
__in WS_SERVICE_HOST* serviceHost,
__in const WS_SERVICE_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Service Host function
//
// Create a service host.
//
HRESULT WINAPI WsCreateServiceHost(
__in_ecount_opt(endpointCount) const WS_SERVICE_ENDPOINT** endpoints,
__in const USHORT endpointCount,
__in_ecount_opt(servicePropertyCount) const WS_SERVICE_PROPERTY* serviceProperties,
__in ULONG servicePropertyCount,
__deref_out WS_SERVICE_HOST** serviceHost,
__in_opt WS_ERROR* error);
// Service Host function
//
// Open a service host for communication. Starts the listeners on all the endpoints.
//
HRESULT WINAPI WsOpenServiceHost(
__in WS_SERVICE_HOST* serviceHost,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Host function
//
// Closes down a service host for communication.
//
// During WsCloseServiceHost all the listeners are closed such that no new
// channels are accepted from the client. Work on channels already accepted
// before WsCloseServiceHost closed the listeners, is allowed to complete.
// This has special implications for endpoints configured to run with session
// based channel binding. If a client has a session opened to the service, the
// close will not complete till the client closes the session with the service.
//
HRESULT WINAPI WsCloseServiceHost(
__in WS_SERVICE_HOST* serviceHost,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Host function
//
// Aborts the current operation on the service host.
//
HRESULT WINAPI WsAbortServiceHost(
__in WS_SERVICE_HOST* serviceHost,
__in_opt WS_ERROR* error);
// Service Host function
// Free's the service host.
void WINAPI WsFreeServiceHost(__in WS_SERVICE_HOST* serviceHost);
// Service Host function
//
// Resets service host so that it can be opened again.
//
// Rather the creating a new service host from scratch WsResetServiceHost
// provides a convenient way to reuse service host. Specifically in a scenario
// where a service host has to go through close and open on a regular basis,
// this allows for an efficient way for reusing the same service host. It resets
// the underlying channel and listeners for reuse.
//
HRESULT WINAPI WsResetServiceHost(
__in WS_SERVICE_HOST* serviceHost,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Retrieve a property of service proxy.
//
HRESULT WINAPI WsGetServiceProxyProperty(
__in WS_SERVICE_PROXY* serviceProxy,
__in const WS_PROXY_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Creates a service proxy.
//
HRESULT WINAPI WsCreateServiceProxy(
__in const WS_CHANNEL_TYPE channelType,
__in const WS_CHANNEL_BINDING channelBinding,
__in_opt const WS_SECURITY_DESCRIPTION* securityDescription,
__in_ecount_opt(propertyCount) const WS_PROXY_PROPERTY* properties,
__in const ULONG propertyCount,
__in_ecount_opt(channelPropertyCount) const WS_CHANNEL_PROPERTY* channelProperties,
__in const ULONG channelPropertyCount,
__deref_out WS_SERVICE_PROXY** serviceProxy,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Opens the service proxy to a service endpoint.
//
// Once the operation succeeds, application can now go ahead and make calls on the service proxy.
//
HRESULT WINAPI WsOpenServiceProxy(
__in WS_SERVICE_PROXY* serviceProxy,
__in const WS_ENDPOINT_ADDRESS* address,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Closes a service proxy for communication.
//
// Close performs the following tasks in given order
//
// .If a service operation call is pending on the service proxy, close will wait for each call to complete.
//
// .If the proxy was created with session based channel binding this will close the underlying channel.
//
// During this calls are accepted by the service proxy.
//
HRESULT WINAPI WsCloseServiceProxy(
__in WS_SERVICE_PROXY* serviceProxy,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Aborts the service proxy.
//
// Aborts cancel all I/O if any on the service proxy.
// WsAbortServiceProxy: During Open or WS_SERVICE_PROXY_STATE_OPENING state
// WsAbortServiceProxy can be used to abort the open operation. The service proxy will
// cancel all pending I/O and transition back to WS_SERVICE_PROXY_STATE_CREATED state.
// WsAbortServiceProxy: While making calls or WS_SERVICE_PROXY_STATE_OPEN state
// WsAbortServiceProxy will abort all the underlying channels. The service proxy is transitioned to
// to WS_SERVICE_PROXY_STATE_FAULTED. Once abort is initiated service proxy will
// not accept any new calls. The application can call WsCloseServiceProxy to close it.
// WsAbortServiceProxy: During Close or WS_SERVICE_PROXY_STATE_CLOSING state
// During close, all underlying channels are aborted. The service proxy is transitioned to the
// WS_SERVICE_PROXY_STATE_CLOSED state.
//
HRESULT WINAPI WsAbortServiceProxy(
__in WS_SERVICE_PROXY* serviceProxy,
__in_opt WS_ERROR* error);
// Service Proxy function
// Free's a service proxy.
void WINAPI WsFreeServiceProxy(__in WS_SERVICE_PROXY* serviceProxy);
// Service Proxy function
// Resets service proxy.
// WsResetServiceProxy provides a convenient way to reuse the service proxy.
// Once the proxy is (WS_SERVICE_PROXY_STATE) closed,
// the application can call WsResetServiceProxy to reuse it.
//
// Reusing the service proxy is helpful in scenarios where an application connects
// to the same service time and time again. The cost of initialization is only paid
// once during the initial creation of the service proxy.
//
HRESULT WINAPI WsResetServiceProxy(
__in WS_SERVICE_PROXY* serviceProxy,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Abandons a call identified by the callId on the given (Service Proxy) service proxy.
//
// An applications must be careful with the usage of this operation. Since the actual I/O specific
// to the call is not canceled. The service proxy will keep the resources for the abandoned call
// around to complete call.
//
// This consumption of resources can be aggravated if the application continues to abandon more
// and more calls. This aggravation usually results if the server is slow to respond back to the
// client. Mean while if the application continues to make more calls on the service proxy that
// can further aggravate the situation.
//
HRESULT WINAPI WsAbandonCall(
__in WS_SERVICE_PROXY* serviceProxy,
__in ULONG callId,
__in_opt WS_ERROR* error);
// Service Proxy function
//
// Using the passed in (WS_OPERATION_DESCRIPTION) operation parameter packs
// the arguments into a message and sends it over the channel.
//
// This function is internally used by proxy service operation. The application should
// never call it directly.
//
HRESULT WINAPI WsCall(
__in WS_SERVICE_PROXY* serviceProxy,
__in const WS_OPERATION_DESCRIPTION* operation,
__in_opt const void** arguments,
__in WS_HEAP* heap,
__in_ecount_opt(callPropertyCount) const WS_CALL_PROPERTY* callProperties,
__in const ULONG callPropertyCount,
__in_opt const WS_ASYNC_CONTEXT* asyncContext,
__in_opt WS_ERROR* error);
// Url function
// Decodes an URL into its component parts.
HRESULT WINAPI WsDecodeUrl(
__in const WS_STRING* url,
__in ULONG flags,
__in WS_HEAP* heap,
__deref_out WS_URL** outUrl,
__in_opt WS_ERROR* error);
// Url function
// Encodes an URL into a string given its component parts.
HRESULT WINAPI WsEncodeUrl(
__in const WS_URL* url,
__in ULONG flags,
__in WS_HEAP* heap,
__out WS_STRING* outUrl,
__in_opt WS_ERROR* error);
// Url function
//
// Produces an absolute URL given a URL reference (absolute or relative URL) and an absolute base URL.
//
HRESULT WINAPI WsCombineUrl(
__in const WS_STRING* baseUrl,
__in const WS_STRING* referenceUrl,
__in ULONG flags,
__in WS_HEAP* heap,
__out WS_STRING* resultUrl,
__in_opt WS_ERROR* error);
// Utilities function
//
// Converts a WS_DATETIME to a FILETIME.
//
HRESULT WINAPI WsDateTimeToFileTime(
__in const WS_DATETIME* dateTime,
__out FILETIME* fileTime,
__in_opt WS_ERROR* error);
// Utilities function
//
// Converts a FILETIME to a WS_DATETIME.
//
HRESULT WINAPI WsFileTimeToDateTime(
__in const FILETIME* fileTime,
__out WS_DATETIME* dateTime,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Create a metadata object which is used to collect and process metadata documents.
//
HRESULT WINAPI WsCreateMetadata(
__in_ecount_opt(propertyCount) const WS_METADATA_PROPERTY* properties,
__in ULONG propertyCount,
__deref_out WS_METADATA** metadata,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Read a metadata element and add it to the set of metadata
// documents stored in the metadata object.
//
HRESULT WINAPI WsReadMetadata(
__in WS_METADATA* metadata,
__in WS_XML_READER* reader,
__in const WS_STRING* url,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Free a metadata object.
//
void WINAPI WsFreeMetadata(__in WS_METADATA* metadata);
// Metadata Import function
//
// Reset a metadata object so it can be reused.
//
HRESULT WINAPI WsResetMetadata(
__in WS_METADATA* metadata,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Retrieve a property of the metadata object.
//
HRESULT WINAPI WsGetMetadataProperty(
__in WS_METADATA* metadata,
__in WS_METADATA_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Returns the address of a missing document that is referenced by the metadata object.
//
HRESULT WINAPI WsGetMissingMetadataDocumentAddress(
__in WS_METADATA* metadata,
__deref_out_opt WS_ENDPOINT_ADDRESS** address,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Returns the endpoints that were defined in the metadata documents
// that were added to the metadata object.
//
HRESULT WINAPI WsGetMetadataEndpoints(
__in WS_METADATA* metadata,
__out WS_METADATA_ENDPOINTS* endpoints,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// This function tests to see if a particular policy alternative is compatible
// with the specified policy constraint structures. If the alternative is compatible,
// then the "out" fields within the constraint structures are filled with information
// from the policy.
//
HRESULT WINAPI WsMatchPolicyAlternative(
__in WS_POLICY* policy,
__in ULONG alternativeIndex,
__in WS_POLICY_CONSTRAINTS* policyConstraints,
__in BOOL matchRequired,
__in WS_HEAP* heap,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Retrieve a property of the policy object.
//
HRESULT WINAPI WsGetPolicyProperty(
__in WS_POLICY* policy,
__in WS_POLICY_PROPERTY_ID id,
__out_bcount(valueSize) void* value,
__in ULONG valueSize,
__in_opt WS_ERROR* error);
// Metadata Import function
//
// Retrieve the number of alternatives available in the policy object.
//
HRESULT WINAPI WsGetPolicyAlternativeCount(
__in WS_POLICY* policy,
__out ULONG* count,
__in_opt WS_ERROR* error);
// Policy Support function
//
// Helper routine to create channel from policy templates.
//
HRESULT WINAPI WsCreateServiceProxyFromTemplate(
__in WS_CHANNEL_TYPE channelType,
__in_ecount_opt(propertyCount) const WS_PROXY_PROPERTY* properties,
__in const ULONG propertyCount,
__in WS_BINDING_TEMPLATE_TYPE templateType,
__in_bcount_opt(templateSize) void* templateValue,
__in ULONG templateSize,
__in const void* templateDescription,
__in ULONG templateDescriptionSize,
__deref_out WS_SERVICE_PROXY** serviceProxy,
__in_opt WS_ERROR* error);
// Policy Support function
//
// Helper routine to create channel from policy templates.
//
HRESULT WINAPI WsCreateServiceEndpointFromTemplate(
__in WS_CHANNEL_TYPE channelType,
__in const WS_SERVICE_ENDPOINT_PROPERTY* properties,
__in ULONG propertyCount,
__in_opt const WS_STRING* addressUrl,
__in const WS_SERVICE_CONTRACT* contract,
__in WS_SERVICE_SECURITY_CALLBACK authorizationCallback,
__in WS_HEAP* heap,
__in WS_BINDING_TEMPLATE_TYPE templateType,
__in_bcount_opt(templateSize) void* templateValue,
__in ULONG templateSize,
__in const void* templateDescription,
__in ULONG templateDescriptionSize,
__deref_out WS_SERVICE_ENDPOINT** serviceEndpoint,
__in_opt WS_ERROR* error);
// ERROR DEFINITIONS
#ifndef FACILITY_WEBSERVICES
#define FACILITY_WEBSERVICES 0x3d
#define WS_S_ASYNC 0x003D0000
#define WS_S_END 0x003D0001
#define WS_E_INVALID_FORMAT 0x803D0000
#define WS_E_OBJECT_FAULTED 0x803D0001
#define WS_E_NUMERIC_OVERFLOW 0x803D0002
#define WS_E_INVALID_OPERATION 0x803D0003
#define WS_E_OPERATION_ABORTED 0x803D0004
#define WS_E_ENDPOINT_ACCESS_DENIED 0x803D0005
#define WS_E_OPERATION_TIMED_OUT 0x803D0006
#define WS_E_OPERATION_ABANDONED 0x803D0007
#define WS_E_QUOTA_EXCEEDED 0x803D0008
#define WS_E_NO_TRANSLATION_AVAILABLE 0x803D0009
#define WS_E_SECURITY_VERIFICATION_FAILURE 0x803D000A
#define WS_E_ADDRESS_IN_USE 0x803D000B
#define WS_E_ADDRESS_NOT_AVAILABLE 0x803D000C
#define WS_E_ENDPOINT_NOT_FOUND 0x803D000D
#define WS_E_ENDPOINT_NOT_AVAILABLE 0x803D000E
#define WS_E_ENDPOINT_FAILURE 0x803D000F
#define WS_E_ENDPOINT_UNREACHABLE 0x803D0010
#define WS_E_ENDPOINT_ACTION_NOT_SUPPORTED 0x803D0011
#define WS_E_ENDPOINT_TOO_BUSY 0x803D0012
#define WS_E_ENDPOINT_FAULT_RECEIVED 0x803D0013
#define WS_E_ENDPOINT_DISCONNECTED 0x803D0014
#define WS_E_PROXY_FAILURE 0x803D0015
#define WS_E_PROXY_ACCESS_DENIED 0x803D0016
#define WS_E_NOT_SUPPORTED 0x803D0017
#define WS_E_PROXY_REQUIRES_BASIC_AUTH 0x803D0018
#define WS_E_PROXY_REQUIRES_DIGEST_AUTH 0x803D0019
#define WS_E_PROXY_REQUIRES_NTLM_AUTH 0x803D001A
#define WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH 0x803D001B
#define WS_E_SERVER_REQUIRES_BASIC_AUTH 0x803D001C
#define WS_E_SERVER_REQUIRES_DIGEST_AUTH 0x803D001D
#define WS_E_SERVER_REQUIRES_NTLM_AUTH 0x803D001E
#define WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH 0x803D001F
#define WS_E_INVALID_ENDPOINT_URL 0x803D0020
#define WS_E_OTHER 0x803D0021
#define WS_E_SECURITY_TOKEN_EXPIRED 0x803D0022
#define WS_E_SECURITY_SYSTEM_FAILURE 0x803D0023
#endif
#ifdef __cplusplus
}
#endif
#endif