<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Analyze -v</title>
	<atom:link href="http://analyze-v.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://analyze-v.com</link>
	<description>Windows, WinDBG, IDA, and Oxford commas</description>
	<lastBuildDate>Wed, 25 Aug 2010 11:55:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Object Tracking and WinDBG</title>
		<link>http://analyze-v.com/?p=702</link>
		<comments>http://analyze-v.com/?p=702#comments</comments>
		<pubDate>Wed, 25 Aug 2010 11:55:51 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>
		<category><![CDATA[Windows internals]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=702</guid>
		<description><![CDATA[The Object Manager (Ob) in Windows provides and excellent feature called object tracking, which causes the Ob to maintain a list of every active object in the system. When activated, it allows you to find every driver object, event object, file object, mutex object, etc. at any point in time via the !object command. While the [...]]]></description>
			<content:encoded><![CDATA[<p>The Object Manager (Ob) in Windows provides and excellent feature called object tracking, which causes the Ob to maintain a list of every active object in the system. When activated, it allows you to find every driver object, event object, file object, mutex object, etc. at any point in time via the <em>!object </em>command. While the overhead of this is likely to be unacceptable for everyday use, in certain debugging situations it can be immensely helpful. For example, I recently debugged an issue where autochk would not run when our file system filter was installed on the system. I suspected that  a rogue file object was preventing NTFS from dismounting, so I turned on object tracking in order to quickly find the file object causing the problem (turned out to be multiple file objects).</p>
<p>Unfortunately things have changed in Windows 7 and the debugging tools haven&#8217;t caught up so this no longer works, but I&#8217;ll provide a solution to that once I get there&#8230;</p>
<p><em><strong>Enabling Object Tracking</strong></em></p>
<p>Object tracking is enabled via the FLG_MAINTAIN_OBJECT_TYPELIST<em> </em>GFlags option. You can enable this via the GFlags utility on the target machine, but I prefer to do it via the debugger on a per-boot basis so that I don&#8217;t have to remember to shut it off:</p>
<pre>1: kd&gt; !gflag + otl
Current NtGlobalFlag contents: 0x00004000
    otl - Maintain a list of objects for each type</pre>
<p><strong>Important note: </strong>This <em>must </em>be done very early in the boot process before the Ob initializes. I recommend setting an initial break in the debugger by using the WinDBG command <em>CTRL+ALT+K </em>and using the <em>!gflag </em>command at the initial break.</p>
<p>Once you&#8217;ve enabled the command, just hit Go and proceed to run whatever tests or do whatever you like. Once you&#8217;re ready to start inspecting objects, the path you will take will differ on Vista (and earlier) and Windows 7.</p>
<p><em><strong>Dumping Objects Prior To Win7</strong></em></p>
<p>Prior to Win7, life is fairly straightforward as the <em>!object </em>command supports walking the object list. The syntax for the command is:</p>
<pre>!object 0 Name</pre>
<p>Where <em>Name </em>is documented to be:</p>
<dt><em>Name</em> </dt>
<dd>If the first argument is zero, the second argument is interpreted as the name of a class of system objects for which to display all instances. </dd>
<p>So, for example:</p>
<pre>!object 0 File</pre>
<pre>!object 0 Event</pre>
<pre>!object 0 Semaphore</pre>
<pre>!object 0 Device</pre>
<pre>!object 0 Driver</pre>
<p>Any of these will dump out all of the objects of that particular type and you can then pick through and do whatever it is you do with that information.</p>
<p><strong><em>Dumping Objects on Win7</em></strong></p>
<p>Now for the fun part. If you attempt to run any of the above <em>!object</em>  commands on a Win7 target, you&#8217;ll get the following error:</p>
<pre>1: kd&gt; !object 0 File
Scanning 723 objects of type 'File'
WARNING: Object header 83d8bb48 flag (42) does not have
OB_FLAG_CREATOR_INFO (4) set</pre>
<p>The problem is that starting with Win7, that flag no longer exists. Instead, the object header tracks whether or not this feature is enabled via another field in the header. So, unfortunately, the Ob changed but the <em>!object </em>command wasn&#8217;t updated to reflect the changes.</p>
<p>We <em>can </em>get this back though from a gratuitously complicated debugger command that walks the list starting at an entry. Finding the starting entry could be simplified, but I&#8217;ll make you find it manually because that&#8217;s how I did it when I wrote the script and I don&#8217;t want to make it too easy on you <img src='http://analyze-v.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Also, I&#8217;ll apologize in advance for the script being on a single line and thus guaranteeing that it will require some sort of WinDBG Rosetta Stone in order to decipher (again, because that&#8217;s how I did it when I wrote it&#8230;Job security!).</p>
<p>First, you&#8217;ll need to dump the global type variable for the type of objects you want to see. Examples of these are <strong>IoFileObjectType</strong>,<strong> ExEventObjectType</strong>,<strong> IoDriverObjectType</strong>,<strong> </strong>etc. (if you&#8217;re having trouble finding the name of the one you want just let me know). I&#8217;ll pick the file object type:</p>
<pre>1: kd&gt; x nt!iofileobjecttype
82775a54 nt!IoFileObjectType = 0x83d656e0
1: kd&gt; dt nt!_object_type 0x83d656e0
   +0x000 TypeList         : _LIST_ENTRY [ <strong>0x83d8bb38</strong> - 0x846022d0 ]
   +0x008 Name             : _UNICODE_STRING "File"
   +0x010 DefaultObject    : 0x0000005c Void
   +0x014 Index            : 0x1c ''
   +0x018 TotalNumberOfObjects : 0x2d3
   +0x01c TotalNumberOfHandles : 0xaa
   +0x020 HighWaterNumberOfObjects : 0x691
   +0x024 HighWaterNumberOfHandles : 0xb6
   +0x028 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x078 TypeLock         : _EX_PUSH_LOCK
   +0x07c Key              : 0x656c6946
   +0x080 CallbackList     : _LIST_ENTRY [ 0x83d65760 - 0x83d65760 ] </pre>
<p>Note the <strong>TypeList </strong>field. That&#8217;s the list of currently valid objects for that type in the system in the form of OBJECT_HEADER_CREATOR_INFO structures, which currently exist directly before the object header. So, TypeList entry address + sizeof(OBJECT_HEADER_CREATOR_INFO) + FIELD_OFFSET(OBJECT_HEADER, Body) is where the actual object address is. I&#8217;ll put that all together into the following command (I&#8217;m going to break it up C style with &#8220;\&#8221; characters so you can see it, please remove before actually using and make into a single line):</p>
<pre>r @$t0 = @@(sizeof(nt!_object_header_creator_info) \</pre>
<pre>+ #FIELD_OFFSET(nt!_object_header, Body)); \</pre>
<pre>!list "-x \".block {as /x Res @$extret+@$t0} ;\</pre>
<pre>.block{.echo ${Res}; !object ${Res}} ; \</pre>
<pre>ad /q Res\" 0x83d8bb38" </pre>
<p>Note that the address used at the end of the command is from the <em>dt </em>output above in bold. Also remember that it’s written to occupy a single line, so it needs to get pasted into the KD prompt with no newlines and those backslashes removed. Running the command should provide you with relatively the same output at the old <em>!object </em>command on previous O/S releases.</p>
<p>If you&#8217;d like to clean up the script or, even better, turn it into a debugger extension that takes a name like <em>!object</em>, please let me know or send along the results. Right now it&#8217;s on my ever increases prioritized list of things to do and I&#8217;d like to take it off <img src='http://analyze-v.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=702</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Now on Twitter</title>
		<link>http://analyze-v.com/?p=700</link>
		<comments>http://analyze-v.com/?p=700#comments</comments>
		<pubDate>Mon, 23 Aug 2010 23:06:08 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[Non-technical]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=700</guid>
		<description><![CDATA[If you want updates on new blog posts and other such trivia, follow Analyze -v on Twitter! http://twitter.com/analyzev]]></description>
			<content:encoded><![CDATA[<p>If you want updates on new blog posts and other such trivia, follow Analyze -v on Twitter! <a href="http://twitter.com/analyzev">http://twitter.com/analyzev</a></p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=700</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undocumented !process flags and switches</title>
		<link>http://analyze-v.com/?p=689</link>
		<comments>http://analyze-v.com/?p=689#comments</comments>
		<pubDate>Mon, 23 Aug 2010 23:03:11 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=689</guid>
		<description><![CDATA[There are two options added to the !process command that haven&#8217;t made it into the documentation yet. The first option is the /h switch, which appears to allow for searching the process list for a process with too many open handles: 0: kd&#62; !process /h 0n10000 Searching processes with HandleCount &#62; 10000 The only problem [...]]]></description>
			<content:encoded><![CDATA[<p>There are two options added to the <em>!process </em>command that haven&#8217;t made it into the documentation yet.</p>
<p>The first option is the /h switch, which appears to allow for searching the process list for a process with too many open handles:</p>
<pre>0: kd&gt; !process /h 0n10000
Searching processes with HandleCount &gt; 10000</pre>
<p>The only problem with this is that it appears to stop on the first process that is above that limit. This prevents it from being a generically useful command as you&#8217;re probably looking for any processes with large handle counts. For that purpose, I&#8217;ve whipped up this WinDBG script that will search for any process with open handles above a specified amount:</p>
<pre>.if (${/d:$arg2} != 1)
{
    .echo Performing scan for processes with handle count &gt; ${$arg1};
    !for_each_process "$$&gt;a&lt;${$arg0} ${$arg1} 1";
}</pre>
<pre>.else
{
    r? @$t0 = ((nt!_eprocess *)${@#Process});
    aS handleCount "@@(@$t0-&gt;ObjectTable-&gt;HandleCount)";
    .block
    {
        .if (${handleCount} &gt; ${$arg1})
        {
           .printf /on "Process %p has %d handles\n", @$t0, ${handleCount};
        }
    }
    ad handleCount;
}</pre>
<p>Save that to a file called <em>bighandle.wbs </em>and execute the following command in WinDBG:</p>
<pre>0: kd&gt; $$&gt;a&lt;c:\\dumps\\bighandle.wbs 0n500
Performing scan for processes with handle count &gt; 0n500
Process 848bfd40 has 5568 handles
Process 862e9530 has 579 handles
Process 86374d40 has 997 handles
Process 86334150 has 661 handles
Process 849eb4a0 has 973 handles </pre>
<p>Note that the double backslashes are important on the command line and it won&#8217;t work properly without them. This script could be enhanced to just grab the process with the greatest number of handles, if you want to give that a whirl and submit it pass it along to me (snoone at analyze-v dot com).</p>
<p>The other interesting undocumented feature of <em>!process </em>is bit 5 in the flags (0&#215;20). This causes <em>!process </em>to include information about the process PEB in the output. This also requires that bit 4 (0&#215;10) be present due to the fact that the PEB is process context specific. So, for example:</p>
<pre>0: kd&gt; !process 849eb4a0 31</pre>
<p>(Remaining output left as an exercise to the reader.)</p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=689</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Break on user mode module load</title>
		<link>http://analyze-v.com/?p=682</link>
		<comments>http://analyze-v.com/?p=682#comments</comments>
		<pubDate>Fri, 20 Aug 2010 21:51:52 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=682</guid>
		<description><![CDATA[Every now and then I need to have the debugger break in when a user mode module loads. For example, I may want to set a process specific breakpoint but the process in question isn&#8217;t loaded yet. Normally this would be a giant pain, but with a few quick debugger commands it&#8217;s all too easy. [...]]]></description>
			<content:encoded><![CDATA[<p>Every now and then I need to have the debugger break in when a user mode module loads. For example, I may want to set a <a href="http://analyze-v.com/?p=655">process specific breakpoint </a>but the process in question isn&#8217;t loaded yet. Normally this would be a giant pain, but with a few quick debugger commands it&#8217;s all too easy.</p>
<p>First thing we need to do is get the debugger notified of user module loads. Normally the OS doesn&#8217;t bother letting the kernel debugger know when a user module gets loaded, but this can be enabled via GFlags option <strong><a href="http://msdn.microsoft.com/en-us/library/ff542932.aspx">Enable loading of kernel debugger symbols</a> </strong>(a misnomer in this usage). Instead of running the GFlags application on the target machine, we can enable it dynamically in the debugger with the <em>!gflags </em>command:</p>
<pre>0: kd&gt; !gflag +ksl
Current NtGlobalFlag contents: 0x00040000
    ksl - Enable loading of kernel debugger symbols</pre>
<p>Now that we have that done, we can use the <em>sxe ld </em>command to enable a breakpoint when the module of interest loads. Note that this could be a DLL, EXE, service, driver, whatever:</p>
<pre>0: kd&gt; sxe ld notepad.exe</pre>
<p>Now I&#8217;ll run Notepad on the target machine and hopefully get a breakpoint (which indeed I did):</p>
<pre>0: kd&gt; g
nt!DbgLoadUserImageSymbols+0x30:
8281a182 int     3
0: kd&gt; kc</pre>
<pre>nt!DbgLoadUserImageSymbols
nt!MiLoadUserSymbols
nt!MiMapViewOfImageSection
nt!MiMapViewOfSection
nt!MmInitializeProcessAddressSpace
nt!PspAllocateProcess
nt!NtCreateUserProcess
nt!KiFastCallEntry</pre>
<p>You&#8217;ll note that we&#8217;re actually in the correct process context at this point:</p>
<pre>0: kd&gt; !process -1 0
PROCESS 84aaed40  SessionId: 1  Cid: 0000    Peb: 00000000  ParentCid: 0948
    DirBase: 7efc7600  ObjectTable: 961c2460  HandleCount:   0.
    Image: notepad.exe</pre>
<p>So I can set a process specific breakpoint on a hot OS routine and start my analysis in the process that I&#8217;m interested in making the call that I&#8217;m interested in:</p>
<pre>0: kd&gt; bp /p @$proc ntfs!ntfscommoncreate
0: kd&gt; g
Breakpoint 0 hit
Ntfs!NtfsCommonCreate:
889095fd push    94h
1: kd&gt; kc</pre>
<pre>Ntfs!NtfsCommonCreate
Ntfs!NtfsCommonCreateCallout
nt!KiSwapKernelStackAndExit
nt!KiSwitchKernelStackAndCallout
nt!KeExpandKernelStackAndCalloutEx
Ntfs!NtfsCommonCreateOnNewStack
Ntfs!NtfsFsdCreate
nt!IofCallDriver
fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted
fltmgr!FltpCreate
nt!IofCallDriver
nt!IopParseDevice
nt!ObpLookupObjectName
nt!ObOpenObjectByName
nt!IopCreateFile
nt!NtOpenFile
nt!PfSnGetPrefetchInstructions
nt!PfSnBeginAppLaunch
nt!PfProcessCreateNotification
nt!PspUserThreadStartup
nt!KiThreadStartup</pre>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=682</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Symbol servers and !chkimg</title>
		<link>http://analyze-v.com/?p=674</link>
		<comments>http://analyze-v.com/?p=674#comments</comments>
		<pubDate>Thu, 19 Aug 2010 12:23:42 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=674</guid>
		<description><![CDATA[For whatever reason, my comments on the NT Debugging blog never get approved, so I figured I&#8217;d clarify something about a recent post and subsequent comment here. If you&#8217;re ever debugging a similar issue yourself, the !chkimg extension can automate all the steps taken in the blog post by leveraging a properly configured symbol server. As [...]]]></description>
			<content:encoded><![CDATA[<p>For whatever reason, my comments on the NT Debugging blog never get approved, so I figured I&#8217;d clarify something about a <a href="http://blogs.msdn.com/b/ntdebugging/archive/2010/08/10/debugging-a-bugcheck-0x109.aspx">recent post</a> and subsequent comment here.</p>
<p>If you&#8217;re ever debugging a similar issue yourself, the <em>!chkimg </em>extension can automate all the steps taken in the blog post by leveraging a properly configured symbol server. As it turns out, in addition to indexing symbol files on a symbol server you can also index image files. This is a handy feature that&#8217;s necessary when debugging mini-dump files, due to the fact that the original image files are required when debugging dumps of that type. <em>!chkimg </em>is aware of this, and will attempt to file the original image from your symbol server and download it to your local symbol store.</p>
<p>In order to facilitate debugging kernel mini-dumps, Microsoft indexes the O/S images on the MS symbol server. This means that if you want to verify any O/S image in your target machine, all you need to do is point your symbol search path to the MS symbol server and run <em>!chkimg</em>.</p>
<pre>0: kd&gt; !chkimg ntfs
SYMSRV:  Ntfs.sys from <a href="http://msdl.microsoft.com/download/symbols">http://msdl.microsoft.com/download/symbols</a>
DBGHELP: c:\websymbols\Ntfs.sys\4A5BBF4512f000\Ntfs.sys - OK
0 errors : ntfs</pre>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=674</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Checked out The NT Insider digital edition yet?</title>
		<link>http://analyze-v.com/?p=672</link>
		<comments>http://analyze-v.com/?p=672#comments</comments>
		<pubDate>Wed, 18 Aug 2010 12:46:18 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[Driver development]]></category>
		<category><![CDATA[Windows internals]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=672</guid>
		<description><![CDATA[We&#8217;ve finally gone digital with The NT Insider! You can grab the PDF here and read about all sorts of interesting topics (writing file system filter drivers, debugger extensions, and virtual storage miniports, to name a few).]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve finally gone digital with <em>The NT Insider</em>! You can grab the PDF <a href="http://www.osronline.com/article.cfm?article=563">here</a> and read about all sorts of interesting topics (writing file system filter drivers, debugger extensions, and virtual storage miniports, to name a few).</p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=672</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickly add the dump path to your symbol path</title>
		<link>http://analyze-v.com/?p=661</link>
		<comments>http://analyze-v.com/?p=661#comments</comments>
		<pubDate>Tue, 17 Aug 2010 23:37:21 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=661</guid>
		<description><![CDATA[I often get dump files from customers zipped up with the appropriate PDBs for the images in the dump. I then have to extract the dump file to a folder, double click on the DMP file, and then add the path to the unzipped dump to my symbol search path so that I grab the [...]]]></description>
			<content:encoded><![CDATA[<p>I often get dump files from customers zipped up with the appropriate PDBs for the images in the dump. I then have to extract the dump file to a folder, <a href="http://analyze-v.com/?p=477">double click on the DMP file</a>, and then add the path to the unzipped dump to my symbol search path so that I grab the appropriate PDBs (I wish the debugger engine would put the dump directory in the path automatically, but that&#8217;s another issue). That can lead to a lot of copy/pasting or typing, but luckily there&#8217;s a built in alias to the rescue: <em>$CrashDumpPath</em>.</p>
<p>Aliases are quite a nifty feature of WinDBG and I&#8217;m working on a post that will do them justice. In the meantime, just know that <em>$CrashDumpPath </em>is a built in alias that always expands out to the path of the crash dump file in any expression. For example, to quickly add the path of the crash dump file to my symbol search path, I can just call <em>.sympath+ </em>with the dump path alias:</p>
<pre>0: kd&gt; .sympath
Symbol search path is: &lt;empty&gt;
Expanded Symbol search path is: &lt;empty&gt;
0: kd&gt; .sympath+ $CurrentDumpPath
Symbol search path is: C:\dumps\mpwhang
Expanded Symbol search path is: c:\dumps\mpwhang</pre>
<p>This takes the variability out this step for me and also allows for easier scripting. Other built in aliases can be found on <a href="http://msdn.microsoft.com/en-us/library/ff560047(VS.85).aspx">this page</a> under the heading <strong>Automatic Aliases</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=661</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dog days of Summer</title>
		<link>http://analyze-v.com/?p=659</link>
		<comments>http://analyze-v.com/?p=659#comments</comments>
		<pubDate>Fri, 23 Jul 2010 15:11:09 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[Non-technical]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=659</guid>
		<description><![CDATA[Over two months since my last update! Guess I&#8217;ve been enjoying the Summer a bit too much&#8230;I plan on picking back up again in a couple of weeks when I&#8217;m back from vacation, until then look out for our upcoming issue of The NT Insider where I&#8217;ll be covering the details of DbgEng and writing [...]]]></description>
			<content:encoded><![CDATA[<p>Over two months since my last update! Guess I&#8217;ve been enjoying the Summer a bit too much&#8230;I plan on picking back up again in a couple of weeks when I&#8217;m back from vacation, until then look out for our upcoming issue of <a href="http://www.osronline.com/section.cfm?section=17">The NT Insider</a> where I&#8217;ll be covering the details of DbgEng and writing your own debugger extensions.</p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=659</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Process specific breakpoints</title>
		<link>http://analyze-v.com/?p=655</link>
		<comments>http://analyze-v.com/?p=655#comments</comments>
		<pubDate>Fri, 21 May 2010 03:46:27 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[WinDBG]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=655</guid>
		<description><![CDATA[I&#8217;ve talked previously about thread specific breakpoints, which allow you to set a breakpoint that will only fire for a specific thread. Equally useful are process specific breakpoints, which will only fire for any thread within a given process. To set a process specific breakpoint, you specify the /p switch to the bp command and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve talked previously about <a href="http://analyze-v.com/?p=370">thread specific breakpoints</a>, which allow you to set a breakpoint that will only fire for a specific thread. Equally useful are process specific breakpoints, which will only fire for any thread within a given process.</p>
<p>To set a process specific breakpoint, you specify the <em>/p </em>switch to the <em>bp</em> command and supply a process object address:</p>
<p><em>bp /p 84996030 ntfs!ntfscommoncreate</em></p>
<p>The process address could, for example, be retrieved from the output of the <em>!process 0 0 </em>command or you can use the handy $proc<em> </em>pseudo register to specify the current process:</p>
<p><em>bp /p @$proc ntfs!ntfscommoncreate</em></p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=655</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Driver Speak: IRQL</title>
		<link>http://analyze-v.com/?p=619</link>
		<comments>http://analyze-v.com/?p=619#comments</comments>
		<pubDate>Wed, 12 May 2010 12:14:51 +0000</pubDate>
		<dc:creator>snoone</dc:creator>
				<category><![CDATA[Driver Speak]]></category>

		<guid isPermaLink="false">http://analyze-v.com/?p=619</guid>
		<description><![CDATA[Interrupt request levels are a fundamental Windows concept. We all know what they are (and if not we should) and interact with them every day, but do we know how to pronounce their acronym &#8220;IRQLs&#8221;? Much like most of these terms, you&#8217;ll find a few alternate pronounciations. The one that I use is: Urk wull With [...]]]></description>
			<content:encoded><![CDATA[<p>Interrupt request levels are a fundamental Windows concept. We all know what they are (and if not we <a href="http://analyze-v.com/?p=510">should</a>) and interact with them every day, but do we know how to pronounce their acronym &#8220;IRQLs&#8221;?</p>
<p>Much like most of these terms, you&#8217;ll find a few alternate pronounciations. The one that I use is:</p>
<p><em>Urk wull</em></p>
<p>With short u sounds.</p>
<p>An alternate pronounciation that you&#8217;ll sometimes hear is:</p>
<p><em>Urkel</em></p>
<p>(An homage to <a href="http://en.wikipedia.org/wiki/Steve_Urkel">Steve</a>?)</p>
<p>Lastly, there&#8217;s the obvious pronounciation of just sounding out the letters:</p>
<p><em>I R Q L</em></p>
<p>Though what fun is that?</p>
]]></content:encoded>
			<wfw:commentRss>http://analyze-v.com/?feed=rss2&amp;p=619</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
