Alfred
驱动牛犊
驱动牛犊
  • 注册日期2001-07-12
  • 最后登录2002-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1319回复:1

请教斑竹!!!!

楼主#
更多 发布于:2001-11-01 12:03
我想从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

我不知道是哪里出了问题,以至于我的应用程序不能得到正确的数据

我想可能是类型不能匹配的问题,但是我又不知道该怎么处理?

请斑竹大人能帮我解决一下,我将不胜感激!多谢!!!


尽管我不喜欢做驱动程序,但是我还是不得不做,既然做了,就要做好!
Alfred
驱动牛犊
驱动牛犊
  • 注册日期2001-07-12
  • 最后登录2002-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-11-02 12:01
斑竹放假了吗?怎么我的问题没有人理睬,5555555555~~~~~
难道是太忙了,真想帮您做点什么!
尽管我不喜欢做驱动程序,但是我还是不得不做,既然做了,就要做好!
游客

返回顶部