【问题标题】:How can I build the Windows 7 Credential Provider Samples using Visual Studio 2012?如何使用 Visual Studio 2012 构建 Windows 7 凭据提供程序示例?
【发布时间】:2013-10-14 05:11:23
【问题描述】:

我正在创建一个自定义凭据提供程序包装器。 Windows 7 SDK Sample Credential Provider Wrapper 完成了我想要的大部分工作,所以我的计划是从它开始并进行修改,以便它完成我需要的一切。

不过,我遇到了一个小问题。我想使用 Visual Studio 2012 来做开发工作。示例是使用 Visual Studio 2008 创建的。在使用 Visual Studio 2008 时,我已经能够成功构建和使用示例提供程序。但是,当我尝试将项目导入 Visual Studio 2012 时,它会编译得很好,但它没有当我尝试使用它时不起作用。

我已经能够使用 WinDbg 验证凭据提供程序在锁定/登录屏幕上时正在加载,但没有显示任何内容。不幸的是,我对 WinDbg 了解不多,无法使用该工具追踪问题。

我在研究有关使用 win32 平台为 64 位计算机编译凭据提供程序时出现的问题时,在其他地方看到了一个建议。我使用的是 64 位机器,并确保在两个版本的 Visual Studio 中都使用 x64 平台进行编译。

另外值得一提的是,在进行 VS2008 到 VS2012 的转换之后似乎没有问题,我不得不将“运行时库”设置从“多线程 DLL (/MD)”更改为“多线程 ( /公吨)”。这是 VS2008 项目中的原始设置。可以在不进行此更改的情况下让凭据提供程序“工作”(也就是不会引发有关缺少 DLL 依赖项的错误),但我必须首先为 Visual Studio 2012 安装 Visual C++ Redistributable。进行此更改会删除该依赖项。

关于如何解决此问题并在 VS2012 中成功编译凭据提供程序示例有什么建议吗?

更新

在同一台机器上安装 VS2008 和 VS2012 后,我能够将“Platform Toolset”属性从“Visual Studio 2012 (v110)”更改为“Visual Studio 2008 (v90)”。一旦进行了此更改,编译工作并且凭证提供程序就像直接使用 VS2008 编译时一样工作。此测试未更改其他设置。我可以使用这个解决方案,但似乎我应该能够使用 VS2012 平台工具集让它工作,所以我不想解决这个问题,因为 VS2008 链接器可能非常有问题。

【问题讨论】:

    标签: c++ visual-studio visual-studio-2012 visual-studio-2008 credential-providers


    【解决方案1】:

    事实证明,随着 Windows 8 的发布以及随后对凭据提供程序的更改,从 Visual Studio 2012 开始,常量 CLSID_PasswordCredentialProvider 开始指向 v2 密码凭据提供程序而不是 v1 密码凭据提供程序(版本Windows 7 使用)。因此,为了使包装的凭证提供程序示例正确编译,这是我正在测试的示例,有必要在 CSampleProvider.cpp 中更改以下行:

    hr = CoCreateInstance(CLSID_PasswordCredentialProvider, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pUnknown));
    

    改为指向 V1 凭据提供程序:

    hr = CoCreateInstance(CLSID_V1PasswordCredentialProvider, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pUnknown));
    

    完成此操作并重新编译和安装项目后,它会按预期工作。

    有关此问题的更多信息,请访问:http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/376d6eb6-1a40-4721-abdc-27870966a1da/how-can-i-build-the-windows-7-credential-provider-samples-using-visual-studio-2012?forum=windowsgeneraldevelopmentissues

    【讨论】:

    • 嗨@Kenneth,我遇到了同样的问题,我尝试了你的建议,但没有奏效,你还记得任何其他更改吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多