From 60df3c9c525c756f64e6c30435be1aa974013cd3 Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Wed, 24 Jun 2026 14:18:03 +0000 Subject: [PATCH] fix(windows-drivers): define IDD_STUB for the iddcx bindgen pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The iddcx bindgen failed with IddCxFuncEnum.h "IDDCX_VERSION_MAJOR is not defined" + a cascade of "must use struct tag" on IDARG_* types — NOT the feared #515 header conflict (IddCx parsed fine alongside Base+Wdf). IddCx.h needs STUB mode (function-table dispatch) for the version macros to resolve; add -DIDD_STUB to generate_iddcx, matching the wdf-umdf oracle. Deliberately NOT WDF_STUB (wdk-sys parses wdf non-stubbed; desyncing only here would break WDF type-identity). Co-Authored-By: Claude Opus 4.8 (1M context) --- packaging/windows/drivers/vendor/wdk-sys/build.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packaging/windows/drivers/vendor/wdk-sys/build.rs b/packaging/windows/drivers/vendor/wdk-sys/build.rs index f7b1625..b96d51b 100644 --- a/packaging/windows/drivers/vendor/wdk-sys/build.rs +++ b/packaging/windows/drivers/vendor/wdk-sys/build.rs @@ -356,6 +356,13 @@ fn generate_iddcx(out_path: &Path, config: &Config) -> Result<(), ConfigError> { let bindgen_builder = { bindgen::Builder::wdk_default(config)? + // IddCx headers MUST be in STUB mode (function-table dispatch): IddCxFuncEnum.h otherwise + // errors "IDDCX_VERSION_MAJOR is not defined", cascading into "must use 'struct' tag" on the + // IDARG_* types (their version-gated typedefs get skipped). `#define IDD_STUB` is exactly + // what the proven wdf-umdf oracle uses. Do NOT add WDF_STUB — wdk-sys parses wdf.h + // non-stubbed, and stubbing it only here would desync the WDF types the iddcx module resolves + // against, breaking type-identity. + .clang_arg("-DIDD_STUB") .with_codegen_config((CodegenConfig::TYPES | CodegenConfig::VARS).complement()) .header_contents("iddcx-input.h", &header_contents) // Allowlist by the "iddcx" path component (separator-agnostic) so ONLY IddCx items are