В 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;
Я использую Visual Studio 2010 на машине с XP sp3, и в этом случае я ожидаю, что следующие два члена в вышеупомянутой структуре будут выделены серым цветом. Но этого не происходит,
#if (NTDDI_VERSION >= NTDDI_WIN7)
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
#endif
NTDDI_VERSION
в свою очередь определяется в 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
Но мой проект Visual Studio 2010 автоматически извлекает заголовочные файлы и файлы lib из C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
Из-за конфликтующих структур я получаю parameter is incorrect
Посоветуйте, пожалуйста, как мне решить эту проблему?
Должен ли я установить Visual Studio 2010 SP1?
Я обнаружил одну ссылку в сети , где говорится, что инициализация структуры решит проблему, но это не так, поскольку два рассматриваемых параметра не будут выделены серым цветом и будут приняты во время сборки .
Update1:
Настройки моего проекта:
$ (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
Спасибо