首页
社区
课程
招聘
[求助]DeviceIoControl的问题
发表于: 2008-12-2 21:42 6136

[求助]DeviceIoControl的问题

2008-12-2 21:42
6136
#include "windows.h"
#include "winioctl.h"
#define MY_DVC_IN_CODE \
CTL_CODE(FILE_DEVICE_UNKNOWN, \
0xa01, \
METHOD_BUFFERED, \
FILE_READ_DATA|FILE_WRITE_DATA)
int main(){
HANDLE hDevice=CreateFile("\\\\.\\ExRYY",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);
HANDLE EventHandle=
CreateEvent(NULL,TRUE,FALSE,"ExRYY");
DWORD EventNumber;
BOOL EventBool=DeviceIoControl(hDevice, MY_DVC_IN_CODE,(void*)EventHandle,sizeof(HANDLE),NULL,0,&EventNumber,(LPOVERLAPPED)NULL);
DWORD Error =GetLastError();
CloseHandle(EventHandle);
return 1;
}
就这样的代码,为什么会出现error=998内存分配访问失败错误,hDevice是个有效的设备句柄.
但是如果把DeviceIoControl(hDevice, MY_DVC_IN_CODE,(void*)EventHandle,sizeof(HANDLE)NULL,0,&EventNumber,(LPOVERLAPPED)NULL);
改成DeviceIoControl(hDevice, MY_DVC_IN_CODE,0,0,NULL,0,&EventNumber,(LPOVERLAPPED)NULL);就可以在monitor里看到我自己的驱动打印出来的信息了。
为什么EventHandle会内存分配访问失败?
大家看看,先谢谢了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
EventHandle是一个Handle,不是一个有效的buf,而且你用(void*)EventHandle这样可以正确编译,但是运行是不对的
2008-12-2 22:10
0
雪    币: 261
活跃值: (32)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
听不太明白诶,你说的意思是不是EventHandle 是一个空指针,指向系统内核对象地址,而内核对象是不能访问的,所以我这里就访问失败了?
2008-12-3 12:29
0
游客
登录 | 注册 方可回帖
返回
//