阅读:1318回复:1
请教斑竹!!!!
我想从FIRMWARE中得到设备的一个信息(就是得到0或1就行了),我在驱动程序中这样定义(使用厂商自定义控制传输):
NTSTATUS IsoUsb_GetzlInfor( IN PDEVICE_OBJECT DeviceObject, OUT PUCHAR ZLStatus ) { USHORT UrbSize = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); NTSTATUS ntStatus; PURB urb = (PURB)ExAllocatePool(NonPagedPool, UrbSize); if( urb ==NULL) { return STATUS_INSUFFICIENT_RESOURCES; } UsbBuildVendorRequest(urb, URB_FUNCTION_VENDOR_DEVICE, UrbSize, USBD_TRANSFER_DIRECTION_IN, 0, COMMAND_ZL, 0x0000, 0, &ZLStatus, NULL, 1, NULL); ntStatus = IsoUsb_CallUSBD(DeviceObject, urb); if(!NT_SUCCESS(ntStatus)||!USBD_SUCCESS(urb->UrbHeader.Status)) { ntStatus = STATUS_UNSUCCESSFUL; } ExFreePool(urb); return ntStatus; } 然后我在Dispatch里这样写: case IOCTL_ISOUSB_GET_ZL_INFOR: pst = (PUCHAR) ioBuffer; ntStatus = IsoUsb_GetzlInfor(DeviceObject, zlstatus); //get zhenling information and transmit it to Application if( NT_SUCCESS(ntStatus)) { RtlCopyMemory(pst,zlstatus,sizeof(zlstatus)); } break; 我想这个数据是不是就放在zlstatus里头 最后,我在应用程序里边定义了一个deviceiocontrol()想得到这个数据并显示出来,我的程序是: ULONG success; DWORD nBytes1; char zlstatus[16]; success = DeviceIoControl(IsoUsb, IOCTL_ISOUSB_GET_ZL_INFOR, NULL, 0, zlstatus, sizeof(zlstatus), &nBytes1, NULL); printf("\nsuccess = %d\n", success); if(success) { printf("\nzlstatus = %d\n", zlstatus[16]); printf("\nzlstatus = %d\n", *zlstatus); printf("\nzlstatus = %d\n", zlstatus); } else{ printf("\ncan't get zhenling information.\n"); } 但是一运行,不管设备发上来的数据是0还是1,我得到的总是 success = 1 zlstatus = 0 zlstatus = -52 zlstatus = 12454024 我不知道是哪里出了问题,以至于我的应用程序不能得到正确的数据 我想可能是类型不能匹配的问题,但是我又不知道该怎么处理? 请斑竹大人能帮我解决一下,我将不胜感激!多谢!!! |
|
|
沙发#
发布于:2001-11-02 12:01
斑竹放假了吗?怎么我的问题没有人理睬,5555555555~~~~~
难道是太忙了,真想帮您做点什么! |
|
|