plk_xiaowei
驱动牛犊
驱动牛犊
  • 注册日期2007-02-18
  • 最后登录2010-04-24
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望82点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1809回复:5

[求助]菜鸟问题,无法从驱动返回数据。

楼主#
更多 发布于:2007-05-12 15:01
我用的是EasySys 创建的驱动。
我想让驱动返回一个'K'
驱动里面代码是这样:

ioBuf = Irp->AssociatedIrp.SystemBuffer;
    
inBufLength = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    
outBufLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;
    
ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;

    
switch (ioControlCode)
    {
    
case IOCTL_DD_HELLO:
        {
            
char c = 'K';
            
RtlCopyMemory(ioBuf,&c,2);
            
break;
        }


应用程序里面的代码。

char test[10] = "";
    
DWORD nBytesReturn;
    
BOOL bRet = ::DeviceIoControl(hDriver, IOCTL_TEST_HELLO,
        
NULL, 0, test, 2, &nBytesReturn, NULL);
    
printf("%s\n",test);

但是什么也没有printf出来。  
高手帮忙,小弟在此先谢谢了。
The.Cjw
tracera
禁止发言
禁止发言
  • 注册日期2006-01-09
  • 最后登录2018-09-25
  • 粉丝8
  • 关注0
  • 积分-5788分
  • 威望135321点
  • 贡献值0点
  • 好评度625点
  • 原创分1分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-05-13 17:06
用户被禁言,该主题自动屏蔽!
plk_xiaowei
驱动牛犊
驱动牛犊
  • 注册日期2007-02-18
  • 最后登录2010-04-24
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望82点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-19 21:32
那你给我一个OK?
The.Cjw
plk_xiaowei
驱动牛犊
驱动牛犊
  • 注册日期2007-02-18
  • 最后登录2010-04-24
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望82点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-19 22:51
我看了一个例子

RtlCopyMemory(pIrp->UserBuffer,&inputdata,outBufLength);

是这样的。
The.Cjw
fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-20 09:32
    Irp->IoStatus.Status = status;
    Irp->IoStatus.Information = info;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
 这个你设置了吗?还有copy的时候应该是一个字节吧
张帆的内核学习论坛 http://bbs.kerneldev.com
plk_xiaowei
驱动牛犊
驱动牛犊
  • 注册日期2007-02-18
  • 最后登录2010-04-24
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望82点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-05-20 13:27
引用第4楼fanzi于2007-05-20 09:32发表的  :
    Irp->IoStatus.Status = status;    
    Irp->IoStatus.Information = info;    
    IoCompleteRequest(Irp, IO_NO_INCREMENT);



Irp->IoStatus.Status = status;    
Irp->IoStatus.Information = 0;    
IoCompleteRequest(Irp, IO_NO_INCREMENT);

我是这样的。
The.Cjw
游客

返回顶部