我正在创建自定义凭据提供程序包装器。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 Studio 2012的Visual C ++ Redistributable。进行此更改将删除该依赖项。
关于如何解决此问题并成功在VS2012中编译凭据提供程序示例的任何建议?
更新
在同一台计算机上安装了VS2008和VS2012之后,我可以将“平台工具集”属性从“ Visual Studio 2012(v110)”更改为“ Visual Studio 2008(v90)”。一旦进行了此更改,就可以像直接使用VS2008进行编译时一样,进行编译并使用凭据提供程序。此测试未更改其他设置。我可以使用此解决方案,但似乎我应该可以使用VS2012平台工具集来使它起作用,所以我不希望暂时就此解决问题,因为VS2008 Linker可能有很多问题。
事实证明,随着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凭证供应商样本使用Visual Studio 2012?forum = windowsgeneraldevelopmentissues
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句