jemwei
驱动牛犊
驱动牛犊
  • 注册日期2002-05-14
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1125回复:0

求救于Driverwork高手............

楼主#
更多 发布于:2002-11-26 17:34
Interrupt Transfer + Control transfer(for Get data)

己使用CATC analyzer验证每2ms , Interrupt IN 一次
且control transfer正确运行,

但是为何无法取得Device端的正确资料?
BuildInterruptTransfer传递的Buffer不是device回传的资料?
那个是Interrupt IN回传的Buffer?

附上Driverwork片断源码

NTSTATUS Device::DeviceControl(KIrp I)
{
NTSTATUS status;
PVOID pBuffer = I.IoctlBuffer();
ULONG dwOutputBufferSize = I.IoctlOutputBufferSize();
ULONG dwInputBufferSize = I.IoctlInputBufferSize();
ULONG_PTR nInfo = NULL;
switch (I.IoctlCode())
        {
          case IOCTL_WAITINT:
{
           PUCHAR pBuffer = PUCHAR(I.IoctlBuffer());

         for(int i = 0; i<16 ;i++)
   *(pBuffer+i) = *(pIntBuff+i);

         I.Information() = 16;
   break;
}
        }
        ...................
}

NTSTATUS KUsbInterruptTransfer::StartPolling(
PVOID Buffer,
ULONG Length,
USB_INTERRUPT_CALLBACK pfnOnInterrupt,
PVOID pClientContext
)
{
        ....
m_InterruptPipe->BuildInterruptTransfer(
Buffer,
Length,
m_bShortOk,
NULL,
m_pIntUrb
);

status = m_InterruptPipe->SubmitUrb(
m_KIrp,
m_pIntUrb,
LinkTo(InterruptTransferComplete),
pCompInfo
);

return status;
}

最新喜欢:

mapoflmapofl
游客

返回顶部