• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 关于DeviceIoControl、共享内存、指针的疑问?

关于DeviceIoControl、共享内存、指针的疑问?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了deviceiocontrol,hook deviceiocontrol,deviceiocontrol函数,c deviceiocontrol,deviceiocontrol用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于DeviceIoControl、共享内存、指针的疑问?
描述:

关于DeviceIoControl、共享内存、指针的疑问?
BOOL DeviceIoControl(
  HANDLE hDevice,              // handle to device of interest
  DWORD dwIoControlCode,       // control code of operation to perform
  LPVOID lpInBuffer,           // pointer to buffer to supply input data
  DWORD nInBufferSize,         // size, in bytes, of input buffer
  LPVOID lpOutBuffer,          // pointer to buffer to receive output data
  DWORD nOutBufferSize,        // size, in bytes, of output buffer
  LPDWORD lpBytesReturned,     // pointer to variable to receive byte count
  LPOVERLAPPED lpOverlapped    // pointer to structure for asynchronous operation
);
看别人的一段程序是这么用的(共享内存的实现)?
一、应用程序部分
TCHAR szOutputBuffer[20]; 
PVOID psharememory; // 共享内存地址
…………
// 取得共享内存的地址
if(!DeviceIoControl(m_hDevice,  IO_GET_SHAREMEMORY_ADDR, 
NULL, 
NULL, 
szOutputBuffer, 
sizeof(szOutputBuffer), 
&dwReturn, 
NULL 
))
 psharememory = *((PVOID *)szOutputBuffer);
……
// 在列表控件中显示
P_IP_PACKET pkt = (P_IP_PACKET)pThis->psharememory;
二、驱动程序部分
// 与应用程序共享内存
PVOID SystemVirtualAddress, UserVirtualAddress;
………………
// 将分配的内存映射到用户进程地址空间,并返回地址。
try
{
UserVirtualAddress = MmMapLockedPages(Mdl, UserMode); 
*((PVOID *)(Irp->AssociatedIrp.SystemBuffer)) = UserVirtualAddress;
Irp->IoStatus.Status = STATUS_SUCCESS; 
Irp->IoStatus.Information = sizeof(PVOID);
}
except(EXCEPTION_EXECUTE_HANDLER){}
break;
疑问一、既然lpOutBuffer是“pointer to buffer to receive output data”,意思就是lpOutBuffer
是一个地址(从UserVirtualAddress也可以看出来),为什么szOutputBuffer还要自己还要先申请一个内存空间,
然后作为DeviceIoControl的参数。不明白是什么意思?
我一开始就是这么写的,总出错。
PVOID psharememory ;
if(!DeviceIoControl(m_hDevice,  IO_GET_SHAREMEMORY_ADDR, 
NULL, 
NULL, 
&psharememory 
512, 
&dwReturn, 
NULL 
))
疑问二:
谁能帮我解释一下下面两句中的*((PVOID *)(被指针整的晕头转向的)
psharememory = *((PVOID *)szOutputBuffer);
*((PVOID *)(Irp->AssociatedIrp.SystemBuffer)) = UserVirtualAddress;


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • wince可以用DeviceIoControl调oid吗?
  • 怎么通过DeviceIoControl将缓冲区的首地址传给应用程序?
  • 怎么查DeviceIoControl的功能代码丫
  • 关于DeviceIoControl、共享内存、指针的疑问?
  • 怎样用DeviceIoControl,ReadFile,WriteFile来读写硬盘的指定扇区数据
  • DeviceIoControl函数的问题
  • DeviceIoControl的问题
  • 急问!使用DeviceIoControl的问题

相关文章

  • 2017-06-05 NDIS中间层驱动问题::为什么收到的包都是空的?
  • 2017-06-05 vxworks68/69怎么配置FTPServer
  • 2017-06-05 pthread_create创建多线程,报错问题,求教,急
  • 2017-06-05 wince,引用webservice,出现服务器无法处理请求,未将对象引用设置到对象的实例。
  • 2017-06-05 RSA加密芯片如何复位
  • 2017-06-05 CubeMX怎么生成STM32F2的DFU代码?
  • 2017-06-05 新手提问,关于xpddk中mux的例子?
  • 2017-06-05 imx6ulA7核心linux系统,RS232驱动中增加GPIO控制改成RS485驱动的问题?
  • 2017-06-05 应用程序如何获取vxworks的bootline中的othero=参数
  • 2017-06-05 verilog如何用一个时钟的上升沿去启动一个计时器

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 嵌入式开发中DSP与FPGA的关系
    • 在等着做一个项目,请推荐几本DSP快速入门的书
    • 关于USBHost
    • FPGA复数相乘模块,输入问题
    • 请问如何开启OV5640连续对焦功能?
    • 计算机网络的大作业是网卡驱动开发,无从着手,因此来本版求教
    • 请教如何实现比特级内存拷贝,位域及其他方法探讨
    • 移植μC/OS-II
    • 初学者疑惑:如何用vc写代码和调试
    • vs2003与DDK环境配置

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有