阅读:1152回复:1
usb例子程序中的几个问题
本站下载的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就可以呢? 不懂得还多着呢,先问这些吧,请高手不要烦,多多指点! |
|
沙发#
发布于:2004-06-14 09:08
个人感觉处理pnp和power时,function驱动在大部分时候
只需将irp往下传即可。大多数时候是判断返回结果,做些 标志。或者查询一些系统信息。例如,响应start_device_pnp的 时候,也可以顺便设置一下电源。没有太多的工作要做。 至于create和close函数,我看过ntddk的源代码,好像 确实没有什么工作可做的。当然,你可以在这个函数里设置一个 计数器。或者可以获取文件句柄。如果你觉得有用的话。 我对驱动也不太熟,仅供参考。 |
|