whljsh
驱动牛犊
驱动牛犊
  • 注册日期2005-11-21
  • 最后登录2009-07-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1198回复:1

USB驱动无法正常工作

楼主#
更多 发布于:2008-10-02 15:12
NTSTATUS testprjWriteDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    )
{
    PTESTPRJ_DEVICE_EXTENSION    deviceExtension;
    NTSTATUS                        status;
    PIO_STACK_LOCATION              irpStack;
    PVOID                           writeBuffer;
    ULONG                           writeLength;

    testprjDebugPrint(DBG_IO, DBG_TRACE, __FUNCTION__"++. IRP %p", Irp);

    deviceExtension = (PTESTPRJ_DEVICE_EXTENSION)DeviceObject->DeviceExtension;

    status = testprjCheckIoLock(&deviceExtension->IoLock, Irp);
    if (!NT_SUCCESS(status) || (status == STATUS_PENDING))
    {
        testprjDebugPrint(DBG_IO, DBG_WARN, __FUNCTION__"--. IRP %p STATUS %x", Irp, status);

        return status;
    }

    // Get our IRP stack location
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    // Get the write buffer length
    writeLength = irpStack->Parameters.Write.Length;
    if (writeLength == 0)
    {
        // just complete 0 length request
        status = STATUS_SUCCESS;

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

        testprjDecrementIoCount(&deviceExtension->IoLock);

        testprjDebugPrint(DBG_IO, DBG_WARN, __FUNCTION__"--. IRP %p, STATUS %x", Irp, status);

        return status;
    }

    writeBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
//这里应该怎么改才能正常工作呢?
//    status =testprjPipe2Io(deviceExtension,Irp,deviceExtension->InterfaceInformation->Pipes);;
   status = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;
   Irp->IoStatus.Status = status;
   IoCompleteRequest (Irp, IO_NO_INCREMENT);
    testprjDecrementIoCount(&deviceExtension->IoLock);

    testprjDebugPrint(DBG_IO, DBG_TRACE, __FUNCTION__"--. IRP %p STATUS %x", Irp, status);

    return status;
}
zengwn
驱动牛犊
驱动牛犊
  • 注册日期2001-05-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望59点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-03 17:39
试一下
status =testprjPipe2Io(deviceExtension,Irp,deviceExtension->InterfaceInformation->Pipes[0]);
游客

返回顶部