// // data associated with raw transport connections // typedef struct _UL_RAW_CONNECTION_INFO { // // connection id // UL_HTTP_CONNECTION_ID ConnectionId; // // address info // USHORT RemoteAddressLength; // sizeof(UL_NETWORK_ADDRESS_xxx) USHORT RemoteAddressType; // UL_NETWORK_ADDRESS_TYPE_xxx USHORT LocalAddressLength; // sizeof(UL_NETWORK_ADDRESS_xxx) USHORT LocalAddressType; // UL_NETWORK_ADDRESS_TYPE_xxx PVOID pRemoteAddress; // points to a UL_NETWORK_ADDRESS_xxx PVOID pLocalAddress; // points to a UL_NETWORK_ADDRESS_xxx // // initial data // ULONG InitialDataSize; // size of initial data PVOID pInitialData; // pointer to initial data } UL_RAW_CONNECTION_INFO, *PUL_RAW_CONNECTION_INFO; // // Data computed during SSL handshake // typedef struct _UL_SSL_INFO { USHORT ServerCertKeySize; USHORT ConnectionKeySize; PWCHAR pServerCertIssuer; ULONG ServerCertIssuerSize; PWCHAR pServerCertSubject; ULONG ServerCertSubjectSize; PUL_SSL_CLIENT_CERT_INFO pClientCertInfo; } UL_SSL_INFO, *PUL_SSL_INFO; // // Client certificate information // typedef struct _UL_SSL_CLIENT_CERT_INFO { ULONG CertEncodedSize; PUCHAR pCertEncoded; ULONG CertFlags; HANDLE Token; } UL_SSL_CLIENT_CERT_INFO, *PUL_SSL_CLIENT_CERT_INFO; // // for transfers between filters and upper levels // typedef enum _UL_FILTER_BUFFER_TYPE { UlFilterBufferHttpStream, // both directions UlFilterBufferSslInitInfo, // filter -> app UlFilterBufferSslClientCert, // filter -> app UlFilterBufferSslClientCertAndMap, // filter -> app UlFilterBufferSslRenegotiate // app -> filter } typedef struct _UL_FILTER_BUFFER { UL_FILTER_BUFFER_TYPE BufferType; PUCHAR pBuffer; ULONG BufferSize; } UL_FILTER_BUFFER, *PUL_FILTER_BUFFER; // // for adding filters to the control channel // // Used with: UlControlChannelFilterInformation // UlControlChannelLegacyFilterInformation // typedef struct _UL_CONTROL_CHANNEL_FILTER { UL_PROPERTY_FLAGS Flags; HANDLE FilterHandle; } UL_CONTROL_CHANNEL_FILTER, *PUL_CONTROL_CHANNEL_FILTER, ; // // API calls for SSL/Filter helper process // ULAPI_LINKAGE ULONG WINAPI UlCreateFilter( OUT PHANDLE pFilterHandle, IN PCWSTR pFilterName, IN LPSECURITY_ATTRIBUTES pSecurityAttributes OPTIONAL, IN ULONG Options ); ULAPI_LINKAGE ULONG WINAPI UlOpenFilter( OUT PHANDLE pFilterHandle, IN PCWSTR pFilterName, IN ULONG Options ); ULAPI_LINKAGE ULONG WINAPI UlFilterAccept( IN HANDLE FilterHandle, OUT PUL_RAW_CONNECTION_INFO pRawConnectionInfo, IN ULONG RawConnectionInfoSize, OUT pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); ULAPI_LINKAGE ULONG WINAPI UlFilterClose( IN HANDLE FilterHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, IN LPOVERLAPPED pOverlapped OPTIONAL ); ULAPI_LINKAGE ULONG WINAPI UlFilterRawRead( IN HANDLE FilterHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, OUT PVOID pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); ULAPI_LINKAGE ULONG WINAPI UlFilterRawWrite( IN HANDLE FilterHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, IN PVOID pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); ULAPI_LINKAGE ULONG WINAPI UlFilterAppRead( IN HANDLE FilterHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, OUT PUL_FILTER_BUFFER pBuffer, IN ULONG BufferSize OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); ULAPI_LINKAGE ULONG WINAPI UlFilterAppWrite( IN HANDLE FilterHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, IN PUL_FILTER_BUFFER pBuffer, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); // // Application pool calls for SSL // ULAPI_LINKAGE ULONG WINAPI UlReceiveClientCertificate( IN HANDLE AppPoolHandle, IN UL_HTTP_CONNECTION_ID ConnectionId, IN ULONG Flags, OUT PUL_SSL_CLIENT_CERT_INFO pSslClientCertInfo, IN ULONG SslClientCertInfoSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped );