The \Device\USBPDO-11 physical device is a sprint hub driver BcmBusCtr.SYS. But I've seen it happen with other devices as well (Apple trackpad)<div><br></div><div>Will update you once I get windbg working.</div><div><br>

Thanks</div><div><br><div class="gmail_quote">On Tue, Mar 13, 2012 at 3:08 PM, Ribhi Kamal <span dir="ltr"><<a href="mailto:rbhkamal@gmail.com" target="_blank">rbhkamal@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The hubwalker loops through PDO devices 0-15 and it hangs at number 11. So the device name (hub name) should be "\Device\USBPDO-11". Is that what you wanted?<br>



<br>I'm still trying to figure out how to step through assembly code in windbg. I just started windows in debug mode and connected windbg.<div>
<br></div><div>In the mean time, I found the link below which suggests queuing a work item to call IoGetDeviceObjectPointer using ioallocateworkitem routine, should I give that a try?</div><div><a href="http://www.osronline.com/article.cfm?id=24" target="_blank">http://www.osronline.com/article.cfm?id=24</a><br>




</div><div><br></div><div>Here is a little snippet:</div><div style="text-align:center"><p class="MsoNormal" align="center" style="margin-right:0in;color:rgb(51,51,51);font-size:13px;margin-left:0in;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">




<b>Figure 5 – The <u>wrong</u> way to write a PnP Notification Callback</b></p><p class="MsoNormal" align="center" style="margin-right:0in;color:rgb(51,51,51);font-size:13px;margin-left:0in;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">




<b> </b></p><p class="MsoNormal" style="margin-right:0in;text-align:justify;color:rgb(51,51,51);font-size:13px;margin-left:0in;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">
And, while you’d be partially right, you <i>do</i> get a pointer to a device object using its name by calling <b>IoGetDeviceObject Pointer</b>, you’d also get bitten by one of the conditions of PnP Notification routines.  As it very clearly states in the documentation:</p>




<p class="MsoNormal" style="margin-right:0in;text-align:justify;color:rgb(51,51,51);font-size:13px;margin-left:0in;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">
 </p><p class="MsoNormal" style="margin-right:12.95pt;text-align:justify;color:rgb(51,51,51);font-size:13px;margin-left:8.65pt;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">
<i>A callback routine must not open the device directly. If the provider of the interface causes blocking PnP events, the notification callback routine can cause a deadlock if it tries to open the device in the callback thread.</i></p>




<p class="MsoNormal" style="margin-right:12.95pt;text-align:justify;color:rgb(51,51,51);font-size:13px;margin-left:8.65pt;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">
<i> </i></p><p class="MsoNormal" style="margin-right:0in;text-align:justify;color:rgb(51,51,51);font-size:13px;margin-left:0in;margin-bottom:0pt;font-family:Arial,Helvetica,sans-serif;margin-top:0in">
When you call <b>IoGetDeviceObjectPointer, </b>you’re actually issuing an open (IRP_MJ_CREATE) for the specified device.  That’s why you get back a File Object pointer, in addition to the Device Object pointer that you wanted.  So, the proper thing to do is queue a work item that does the call to <b>IoGetDeviceObjectPointer</b>, as shown in <i>Figure 6</i>.</p>




</div><div><br></div><div><div><div><br><div class="gmail_quote">On Tue, Mar 13, 2012 at 2:10 PM, Huihong Luo <span dir="ltr"><<a href="mailto:huisinro@yahoo.com" target="_blank">huisinro@yahoo.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="top" style="font:inherit"><div>This api simply returns a device object from a name, and usually does not block. What is the <br>device name? you can examine <font>ObjectName unicode string.</font></div>





