在64-bit 驱动中支持32-bit I/O 操作
来源:互联网 发布:雷克萨斯rx200t 知乎 编辑:程序博客网 时间:2024/06/15 08:26
原文
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。
- 驱动暴露一个IOCTL(或FSCTL)给用户模式应用程序。
- IOCTL 所使用的I/O 缓冲区至少有一个包含指针精度的数据类型。
- IOCTL 不能轻易被重写以消除指针精度的缓存数据类型的使用。
阅读全文
0 0
- 在64-bit 驱动中支持32-bit I/O 操作
- 在ubuntu 64bit中运行32bit程序
- 在64Ubuntu如何安装ia32支持32-bit---Ubuntu apt-get install ia32 for 32-bit on 64-bit
- Oracle 9i 64bit->32bit platform
- 32bit程序在64bit操作系统下处理重定向细节_注册表操作[2]
- linux 支持 32bit
- iOS支持64bit
- 检查系统是否支持64bit,以及32bit与64bit的转换
- Java I/O : Bit Operation 位运算
- Java I/O : Bit Operation 位运算
- bat 运行在32bit环境中修改64bit的注册表
- STM32驱动12bit AD TLC2543(I/O模拟方式)
- 32bit和64bit
- sizeof 32bit 64bit
- 32bit or 64bit
- 32bit还是64bit
- 切换iis运行在32bit或64bit
- 如何在64bit应用下访问32bit DLL
- 1087 1 10 100 1000
- 初赛日志
- Docker原理
- 循环链表
- linux中查看nginx、apache、php、mysql配置文件路径
- 在64-bit 驱动中支持32-bit I/O 操作
- 命令模式
- 证券交易中各类词汇的解释
- 初识SDR
- Java学习之路——数组排序法(冒泡、直选、插入、反转)
- 利用reduce端的GroupingComparator来实现将一组bean看成相同的key
- codevs 1961 躲避大龙 bfs
- JADE学习笔记2 :Agent的创建和运行
- 双向链表基本操作