社区
驱动开发/核心开发
帖子详情
U盘过滤驱动如何获取设备描述符?[
A33228371
2011-02-22 04:28:41
我想做一个U盘过滤驱动,驱动挂载在{4D36E967-E325-11CE-BFC1-08002BE10318}下,想在过滤驱动的例程里构造USB请求包获取设备描述符号,结果一直调不通,出现问题如下:
1、起初想在SCSI的读写里获取,通过LOG显示得知,系统会发若干读写请求,不知为什么?
2、在PNP的 start device过程里读取,也不可以。
3、与虚拟机环境是否有关系
谢谢!
...全文
280
3
打赏
收藏
U盘过滤驱动如何获取设备描述符?[
我想做一个U盘过滤驱动,驱动挂载在{4D36E967-E325-11CE-BFC1-08002BE10318}下,想在过滤驱动的例程里构造USB请求包获取设备描述符号,结果一直调不通,出现问题如下: 1、起初想在SCSI的读写里获取,通过LOG显示得知,系统会发若干读写请求,不知为什么? 2、在PNP的 start device过程里读取,也不可以。 3、与虚拟机环境是否有关系 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
A33228371
2011-02-22
打赏
举报
回复
此外加上这个KeInitializeEvent(&event, NotificationEvent, FALSE);
驱动不能正常加载!
A33228371
2011-02-22
打赏
举报
回复
我参考U盘驱动的代码,想构造一个URB,但是没有获取到设备描述符。
代码如下,大家给看看是什么错误
typedef struct tagDEVICE_EXTENSION {
PDEVICE_OBJECT DeviceObject; // device object this extension belongs to
PDEVICE_OBJECT LowerDeviceObject; // next lower driver in same stack
PDEVICE_OBJECT Pdo; // the PDO
IO_REMOVE_LOCK RemoveLock;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
NTSTATUS
ReadandSelectDescriptors( IN PDEVICE_OBJECT DeviceObject )
{
KdPrint(("ReadandSelectDescriptors begin\n"));
PURB urb;
ULONG siz;
NTSTATUS ntStatus;
PUSB_DEVICE_DESCRIPTOR deviceDescriptor;
urb = NULL;
deviceDescriptor = NULL;
//Read the device descriptor
urb = (PURB)ExAllocatePool(NonPagedPool, sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
if(urb)
{
siz = sizeof(USB_DEVICE_DESCRIPTOR);
deviceDescriptor = (PUSB_DEVICE_DESCRIPTOR)ExAllocatePool(NonPagedPool, siz);
if(deviceDescriptor) //注意看一下
{
UsbBuildGetDescriptorRequest(
urb,
(USHORT) sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_DEVICE_DESCRIPTOR_TYPE,
0,
0,
deviceDescriptor,
NULL,
siz,
NULL);
ntStatus = CallUSBD(DeviceObject, urb);
if(NT_SUCCESS(ntStatus))
{
ASSERT(deviceDescriptor->bNumConfigurations);
//ntStatus = ConfigureDevice(DeviceObject);
KdPrint(("get deviceDescriptor success!"));
}
ExFreePool(urb);
ExFreePool(deviceDescriptor);
}
else
{
ExFreePool(urb);
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
}
}
else
{
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
}
return ntStatus;
}
NTSTATUS
CallUSBD(
IN PDEVICE_OBJECT DeviceObject,
IN PURB Urb
)
{
PIRP irp;
KEVENT event;
NTSTATUS ntStatus;
IO_STATUS_BLOCK ioStatus;
PIO_STACK_LOCATION nextStack;
PDEVICE_EXTENSION pdx;
irp = NULL;
pdx = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
//KeInitializeEvent(&event, NotificationEvent, FALSE);
irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB,
pdx->LowerDeviceObject,
NULL,
0,
NULL,
0,
TRUE,
&event,
&ioStatus);
if(!irp)
{
KdPrint(("IoBuildDeviceIoControlRequest failed\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
nextStack = IoGetNextIrpStackLocation(irp);
ASSERT(nextStack != NULL);
nextStack->Parameters.Others.Argument1 = Urb;
// IoSetCompletionRoutine(irp, (PIO_COMPLETION_ROUTINE) GetDescriptorCompletionRoutine,
// (PVOID) pdx, TRUE, TRUE, TRUE);
ntStatus = IoCallDriver(pdx->LowerDeviceObject, irp);
if(ntStatus == STATUS_PENDING)
{
//KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
ntStatus = ioStatus.Status;
}
return ntStatus;
}
ASTM D4583-21(2025).pdf
ASTM D4583-21(2025)
技术转移机构如何高效评估技术成果的价值?.docx
技术转移机构如何高效评估技术成果的价值?
科技园区如何精准招引高潜力科创项目并提升招商效率?.docx
科技园区如何精准招引高潜力科创项目并提升招商效率?
高校如何提升科研项目评价的科学性与效率?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
驱动开发/核心开发
21,620
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章