From 3bfcfe82b9e7fe18cdbd3a06b219a8ce40188a23 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 29 Jul 2025 19:36:20 +0200 Subject: [PATCH] windows: document toolchain support for some macros The oldest MS SDK I checked is 6.0A (VS2008). Versions are approximate beyond 7.1A. I only have two Win10 SDKs to verify: 10.0.16299.0 (VS2017-15.4) and 10.0.22621.0 (VS2022). Ref: https://en.wikipedia.org/wiki/Microsoft_Windows_SDK Ref: https://developer.microsoft.com/windows/downloads/sdk-archive/index-legacy (recent versions mostly) Closes #18085 --- lib/cf-socket.c | 2 ++ lib/curl_sspi.h | 6 ++++++ lib/rand.c | 1 + lib/sha256.c | 1 + lib/urldata.h | 2 +- lib/vtls/schannel.c | 5 ++++- lib/vtls/schannel_int.h | 2 ++ lib/vtls/schannel_verify.c | 2 +- 8 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/cf-socket.c b/lib/cf-socket.c index 0a2b620ff2..06c9a74368 100644 --- a/lib/cf-socket.c +++ b/lib/cf-socket.c @@ -164,6 +164,7 @@ static void nosigpipe(struct Curl_easy *data, #define KEEPALIVE_FACTOR(x) #endif +/* Offered by mingw-w64 and MS SDK. Latter only when targeting Win7+. */ #if defined(USE_WINSOCK) && !defined(SIO_KEEPALIVE_VALS) #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) @@ -1406,6 +1407,7 @@ static void cf_socket_adjust_pollset(struct Curl_cfilter *cf, #ifdef USE_WINSOCK +/* Offered by mingw-w64 v13+. MS SDK 7.0A+. */ #ifndef SIO_IDEAL_SEND_BACKLOG_QUERY #define SIO_IDEAL_SEND_BACKLOG_QUERY 0x4004747B #endif diff --git a/lib/curl_sspi.h b/lib/curl_sspi.h index a7bfd7e85d..5119f34230 100644 --- a/lib/curl_sspi.h +++ b/lib/curl_sspi.h @@ -65,6 +65,7 @@ extern PSecurityFunctionTable Curl_pSecFn; #define SP_NAME_NEGOTIATE "Negotiate" #define SP_NAME_KERBEROS "Kerberos" +/* Offered by mingw-w64 v9+. MS SDK 7.0A+. */ #ifndef ISC_REQ_USE_HTTP_STYLE #define ISC_REQ_USE_HTTP_STYLE 0x01000000 #endif @@ -288,12 +289,15 @@ extern PSecurityFunctionTable Curl_pSecFn; #define SEC_E_KDC_CERT_REVOKED ((HRESULT)0x8009035BL) #endif #endif /* __MINGW32CE__ */ +/* Offered by mingw-w64 v8+. MS SDK 6.0A+. */ #ifndef SEC_E_INVALID_PARAMETER #define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL) #endif +/* Offered by mingw-w64 v8+. MS SDK 6.0A+. */ #ifndef SEC_E_DELEGATION_POLICY #define SEC_E_DELEGATION_POLICY ((HRESULT)0x8009035EL) #endif +/* Offered by mingw-w64 v8+. MS SDK 6.0A+. */ #ifndef SEC_E_POLICY_NLTM_ONLY #define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL) #endif @@ -324,6 +328,8 @@ extern PSecurityFunctionTable Curl_pSecFn; #define SEC_I_NO_LSA_CONTEXT ((HRESULT)0x00090323L) #endif #endif /* __MINGW32CE__ */ + +/* Offered by mingw-w64 v8+. MS SDK 6.0A+. */ #ifndef SEC_I_SIGNATURE_NEEDED #define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL) #endif diff --git a/lib/rand.c b/lib/rand.c index d6f4a2dffc..a1a5e42c2b 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -55,6 +55,7 @@ # ifdef _MSC_VER # pragma comment(lib, "bcrypt.lib") # endif + /* Offered by mingw-w64 v3+. MS SDK v7.0A+. */ # ifndef BCRYPT_USE_SYSTEM_PREFERRED_RNG # define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 # endif diff --git a/lib/sha256.c b/lib/sha256.c index 4d71c9b4ad..ca026782a3 100644 --- a/lib/sha256.c +++ b/lib/sha256.c @@ -191,6 +191,7 @@ struct sha256_ctx { }; typedef struct sha256_ctx my_sha256_ctx; +/* Offered when targeting Vista (XP SP2+) */ #ifndef CALG_SHA_256 #define CALG_SHA_256 0x0000800c #endif diff --git a/lib/urldata.h b/lib/urldata.h index 464d644bd9..ec39e58dca 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -734,7 +734,7 @@ struct connectdata { /*************** Request - specific items ************/ #if defined(USE_WINDOWS_SSPI) && defined(SECPKG_ATTR_ENDPOINT_BINDINGS) - CtxtHandle *sslContext; + CtxtHandle *sslContext; /* mingw-w64 v9+. MS SDK 7.0A+. */ #endif #ifdef USE_NTLM diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c index 1d20e144c6..34d48126b4 100644 --- a/lib/vtls/schannel.c +++ b/lib/vtls/schannel.c @@ -117,6 +117,7 @@ * #define failf(x, y, ...) printf(y, __VA_ARGS__) */ +/* Offered when targeting Vista (XP SP2+) */ #ifndef CALG_SHA_256 #define CALG_SHA_256 0x0000800c #endif @@ -127,10 +128,12 @@ #define ALG_CLASS_DHASH ALG_CLASS_HASH #endif +/* Offered by mingw-w64 v4+. MS SDK 6.0A+. */ #ifndef PKCS12_NO_PERSIST_KEY #define PKCS12_NO_PERSIST_KEY 0x00008000 #endif +/* Offered by mingw-w64 v4+. MS SDK ~10+/~VS2017+. */ #ifndef CERT_FIND_HAS_PRIVATE_KEY #define CERT_FIND_HAS_PRIVATE_KEY (21 << CERT_COMPARE_SHIFT) #endif @@ -1672,7 +1675,7 @@ static CURLcode schannel_connect(struct Curl_cfilter *cf, if(ssl_connect_done == connssl->connecting_state) { connssl->state = ssl_connection_complete; -#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS +#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS /* mingw-w64 v9+. MS SDK 7.0A+. */ /* When SSPI is used in combination with Schannel * we need the Schannel context to create the Schannel * binding to pass the IIS extended protection checks. diff --git a/lib/vtls/schannel_int.h b/lib/vtls/schannel_int.h index a8ebf74c67..d8473aedb0 100644 --- a/lib/vtls/schannel_int.h +++ b/lib/vtls/schannel_int.h @@ -34,6 +34,7 @@ #define HAS_MANUAL_VERIFY_API #endif +/* These two macros are missing from mingw-w64 in UWP mode as of v13 */ #if defined(CryptStringToBinary) && defined(CRYPT_STRING_HEX) && \ !defined(DISABLE_SCHANNEL_CLIENT_CERT) #define HAS_CLIENT_CERT_PATH @@ -50,6 +51,7 @@ #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)(size_t)10) #endif +/* Offered by mingw-w64 v8+, MS SDK ~10+/~VS2022+ */ #ifndef SCH_CREDENTIALS_VERSION #define SCH_CREDENTIALS_VERSION 0x00000005 diff --git a/lib/vtls/schannel_verify.c b/lib/vtls/schannel_verify.c index 9139bf2f82..cc056e6996 100644 --- a/lib/vtls/schannel_verify.c +++ b/lib/vtls/schannel_verify.c @@ -94,7 +94,7 @@ struct cert_chain_engine_config_win8 { DWORD dwExclusiveFlags; }; -/* Not defined before mingw-w64 4.0.0 */ +/* Offered by mingw-w64 v4+. MS SDK ~10+/~VS2017+. */ #ifndef CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG #define CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG 0x00000001 #endif -- 2.47.2