wangzhu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望6点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2582回复:0

列位老大。一个问题请教,如何发送IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION请求

楼主#
更多 发布于:2005-03-08 11:09
驱动中发送,IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION,给底层,总是返回参数出错。查看资料,必须设置,Parameters.DeviceIoControl.Type3InputBuffer 参数。该怎么做呢。

问题是KLowerDevice中的DeviceIoControl好像没有设置这个内容。

下面是我的代码。相关。仿照DeviceIOControl编的。直接
void callbackrouting(void *p)
{
}
NTSTATUS IOCTL_Suspend_Handler(KIrp I)
{
UCHAR buf;
PUSB_IDLE_CALLBACK_INFO p=NULL;
p = new(NonPagedPool)USB_IDLE_CALLBACK_INFO;
p->IdleCallback=callbackrouting;
p->IdleContext=&buf;

PIO_STACK_LOCATION stack=NULL,nextStack=NULL;
PIO_STACK_LOCATION stack1=NULL,nextStack1=NULL;
PIRP pIrp;
IO_STATUS_BLOCK StatusBlock;
KEvent event(NotificationEvent, FALSE);
NTSTATUS status;

pIrp = IoBuildDeviceIoControlRequest(
IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION,
m_Lower.DeviceObject(),
(void *)p,
sizeof(struct _USB_IDLE_CALLBACK_INFO),
NULL,
0,
TRUE,
(PKEVENT)event.Object(),
&StatusBlock);

if (pIrp == NULL)
return STATUS_INSUFFICIENT_RESOURCES;

status = IoCallDriver(m_Lower.DeviceObject(), pIrp);

if (status == STATUS_PENDING)
{
event.Wait();
status = StatusBlock.Status;
}


// BOUNDS_CHECKER(COMPLETED_CALLDOWN, (this, status, *pInformation));
delete p;
return status;

游客

返回顶部