The hubwalker loops through PDO devices 0-15 and it hangs at number 11. So the device name (hub name) should be &quot;\Device\USBPDO-11&quot;. Is that what you wanted?<br><br>I&#39;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">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="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:0in;margin-bottom:0pt;margin-left:0in">

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

<b> </b></p><p class="MsoNormal" style="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:0in;margin-bottom:0pt;margin-left:0in;text-align:justify">

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="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:0in;margin-bottom:0pt;margin-left:0in;text-align:justify">

 </p><p class="MsoNormal" style="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:12.95pt;margin-bottom:0pt;margin-left:8.65pt;text-align:justify">

<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="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:12.95pt;margin-bottom:0pt;margin-left:8.65pt;text-align:justify">

<i> </i></p><p class="MsoNormal" style="color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:13px;background-color:rgb(255,255,255);margin-top:0in;margin-right:0in;margin-bottom:0pt;margin-left:0in;text-align:justify">

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><br><div class="gmail_quote">On Tue, Mar 13, 2012 at 2:10 PM, Huihong Luo <span dir="ltr">&lt;<a href="mailto:huisinro@yahoo.com">huisinro@yahoo.com</a>&gt;</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>&lt;<a href="mailto:rbhkamal@gmail.com" target="_blank">rbhkamal@gmail.com</a>&gt;</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 &lt;<a href="mailto:rbhkamal@gmail.com" target="_blank">rbhkamal@gmail.com</a>&gt;<br>Subject: Re: [vbox-dev] IoGetDeviceObjectPointer hangs vboxusbmon<br>

To: &quot;vbox-dev&quot; &lt;<a href="mailto:vbox-dev@virtualbox.org" target="_blank">vbox-dev@virtualbox.org</a>&gt;<br>Date: Tuesday, March 13, 2012, 10:49 AM<div><div class="h5"><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">&lt;<a href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com" rel="nofollow" target="_blank">rbhkamal@gmail.com</a>&gt;</span> wrote:<br>


<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex">
<div>
<div>
<div>I&#39;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&#39;m not an expert in windows driver development so I&#39;d like to run things by you before I start fixing it.</div>
<div><br></div>
<div>Firstly, I&#39;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>==&gt;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>-- <br>-- Ribhi<br>
</div>