macy
禁止发言
禁止发言
  • 注册日期2001-12-19
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分6383分
  • 威望48270点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1092回复:4

菜鸟一问?

楼主#
更多 发布于:2002-01-09 14:41
用户被禁言,该主题自动屏蔽!
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-01-09 17:10
在driver里有个LONG型变量,想在app里读出来。
在driver里:
对应IRP_MJ_READ的函数里:
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->MdlAddress=NULL;
Irp->UserBuffer=&lTest; //***********  
IoCompleteRequest(Irp, IO_NO_INCREMENT);
其中I/O缓冲策略设为DO_BUFFERED_IO,lTest为LONG型变量。
在app里:
LONG lTest;
DWORD dwReadBytes;
if(!ReadFile(hFile,&lTest,sizeof(lTest),&dwReadBytes,NULL))
{
MessageBox(\"Read failed!\");
return;
}

不知道错在那里呢?
请指正,多谢!


一个是内核态的地址,一个是用户态地址,好象不可以这样做的吧?
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-09 17:12
[quote]在driver里有个LONG型变量,想在app里读出来。
在driver里:
对应IRP_MJ_READ的函数里:
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->MdlAddress=NULL;
Irp->UserBuffer=&lTest; //***********  
IoCompleteRequest(Irp, IO_NO_INCREMENT);
其中I/O缓冲策略设为DO_BUFFERED_IO,lTest为LONG型变量。
在app里:
LONG lTest;
DWORD dwReadBytes;
if(!ReadFile(hFile,&lTest,sizeof(lTest),&dwReadBytes,NULL))
{
MessageBox(\"Read failed!\");
return;
}

不知道错在那里呢?
请指正,多谢!


一个是内核态的地址,一个是用户态地址,好象不可以这样做的吧?
 [/quote]

用RtlCopyMemory(Irp->Associate...,lTest,sizeof()) 试一试
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-09 17:32
试试这样:
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof(LONG);
Irp->UserBuffer=&lTest; //***********
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
leerom
macy
禁止发言
禁止发言
  • 注册日期2001-12-19
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分6383分
  • 威望48270点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-01-09 18:15
用户被禁言,该主题自动屏蔽!
游客

返回顶部