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

usb例子程序中的几个问题

楼主#
更多 发布于:2001-05-28 16:34
本站下载的basicusb 和 bulkusb程序中有几个迷惑,请指点:
1.bulkusb中:
NTSTATUS UsbBulkDevice::OnRemoveDevice(KIrp I)
{
    Tracer << "UsbBulkDevice::OnRemoveDevice() Entry\n";

    // Our PnP policy will take care of
    // (1) giving the IRP to USBD
    // (2) detaching the PDO
    // (3) deleting the device object

    return STATUS_SUCCESS;
}
 这里面好像什么事也没做呀,怎么就删除设备了呢?
2.
NTSTATUS UsbBulkDevice::Create(KIrp I)
{    Tracer << "UsbBulkDevice::Create() Entry\n";
    I.ForceReuseOfCurrentStackLocationInCalldown();
    NTSTATUS status = m_Usb.PnpCall(this, I);
    Tracer << "UsbBulkDevice:Create Status " << (ULONG)status << "\n";
    return status;
}
函数create的代码和close的代码几乎一样,难道只需调用pnpcall函数将irp交给下一栈就可以了吗?本身不要做什么吗?
3.
IRP_MJ_INTERNAL_DEVICE_CONTROL这个irp是干什么的哪?在ddk中找不到哇!
4.
 那些时候应该用ForceReuseOfCurrentStackLocationInCalldown?
 那些时候直接调用pnpcall就可以呢?

不懂得还多着呢,先问这些吧,请高手不要烦,多多指点!
escape
驱动老牛
驱动老牛
  • 注册日期2002-02-01
  • 最后登录2004-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-14 09:08
个人感觉处理pnp和power时,function驱动在大部分时候
只需将irp往下传即可。大多数时候是判断返回结果,做些
标志。或者查询一些系统信息。例如,响应start_device_pnp的
时候,也可以顺便设置一下电源。没有太多的工作要做。
至于create和close函数,我看过ntddk的源代码,好像
确实没有什么工作可做的。当然,你可以在这个函数里设置一个
计数器。或者可以获取文件句柄。如果你觉得有用的话。
我对驱动也不太熟,仅供参考。
游客

返回顶部