首页
社区
课程
招聘
[求助]关于DeviceIoControl函数
发表于: 2004-9-6 10:42 7703

[求助]关于DeviceIoControl函数

2004-9-6 10:42
7703
最近帮一个朋友看一个软件,它用到了DeviceIoControl函数,不过对以下几个函数不太明白其参数和返回值是一个什么样的结构,内容是什么,请高手指点,谢谢先:

0012F620   2000196E  /CALL 到 DeviceIoControl 来自 20001968
0012F624   0000005C  |hDevice = 0000005C
0012F628   0004D004  |IoControlCode = 4D004
0012F62C   0012F650  |InBuffer = 0012F650
0012F630   0000002C  |InBufferSize = 2C (44.)
0012F634   0012F650  |OutBuffer = 0012F650
0012F638   00000074  |OutBufferSize = 74 (116.)
0012F63C   0012F64C  |pBytesReturned = 0012F64C
0012F640   00000000  \pOverlapped = NULL

0012F7FC   004B0E23  /CALL 到 DeviceIoControl 来自 004B0E1D
0012F800   0000005C  |hDevice = 0000005C
0012F804   0004D014  |IoControlCode = 4D014
0012F808   0055D400  |InBuffer = JSA2G.0055D400
0012F80C   0000002C  |InBufferSize = 2C (44.)
0012F810   0055D400  |OutBuffer = JSA2G.0055D400
0012F814   00000050  |OutBufferSize = 50 (80.)        返回30
0012F818   0012F828  |pBytesReturned = 0012F828
0012F81C   00000000  \pOverlapped = NULL

0012F554   20001A97  /CALL 到 DeviceIoControl 来自 20001A91
0012F558   0000005C  |hDevice = 0000005C
0012F55C   00024000  |IoControlCode = 24000
0012F560   00000000  |InBuffer = NULL
0012F564   00000000  |InBufferSize = 0
0012F568   0012F580  |OutBuffer = 0012F580
0012F56C   00000324  |OutBufferSize = 324 (804.)        返回14
0012F570   0012F57C  |pBytesReturned = 0012F57C
0012F574   00000000  \pOverlapped = NULL

想知道IoControlCode = 4D004,4D014,24000时DeviceIoControl是在干嘛.

以上是三次调用时ESP里的内容.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个函数的作用就是和驱动通信。不同的IOCONTROLCODE代表向驱动程序发送不同的控制信号。他们对应的作用需要到驱动程序中找。你可以把驱动程序反汇编一下
2004-9-6 10:57
0
雪    币: 13095
活跃值: (4092)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
3
这个偶知道...甚至知道这是取光驱的一些数据,不过偶是说当参数
IoControlCode = 4D004,4D014,24000时
的具体含义,入回参数和返回值具体是的结构资料...
2004-9-6 11:31
0
雪    币: 13095
活跃值: (4092)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
4
米有银知道吗?
2004-9-7 08:11
0
雪    币: 13095
活跃值: (4092)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
5
555....又沉到海底了...
顶上来,高手看看呀....
2004-9-8 22:58
0
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
最初由 AloneWolf 发布
这个偶知道...甚至知道这是取光驱的一些数据,不过偶是说当参数
IoControlCode = 4D004,4D014,24000时
的具体含义,入回参数和返回值具体是的结构资料...


我的理解是:
  这之前程序会打开一个文件,解释的代码含义就在打开的那个文件中,代码的意思也是在那个文件里进行解释的.

入口参数的值在input buffer里, 其中这个有一个长度.
返回的数据在output  buffer里,你可以看一下输入及输出的缓冲区.
2004-9-9 06:53
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
7
BOOL DeviceIoControl(
  HANDLE hDevice,
  DWORD dwIoControlCode,
  LPVOID lpInBuffer,
  DWORD nInBufferSize,
  LPVOID lpOutBuffer,
  DWORD nOutBufferSize,
  LPDWORD lpBytesReturned,
  LPOVERLAPPED lpOverlapped
);

参考:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/deviceiocontrol.asp
2004-9-9 08:58
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
8
看不懂啊
在哪能学到这方面的知识
2004-9-9 10:02
0
雪    币: 13095
活跃值: (4092)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
9
最初由 moodsky 发布
BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
........


谢谢回答先...不过MSDN里DeviceIoControl倒是有,只是没有找到IoControlCode=4D004,4D014,24000的说明.
2004-9-9 14:46
0
游客
登录 | 注册 方可回帖
返回
//