阅读:1009回复:8
紧急求救,现答现测,答对给分
下面是我的一段代码:
NTSTATUS WdmPciRead( IN PDEVICE_OBJECT fdo, IN PIRP Irp) { PWDMPCI_DEVICE_EXTENSION dx = (PWDMPCI_DEVICE_EXTENSION)fdo->DeviceExtension; if( !dx->GotPortOrMemory) return CompleteIrp( Irp, STATUS_INSUFFICIENT_RESOURCES); if( dx->IODisabled) return CompleteIrp( Irp, STATUS_DEVICE_NOT_CONNECTED); if (!LockDevice(dx)) return CompleteIrp( Irp, STATUS_DELETE_PENDING); PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); ULONG BytesTxd = 0; // Get call parameters ULONG ReadLen = IrpStack->Parameters.Read.Length; PULONG Buffer = (PULONG)Irp->AssociatedIrp.SystemBuffer; NTSTATUS status=STATUS_SUCCESS; ULONG QQ=0; DebugPrint(\"读 %d 字节 \",(int)ReadLen); READ_REGISTER_BUFFER_ULONG(PULONG(dx->PortBase+0X00),&QQ,1); DebugPrint( \"读出的双字 %x\",QQ); RtlCopyMemory(Buffer,&QQ,4); // Complete IRP CompleteIrp(Irp,status,BytesTxd); UnlockDevice(dx); return status; } 这段代码执行后QQ中会有值,我如何将QQ的值传递给应用程序? RtlCopyMemory(Buffer,&QQ,4); 我的外部调用函数如下: ULONG WS=0; case WDMPCI_BLOCK_READ_REGISTER_BIT: { if( !ReadFile( hWdmPci, &WS, 4, &BytesReturned, NULL)) return WDMPCI_BLOCK_READ_REGISTER_BIT_FAIL; else if( BytesReturned==sizeof(InputBuffer)) return WDMPCI_BLOCK_READ_REGISTER_BIT_OK; else return WDMPCI_BLOCK_READ_REGISTER_BIT_BYTESWRONG; } 经过我的测试在WS中并没有传出来的值,我想知道原因 :D |
|
|
沙发#
发布于:2002-06-28 11:34
我碰到的事情怎这么奇怪? :D
|
|
|
板凳#
发布于:2002-06-28 12:15
BytesTxd=4;
|
|
地板#
发布于:2002-06-28 13:39
关注
|
|
地下室#
发布于:2002-06-28 13:46
用softice跟一下
看QQ中有没有值 |
|
|
5楼#
发布于:2002-06-28 14:35
你如果是通过READFILE和WRITEFILE的方式和驱动程序通信的话,那么你传下来的缓冲区指针应该是在IRP->MDL里面的,并且你还需要把地址进行转化一下
|
|
6楼#
发布于:2002-06-28 14:40
你如果是通过READFILE和WRITEFILE的方式和驱动程序通信的话,那么你传下来的缓冲区指针应该是在IRP->MDL里面的,并且你还需要把地址进行转化一下 那不一定吧,要看是directio还是bufferio了 |
|
|
7楼#
发布于:2002-06-28 14:41
呵呵!你试试看
|
|
8楼#
发布于:2002-06-28 14:46
怎么试
|
|
|