Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  http.rs   Sprache: unbekannt

 
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! HTTP API specification
use shared::guiddef::GUID;
use shared::minwindef::{DWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT};
use shared::sspi::SECURITY_STATUS;
use shared::ws2def::{PSOCKADDR, SOCKADDR_STORAGE};
use um::minwinbase::{LPOVERLAPPED, PSECURITY_ATTRIBUTES};
use um::winnt::{
    ANYSIZE_ARRAY, BOOLEAN, HANDLE, PCHAR, PCSTR, PCWSTR, PHANDLE, PSECURITY_DESCRIPTOR, PVOID,
    PWCHAR, PWSTR, ULARGE_INTEGER, ULONGLONG,
};
pub const HTTP_INITIALIZE_SERVER: ULONG = 0x00000001;
pub const HTTP_INITIALIZE_CONFIG: ULONG = 0x00000002;
pub const HTTP_DEMAND_CBT: ULONG = 0x00000004;
ENUM!{enum HTTP_SERVER_PROPERTY {
    HttpServerAuthenticationProperty,
    HttpServerLoggingProperty,
    HttpServerQosProperty,
    HttpServerTimeoutsProperty,
    HttpServerQueueLengthProperty,
    HttpServerStateProperty,
    HttpServer503VerbosityProperty,
    HttpServerBindingProperty,
    HttpServerExtendedAuthenticationProperty,
    HttpServerListenEndpointProperty,
    HttpServerChannelBindProperty,
    HttpServerProtectionLevelProperty,
}}
pub type PHTTP_SERVER_PROPERTY = *mut HTTP_SERVER_PROPERTY;
STRUCT!{struct HTTP_PROPERTY_FLAGS {
    BitFields: ULONG,
}}
BITFIELD!{HTTP_PROPERTY_FLAGS BitFields: ULONG [
    Present set_Present[0..1],
]}
pub type PHTTP_PROPERTY_FLAGS = *mut HTTP_PROPERTY_FLAGS;
ENUM!{enum HTTP_ENABLED_STATE {
    HttpEnabledStateActive,
    HttpEnabledStateInactive,
}}
pub type PHTTP_ENABLED_STATE = *mut HTTP_ENABLED_STATE;
STRUCT!{struct HTTP_STATE_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    State: HTTP_ENABLED_STATE,
}}
pub type PHTTP_STATE_INFO = *mut HTTP_STATE_INFO;
ENUM!{enum HTTP_503_RESPONSE_VERBOSITY {
    Http503ResponseVerbosityBasic,
    Http503ResponseVerbosityLimited,
    Http503ResponseVerbosityFull,
}}
pub type PHTTP_503_RESPONSE_VERBOSITY = *mut HTTP_503_RESPONSE_VERBOSITY;
ENUM!{enum HTTP_QOS_SETTING_TYPE {
    HttpQosSettingTypeBandwidth,
    HttpQosSettingTypeConnectionLimit,
    HttpQosSettingTypeFlowRate,
}}
pub type PHTTP_QOS_SETTING_TYPE = *mut HTTP_QOS_SETTING_TYPE;
STRUCT!{struct HTTP_QOS_SETTING_INFO {
    QosType: HTTP_QOS_SETTING_TYPE,
    QosSetting: PVOID,
}}
pub type PHTTP_QOS_SETTING_INFO = *mut HTTP_QOS_SETTING_INFO;
STRUCT!{struct HTTP_CONNECTION_LIMIT_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    MaxConnections: ULONG,
}}
pub type PHTTP_CONNECTION_LIMIT_INFO = *mut HTTP_CONNECTION_LIMIT_INFO;
STRUCT!{struct HTTP_BANDWIDTH_LIMIT_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    MaxBandwidth: ULONG,
}}
pub type PHTTP_BANDWIDTH_LIMIT_INFO = *mut HTTP_BANDWIDTH_LIMIT_INFO;
STRUCT!{struct HTTP_FLOWRATE_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    MaxBandwidth: ULONG,
    MaxPeakBandwidth: ULONG,
    BurstSize: ULONG,
}}
pub type PHTTP_FLOWRATE_INFO = *mut HTTP_FLOWRATE_INFO;
pub const HTTP_MIN_ALLOWED_BANDWIDTH_THROTTLING_RATE: ULONG = 1024;
pub const HTTP_LIMIT_INFINITE: ULONG = !0;
ENUM!{enum HTTP_SERVICE_CONFIG_TIMEOUT_KEY {
    IdleConnectionTimeout = 0,
    HeaderWaitTimeout,
}}
pub type PHTTP_SERVICE_CONFIG_TIMEOUT_KEY = *mut HTTP_SERVICE_CONFIG_TIMEOUT_KEY;
pub type HTTP_SERVICE_CONFIG_TIMEOUT_PARAM = USHORT;
pub type PHTTP_SERVICE_CONFIG_TIMEOUT_PARAM = *mut USHORT;
STRUCT!{struct HTTP_SERVICE_CONFIG_TIMEOUT_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_TIMEOUT_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_TIMEOUT_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_TIMEOUT_SET = *mut HTTP_SERVICE_CONFIG_TIMEOUT_SET;
STRUCT!{struct HTTP_TIMEOUT_LIMIT_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    EntityBody: USHORT,
    DrainEntityBody: USHORT,
    RequestQueue: USHORT,
    IdleConnection: USHORT,
    HeaderWait: USHORT,
    MinSendRate: ULONG,
}}
pub type PHTTP_TIMEOUT_LIMIT_INFO = *mut HTTP_TIMEOUT_LIMIT_INFO;
STRUCT!{struct HTTP_LISTEN_ENDPOINT_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    EnableSharing: BOOLEAN,
}}
pub type PHTTP_LISTEN_ENDPOINT_INFO = *mut HTTP_LISTEN_ENDPOINT_INFO;
STRUCT!{struct HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS {
    DomainNameLength: USHORT,
    DomainName: PWSTR,
    RealmLength: USHORT,
    Realm: PWSTR,
}}
pub type PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS = *mut HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS;
STRUCT!{struct HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS {
    RealmLength: USHORT,
    Realm: PWSTR,
}}
pub type PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS = *mut HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS;
pub const HTTP_AUTH_ENABLE_BASIC: ULONG = 0x00000001;
pub const HTTP_AUTH_ENABLE_DIGEST: ULONG = 0x00000002;
pub const HTTP_AUTH_ENABLE_NTLM: ULONG = 0x00000004;
pub const HTTP_AUTH_ENABLE_NEGOTIATE: ULONG = 0x00000008;
pub const HTTP_AUTH_ENABLE_KERBEROS: ULONG = 0x00000010;
pub const HTTP_AUTH_ENABLE_ALL: ULONG = HTTP_AUTH_ENABLE_BASIC | HTTP_AUTH_ENABLE_DIGEST |
    HTTP_AUTH_ENABLE_NTLM | HTTP_AUTH_ENABLE_NEGOTIATE | HTTP_AUTH_ENABLE_KERBEROS;
