Диспетчер учетных данных для Vista/Windows 7

У меня есть диспетчер учетных данных, реализованный в VC++, который фиксирует учетные данные во время процесса входа в систему. Он хорошо работает в 32-битной среде XP/Vista/Windows 7. Но не работает в 64 бит. Любая идея ? Заранее благодарю за любую помощь


person Unicorn    schedule 21.01.2010    source источник
comment
Уточните, пожалуйста, не работает. Он вызывается, но работает правильно или, например, вообще не вызывается?   -  person Arnout    schedule 21.01.2010
comment
Изначально dll вообще не вызывалась, но после компиляции dll для X64 она вызывается, но теперь я не дохожу до реализации NPLogonNotify dll.   -  person Unicorn    schedule 21.01.2010


Ответы (2)


Если вы хотите, чтобы ваша DLL загружалась 64-битным процессом, ваша DLL должна быть скомпилирована для 64-битной версии.

Если вы хотите, чтобы ваша DLL загружалась 32-битным процессом, ваша DLL должна быть скомпилирована для 32-битной версии. Это верно как для 64-разрядных систем Windows, так и для 32-разрядных систем Windows.

Джон дал вам полезную ссылку, хотя формулировка Джона неверна. Приложение (exe), созданное для 32-битной версии, будет работать в 64-битной Windows, но оно может загружать только 32-битные библиотеки DLL.

person Windows programmer    schedule 21.01.2010
comment
Согласен, я скомпилировал его для 64-битной версии, и dllmain вызывается при входе в систему (проверено путем размещения журналов). Но теперь проблема в том, что я вообще не получаю функцию NOLogonNotify (которую я получаю в 32-битной версии) .. Любые мысли ?????? - person Unicorn; 21.01.2010
comment
Возможно, вам не хватает некоторых записей реестра. Если 32-битное приложение добавило записи реестра, то оно, вероятно, поместило их в узел WoW6432, который даже не будет замечен 64-битными приложениями. Вы должны убедиться, что они находятся в правильном месте для регистрации обычных 64-разрядных учетных данных. - person Windows programmer; 22.01.2010
comment
Что ж, заработало, проблема была в исключении во время выполнения с соглашением о вызовах. Спасибо за вашу помощь за предложение 32-битной dll против 64-битной dll. - person Unicorn; 25.01.2010

Вы строили для 64-битной платформы в Visual Studio?

Приложение Visual C++, созданное для 32-разрядной среды, не будет работать напрямую в 64-разрядной среде. И хотя приложения будут работать с использованием уровня совместимости WOW64, библиотеки DLL должны быть 64-разрядными, если они должны загружаться 64-разрядной операционной системой.

Поскольку это действительно так, вам необходимо создать проект для 64-битной платформы (Visual Studio 2005 и более поздние версии имеют 64-битный компилятор).

См. ссылку http://msdn.microsoft.com/en-us/library/ms185328.aspx для получения дополнительных сведений.

person JHK    schedule 21.01.2010
comment
@John: Я почти уверен, что сборка приложения для 32-битной среды работает для 64-битной с использованием WOW64. - person Unicorn; 21.01.2010