写 64 位打印机驱动程序

08/25/2020

本文内容

如果你编写的是64位驱动程序或编写可编译为在32位和64位系统上运行的驱动程序,请遵循将 驱动程序移植到64位 Windows中的64位移植指导原则。 本主题介绍编写64位打印机驱动程序时可能遇到的一些限制和问题。

有关使用修饰来识别64位体系结构的详细信息,请参阅以下主题:

设备上下文句柄的限制

如果32位应用程序正在64位版本的 Microsoft Windows 操作系统上运行,则在 Splwow64.exe thunk 进程的上下文中运行的打印机驱动程序插件不应调用 GDI CreateDC 函数;此调用将失败。

编写64位驱动程序时遇到的问题

在现有的32位驱动程序代码中,请注意指针类型和整数类型(如 DWORD 或 ULONG)之间的转换。 如果你有为32位计算机编写代码的经验,则可以使用来假定指针值适合 DWORD 值或 ULONG。 对于64位代码,此假设是危险的。 如果将指针转换为类型 DWORD 或 ULONG,则可能会截断64位指针。

相反,将指针强制转换为类型 DWORD _ ptr 或 ULONG _ ptr。 类型为 DWORD _ ptr 或 ULONG ptr 的无符号整数 _ 始终足够大以存储整个指针,无论代码是针对32位计算机还是64位计算机编译的。

例如, OEMCUIPPARAM 结构中的 pDrvOptItems 指针字段的类型为 ULONG _ PTR。 下面的代码示例演示了将64位指针值复制到此字段时不会执行的操作。

PUSERDATA pData;

OEMCUIPPARAM->pDrvOptItems.UserData = (ULONG)pData; // Wrong

前面的代码示例将 pData 指针转换为类型 ULONG,如果 sizeof (PDATA) > sizeof (ULONG) ,则会截断指针值。 正确的方法是将指针转换为 ULONG _ PTR,如下面的代码示例中所示。

PUSERDATA pData;

OEMCUIPPARAM->pDrvOptItems.UserData = (ULONG_PTR)pData; // Correct

前面的代码示例保留指针值的所有64位。

内联64位函数(如 PtrToUlong 和 UlongToPtr )在指针和整数类型之间安全转换,而不依赖于这些类型的相对大小假设。 如果一种类型的长度较短,则必须在转换为较长的类型时进行扩展。 如果通过使用符号位或零填充来扩展较短的类型,则每个 Win64 函数都可以处理这些情况。 请考虑以下代码示例。

ULONG ulHWPhysAddr[NUM_PHYS_ADDRS];

ulSlotPhysAddr[0] = ULONG(pulPhysHWBuffer) + HW_BUFFER_SIZE; // wrong

应将上面的代码示例替换为下面的代码示例。

ULONG_PTR ulHWPhysAddr[NUM_PHYS_ADDRS];

ulSlotPhysAddr[0] = PtrToUlong(pulPhysHWBuffer) + HW_BUFFER_SIZE; // correct

第二个代码示例是首选的,即使

ulSlotPhysAddr

可能表示仅32位长而不是64位的硬件寄存器的值。 有关在指针和整数类型之间进行转换的所有新的 Win64 helper 函数的列表,请参阅 新的数据类型。

