在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
中,定义CERT_CHAIN_ENGINE_CONFIG
为
typedef struct _CERT_CHAIN_ENGINE_CONFIG {
DWORD cbSize;
HCERTSTORE hRestrictedRoot;
HCERTSTORE hRestrictedTrust;
HCERTSTORE hRestrictedOther;
DWORD cAdditionalStore;
HCERTSTORE* rghAdditionalStore;
DWORD dwFlags;
DWORD dwUrlRetrievalTimeout; // milliseconds
DWORD MaximumCachedCertificates;
DWORD CycleDetectionModulus;
*#if (NTDDI_VERSION >= NTDDI_WIN7)
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
#endif*
} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
我在 XP sp3 机器上使用 Visual Studio 2010,在这种情况下,我希望上述结构中的以下两个成员变灰。但这并没有发生,
#if (NTDDI_VERSION >= NTDDI_WIN7)
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
#endif
NTDDI_VERSION
in-turn 定义sdkddkver.h
如下,并_WIN32_WINNT
以某种方式采用NTDDI_WIN7
在我的情况下不正确的值,因为我的是 XP SP3 机器。
#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
#define _WIN32_WINNT 0x0601
#endif
#ifndef NTDDI_VERSION
#ifdef _WIN32_WINNT
// set NTDDI_VERSION based on _WIN32_WINNT
#define NTDDI_VERSION NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
#else
#define NTDDI_VERSION 0x06010000
#endif
#endif
有问题的结构的上述两个成员CERT_CHAIN_ENGINE_CONFIG
不存在 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinCrypt.h
但我的 2010 Visual Studio 项目自动从头文件和 lib 文件中提取C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
由于结构冲突,我得到parameter is incorrect
请告诉我如何解决这个问题?
我是否必须安装 Visual Studio 2010 sp1?
我在网上找到了一个参考,它说初始化结构将解决问题,但它不会,因为有问题的两个参数不会变灰,并且会在构建时被采用。
更新1:
我的项目设置:
$(VCInstalDir) - >C:\Program Files\Microsoft Visual Studio 10.0\VC
$(WindowsSdkDir) ->C:\Program Files\Microsoft SDKs\Windows\v7.0A
$(FrameworkSdkDir) ->C:\Program Files\Microsoft SDKs\Windows\v7.0A
库文件设置,
$(VCInstallDir)lib
$(VCInstallDir)atlmfc\lib
$(WindowsSdkDir)lib
$(FrameworkSDKDir)\lib
更新 2: 我的预处理器定义是
WIN32;_DEBUG;_WINDOWS;_USRDLL;MY_DLL_EXPORTS;%(PreprocessorDefinitions)
%(PreprocessorDefinitions) 继承值如下
_WINDLL
_MBCS
谢谢