在64-bit 驱动中支持32-bit I/O 操作

原文

https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/supporting-32-bit-i-o-in-your-64-bit-driver

        WOW64 机制使得Win32 用户模式应用程序可以在64-bit windows 上运行。在Win32 函数调用转移到64-bit 内核之前,截获其调用并将指针精度类型的参数转化为恰当的固定精度的类型。这种转换叫做thunking,除了传递给DeviceIoControl 的数据缓冲外,其自动应用在所有的Win32 函数上。这些缓冲区的内容是通过InputBuffer和OutputBuffer 参数指定的,其并没有被thunk,因为它们的结构是驱动相关的。
        尽管缓冲区内容没有被thunk,缓冲区指针被转换为64-bit 指针。
        用户模式应用程序调用DeviceIoControl 函数来直接向特定的内核模式驱动发送一个I/O 请求。这个请求包含一个I/O 控制码(IOCTL)或者文件系统控制码(FSCTL)和指向输入和输出缓冲区的指针。这些数据缓冲区的结构是由IOCTL 或者 FSCTL 指定的,另外,这IOCTL 和 FSCTL 是由内核模式驱动定义的。因为缓冲区格式是任意的,只有定义它的驱动知道它的结构,而WOW64并不知道它的结构,所以thunk 这些数据的任务就留给了驱动。
        驱动程序满足下面的要求时将支持32-bit I/O。

  1. 驱动暴露一个IOCTL(或FSCTL)给用户模式应用程序。
  2. IOCTL 所使用的I/O 缓冲区至少有一个包含指针精度的数据类型。
  3. IOCTL 不能轻易被重写以消除指针精度的缓存数据类型的使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值