<div><font> <font></font></font></div>
<div>IoGetDeviceObjectPointer() does the following thing:</div>
<div> <font></font></div>
<div>ZwOpenFile(ObjectName) to get a handle</div><font>
<div>ObReferenceObjectByHandle(handle) to get the FileObject</div><font>
<div>IoGetRelatedDeviceObject(FileObject) to get the device object</div>
<div> </div>
<div>you can further step into the assembly code to nail down which function call causes the lock.</div>
<div> </div>
<div>you can also list all locks using these commands in windbg:</div>
<div> </div>
<div>!locks</div>
<div>!deadlock</div></font></font>
<div> <br>--- On <b>Tue, 3/13/12, Ribhi Kamal <i><<a href="mailto:rbhkamal@gmail.com" target="_blank">rbhkamal@gmail.com</a>></i></b> wrote:<br></div>
<blockquote style="BORDER-LEFT:rgb(16,16,255) 2px solid;PADDING-LEFT:5px;MARGIN-LEFT:5px"><br>From: Ribhi Kamal <<a href="mailto:rbhkamal@gmail.com" target="_blank">rbhkamal@gmail.com</a>><br>Subject: Re: [vbox-dev] IoGetDeviceObjectPointer hangs vboxusbmon<br>




To: "vbox-dev" <<a href="mailto:vbox-dev@virtualbox.org" target="_blank">vbox-dev@virtualbox.org</a>><br>Date: Tuesday, March 13, 2012, 10:49 AM<div><div><br><br>
<div>Sorry, actually the IRQL == PASSIVE_LEVEL is okay. So just ignore that bit.<br><br>
<div>On Tue, Mar 13, 2012 at 1:27 PM, Ribhi Kamal <span dir="ltr"><<a href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com" rel="nofollow" target="_blank">rbhkamal@gmail.com</a>></span> wrote:<br>





<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex">
<div>
<div>
<div>I've been troubleshooting an issue that prevents vbox from capturing USB devices when other specific USB devices are plugged in (i.e. Sprint USB crap). I finally managed to track down the problem to IoGetDeviceObjectPointer in VboxUsbMonHubDevWalk. IoGetDeviceObjectPointer was getting called, however, it never returned.
<div><br></div>
<div>I'm not an expert in windows driver development so I'd like to run things by you before I start fixing it.</div>
<div><br></div>
<div>Firstly, I'm not really sure why it hangs (deadlocks?) there for some devices and not others. However, I believe that it may be due to the fact that some driver interfaces cause blocking PnP events. Due to that, vboxusbmon runs into a deadlock when executing IoGetDeviceObjectPointer because it is being used directly from a callback function, VBoxUsbMonDeviceControl, and IRQL==PASSIVE_LEVEL.<br>





<div>
<div><br></div>
<div>What led me to that conclusion is that right after IoGetDeviceObjectPointer is executed, I start seeing lots of PnP events.</div>
<div>
<div>USBMon::vboxUsbMonHubDevWalk:   </div>
<div>IoGetDeviceObjectPointer - Starting     </div>
<div><br></div>
<div>USBMon::VBoxUsbMonPnPHook:      </div>
<div>VBoxUsbMonPnPHook In    </div>
<div><br></div>
<div>USBMon::VBoxUsbMonPnPHook:      </div>
<div>==>PnP: Mn(IRP_MN_QUERY_DEVICE_RELATIONS), PDO(0x8833d028), IRP(0x882a71a8), Status(0xc00000bb) </div>
<div><br></div>
<div>See attached for complete debug view.</div>
<div><br></div>
<div>Are my assumptions correct? If so how would you go about fixing the problem.<br></div></div>
<div><br></div>
<div>Thanks!</div></div></div></div>
<div><br></div>-- <br>-- Ribhi<br></div></div></blockquote></div><br><br clear="all">
<div><br></div>-- <br>-- Ribhi<br></div><br></div></div>-----Inline Attachment Follows-----<br><br>
<div>_______________________________________________<br>vbox-dev mailing list<br><a href="http://us.mc1603.mail.yahoo.com/mc/compose?to=vbox-dev@virtualbox.org" target="_blank">vbox-dev@virtualbox.org</a><br><a href="https://www.virtualbox.org/mailman/listinfo/vbox-dev" target="_blank">https://www.virtualbox.org/mailman/listinfo/vbox-dev</a><br>




</div></blockquote></td></tr></tbody></table></blockquote></div><br><br clear="all"><div><br></div></div></div><span><font color="#888888">-- <br>-- Ribhi<br>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>-- Ribhi<br>
</div>