3

我正在创建一个自定义凭据提供者包装。 Windows 7 SDK Sample Credential Provider Wrapper可以完成我想要的大部分工作,所以我的计划是以此为起点并进行修改,以便它能够完成我需要的所有工作。如何使用Visual Studio 2012构建Windows 7凭据提供程序示例?

但是我遇到了一个小问题。我想使用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++可再分发程序。进行此更改将消除该依赖关系。

有关如何解决此问题并成功编译VS2012中的凭据提供程序示例的任何建议?

UPDATE

越来越安装在同一台机器我能 “平台工具集” 财产变 “的Visual Studio 2012(V110)” 对VS2008和VS2012后 “的Visual Studio 2008(V90)” 。一旦这个改变完成了编译工作,凭证提供者就像直接编译VS2008时一样工作。此测试没有改变其他设置。我可以使用这个解决方案,但似乎我应该能够使用VS2012平台工具集来工作,所以我宁愿不去解决这个问题,因为VS2008链接器可能非常麻烦。

回答

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

+0

嗨@Kenneth,我有同样的问题,我想你的建议,但它不工作,你还记得任何其他变化? – Jacobi

相关问题