首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在32位程序中使用64位驱动程序。视窗

在32位程序中使用64位驱动程序。视窗
EN

Stack Overflow用户
提问于 2009-03-02 14:48:09
回答 3查看 13K关注 0票数 4

这只是一个半途而废的编程问题。首先,我有一个PCI-Express卡和32/64位驱动程序。目标操作系统必须是Windows 64位系统。我读到在Vista64下,所有的驱动程序都必须经过64位驱动程序认证。这是64位操作系统的一般限制吗?这是否也适用于"XP 64“或任何Linux系统?

因此,为了简单起见,假设我在Vista64下为我的PCIe卡使用了64位驱动程序,并有一堆64位DLL来使用卡的功能。另一方面,有一个大型的传统32位exe程序,它需要使用PCIe设备。将程序转换为64位将是一项非常巨大的工作。

那么,如何将32位程序和64位驱动程序结合在一起呢?我读到混合32/64位二进制文件和all是完全不可能的,但这对我来说很难相信。我确信你可以从32位应用程序中打印出Vista64下的文档,Windows会以某种方式将其封装到64位打印机驱动程序中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-02 16:41:26

64位认证只在Vista下是必需的;非Windows平台没有认证机构,我不相信XP或Windows Server会检查认证(但不确定,这可能取决于您使用的是哪个服务包)。

如果您通过Windows API使用驱动程序,那么应该不会有任何问题;Windows将在内核中执行32<->64位转换。如果您试图在自己的进程中加载驱动程序,这可能是不可能的。正如Dirk所说,您必须在它自己的进程中运行它,并通过COM服务器进行通信。如果你必须在更高的特权执行级别运行你的驱动程序,并且想要从用户模式调用它,我不确定你必须跳过什么障碍。

希望您的64位DLL提供32位API,或者Windows提供标准驱动程序接口(如果它是常见的I/O设备,如显示器或网卡)。

票数 3
EN

Stack Overflow用户

发布于 2009-03-02 15:57:37

您的32位应用程序是否直接调用驱动程序?(我猜是一个用于驱动程序的模拟器!)

在32位和64位dlls之间通信的唯一方法是编写一个COM服务器来管理通信(读取:包装应用程序调用或64位驱动程序响应)。

有一件事让我吃了一惊:当我第一次编写这个COM服务器时(是的,在我知道这个技巧之前,我也不得不忍受许多不眠之夜),我只构建了(自动生成的)代理/存根dll的32位版本。在我开始了解解决方案之前,又经历了一轮不眠之夜:为32位和64位构建代理/存根dll。32位端处理32位端(在您的示例中是应用程序),64位端处理64位端(驱动程序)。COM管理不同版本的代理/存根之间的通信方式。哦,一定要在你的系统上注册服务器。很简单,对吧?

票数 3
EN

Stack Overflow用户

发布于 2009-03-02 15:00:52

我认为驱动程序的全部要点是抽象出硬件的实际工作方式,并为软件提供一个公共接口。在这种情况下,PCIe驱动程序需要是64位的,这样它才能充当Windows和硬件之间的中间人,但我认为32位的应用程序可以毫无困难地访问设备。

你读到的不兼容性的意思是32位和64位程序集不能是同一应用程序的一部分-应用程序必须针对其中的一个或另一个,尽管32位应用程序通常可以使用WoW64在Windows x64上运行良好,它只是充当翻译器。

你目前是否遇到了问题,或者你只是在假设地问?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/602587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档