{"id":271,"date":"2008-03-06T11:34:08","date_gmt":"2008-03-06T11:34:08","guid":{"rendered":"https:\/\/driverentry.com.br\/en\/2008\/03\/06\/step-into-kernel-vista-usb2\/"},"modified":"2026-07-27T20:44:44","modified_gmt":"2026-07-27T20:44:44","slug":"step-into-kernel-vista-usb2","status":"publish","type":"post","link":"https:\/\/driverentry.com.br\/en\/2008\/03\/06\/step-into-kernel-vista-usb2\/","title":{"rendered":"Step into Kernel (Vista + USB2)"},"content":{"rendered":"<div style=\"text-align: right;\"><a href=\"https:\/\/driverentry.com.br\/2008\/03\/06\/step-into-kernel-vista-usb2\/\"><img loading=\"lazy\" decoding=\"async\" title=\"Em Portugu\u00eas\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/br.gif\" alt=\"\" width=\"21\" height=\"19\" \/><\/a><\/div>\n<p><img decoding=\"async\" style=\"float: right; margin: 0px 10px;\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/DebugCable.png\" alt=\"\" border=\"0\" \/><\/p>\n<p>I have already mentioned into another <a href=\"https:\/\/driverentry.com.br\/en\/2006\/10\/24\/serial-killers\/\">post<\/a> that it is possible to perform Kernel Debugging via a 2.0 USB port. In this post I&#8217;m going to demonstrate such a 2.0 USB connection working. Yeah, that&#8217;s a good thing. So let&#8217;s stop this idle talk and go to the business. If you know nothing about Kernel Debugging, you can read this <a href=\"https:\/\/driverentry.com.br\/en\/2006\/12\/01\/step-into-kernel-serial\/\">post<\/a> which brings the concepts and basic steps on the subject or you can ask yourself <em>&#8220;How have I ever gotten into this site?&#8221;<\/em> and return to <a href=\"http:\/\/www.orkut.com\">ORKUT<\/a>.<\/p>\n<p>The USB bus does not allow us to have direct connections between two computers. In order to use a USB port for this purpose, we must rely on the additional hardware helping. Although it is named as <strong>Debug Cable<\/strong>, this is a small device that connects computers via USB ports. I do not know if there are already other manufacturers for the Debug Cable, but the one I&#8217;m using at this experiment is <a href=\"http:\/\/www.ajaystech.com\/net20dc.htm\">NET20DC<\/a>.<\/p>\n<h3>Using the Debug Cable<\/h3>\n<p>Using the Debug Cable is a luxury that only <a href=\"http:\/\/en.wikipedia.org\/wiki\/Windows_Vista\">Windows Vista<\/a> and posterior systems can enjoy. It needs to be plugged into a 2.0 USB port without going through any hub at the <strong>TARGET <\/strong>side. But how am I supposed to know for sure which of my ports is actually 2.0?<\/p>\n<p>An easy way to know that, especially for those ones who have installed<strong> WDK,<\/strong> is to build the <strong>USBView<\/strong> sample which is in the <em>&#8220;C:\\WinDDK\\6000\\src\\usb\\USBView&#8221;<\/em> folder of WDK. This program lists the drivers and their respective connected USB devices. Thus, when connecting the Debug Cable to the TARGET machine, USBView should inform us what port this new device is connected to. Note that in this window we can see which controller the port we are using belongs to.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/USBView.png\" alt=\"\" \/><\/div>\n<p>Windows will prompt a driver when detecting this new USB device presence. No driver must be installed to use the Debug Cable on the TARGET side. So, you can select <em>&#8220;Do not show this message again for this device&#8221;<\/em> in the window shown below. Not installing any driver to the TARGET side makes sense. Remember that this interface will be used by BIOS of the TARGET machine and its control wont be passed to the operating system core. Do not forget, yet, there is another requirement to use the Debug Cable. The TARGET machine&#8217;s BIOS must implement this debug interface control. The most unfortunate part of this story is about checking whether your BIOS offers such support. All that you need to do is just to try. That means you may have the Debug Cable, a free 2.0 USB port and the cables but even that, there is a risk of not connecting it because TARGET BIOS might not support the debug interface. I&#8217;m glad to know that my laptop offers this support and have not spent this money for anything importing the Debug Cable. Phew!<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/FoundUSBCable.png\" alt=\"\" \/><\/div>\n<h3>Modifying Boot.ini<\/h3>\n<p>Sorry? Boot.ini? I&#8217;m sorry to tell you that the <em>Boot.ini<\/em> has gone way. Windows Vista uses a new architecture called <a href=\"http:\/\/msdn.microsoft.com\/en-us\/windows\/hardware\/gg463059.aspx\">Boot Configuration Data<\/a> (BCD). That has been the end for Boot.ini file. To edit the BCD settings, we use the <strong>BCDEdit.exe <\/strong>tool, a console application that needs to be run with administrative rights. Executing this tool without any parameters returns it to the following output.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/BCDEdit.png\" alt=\"\" \/><\/div>\n<p>To configure the system in order to have two boot options, the one with enabled debugging and the other isn&#8217;t, follow the described steps below. The <strong>Boot Manager<\/strong> managers the <strong>Boot Loaders<\/strong> which are either possible to be the other operating systems, even prior to Windows Vista or configuration sets of the same system. Each of these items is identified by a GUID. Note that the first command makes a copy of the current configuration to the one contains the <em>&#8220;Windows Vista Guinea Pig Mode&#8221;<\/em> string as a description. In response to this copy, the tool returns a resulting GUID of the copy. Also, observe that the second command enables the kernel debugging to the setting identified by the GUID just received. Right now, if we take a look at the settings, it will have a result like the same image being displayed below.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/BCDEdit2.png\" alt=\"\" \/><\/div>\n<p>Nice!!! Now we have to configure the media to be used by the Kernel Debugger. I believe that most systems still use serial ports for this purpose. In this case, the most common configuration is to use the COM1 serial port with a 115200 baud rate. To configure these settings, use the following command line. To see the current settings, just run the second command line as it is shown below.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/DbgSerial.png\" alt=\"\" \/><\/div>\n<p>If you do not know how to use the serial port as a communication way for the kernel debug, this is the <a href=\"https:\/\/driverentry.com.br\/en\/2006\/12\/01\/step-into-kernel-serial\/\">post<\/a> that talks about it. However, in this post I am commenting about kernel debug using a 2.0 USB as a communication way. In this case, the settings are described at the command line that is shown below. The <strong>TARGETNAME<\/strong> is able to receive any name. I have used the <em>&#8220;WINDBG&#8221;<\/em> name for obvious reasons, but you can use anyone.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/DbgUSB.png\" alt=\"\" \/><\/div>\n<p>As you may have guessed, the settings on the debug mode of communication is global, that is not linked to one or another boot configuration identified by a GUID.<\/p>\n<p>I believe that on the TARGET side everything is ready to make the link. Thus, when you reboot the victim machine, the following menu will be displayed by the Boot Manager:<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/BootManager.png\" alt=\"\" \/><\/div>\n<h3>Configuring the HOST<\/h3>\n<p>At the HOST side of this game, we must add the driver that controls the Debug Cable to it and allow Windbg to use this device. Although I&#8217;m using Windows Vista on the HOST side, nothing would prevent me from using Windows 2000 or higher on this side of the conversation. The fun starts when you plug the device and click <em>&#8220;Locate and install driver (recommended)&#8221; <\/em>into the <em>&#8220;New Hardware Found&#8221; <\/em>window that has already appeared into this post. At this time, Windows searches for the driver at Windows Update database.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/AjaysWindowsUpdate.png\" alt=\"\" \/><\/div>\n<p>The thing starts to get funny when Windows &#8220;asks&#8221; me to insert the disk that coming with the Debug Cable. Only two words had been on my mind at that moment, <em>&#8220;What disk?&#8221;<\/em>. Without some other options, I clicked on <em>&#8220;I do not have that damn disk! Are you crazy? Show me anything, for the God sake.&#8221;<\/em> Some of you might even have this sequence of windows decorated by just not finding drivers for all devices you have had.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/WinWasUnable.png\" alt=\"\" \/><\/div>\n<p>Finally, when the last window has been shown to me, a light came to me, just like one of those brilliant ideas that I have had every leap year. That&#8217;s when I thought to myself <em>&#8220;Now I know! I am going to visit the manufacturer&#8217;s website and look for a support session.&#8221;<\/em><\/p>\n<p>And at the manufacturer&#8217;s web site&#8230;<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/PlxWebSite.png\" alt=\"\" \/><\/div>\n<p>And at the Microsoft&#8217;s web site&#8230;<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/UsbDbgMail.png\" alt=\"\" \/><\/div>\n<p>In the end, I sent this e-mail to get any sign that I had not thrown my money into the trash can. Less than an hour after, I got the answer with a list of requirements and steps to be followed; but the most important thing had just been revealed to me at the end.<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/MsAnswer.png\" alt=\"\" \/><\/div>\n<p>I knew I could count on Microsoft intelligence and agility to resolve this but, for those who are reading this post, my tip is: When Windows prompts for new device driver, point out the <em>&#8220;C:\\Program Files\\Debugging Tools for Windows\\usb&#8221;<\/em> folder.<\/p>\n<p>So, I&#8217;m glag to show you this next window into the figure below:<\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/USBDebugOK.png\" alt=\"\" \/><\/div>\n<h3>Configuring WinDbg<\/h3>\n<p><img decoding=\"async\" style=\"float: right; margin: 0px 10px;\" src=\"https:\/\/driverentry.com.br\/en\/wp-content\/uploads\/2026\/07\/KrnDbgUsb.png\" alt=\"\" border=\"0\" \/><\/p>\n<p>Now it&#8217;s children&#8217;s play. Select the <em>&#8220;Kernel Debug &#8230;&#8221;<\/em> item from the <em>&#8220;File&#8221;<\/em> menu. Click on the <em>&#8220;USB 2.0&#8221;<\/em> tab and type the same TARGETNAME you have chosen at TARGET configuration with BCDEdit.exe. In my case, the name is WINDBG as it is displayed at the figure.<\/p>\n<p>Clicking OK, the WinDbg command window should display the text highlighted in red below and wait for the connect completion. The output below was obtained with a <em>CTRL+Break<\/em> after having the debugger connected.<\/p>\n<div style=\"font-family: Courier New; font-size: 9pt; color: black; background: #A4F64C; border: 1px outset; padding: 0 0 0 5px;\">\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Microsoft (R) Windows Debugger Version 6.8.0004.0 AMD64<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">Copyright (c) Microsoft Corporation. All rights reserved.<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">&nbsp;<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF; color: red;\">Using USB2 for debugging<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA; color: red;\">Waiting to reconnect...<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">USB2: Write opened<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Connected to Windows Vista 6000 x86 compatible target, ptr64 FALSE<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">Kernel Debugger connection established.<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Symbol search path is: SRV*c:\\websymbols*http:\/\/msdl.microsoft.com\/download\/symbols<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">Executable search path is:<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Windows Vista Kernel Version 6000 MP (1 procs) Free x86 compatible<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">Built by: 6000.16584.x86fre.vista_gdr.071023-1545<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Kernel base = 0x82000000 PsLoadedModuleList = 0x82111e10<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">System Uptime: not available<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">Break instruction exception - code 80000003 (first chance)<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*******************************************************************************<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">*                                                                             *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*   You are seeing this message because you pressed either                    *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">*       CTRL+C (if you run kd.exe) or,                                        *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*       CTRL+BREAK (if you run WinDBG),                                       *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">*   on your debugger machine's keyboard.                                      *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*                                                                             *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">*                   THIS IS NOT A BUG OR A SYSTEM CRASH                       *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*                                                                             *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">* If you did not intend to break into the debugger, press the \"g\" key, then   *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">* press the \"Enter\" key now.  This message might immediately reappear.  If it *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">* does, press \"g\" and \"Enter\" again.                                          *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">*                                                                             *<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">*******************************************************************************<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">nt!RtlpBreakWithStatusInstruction:<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FAFAFA;\">820818d0 cc              int     3<\/pre>\n<pre style=\"margin: 0px; padding: 0 0 0 5px; background: #FFFFFF;\">0:kd&gt;<\/pre>\n<\/div>\n<p>Now the easy part has been finished. The next steps are referring to investigate the issue, however this will be described in a future post.<\/p>\n<p>I hope having helped.<br \/>\nCYA \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have already mentioned into another post that it is possible to perform Kernel Debugging via a 2.0 USB port. In this post I&#8217;m going to demonstrate such a 2.0 USB connection working. Yeah, that&#8217;s a good thing. So let&#8217;s stop this idle talk and go to the business. If you know nothing about Kernel [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-271","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/posts\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/comments?post=271"}],"version-history":[{"count":3,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/posts\/271\/revisions"}],"predecessor-version":[{"id":296,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/posts\/271\/revisions\/296"}],"wp:attachment":[{"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/media?parent=271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/categories?post=271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/driverentry.com.br\/en\/wp-json\/wp\/v2\/tags?post=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}