64位计算机连接网络打印机驱动程序,写 64 位打印机驱动程序相关推荐

  1. 64位计算机连接网络打印机驱动程序,为运行 64 位版本的打印机查找兼容的打印机Windows - Windows Server | Microsoft Docs...

    如何为运行 64 位版本的打印机的计算机查找兼容的打印机Windows 09/08/2020 本文内容 本文介绍如何为运行 64 位版本 Windows 的计算机查找兼容的打印机Windows. 适用 ...

  2. 怎样删除usb计算机连接网络打印机驱动,USB无法识别打印机的解决办法和教程

    现在绝大部分常用打印机都是USB接口,常用型号连接到USB接口,系统一般都能默认识别并安装驱动:不常用型号打印机和精简操作系统一般也都能识别出打印机,但需要手动下载或是用光盘安装打印机驱动,打印机方可 ...

  3. 32位计算机直接访问的内存,32位64位-32位计算机可以访问多少内存?

    32位64位-32位计算机可以访问多少内存? 32位或64位计算机是什么意思? 这是处理器架构-一台32位计算机可以与64位计算机同时读写32位数据-. 32位计算机可以访问的最大内存是多少? 它是2 ...

  4. 32位计算机是指该cpu,32位机指的是计算机的CPU怎么样?

    32位机指的是计算机的CPU能够同时处理32位二进制数据.32位计算机的CPU一次最多能处理32位数据,也就是4个字节的数据,例如它的EAX寄存器就是32位的,当然32位计算机通常也可以处理16位和8 ...

  5. 64位计算机比32快多少,64位系统和32位系统哪个速度快

    在配置较高的电脑64位会更快一些.若是配置较低运行内存小于4G的电脑,若是装了64位系统则有可能会卡频. 64位的优缺点(以win7为例): 优点:win7 64位系统最大的优点体现在内存上.它可以使 ...

  6. 计算机操作系统32跟64区别是什么,32位和64位计算机操作系统之间的区别32位和64位win7系统之间的区别...

    32位和64位Win7系统之间的区别是一个古老的话题,但是许多朋友仍然不了解它.两者有什么区别?下面的文章介绍了32位和64位Win7系统之间的区别,以及其他一些深入的理论解释.您可以在文章末尾查看扩 ...

  7. 怎样删除usb计算机连接网络打印机驱动,惠普激光打印机安装驱动时报“跟这台计算机连接的一个 USB 设备运行不正...

    1. 确保打印机驱动的安装方法是采用软件优先安装的方法.即,先将打印机和计算机断开连接,直接运行驱动光盘,当计算机提示"请确保打印机已连接到计算机,并打开打印机电源"时,再将打印机 ...

  8. 计算机打印机能不能取消正在,删除HP打印机驱动程序. 打印机驱动程序正在使用中,无法删除...

    1. 依次单击"开始"→"打印机和传真". 在"打印机和传真"窗口中,找到打印机图标. 2. 在"打印机和传真"窗口中, ...

  9. 64位计算机最大寻址,为什么说32位操作系统的寻址空间是4G

    1. 什么是寻址空间 寻址空间一般指的是CPU对于内存寻址的能力.通俗地说,就是能最多用到多少内存的一个问题 2. 我们经常听说32位操作系统最多能用4G内存.大部分情况下,这个上限都达不到.例如我的 ...

最新文章

  1. Sqoop_ 简单介绍
  2. 八. 输入输出(IO)操作6.文件与目录管理
  3. Object o = new Object()在内存中占几个字节
  4. linux查看日志文件内容命令tail、cat、tac、head、echo、vi
  5. 利用预渲染解决优化性能问题IOS
  6. java cglib map转bean_Java工具集-Bean对象与Map集合相互转换工具
  7. Linux-进程基础
  8. 电子元器件/模块供应商汇总
  9. java性能调优_Java性能调优常用手段
  10. proj4js 坐标转换
  11. 思科里服务器的dns配置文件,cisco设置dns
  12. Ecshop各个页面文件介绍,主要文件功能说明
  13. wps在Linux上使用命令打开文档的方法
  14. 沐风微信营销水库模型二:建设专属秘密武器库!
  15. 【算法刷题日记之本手篇】井字棋与密码强度等级
  16. 宇视录像机通道名称如何修改
  17. JS对象中添加新的属性及修改字段名
  18. 深入理解Linux网络技术内幕(十)——帧的接收
  19. UI设计— 利用软件Sketch制作镂空图标
  20. logback应用日志格式参考

热门文章

  1. Android自适应屏幕的实现方法
  2. 利盟在台湾地区发布十二款激光打印新品
  3. oracle静默安装报错,静默安装oracle 19c时报错,INS-32056、INS-32138。 啥意思?怎么处理?...
  4. 红客突击队HSC-1th CTF大赛个人Writeup
  5. 玩《征途》感受——这么多年白玩游戏了 (zt)
  6. linux进程sl,Linux ps state sl+是什么意思
  7. 钉钉卷向智能化,飞书、企微能跟上么?
  8. JULLIAN MURPHY:保持耐心的方式
  9. 2018南京师范计算机科学研究生录取分数,2018年南京师范大学各学院硕士研究生复试成绩及拟录取名单公示网址汇总表...
  10. DPDK:insmod: ERROR: could not insert module igb_uio.ko: Invalid parameters