• 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函数,deviceiocontrol,hook deviceiocontrol,c deviceiocontrol,deviceiocontrol用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: DeviceIoControl函数的问题
描述:

我写了一驱动程序,应用程序调用DeviceIoControl函数接受数据却只能得到4个字节(我是想得到5个字节).请各位指点,谢谢!
应用程序代码:
    ......
    typedef struct OutParaStruct{
       UCHAR Flag;
       UCHAR PciConfig[64];
       }OutParaStruct,*POutParaStruct;
    OutParaStruct RetInforma;
    RetInforma.Flag=0;
    for(int i=0;i<65;i++)
  RetInforma.PciConfig[i]=0;
    DWORD  OutBuffer;
  
  DWORD Returned;
  HANDLE   hDevice;
  hDevice = CreateFile( "\\\\.\\MyDevice",
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL,
                          NULL
                          );
  bool ret;
  long ConfigPara;
    for(long BusNumber=0;BusNumber<4;BusNumber++)
  for(long DevNumber=0;DevNumber<32;DevNumber++)
  for(long FuncNumber=0;FuncNumber<8;FuncNumber++)
  {
  C|(BusNumber<<16)|(DevNumber<<11)|(FuncNumber<<8)|(0x0<<2);
      bool ret=DeviceIoControl(hDevice,IOCTL_GET_VALUE,(LPVOID)&ConfigPara,(DWORD)65,(LPVOID)&RetInforma,(DWORD)65,&Returned,NULL);
      if((int)(BYTE)RetInforma.Flag==true)
  {
  }
  }
驱动程序代码:
   UCHAR OutParaBuffer[65];
   NTSTATUS TestWDMIoControl(IN PDEVICE_OBJECT fdo,IN PIRP irp)
{
    PIO_STACK_LOCATION IrpStack=IoGetCurrentIrpStackLocation(irp);
    ULONG C />     
   
    for(int i=0;i<65;i++)
        OutParaBuffer[i]=0x0;
    PVOID inputBuffer, outputBuffer;
    ULONG inputBufferLength, outputBufferLength;
    ULONG ioControlCode;
   //get Buffer's Positon & length.
    inputBuffer = irp->AssociatedIrp.SystemBuffer;
    inputBufferLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBuffer = irp->AssociatedIrp.SystemBuffer;
    outputBufferLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;
    
    ULONG ConfigData;
    ULONG VenDevID;
    USHORT VendorID,DeviceID;
    ULONG ConfigAddrPortAddress;
    ULONG ConfigDataPortAddress;
    
    switch(ControlCode)
    {
     case IOCTL_GET_VALUE:      
        __asm{
        pusha
        mov eax,[ebp+0xc]
        mov ebx,[eax+0xc]
        mov eax,[ebx]
        mov ConfigData,eax
        mov eax,ConfigData
        mov dx,0xcf8
        out dx,eax
        mov dx,0xcfc
        in eax,dx
        cmp ax,0xffff
        jz lable1
        mov VenDevID,eax
        mov  VendorID,ax
        shr eax,16
        mov  DeviceID,ax
lable1: popa
        }
        if((VendorID)!=0xffff)
        {
         OutParaBuffer[0]=0x1;
         OutParaBuffer[1]=(UCHAR)VenDevID;
         OutParaBuffer[2]=(UCHAR)(VenDevID>>8);
         OutParaBuffer[3]=(UCHAR)(VenDevID>>16);
         OutParaBuffer[4]=(UCHAR)(VenDevID>>24);
            __asm{
         pusha
        
            popa
                }
                
                
                RtlCopyMemory(irp->AssociatedIrp.SystemBuffer,OutParaBuffer,outputBufferLength);
        }
        
       
       
        
        break;
    
      default:
     break;
    
    

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

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

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

相关文章

  • 2017-06-05 WIN10DEVCON64失败
  • 2017-06-05 新手,请各位指教
  • 2017-06-05 win7安装vxworkworkbench32
  • 2017-06-05 关于射频电路的元器件的选择
  • 2017-06-05 小弟想学51单片机,请问哪家开发板比较好?
  • 2017-06-05 SDRAM数据线,地址线,分别交差可以吗
  • 2017-06-05 WinCE5想要生成NKbin文件提示"build"不是内部或外部命令,也不是可运行的程序
  • 2017-06-05 声卡驱动的问题!!
  • 2017-06-05 单片机问题,求大虾来看看
  • 2017-06-05 hostapd可否支持多SSID,用来构造多个无线接入点?

文章分类

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

最近更新的内容

    • AltiumDesigner的原理图库,如何将引脚标号清零
    • centos7如何刷新dns缓存
    • WINCE60系统的SDK是否可以在VS2010或是VS2012或是VS2013开发
    • 声音输入的奇怪问题!?
    • 海康网络摄像头SDK二次开发小白求助(车牌信息),最终要实现的功能是八采集到的车牌信息(车牌号、车型、颜色)打印至电脑linux终端,
    • vxsim和开发主机之间传输文件改怎么做???
    • perl与汇编?????
    • 为什么我用书上修改regedit的方法,加载驱动不成功,用winobj看看不到,在计算机管理也没有看到
    • 请问我的SOFTICE怎么使用了99%的cpu??
    • wince数据库读写对CAN读写的影响

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

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