阅读:1199回复:1
USB驱动无法正常工作
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; } |
|
沙发#
发布于:2008-11-03 17:39
试一下
status =testprjPipe2Io(deviceExtension,Irp,deviceExtension->InterfaceInformation->Pipes[0]); |
|