pub const HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING: UCHAR = 0x01;
pub const HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL: UCHAR = 0x02;
STRUCT!{struct HTTP_SERVER_AUTHENTICATION_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    AuthSchemes: ULONG,
    ReceiveMutualAuth: BOOLEAN,
    ReceiveContextHandle: BOOLEAN,
    DisableNTLMCredentialCaching: BOOLEAN,
    ExFlags: UCHAR,
    DigestParams: HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS,
    BasicParams: HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS,
}}
pub type PHTTP_SERVER_AUTHENTICATION_INFO = *mut HTTP_SERVER_AUTHENTICATION_INFO;
ENUM!{enum HTTP_SERVICE_BINDING_TYPE {
    HttpServiceBindingTypeNone = 0,
    HttpServiceBindingTypeW,
    HttpServiceBindingTypeA,
}}
STRUCT!{struct HTTP_SERVICE_BINDING_BASE {
    Type: HTTP_SERVICE_BINDING_TYPE,
}}
pub type PHTTP_SERVICE_BINDING_BASE = *mut HTTP_SERVICE_BINDING_BASE;
STRUCT!{struct HTTP_SERVICE_BINDING_A {
    Base: HTTP_SERVICE_BINDING_BASE,
    Buffer: PCHAR,
    BufferSize: ULONG,
}}
pub type PHTTP_SERVICE_BINDING_A = *mut HTTP_SERVICE_BINDING_A;
STRUCT!{struct HTTP_SERVICE_BINDING_W {
    Base: HTTP_SERVICE_BINDING_BASE,
    Buffer: PWCHAR,
    BufferSize: ULONG,
}}
pub type PHTTP_SERVICE_BINDING_W = *mut HTTP_SERVICE_BINDING_W;
ENUM!{enum HTTP_AUTHENTICATION_HARDENING_LEVELS {
    HttpAuthenticationHardeningLegacy = 0,
    HttpAuthenticationHardeningMedium,
    HttpAuthenticationHardeningStrict,
}}
pub const HTTP_CHANNEL_BIND_PROXY: ULONG = 0x1;
pub const HTTP_CHANNEL_BIND_PROXY_COHOSTING: ULONG = 0x20;
pub const HTTP_CHANNEL_BIND_NO_SERVICE_NAME_CHECK: ULONG = 0x2;
pub const HTTP_CHANNEL_BIND_DOTLESS_SERVICE: ULONG = 0x4;
pub const HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN: ULONG = 0x8;
pub const HTTP_CHANNEL_BIND_CLIENT_SERVICE: ULONG = 0x10;
STRUCT!{struct HTTP_CHANNEL_BIND_INFO {
    Hardening: HTTP_AUTHENTICATION_HARDENING_LEVELS,
    Flags: ULONG,
    ServiceNames: *mut PHTTP_SERVICE_BINDING_BASE,
    NumberOfServiceNames: ULONG,
}}
pub type PHTTP_CHANNEL_BIND_INFO = *mut HTTP_CHANNEL_BIND_INFO;
STRUCT!{struct HTTP_REQUEST_CHANNEL_BIND_STATUS {
    ServiceName: PHTTP_SERVICE_BINDING_BASE,
    ChannelToken: PUCHAR,
    ChannelTokenSize: ULONG,
    Flags: ULONG,
}}
pub type PHTTP_REQUEST_CHANNEL_BIND_STATUS = *mut HTTP_REQUEST_CHANNEL_BIND_STATUS;
pub const HTTP_LOG_FIELD_DATE: ULONG = 0x00000001;
pub const HTTP_LOG_FIELD_TIME: ULONG = 0x00000002;
pub const HTTP_LOG_FIELD_CLIENT_IP: ULONG = 0x00000004;
pub const HTTP_LOG_FIELD_USER_NAME: ULONG = 0x00000008;
pub const HTTP_LOG_FIELD_SITE_NAME: ULONG = 0x00000010;
pub const HTTP_LOG_FIELD_COMPUTER_NAME: ULONG = 0x00000020;
pub const HTTP_LOG_FIELD_SERVER_IP: ULONG = 0x00000040;
pub const HTTP_LOG_FIELD_METHOD: ULONG = 0x00000080;
pub const HTTP_LOG_FIELD_URI_STEM: ULONG = 0x00000100;
pub const HTTP_LOG_FIELD_URI_QUERY: ULONG = 0x00000200;
pub const HTTP_LOG_FIELD_STATUS: ULONG = 0x00000400;
pub const HTTP_LOG_FIELD_WIN32_STATUS: ULONG = 0x00000800;
pub const HTTP_LOG_FIELD_BYTES_SENT: ULONG = 0x00001000;
pub const HTTP_LOG_FIELD_BYTES_RECV: ULONG = 0x00002000;
pub const HTTP_LOG_FIELD_TIME_TAKEN: ULONG = 0x00004000;
pub const HTTP_LOG_FIELD_SERVER_PORT: ULONG = 0x00008000;
pub const HTTP_LOG_FIELD_USER_AGENT: ULONG = 0x00010000;
pub const HTTP_LOG_FIELD_COOKIE: ULONG = 0x00020000;
pub const HTTP_LOG_FIELD_REFERER: ULONG = 0x00040000;
pub const HTTP_LOG_FIELD_VERSION: ULONG = 0x00080000;
pub const HTTP_LOG_FIELD_HOST: ULONG = 0x00100000;
pub const HTTP_LOG_FIELD_SUB_STATUS: ULONG = 0x00200000;
pub const HTTP_LOG_FIELD_CLIENT_PORT: ULONG = 0x00400000;
pub const HTTP_LOG_FIELD_URI: ULONG = 0x00800000;
pub const HTTP_LOG_FIELD_SITE_ID: ULONG = 0x01000000;
pub const HTTP_LOG_FIELD_REASON: ULONG = 0x02000000;
pub const HTTP_LOG_FIELD_QUEUE_NAME: ULONG = 0x04000000;
ENUM!{enum HTTP_LOGGING_TYPE {
    HttpLoggingTypeW3C,
    HttpLoggingTypeIIS,
    HttpLoggingTypeNCSA,
    HttpLoggingTypeRaw,
}}
ENUM!{enum HTTP_LOGGING_ROLLOVER_TYPE {
    HttpLoggingRolloverSize,
    HttpLoggingRolloverDaily,
    HttpLoggingRolloverWeekly,
    HttpLoggingRolloverMonthly,
    HttpLoggingRolloverHourly,
}}
pub const HTTP_MIN_ALLOWED_LOG_FILE_ROLLOVER_SIZE: ULONG = 1 * 1024 * 1024;
pub const HTTP_LOGGING_FLAG_LOCAL_TIME_ROLLOVER: ULONG = 0x00000001;
pub const HTTP_LOGGING_FLAG_USE_UTF8_CONVERSION: ULONG = 0x00000002;
pub const HTTP_LOGGING_FLAG_LOG_ERRORS_ONLY: ULONG = 0x00000004;
pub const HTTP_LOGGING_FLAG_LOG_SUCCESS_ONLY: ULONG = 0x00000008;
STRUCT!{struct HTTP_LOGGING_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    LoggingFlags: ULONG,
    SoftwareName: PCWSTR,
    SoftwareNameLength: USHORT,
    DirectoryNameLength: USHORT,
    DirectoryName: PCWSTR,
    Format: HTTP_LOGGING_TYPE,
    Fields: ULONG,
    pExtFields: PVOID,
    NumOfExtFields: USHORT,
    MaxRecordSize: USHORT,
    RolloverType: HTTP_LOGGING_ROLLOVER_TYPE,
    RolloverSize: ULONG,
    pSecurityDescriptor: PSECURITY_DESCRIPTOR,
}}
pub type PHTTP_LOGGING_INFO = *mut HTTP_LOGGING_INFO;
STRUCT!{struct HTTP_BINDING_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    RequestQueueHandle: HANDLE,
}}
pub type PHTTP_BINDING_INFO = *mut HTTP_BINDING_INFO;
ENUM!{enum HTTP_PROTECTION_LEVEL_TYPE {
    HttpProtectionLevelUnrestricted,
    HttpProtectionLevelEdgeRestricted,
    HttpProtectionLevelRestricted,
}}
pub type PHTTP_PROTECTION_LEVEL_TYPE = *mut HTTP_PROTECTION_LEVEL_TYPE;
STRUCT!{struct HTTP_PROTECTION_LEVEL_INFO {
    Flags: HTTP_PROPERTY_FLAGS,
    Level: HTTP_PROTECTION_LEVEL_TYPE,
}}
pub type PHTTP_PROTECTION_LEVEL_INFO = *mut HTTP_PROTECTION_LEVEL_INFO;
pub const HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING: ULONG = 0x00000001;
pub const HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER: ULONG = 0x00000002;
pub const HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY: ULONG = 0x00000001;
pub const HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY: ULONG = 0x00000002;
pub const HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER: ULONG = 0x00000001;
pub const HTTP_SEND_RESPONSE_FLAG_DISCONNECT: ULONG = 0x00000001;
pub const HTTP_SEND_RESPONSE_FLAG_MORE_DATA: ULONG = 0x00000002;
pub const HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA: ULONG = 0x00000004;
pub const HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING: ULONG = 0x00000008;
pub const HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES: ULONG = 0x00000020;
pub const HTTP_SEND_RESPONSE_FLAG_OPAQUE: ULONG = 0x00000040;
pub const HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE: ULONG = 0x00000001;
pub type HTTP_OPAQUE_ID = ULONGLONG;
pub type PHTTP_OPAQUE_ID = *mut ULONGLONG;
pub type HTTP_REQUEST_ID = HTTP_OPAQUE_ID;
pub type PHTTP_REQUEST_ID = *mut HTTP_OPAQUE_ID;
pub type HTTP_CONNECTION_ID = HTTP_OPAQUE_ID;
pub type PHTTP_CONNECTION_ID = *mut HTTP_OPAQUE_ID;
pub type HTTP_RAW_CONNECTION_ID = HTTP_OPAQUE_ID;
pub type PHTTP_RAW_CONNECTION_ID = *mut HTTP_OPAQUE_ID;
pub type HTTP_URL_GROUP_ID = HTTP_OPAQUE_ID;
pub type PHTTP_URL_GROUP_ID = *mut HTTP_OPAQUE_ID;
pub type HTTP_SERVER_SESSION_ID = HTTP_OPAQUE_ID;
pub type PHTTP_SERVER_SESSION_ID = *mut HTTP_OPAQUE_ID;
pub const HTTP_BYTE_RANGE_TO_EOF: ULONGLONG = !0;
STRUCT!{struct HTTP_BYTE_RANGE {
    StartingOffset: ULARGE_INTEGER,
    Length: ULARGE_INTEGER,
}}
pub type PHTTP_BYTE_RANGE = *mut HTTP_BYTE_RANGE;
STRUCT!{struct HTTP_VERSION {
    MajorVersion: USHORT,
    MinorVersion: USHORT,
}}
pub type PHTTP_VERSION = *mut HTTP_VERSION;
pub const HTTP_VERSION_UNKNOWN: HTTP_VERSION = HTTP_VERSION { MajorVersion: 0, MinorVersion: 0 };
pub const HTTP_VERSION_0_9: HTTP_VERSION = HTTP_VERSION { MajorVersion: 0, MinorVersion: 9 };
pub const HTTP_VERSION_1_0: HTTP_VERSION = HTTP_VERSION { MajorVersion: 1, MinorVersion: 0 };
pub const HTTP_VERSION_1_1: HTTP_VERSION = HTTP_VERSION { MajorVersion: 1, MinorVersion: 1 };
#[inline]
pub fn HTTP_SET_VERSION(mut version: HTTP_VERSION, major: USHORT, minor: USHORT) {
    version.MajorVersion = major;
    version.MinorVersion = minor;
}
#[inline]
pub fn HTTP_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.MajorVersion == major && version.MinorVersion == minor
}
#[inline]
pub fn HTTP_GREATER_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.MajorVersion > major || (version.MajorVersion == major && version.MinorVersion > minor)
}
#[inline]
pub fn HTTP_LESS_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.MajorVersion < major || (version.MajorVersion == major && version.MinorVersion < minor)
}
#[inline]
pub fn HTTP_NOT_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    !HTTP_EQUAL_VERSION(version, major, minor)
}
#[inline]
pub fn HTTP_GREATER_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    !HTTP_LESS_VERSION(version, major, minor)
}
#[inline]
pub fn HTTP_LESS_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
    !HTTP_GREATER_VERSION(version, major, minor)
}
ENUM!{enum HTTP_VERB {
    HttpVerbUnparsed,
    HttpVerbUnknown,
    HttpVerbInvalid,
    HttpVerbOPTIONS,
    HttpVerbGET,
    HttpVerbHEAD,
    HttpVerbPOST,
    HttpVerbPUT,
    HttpVerbDELETE,
    HttpVerbTRACE,
    HttpVerbCONNECT,
    HttpVerbTRACK,
    HttpVerbMOVE,
    HttpVerbCOPY,
    HttpVerbPROPFIND,
    HttpVerbPROPPATCH,
    HttpVerbMKCOL,
    HttpVerbLOCK,
    HttpVerbUNLOCK,
    HttpVerbSEARCH,
    HttpVerbMaximum,
}}
pub type PHTTP_VERB = *mut HTTP_VERB;
ENUM!{enum HTTP_HEADER_ID {
    HttpHeaderCacheControl = 0,
    HttpHeaderConnection = 1,
    HttpHeaderDate = 2,
    HttpHeaderKeepAlive = 3,
    HttpHeaderPragma = 4,
    HttpHeaderTrailer = 5,
    HttpHeaderTransferEncoding = 6,
    HttpHeaderUpgrade = 7,
    HttpHeaderVia = 8,
    HttpHeaderWarning = 9,
    HttpHeaderAllow = 10,
    HttpHeaderContentLength = 11,
    HttpHeaderContentType = 12,
    HttpHeaderContentEncoding = 13,
    HttpHeaderContentLanguage = 14,
    HttpHeaderContentLocation = 15,
    HttpHeaderContentMd5 = 16,
    HttpHeaderContentRange = 17,
    HttpHeaderExpires = 18,
    HttpHeaderLastModified = 19,
    HttpHeaderAccept = 20,
    HttpHeaderAcceptCharset = 21,
    HttpHeaderAcceptEncoding = 22,
    HttpHeaderAcceptLanguage = 23,
    HttpHeaderAuthorization = 24,
    HttpHeaderCookie = 25,
    HttpHeaderExpect = 26,
    HttpHeaderFrom = 27,
    HttpHeaderHost = 28,
    HttpHeaderIfMatch = 29,
    HttpHeaderIfModifiedSince = 30,
    HttpHeaderIfNoneMatch = 31,
    HttpHeaderIfRange = 32,
    HttpHeaderIfUnmodifiedSince = 33,
    HttpHeaderMaxForwards = 34,
    HttpHeaderProxyAuthorization = 35,
    HttpHeaderReferer = 36,
    HttpHeaderRange = 37,
    HttpHeaderTe = 38,
    HttpHeaderTranslate = 39,
    HttpHeaderUserAgent = 40,
    HttpHeaderRequestMaximum = 41,
    HttpHeaderAcceptRanges = 20,
    HttpHeaderAge = 21,
    HttpHeaderEtag = 22,
    HttpHeaderLocation = 23,
    HttpHeaderProxyAuthenticate = 24,
    HttpHeaderRetryAfter = 25,
    HttpHeaderServer = 26,
    HttpHeaderSetCookie = 27,
    HttpHeaderVary = 28,
    HttpHeaderWwwAuthenticate = 29,
    HttpHeaderResponseMaximum = 30,
    HttpHeaderMaximum = 41,
}}
pub type PHTTP_HEADER_ID = *mut HTTP_HEADER_ID;
STRUCT!{struct HTTP_KNOWN_HEADER {
    RawValueLength: USHORT,
    pRawValue: PCSTR,
}}
pub type PHTTP_KNOWN_HEADER = *mut HTTP_KNOWN_HEADER;
STRUCT!{struct HTTP_UNKNOWN_HEADER {
    NameLength: USHORT,
    RawValueLength: USHORT,
    pName: PCSTR,
    pRawValue: PCSTR,
}}
pub type PHTTP_UNKNOWN_HEADER = *mut HTTP_UNKNOWN_HEADER;
ENUM!{enum HTTP_LOG_DATA_TYPE {
    HttpLogDataTypeFields = 0,
}}
pub type PHTTP_LOG_DATA_TYPE = *mut HTTP_LOG_DATA_TYPE;
STRUCT!{struct HTTP_LOG_DATA {
    Type: HTTP_LOG_DATA_TYPE,
}}
pub type PHTTP_LOG_DATA = *mut HTTP_LOG_DATA;
STRUCT!{struct HTTP_LOG_FIELDS_DATA {
    Base: HTTP_LOG_DATA,
    UserNameLength: USHORT,
    UriStemLength: USHORT,
    ClientIpLength: USHORT,
    ServerNameLength: USHORT,
    ServiceNameLength: USHORT,
    ServerIpLength: USHORT,
    MethodLength: USHORT,
    UriQueryLength: USHORT,
    HostLength: USHORT,
    UserAgentLength: USHORT,
    CookieLength: USHORT,
    ReferrerLength: USHORT,
    UserName: PWCHAR,
    UriStem: PWCHAR,
    ClientIp: PCHAR,
    ServerName: PCHAR,
    ServiceName: PCHAR,
    ServerIp: PCHAR,
    Method: PCHAR,
    UriQuery: PCHAR,
    Host: PCHAR,
    UserAgent: PCHAR,
    Cookie: PCHAR,
    Referrer: PCHAR,
    ServerPort: USHORT,
    ProtocolStatus: USHORT,
    Win32Status: ULONG,
    MethodNum: HTTP_VERB,
    SubStatus: USHORT,
}}
pub type PHTTP_LOG_FIELDS_DATA = *mut HTTP_LOG_FIELDS_DATA;
ENUM!{enum HTTP_DATA_CHUNK_TYPE {
    HttpDataChunkFromMemory,
    HttpDataChunkFromFileHandle,
    HttpDataChunkFromFragmentCache,
    HttpDataChunkFromFragmentCacheEx,
    HttpDataChunkMaximum,
}}
pub type PHTTP_DATA_CHUNK_TYPE = *mut HTTP_DATA_CHUNK_TYPE;
STRUCT!{struct HTTP_DATA_CHUNK_FromMemory {
    pBuffer: PVOID,
    BufferLength: ULONG,
}}
STRUCT!{struct HTTP_DATA_CHUNK_FromFileHandle {
    ByteRange: HTTP_BYTE_RANGE,
    FileHandle: HANDLE,
}}
STRUCT!{struct HTTP_DATA_CHUNK_FromFragmentCache {
    FragmentNameLength: USHORT,
    pFragmentName: PCWSTR,
}}
STRUCT!{struct HTTP_DATA_CHUNK_FromFragmentCacheEx {
    ByteRange: HTTP_BYTE_RANGE,
    pFragmentName: PCWSTR,
}}
UNION!{union HTTP_DATA_CHUNK_u {
    [u64; 3],
    FromMemory FromMemory_mut: HTTP_DATA_CHUNK_FromMemory,
    FromFileHandle FromFileHandle_mut: HTTP_DATA_CHUNK_FromFileHandle,
    FromFragmentCache FromFragmentCache_mut: HTTP_DATA_CHUNK_FromFragmentCache,
    FromFragmentCacheEx FromFragmentCacheEx_mut: HTTP_DATA_CHUNK_FromFragmentCacheEx,
}}
STRUCT!{struct HTTP_DATA_CHUNK {
    DataChunkType: HTTP_DATA_CHUNK_TYPE,
    u: HTTP_DATA_CHUNK_u,
}}
pub type PHTTP_DATA_CHUNK = *mut HTTP_DATA_CHUNK;
STRUCT!{struct HTTP_REQUEST_HEADERS {
    UnknownHeaderCount: USHORT,
    pUnknownHeaders: PHTTP_UNKNOWN_HEADER,
    TrailerCount: USHORT,
    pTrailers: PHTTP_UNKNOWN_HEADER,
    KnownHeaders: [HTTP_KNOWN_HEADER; 41], // FIXME HttpHeaderRequestMaximum
}}
pub type PHTTP_REQUEST_HEADERS = *mut HTTP_REQUEST_HEADERS;
STRUCT!{struct HTTP_RESPONSE_HEADERS {
    UnknownHeaderCount: USHORT,
    pUnknownHeaders: PHTTP_UNKNOWN_HEADER,
    TrailerCount: USHORT,
    pTrailers: PHTTP_UNKNOWN_HEADER,
    KnownHeaders: [HTTP_KNOWN_HEADER; 30], // FIXME HttpHeaderResponseMaximum
}}
pub type PHTTP_RESPONSE_HEADERS = *mut HTTP_RESPONSE_HEADERS;
STRUCT!{struct HTTP_TRANSPORT_ADDRESS {
    pRemoteAddress: PSOCKADDR,
    pLocalAddress: PSOCKADDR,
}}
pub type PHTTP_TRANSPORT_ADDRESS = *mut HTTP_TRANSPORT_ADDRESS;
STRUCT!{struct HTTP_COOKED_URL {
    FullUrlLength: USHORT,
    HostLength: USHORT,
    AbsPathLength: USHORT,
    QueryStringLength: USHORT,
    pFullUrl: PCWSTR,
    pHost: PCWSTR,
    pAbsPath: PCWSTR,
    pQueryString: PCWSTR,
}}
pub type PHTTP_COOKED_URL = *mut HTTP_COOKED_URL;
pub type HTTP_URL_CONTEXT = ULONGLONG;
pub const HTTP_URL_FLAG_REMOVE_ALL: ULONG = 0x00000001;
ENUM!{enum HTTP_AUTH_STATUS {
    HttpAuthStatusSuccess,
    HttpAuthStatusNotAuthenticated,
    HttpAuthStatusFailure,
}}
pub type PHTTP_AUTH_STATUS = *mut HTTP_AUTH_STATUS;
ENUM!{enum HTTP_REQUEST_AUTH_TYPE {
    HttpRequestAuthTypeNone = 0,
    HttpRequestAuthTypeBasic,
    HttpRequestAuthTypeDigest,
    HttpRequestAuthTypeNTLM,
    HttpRequestAuthTypeNegotiate,
    HttpRequestAuthTypeKerberos,
}}
pub type PHTTP_REQUEST_AUTH_TYPE = *mut HTTP_REQUEST_AUTH_TYPE;
STRUCT!{struct HTTP_SSL_CLIENT_CERT_INFO {
    CertFlags: ULONG,
    CertEncodedSize: ULONG,
    pCertEncoded: PUCHAR,
    Token: HANDLE,
    CertDeniedByMapper: BOOLEAN,
}}
pub type PHTTP_SSL_CLIENT_CERT_INFO = *mut HTTP_SSL_CLIENT_CERT_INFO;
pub const HTTP_RECEIVE_SECURE_CHANNEL_TOKEN: ULONG = 0x1;
STRUCT!{struct HTTP_SSL_INFO {
    ServerCertKeySize: USHORT,
    ConnectionKeySize: USHORT,
    ServerCertIssuerSize: ULONG,
    ServerCertSubjectSize: ULONG,
    pServerCertIssuer: PCSTR,
    pServerCertSubject: PCSTR,
    pClientCertInfo: PHTTP_SSL_CLIENT_CERT_INFO,
    SslClientCertNegotiated: ULONG,
}}
pub type PHTTP_SSL_INFO = *mut HTTP_SSL_INFO;
ENUM!{enum HTTP_REQUEST_INFO_TYPE {
    HttpRequestInfoTypeAuth,
    HttpRequestInfoTypeChannelBind,
}}
STRUCT!{struct HTTP_REQUEST_INFO {
    InfoType: HTTP_REQUEST_INFO_TYPE,
    InfoLength: ULONG,
    pInfo: PVOID,
}}
pub type PHTTP_REQUEST_INFO = *mut HTTP_REQUEST_INFO;
pub const HTTP_REQUEST_AUTH_FLAG_TOKEN_FOR_CACHED_CRED: ULONG = 0x00000001;
STRUCT!{struct HTTP_REQUEST_AUTH_INFO {
    AuthStatus: HTTP_AUTH_STATUS,
    SecStatus: SECURITY_STATUS,
    Flags: ULONG,
    AuthType: HTTP_REQUEST_AUTH_TYPE,
    AccessToken: HANDLE,
    ContextAttributes: ULONG,
    PackedContextLength: ULONG,
    PackedContextType: ULONG,
    PackedContext: PVOID,
    MutualAuthDataLength: ULONG,
    pMutualAuthData: PCHAR,
    PackageNameLength: USHORT,
    pPackageName: PWSTR,
}}
pub type PHTTP_REQUEST_AUTH_INFO = *mut HTTP_REQUEST_AUTH_INFO;
STRUCT!{struct HTTP_REQUEST_V1 {
    Flags: ULONG,
    ConnectionId: HTTP_CONNECTION_ID,
    RequestId: HTTP_REQUEST_ID,
    UrlContext: HTTP_URL_CONTEXT,
    Version: HTTP_VERSION,
    Verb: HTTP_VERB,
    UnknownVerbLength: USHORT,
    RawUrlLength: USHORT,
    pUnknownVerb: PCSTR,
    pRawUrl: PCSTR,
    CookedUrl: HTTP_COOKED_URL,
    Address: HTTP_TRANSPORT_ADDRESS,
    Headers: HTTP_REQUEST_HEADERS,
    BytesReceived: ULONGLONG,
    EntityChunkCount: USHORT,
    pEntityChunks: PHTTP_DATA_CHUNK,
    RawConnectionId: HTTP_RAW_CONNECTION_ID,
    pSslInfo: PHTTP_SSL_INFO,
}}
pub type PHTTP_REQUEST_V1 = *mut HTTP_REQUEST_V1;
STRUCT!{struct HTTP_REQUEST_V2 {
    Base: HTTP_REQUEST_V1,
    RequestInfoCount: USHORT,
    pRequestInfo: PHTTP_REQUEST_INFO,
}}
pub type PHTTP_REQUEST_V2 = *mut HTTP_REQUEST_V2;
pub type HTTP_REQUEST = HTTP_REQUEST_V2;
pub type PHTTP_REQUEST = *mut HTTP_REQUEST;
pub const HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS: ULONG = 0x00000001;
pub const HTTP_REQUEST_FLAG_IP_ROUTED: ULONG = 0x00000002;
STRUCT!{struct HTTP_RESPONSE_V1 {
    Flags: ULONG,
    Version: HTTP_VERSION,
    StatusCode: USHORT,
    ReasonLength: USHORT,
    pReason: PCSTR,
    Headers: HTTP_RESPONSE_HEADERS,
    EntityChunkCount: USHORT,
    pEntityChunks: PHTTP_DATA_CHUNK,
}}
pub type PHTTP_RESPONSE_V1 = *mut HTTP_RESPONSE_V1;
pub const HTTP_RESPONSE_FLAG_MULTIPLE_ENCODINGS_AVAILABLE: ULONG = 0x00000001;
ENUM!{enum HTTP_RESPONSE_INFO_TYPE {
    HttpResponseInfoTypeMultipleKnownHeaders,
    HttpResponseInfoTypeAuthenticationProperty,
    HttpResponseInfoTypeQoSProperty,
    HttpResponseInfoTypeChannelBind,
}}
pub type PHTTP_RESPONSE_INFO_TYPE = *mut HTTP_RESPONSE_INFO_TYPE;
STRUCT!{struct HTTP_RESPONSE_INFO {
    Type: HTTP_RESPONSE_INFO_TYPE,
    Length: ULONG,
    pInfo: PVOID,
}}
pub type PHTTP_RESPONSE_INFO = *mut HTTP_RESPONSE_INFO;
pub const HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER: ULONG = 0x00000001;
STRUCT!{struct HTTP_MULTIPLE_KNOWN_HEADERS {
    HeaderId: HTTP_HEADER_ID,
    Flags: ULONG,
    KnownHeaderCount: USHORT,
    KnownHeaders: PHTTP_KNOWN_HEADER,
}}
pub type PHTTP_MULTIPLE_KNOWN_HEADERS = *mut HTTP_MULTIPLE_KNOWN_HEADERS;
STRUCT!{struct HTTP_RESPONSE_V2 {
    Base: HTTP_RESPONSE_V1,
    ResponseInfoCount: USHORT,
    pResponseInfo: PHTTP_RESPONSE_INFO,
}}
pub type PHTTP_RESPONSE_V2 = *mut HTTP_RESPONSE_V2;
pub type HTTP_RESPONSE = HTTP_RESPONSE_V2;
pub type PHTTP_RESPONSE = *mut HTTP_RESPONSE;
STRUCT!{struct HTTPAPI_VERSION {
    HttpApiMajorVersion: USHORT,
    HttpApiMinorVersion: USHORT,
}}
pub type PHTTPAPI_VERSION = *mut HTTPAPI_VERSION;
pub const HTTPAPI_VERSION_2: HTTPAPI_VERSION = HTTPAPI_VERSION {
    HttpApiMajorVersion: 2,
    HttpApiMinorVersion: 0,
};
pub const HTTPAPI_VERSION_1: HTTPAPI_VERSION = HTTPAPI_VERSION {
    HttpApiMajorVersion: 1,
    HttpApiMinorVersion: 0,
};
#[inline]
pub fn HTTPAPI_EQUAL_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.HttpApiMajorVersion == major && version.HttpApiMinorVersion == minor
}
#[inline]
pub fn HTTPAPI_GREATER_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.HttpApiMajorVersion > major ||
    (version.HttpApiMajorVersion == major && version.HttpApiMinorVersion > minor)
}
#[inline]
pub fn HTTPAPI_LESS_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
    version.HttpApiMajorVersion < major ||
    (version.HttpApiMajorVersion == major && version.HttpApiMinorVersion < minor)
}
#[inline]
pub fn HTTPAPI_VERSION_GREATER_OR_EQUAL(
    version: HTTPAPI_VERSION,
    major: USHORT,
    minor: USHORT,
) -> bool {
    !HTTPAPI_LESS_VERSION(version, major, minor)
}
ENUM!{enum HTTP_CACHE_POLICY_TYPE {
    HttpCachePolicyNocache,
    HttpCachePolicyUserInvalidates,
    HttpCachePolicyTimeToLive,
    HttpCachePolicyMaximum,
}}
pub type PHTTP_CACHE_POLICY_TYPE = *mut HTTP_CACHE_POLICY_TYPE;
STRUCT!{struct HTTP_CACHE_POLICY {
    Policy: HTTP_CACHE_POLICY_TYPE,
    SecondsToLive: ULONG,
}}
pub type PHTTP_CACHE_POLICY = *mut HTTP_CACHE_POLICY;
ENUM!{enum HTTP_SERVICE_CONFIG_ID {
    HttpServiceConfigIPListenList,
    HttpServiceConfigSSLCertInfo,
    HttpServiceConfigUrlAclInfo,
    HttpServiceConfigTimeout,
    HttpServiceConfigCache,
    HttpServiceConfigSslSniCertInfo,
    HttpServiceConfigSslCcsCertInfo,
    HttpServiceConfigMax,
}}
pub type PHTTP_SERVICE_CONFIG_ID = *mut HTTP_SERVICE_CONFIG_ID;
ENUM!{enum HTTP_SERVICE_CONFIG_QUERY_TYPE {
    HttpServiceConfigQueryExact,
    HttpServiceConfigQueryNext,
    HttpServiceConfigQueryMax,
}}
pub type PHTTP_SERVICE_CONFIG_QUERY_TYPE = *mut HTTP_SERVICE_CONFIG_QUERY_TYPE;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_KEY {
    pIpPort: PSOCKADDR,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_KEY = *mut HTTP_SERVICE_CONFIG_SSL_KEY;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY {
    IpPort: SOCKADDR_STORAGE,
    Host: PWSTR,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_SNI_KEY = *mut HTTP_SERVICE_CONFIG_SSL_SNI_KEY;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_KEY {
    LocalAddress: SOCKADDR_STORAGE,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_CCS_KEY = *mut HTTP_SERVICE_CONFIG_SSL_CCS_KEY;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_PARAM {
    SslHashLength: ULONG,
    pSslHash: PVOID,
    AppId: GUID,
    pSslCertStoreName: PWSTR,
    DefaultCertCheckMode: DWORD,
    DefaultRevocationFreshnessTime: DWORD,
    DefaultRevocationUrlRetrievalTimeout: DWORD,
    pDefaultSslCtlIdentifier: PWSTR,
    pDefaultSslCtlStoreName: PWSTR,
    DefaultFlags: DWORD,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_PARAM = *mut HTTP_SERVICE_CONFIG_SSL_PARAM;
pub const HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER: DWORD = 0x00000001;
pub const HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT: DWORD = 0x00000002;
pub const HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER: DWORD = 0x00000004;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_SET = *mut HTTP_SERVICE_CONFIG_SSL_SET;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_SNI_SET = *mut HTTP_SERVICE_CONFIG_SSL_SNI_SET;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_CCS_SET = *mut HTTP_SERVICE_CONFIG_SSL_CCS_SET;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_QUERY {
    QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_KEY,
    dwToken: DWORD,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_QUERY;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_QUERY {
    QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
    dwToken: DWORD,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_SNI_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_SNI_QUERY;
STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY {
    QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
    dwToken: DWORD,
}}
pub type PHTTP_SERVICE_CONFIG_SSL_CCS_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_CCS_QUERY;
STRUCT!{struct HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM {
    AddrLength: USHORT,
    pAddress: PSOCKADDR,
}}
pub type PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM = *mut HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM;
STRUCT!{struct HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY {
    AddrCount: ULONG,
    AddrList: [SOCKADDR_STORAGE; ANYSIZE_ARRAY],
}}
pub type PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY = *mut HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY;
STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_KEY {
    pUrlPrefix: PWSTR,
}}
pub type PHTTP_SERVICE_CONFIG_URLACL_KEY = *mut HTTP_SERVICE_CONFIG_URLACL_KEY;
STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_PARAM {
    pStringSecurityDescriptor: PWSTR,
}}
pub type PHTTP_SERVICE_CONFIG_URLACL_PARAM = *mut HTTP_SERVICE_CONFIG_URLACL_PARAM;
STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_URLACL_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_URLACL_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_URLACL_SET = *mut HTTP_SERVICE_CONFIG_URLACL_SET;
STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_QUERY {
    QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
    KeyDesc: HTTP_SERVICE_CONFIG_URLACL_KEY,
    dwToken: DWORD,
}}
pub type PHTTP_SERVICE_CONFIG_URLACL_QUERY = *mut HTTP_SERVICE_CONFIG_URLACL_QUERY;
ENUM!{enum HTTP_SERVICE_CONFIG_CACHE_KEY {
    MaxCacheResponseSize = 0,
    CacheRangeChunkSize,
}}
pub type PHTTP_SERVICE_CONFIG_CACHE_KEY = *mut HTTP_SERVICE_CONFIG_CACHE_KEY;
pub type HTTP_SERVICE_CONFIG_CACHE_PARAM = ULONG;
pub type PHTTP_SERVICE_CONFIG_CACHE_PARAM = *mut ULONG;
STRUCT!{struct HTTP_SERVICE_CONFIG_CACHE_SET {
    KeyDesc: HTTP_SERVICE_CONFIG_CACHE_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_CACHE_PARAM,
}}
pub type PHTTP_SERVICE_CONFIG_CACHE_SET = *mut HTTP_SERVICE_CONFIG_CACHE_SET;
pub const HTTP_NULL_ID: ULONGLONG = 0;
#[inline]
pub unsafe fn HTTP_IS_NULL_ID(pid: PHTTP_OPAQUE_ID) -> bool {
    HTTP_NULL_ID == *pid
}
#[inline]
pub unsafe fn HTTP_SET_NULL_ID(pid: PHTTP_OPAQUE_ID) {
    *pid = HTTP_NULL_ID
}
extern "system" {
    pub fn HttpInitialize(
        Version: HTTPAPI_VERSION,
        Flags: ULONG,
        pReserved: PVOID,
    ) -> ULONG;
    pub fn HttpTerminate(
        Flags: ULONG,
        pReserved: PVOID,
    ) -> ULONG;
    pub fn HttpCreateHttpHandle(
        pReqQueueHandle: PHANDLE,
        Reserved: ULONG,
    ) -> ULONG;
    pub fn HttpCreateRequestQueue(
        Version: HTTPAPI_VERSION,
        pName: PCWSTR,
        pSecurityAttributes: PSECURITY_ATTRIBUTES,
        Flags: ULONG,
        pReqQueueHandle: PHANDLE,
    ) -> ULONG;
    pub fn HttpCloseRequestQueue(
        ReqQueueHandle: HANDLE,
    ) -> ULONG;
    pub fn HttpSetRequestQueueProperty(
        Handle: HANDLE,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
        Reserved: ULONG,
        pReserved: PVOID,
    ) -> ULONG;
    pub fn HttpQueryRequestQueueProperty(
        Handle: HANDLE,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
        Reserved: ULONG,
        pReturnLength: PULONG,
        pReserved: PVOID,
    ) -> ULONG;
    pub fn HttpShutdownRequestQueue(
        ReqQueueHandle: HANDLE,
    ) -> ULONG;
    pub fn HttpReceiveClientCertificate(
        ReqQueueHandle: HANDLE,
        ConnectionId: HTTP_CONNECTION_ID,
        Flags: ULONG,
        pSslClientCertInfo: PHTTP_SSL_CLIENT_CERT_INFO,
        SslClientCertInfoSize: ULONG,
        pBytesReceived: PULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpCreateServerSession(
        Version: HTTPAPI_VERSION,
        pServerSessionId: PHTTP_SERVER_SESSION_ID,
        Reserved: ULONG,
    ) -> ULONG;
    pub fn HttpCloseServerSession(
        ServerSessionId: HTTP_SERVER_SESSION_ID,
    ) -> ULONG;
    pub fn HttpQueryServerSessionProperty(
        ServerSessionId: HTTP_SERVER_SESSION_ID,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
        pReturnLength: PULONG,
    ) -> ULONG;
    pub fn HttpSetServerSessionProperty(
        ServerSessionId: HTTP_SERVER_SESSION_ID,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
    ) -> ULONG;
    pub fn HttpAddUrl(
        ReqQueueHandle: HANDLE,
        pFullyQualifiedUrl: PCWSTR,
        pReserved: PVOID,
    ) -> ULONG;
    pub fn HttpRemoveUrl(
        ReqQueueHandle: HANDLE,
        pFullyQualifiedUrl: PCWSTR,
    ) -> ULONG;
    pub fn HttpCreateUrlGroup(
        ServerSessionId: HTTP_SERVER_SESSION_ID,
        pUrlGroupId: PHTTP_URL_GROUP_ID,
        Reserved: ULONG,
    ) -> ULONG;
    pub fn HttpCloseUrlGroup(
        UrlGroupId: HTTP_URL_GROUP_ID,
    ) -> ULONG;
    pub fn HttpAddUrlToUrlGroup(
        UrlGroupId: HTTP_URL_GROUP_ID,
        pFullyQualifiedUrl: PCWSTR,
        UrlContext: HTTP_URL_CONTEXT,
        Reserved: ULONG,
    ) -> ULONG;
    pub fn HttpRemoveUrlFromUrlGroup(
        UrlGroupId: HTTP_URL_GROUP_ID,
        pFullyQualifiedUrl: PCWSTR,
        Flags: ULONG,
    ) -> ULONG;
    pub fn HttpSetUrlGroupProperty(
        UrlGroupId: HTTP_URL_GROUP_ID,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
    ) -> ULONG;
    pub fn HttpQueryUrlGroupProperty(
        UrlGroupId: HTTP_URL_GROUP_ID,
        Property: HTTP_SERVER_PROPERTY,
        pPropertyInformation: PVOID,
        PropertyInformationLength: ULONG,
        pReturnLength: PULONG,
    ) -> ULONG;
    pub fn HttpPrepareUrl(
        Reserved: PVOID,
        Flags: ULONG,
        Url: PCWSTR,
        PreparedUrl: *mut PWSTR,
    ) -> ULONG;
    pub fn HttpReceiveHttpRequest(
        ReqQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        Flags: ULONG,
        pRequestBuffer: PHTTP_REQUEST,
        RequestBufferLength: ULONG,
        pBytesReturned: PULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpReceiveRequestEntityBody(
        ReqQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        Flags: ULONG,
        pBuffer: PVOID,
        EntityBufferLength: ULONG,
        pBytesReturned: PULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpSendHttpResponse(
        ReqQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        Flags: ULONG,
        pHttpResponse: PHTTP_RESPONSE,
        pCachePolicy: PHTTP_CACHE_POLICY,
        pBytesSent: PULONG,
        pReserved1: PVOID,
        Reserved2: ULONG,
        pOverlapped: LPOVERLAPPED,
        pLogData: PHTTP_LOG_DATA,
    ) -> ULONG;
    pub fn HttpSendResponseEntityBody(
        ReqQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        Flags: ULONG,
        EntityChunkCount: USHORT,
        pEntityChunks: PHTTP_DATA_CHUNK,
        pBytesSent: PULONG,
        pReserved1: PVOID,
        Reserved2: ULONG,
        pOverlapped: LPOVERLAPPED,
        pLogData: PHTTP_LOG_DATA,
    ) -> ULONG;
    pub fn HttpWaitForDisconnect(
        ReqQueueHandle: HANDLE,
        ConnectionId: HTTP_CONNECTION_ID,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpWaitForDisconnectEx(
        ReqQueueHandle: HANDLE,
        ConnectionId: HTTP_CONNECTION_ID,
        Reserved: ULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpCancelHttpRequest(
        ReqQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpWaitForDemandStart(
        ReqQueueHandle: HANDLE,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpFlushResponseCache(
        ReqQueueHandle: HANDLE,
        pUrlPrefix: PCWSTR,
        Flags: ULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpAddFragmentToCache(
        ReqQueueHandle: HANDLE,
        pUrlPrefix: PCWSTR,
        pDataChunk: PHTTP_DATA_CHUNK,
        pCachePolicy: PHTTP_CACHE_POLICY,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpReadFragmentFromCache(
        ReqQueueHandle: HANDLE,
        pUrlPrefix: PCWSTR,
        pByteRange: PHTTP_BYTE_RANGE,
        pBuffer: PVOID,
        BufferLength: ULONG,
        pBytesRead: PULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpSetServiceConfiguration(
        ServiceHandle: HANDLE,
        ConfigId: HTTP_SERVICE_CONFIG_ID,
        pConfigInformation: PVOID,
        ConfigInformationLength: ULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpDeleteServiceConfiguration(
        ServiceHandle: HANDLE,
        ConfigId: HTTP_SERVICE_CONFIG_ID,
        pConfigInformation: PVOID,
        ConfigInformationLength: ULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpQueryServiceConfiguration(
        ServiceHandle: HANDLE,
        ConfigId: HTTP_SERVICE_CONFIG_ID,
        pInput: PVOID,
        InputLength: ULONG,
        pOutput: PVOID,
        OutputLength: ULONG,
        pReturnLength: PULONG,
        pOverlapped: LPOVERLAPPED,
    ) -> ULONG;
    pub fn HttpDeclarePush(
        RequestQueueHandle: HANDLE,
        RequestId: HTTP_REQUEST_ID,
        Verb: HTTP_VERB,
        Path: PCWSTR,
        Query: PCSTR,
        Headers: PHTTP_REQUEST_HEADERS,
    ) -> ULONG;
    pub fn HttpUpdateServiceConfiguration(
        Handle: HANDLE,
        ConfigId: HTTP_SERVICE_CONFIG_ID,
        ConfigInfo: PVOID,
        ConfigInfoLength: ULONG,
        Overlapped: LPOVERLAPPED,
    ) -> ULONG;
}

[ Dauer der Verarbeitung: 0.4 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge