如何使用Visual Studio 2012构建Windows 7凭据提供程序示例?

3
我正在创建一个自定义凭据提供程序包装器。Windows 7 SDK示例凭据提供程序包装器已经完成了我想要的大部分工作,因此我的计划是从那里开始,并进行修改,以便它可以做到我需要的一切。
然而,我遇到了一个小问题。我想使用Visual Studio 2012进行开发工作。这些示例是使用Visual Studio 2008创建的。在使用Visual Studio 2008时,我已经成功构建和使用了示例提供程序。但是,当我尝试将项目导入Visual Studio 2012时,它会编译得很好,但在尝试使用它时却无法正常工作。
我已经能够使用WinDbg验证凭据提供程序在锁定/登录屏幕上加载,但没有显示任何内容。不幸的是,我对WinDbg不太了解,无法使用该工具跟踪问题。
在研究出现问题的情况时,我看到有人建议在win32平台上为64位机器编译凭据提供程序时会出现问题。我正在使用64位机器,并确保在两个版本的Visual Studio中都使用x64平台进行编译。
另外值得一提的是,在执行VS2008到VS2012转换后,我必须将“运行时库”设置从“多线程DLL(/MD)”更改为“多线程(/MT)”。这是VS2008项目中的原始设置。可以在不进行此更改的情况下使凭据提供程序“工作”(即不会抛出关于缺少DLL依赖项的错误),但我必须先安装Visual C++ Redistributable for Visual Studio 2012。进行此更改可消除该依赖项。
请问如何解决此问题并成功地在VS2012中编译凭据提供程序示例?
更新:
在同一台机器上安装了VS2008和VS2012后,我能够将“平台工具集”属性从“Visual Studio 2012(v110)”更改为“Visual Studio 2008(v90)”。进行此更改后,编译工作正常,并且凭据提供程序的工作方式与直接使用VS2008编译时相同。在此测试中未更改其他设置。我可以使用这个解决方案,但似乎应该能够使用VS2012平台工具集来解决此问题,因此我不想就此放弃,因为VS2008链接器可能存在很多错误。
1个回答

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,我遇到了相同的问题,我尝试了你的建议,但没有起作用,你还记得其他的改变吗? - Jacobi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接