Как я могу создать образцы поставщика учетных данных Windows 7 с помощью Visual Studio 2012?

Я работаю над созданием настраиваемой оболочки поставщика учетных данных. Windows 7 SDK Sample Credential Provider Wrapper делает большую часть того, что я хочу, поэтому я планировал начать с этого и внести изменения, чтобы он делал все, что мне нужно.

Однако я столкнулся с небольшой проблемой. Я хотел бы использовать Visual Studio 2012 для разработки. Примеры были созданы с помощью Visual Studio 2008. Я смог успешно создать и использовать поставщиков образцов при использовании Visual Studio 2008. Однако, когда я пытаюсь импортировать проект в Visual Studio 2012, он будет компилироваться нормально, но это не так » не работает, когда я пытаюсь его использовать.

Я смог проверить с помощью WinDbg, что провайдер учетных данных загружается, когда на экране блокировки / входа в систему ничего не отображается. К сожалению, я мало что знаю о WinDbg, чтобы отследить проблему с помощью этого инструмента.

Я видел предложение, появившееся в другом месте при исследовании проблемы, связанной с проблемами, возникающими при компиляции поставщика учетных данных для 64-разрядной машины с использованием платформы win32. Я использую 64-битную машину и убедился, что компилирую на платформе x64 в обеих версиях Visual Studio.

Также стоит упомянуть, что после преобразования VS2008 в VS2012, которое, казалось, прошло без проблем, мне пришлось изменить параметр «Библиотека времени выполнения» с «Многопоточная DLL (/ MD)» на «Многопоточная (/ MT). ". Это была исходная установка в проекте VS2008. Было возможно заставить поставщик учетных данных "работать" (иначе говоря, не выдавать ошибку об отсутствующей зависимости DLL) без внесения этого изменения, но мне пришлось сначала установить Visual C ++ Redistributable для Visual Studio 2012. Внесение этого изменения удаляет эту зависимость.

Любые предложения о том, как я могу решить эту проблему и успешно скомпилировать образцы поставщика учетных данных в VS2012?

ОБНОВЛЕНИЕ

После установки VS2008 и VS2012 на одном компьютере я смог изменить свойство «Platform Toolset» с «Visual Studio 2012 (v110)» на «Visual Studio 2008 (v90)». После внесения этого изменения компиляция заработала, и провайдер учетных данных работал так же, как и при компиляции с использованием VS2008 напрямую. Никакие другие настройки в этом тесте не менялись. Я могу работать с этим решением, но мне кажется, что я смогу заставить его работать с помощью набора инструментов платформы VS2012, поэтому я бы предпочел пока не останавливаться на этом, потому что компоновщик VS2008 может быть очень глючным.


person Kenneth    schedule 07.10.2013    source источник


Ответы (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

person Kenneth    schedule 11.10.2013
comment
Привет, @Kenneth, у меня была такая же проблема, и я попробовал ваше предложение, но оно не сработало, какие-либо другие изменения, которые вы помните? - person Jacobi; 16.11.2015