<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
One thing you might try is to make your host system BSOD and
generate a full or kernel memory dump once you are sure
IoGetDeviceObjectPointer is deadlocked for you.<br>
You will be able then to open the crash dump and find and analyze
the deadlocked thread.<br>
<br>
See <a class="moz-txt-link-freetext" href="http://support.microsoft.com/kb/244139">http://support.microsoft.com/kb/244139</a> on how to make the system
generate a dump for you.<br>
<br>
Note that you'd need a full dump or kernel memory dump, not a
minidump. My Computer -> properties -> advanced system
settings -> "Startup and recovery" settings.<br>
<br>
Once you have a dump and opened it with WinDbg, :<br>
in WinDbg cmd console: !stacks 2 VBoxUsbMon! -> will give you a
list of threads VBoxUsbMon is involved in<br>
select the deadlocked thread with .thread <thread_address><br>
you can then do k, .frame, or whatever you need on that thread. It
would be great if you could post a stack trace for that thread here.<br>
<br>
Mikhail<br>
<br>
On 14.03.2012 1:43, Huihong Luo wrote:
<blockquote
cite="mid:1331675025.86732.YahooMailClassic@web160301.mail.bf1.yahoo.com"
type="cite">
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="font: inherit;" valign="top">sorry, just realized
that you are debugging host drivers. Yes, you will have to
use 2 physical pcs.<br>
<br>
--- On <b>Tue, 3/13/12, Huihong Luo <i><a class="moz-txt-link-rfc2396E" href="mailto:huisinro@yahoo.com"><huisinro@yahoo.com></a></i></b>
wrote:<br>
<blockquote style="BORDER-LEFT: rgb(16,16,255) 2px solid;
PADDING-LEFT: 5px; MARGIN-LEFT: 5px"><br>
From: Huihong Luo <a class="moz-txt-link-rfc2396E" href="mailto:huisinro@yahoo.com"><huisinro@yahoo.com></a><br>
Subject: Re: [vbox-dev] IoGetDeviceObjectPointer hangs
vboxusbmon<br>
To: "Ribhi Kamal" <a class="moz-txt-link-rfc2396E" href="mailto:rbhkamal@gmail.com"><rbhkamal@gmail.com></a><br>
Cc: "vbox-dev" <a class="moz-txt-link-rfc2396E" href="mailto:vbox-dev@virtualbox.org"><vbox-dev@virtualbox.org></a><br>
Date: Tuesday, March 13, 2012, 2:41 PM<br>
<br>
<div id="yiv1610474135">
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="top">
<div>do you mean you need 2 pcs to debug?</div>
<div> </div>
<div>no, you can use same pc. Just run vm on
the same pc, and configure COM1 as pipe.
Then start windbg this way:</div>
<div><br>
C:\WinDDK\7600.16385.0\Debuggers\windbg.exe
-b -k com:pipe,port=\\.\pipe\com_1,resets=0</div>
<div><br>
--- On <b>Tue, 3/13/12, Ribhi Kamal <i><a class="moz-txt-link-rfc2396E" href="mailto:rbhkamal@gmail.com"><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 class="moz-txt-link-rfc2396E" href="mailto:rbhkamal@gmail.com"><rbhkamal@gmail.com></a><br>
Subject: Re: [vbox-dev]
IoGetDeviceObjectPointer hangs vboxusbmon<br>
To: "Huihong Luo" <a class="moz-txt-link-rfc2396E" href="mailto:huisinro@yahoo.com"><huisinro@yahoo.com></a><br>
Cc: "vbox-dev"
<a class="moz-txt-link-rfc2396E" href="mailto:vbox-dev@virtualbox.org"><vbox-dev@virtualbox.org></a><br>
Date: Tuesday, March 13, 2012, 2:38 PM<br>
<br>
<div id="yiv1610474135">
<div>Thanks, that helped me get
started. Unfortunately I can't set break
points when debugging locally so it
is going to take me a while answer your
questions. The only dev machine that I
use is 100 miles away from me, so it
will be very hard to attach a
console/USB cable for debugging. I need
to go hunt for a laptop somewhere, put
windows on it then run a windbg in
server mode. That way I can connect via
tcp and set breakpoints.</div>
<div><br>
Thanks again</div>
<div><br>
</div>
<div>
<div class="yiv1610474135gmail_quote">On
Tue, Mar 13, 2012 at 3:30 PM, Huihong
Luo <span dir="ltr"><<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=huisinro@yahoo.com"
rel="nofollow" target="_blank">huisinro@yahoo.com</a>></span>
wrote:<br>
<blockquote style="BORDER-LEFT: #ccc
1px solid; MARGIN: 0px 0px 0px
0.8ex; PADDING-LEFT: 1ex"
class="yiv1610474135gmail_quote">
<table border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<td valign="top">inside
windbg, click Disassembly
window, it will display
assembly code, then you can
set a breakpoint by click
the left side of the code
line.
<div class="yiv1610474135im"><br>
<br>
--- On <b>Tue, 3/13/12,
Ribhi Kamal <i><<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com"
rel="nofollow"
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">
<div
class="yiv1610474135im"><br>
From: Ribhi Kamal <<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com"
rel="nofollow"
target="_blank">rbhkamal@gmail.com</a>><br>
Subject: Re: [vbox-dev]
IoGetDeviceObjectPointer
hangs vboxusbmon<br>
</div>
To: "Huihong Luo" <<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=huisinro@yahoo.com"
rel="nofollow"
target="_blank">huisinro@yahoo.com</a>><br>
Cc: "vbox-dev" <<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=vbox-dev@virtualbox.org"
rel="nofollow"
target="_blank">vbox-dev@virtualbox.org</a>><br>
Date: Tuesday, March 13,
2012, 12:29 PM
<div>
<div
class="yiv1610474135h5"><br>
<br>
<div>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>On Tue, Mar
13, 2012 at 3:08
PM, Ribhi Kamal
<span dir="ltr"><<a
moz-do-not-send="true"
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">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
moz-do-not-send="true"
href="http://www.osronline.com/article.cfm?id=24" rel="nofollow"
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
style="MARGIN:
0in 0in 0pt;
FONT-FAMILY:
Arial,
Helvetica,
sans-serif;
COLOR:
rgb(51,51,51);
FONT-SIZE:
13px"
align="center"><b>Figure
5 – The <u>wrong</u> way
to write a PnP
Notification
Callback</b></p>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<p style="MARGIN: 0in 0in
0pt; FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px"
align="center"><b> </b>
</p>
<p style="TEXT-ALIGN:
justify; MARGIN: 0in 0in
0pt; FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px">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 style="TEXT-ALIGN:
justify; MARGIN: 0in 0in
0pt; FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px">
</p>
<p style="TEXT-ALIGN:
justify; MARGIN: 0in
12.95pt 0pt 8.65pt;
FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px"><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 style="TEXT-ALIGN:
justify; MARGIN: 0in
12.95pt 0pt 8.65pt;
FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px"><i> </i>
</p>
<p style="TEXT-ALIGN:
justify; MARGIN: 0in 0in
0pt; FONT-FAMILY: Arial,
Helvetica, sans-serif;
COLOR: rgb(51,51,51);
FONT-SIZE: 13px">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><br>
</div>
<div>
<div>
<div><br>
<div>On Tue, Mar 13,
2012 at 2:10 PM,
Huihong Luo <span
dir="ltr"><<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=huisinro@yahoo.com"
rel="nofollow"
target="_blank">huisinro@yahoo.com</a>></span>
wrote:<br>
<blockquote
style="BORDER-LEFT:
#ccc 1px solid;
MARGIN: 0px 0px
0px 0.8ex;
PADDING-LEFT: 1ex">
<table border="0"
cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<td
valign="top">
<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
size="-0">ObjectName
unicode
string.</font></div>
<div><font
size="-0"> </font></div>
<div>IoGetDeviceObjectPointer()
does the
following
thing:</div>
<div> </div>
<div>ZwOpenFile(ObjectName)
to get a
handle</div>
<font
size="-0">
<div>ObReferenceObjectByHandle(handle)
to get the
FileObject</div>
<font
size="-0">
<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
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com"
rel="nofollow"
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
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=rbhkamal@gmail.com"
rel="nofollow"
target="_blank">rbhkamal@gmail.com</a>><br>
Subject: Re:
[vbox-dev]
IoGetDeviceObjectPointer
hangs
vboxusbmon<br>
To: "vbox-dev"
<<a
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=vbox-dev@virtualbox.org"
rel="nofollow"
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
moz-do-not-send="true"
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
moz-do-not-send="true"
href="http://us.mc1603.mail.yahoo.com/mc/compose?to=vbox-dev@virtualbox.org"
rel="nofollow"
target="_blank">vbox-dev@virtualbox.org</a><br>
<a
moz-do-not-send="true"
href="https://www.virtualbox.org/mailman/listinfo/vbox-dev"
rel="nofollow"
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>
<span
class="yiv1610474135HOEnZb"><font
color="#888888"><br>
<br clear="all">
<div><br>
</div>
-- <br>
-- Ribhi<br>
</font></span></td>
</tr>
</tbody>
</table>
</blockquote>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
-- Ribhi<br>
</div>
</div>
</div>
</blockquote>
</td>
</tr>
</tbody>
</table>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
vbox-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:vbox-dev@virtualbox.org">vbox-dev@virtualbox.org</a>
<a class="moz-txt-link-freetext" href="https://www.virtualbox.org/mailman/listinfo/vbox-dev">https://www.virtualbox.org/mailman/listinfo/vbox-dev</a>
</pre>
</div>
</blockquote>
</td>
</tr>
</tbody>
</table>
</blockquote>
</body>
</html>