Gentlewolf
驱动牛犊
驱动牛犊
  • 注册日期2005-02-02
  • 最后登录2005-04-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1170回复:4

请教关于DeviceControl的问题。。。

楼主#
更多 发布于:2005-02-04 11:43
论坛上发现很多人提到在应用程序中使用DeviceIoControl与驱动通讯时报参数无效(87),说是驱动的派遣函数DeviceControl没写对。
我参照《WIN2000驱动程序设计》--翟洪涛 里的代码也不行啊,不知道还要处理什么?我也是新手,望过来人带带路,谢谢。

我的派遣函数如下:
NTSTATUS MyDrvDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
NTSTATUS status;
    ULONG controlCode;     // IOCTL请求代码
    PIO_STACK_LOCATION pIrpStack;   //堆栈区域存储了用户缓冲区信息

pIrpStack = IoGetCurrentIrpStackLocation(Irp);

    // 取出IOCTL请求代码
    controlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode;

    switch (controlCode)
{
        case SAMPLE_IOCTL_Disable:
            Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
       Irp->IoStatus.Information = 0;
status = STATUS_ACCESS_DENIED;
            return status;
break;

case SAMPLE_IOCTL_Enable:
            Irp->IoStatus.Status = STATUS_SUCCESS;
       Irp->IoStatus.Information = 0;
status = STATUS_SUCCESS;
            return status;
break;

        default:    // 驱动程序收到了未被承认的控制代码
            status = STATUS_INVALID_DEVICE_REQUEST;  
break;
}

    pIrp->IoStatus.Information = 0;  // 数据没有传输

    IoCompleteRequest( Irp, IO_NO_INCREMENT ) ;      

    return status;

}

其中:
#define SAMPLE_IOCTL_Disable CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define SAMPLE_IOCTL_Enable CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)

Gentlewolf
驱动牛犊
驱动牛犊
  • 注册日期2005-02-02
  • 最后登录2005-04-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-04 13:39
大家都放假啦?怎么没人响应?
自己UP一下先。。。
duanran
驱动牛犊
驱动牛犊
  • 注册日期2003-11-04
  • 最后登录2015-03-20
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望57点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-04 13:56
是不是你应用层打开你的设备时就没有成功呀。
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-04 15:02
建议找一个例子对比一下看看,例如filemon,里面都有现成的代码,参考一下其中DeviceIoControl的代码。
在交流中学习。。。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2005-02-04 15:04
首先你要确认你驱动的代码有没有被调用,下断点看看,不然的话,你还得在你的应用程序里找找问题.
而且我认为大多是应用层的问题.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部