2010-01-21 101 views
0

我有用VC++实现的凭证管理器,它在登录过程中捕获凭证。它适用于XP/Vista/Windows 7 32位环境。但是不能在64位工作。 有什么想法? 在此先感谢您的帮助Vista/Windows 7的凭证管理器

+0

请说明“不能工作”。它是否被调用,但功能正常,或者根本没有被调用,例如? – Arnout 2010-01-21 08:51:55

+0

最初dll根本没有被调用,但在为X64编译dll后,它被调用,但现在我没有达到NPLogonNotify的dll实现。 – Unicorn 2010-01-21 09:17:55

回答

2

如果你想让你的DLL被64位进程加载,你的DLL必须被编译为64位。

如果你想让你的DLL被32位进程加载,你的DLL必须被编译为32位。在64位Windows系统和32位Windows系统上都是如此。

约翰给了你一个有用的链接,尽管约翰的措辞是错误的。一个为32位构建的应用程序(exe)将在64位Windows上运行,但它只能加载32位DLL。

+0

同意,我编译它为64位和dllmain被称为winlogon(通过放置日志验证)。但现在的问题是我没有收到“NOLogonNotify”功能(我在32位获得).. 任何想法?????? – Unicorn 2010-01-21 09:19:40

+0

您可能会缺少一些注册表项。如果一个32位应用程序添加了注册表项,那么该应用程序可能会将它们放入WoW6432节点,这甚至不会被64位应用程序注意到。您需要确保它们位于普通64位凭据注册的正确位置。 – 2010-01-21 23:06:24

+0

好吧,得到它的工作,问题是运行时异常调用约定。感谢您为建议32位DLL与64位DLL的帮助。 – Unicorn 2010-01-25 05:59:21

0

您是否为Visual Studio中的64位平台构建?

为32位环境构建的Visual C++应用程序不能直接在64位环境中工作。尽管应用程序可以使用WOW64兼容层,但如果要由64位操作系统加载,则DLL 必须为。由于这确实是这种情况,因此您需要为64位平台(Visual Studio 2005及更高版本具有64位编译器)构建项目。

查看链接http://msdn.microsoft.com/en-us/library/ms185328.aspx了解更多详情。

+1

@John:我很确定使用WOW64的32位env的应用程序版本适用于64位。 – Unicorn 2010-01-21 09:16:07