<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Cluebat-man to the rescue : Driver programming</title><link>http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx</link><description>Tags: Driver programming</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>My latest article in NTInsider</title><link>http://msmvps.com/blogs/vandooren/archive/2008/09/26/my-latest-article-in-ntinsider.aspx</link><pubDate>Fri, 26 Sep 2008 06:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648864</guid><dc:creator>vanDooren</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/rsscomments.aspx?PostID=1648864</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/commentapi.aspx?PostID=1648864</wfw:comment><comments>http://msmvps.com/blogs/vandooren/archive/2008/09/26/my-latest-article-in-ntinsider.aspx#comments</comments><description>&lt;p&gt;A bit late perhaps, but my latest article on API development got published in the NTInsider (owned by &lt;a href="http://www.osronline.com" title="http://www.osronline.com"&gt;OSR Online&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The online version can be found &lt;a href="http://www.osronline.com/article.cfm?article=521" title="http://www.osronline.com/article.cfm?article=521"&gt;here&lt;/a&gt;. It requires free registration.&lt;/p&gt;
&lt;p&gt;I know that at least 2 people have read it completely, because that is the number of mails I got to tell me I missed something.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the code example at the bottom, I acidentally switched the names of fooA and fooB in the declaration. Doh!&lt;/li&gt;
&lt;li&gt;That same code, compiled for a 64 bit platform, gives a &lt;a href="http://support.microsoft.com/kb/835326" title="http://support.microsoft.com/kb/835326"&gt;linker warning&lt;/a&gt;. I don&amp;#39;t know how I missed that. This code was made using VS2005, so one of two things could have happened: VC2005 didn&amp;#39;t report the warning (unlikely), or I only checked the compilation in detail, and then only checked if the function was exported without checking if there were linker warnings. It&amp;#39;s probably the latter.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;#39;ll see if I can get these errata published. But at least now I know that people actually read my articles and use the code. Well, at least one person is using the code :) I&amp;#39;ll have to make an extra effort next time to verify that a) I didn&amp;#39;t make a stupid type, and b) There are no warnings anywhere.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648864" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vandooren/archive/tags/General/default.aspx">General</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx">Driver programming</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Windows+Platform/default.aspx">Windows Platform</category></item><item><title>It’s a small world after all</title><link>http://msmvps.com/blogs/vandooren/archive/2007/03/10/it-s-a-small-world-after-all.aspx</link><pubDate>Sat, 10 Mar 2007 10:51:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:663393</guid><dc:creator>vanDooren</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/rsscomments.aspx?PostID=663393</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/commentapi.aspx?PostID=663393</wfw:comment><comments>http://msmvps.com/blogs/vandooren/archive/2007/03/10/it-s-a-small-world-after-all.aspx#comments</comments><description>&lt;p&gt;Yesterday I was searching for some information on FireWire and the User Mode Driver Foundation (UMDF) and I ended up on the blog of &lt;a href="http://blogs.msdn.com/iliast/archive/2006/10/30/introduction-to-the-kernel-mode-driver-framework-kmdf.aspx"&gt;Ilias Tsigkogiannis&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;I scanned the page and lo and behold: He links to my articles on driver development using the KMDF, which are hosted on &lt;a href="http://www.codeproject.com/script/Articles/list_articles.asp?userid=2578587"&gt;codeproject&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;2 Microsoft KMDF developers and one independent driver developer (&lt;a href="http://www.windrvr.com/"&gt;Don Burn&lt;/a&gt;) were kind enough to proofread them before publication, but I didn't know that someone from Microsoft linked to them as tutorials. &lt;span style="font-family:Wingdings;"&gt;J&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;That's one of the 'advantages' of being active in a niche domain were very little information is easily available: it's a small world.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=663393" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vandooren/archive/tags/General/default.aspx">General</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx">Driver programming</category></item><item><title>My first article on API development in the NT Insider</title><link>http://msmvps.com/blogs/vandooren/archive/2007/03/01/my-first-article-on-api-development-in-the-nt-insider.aspx</link><pubDate>Thu, 01 Mar 2007 11:45:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:629098</guid><dc:creator>vanDooren</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/rsscomments.aspx?PostID=629098</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/commentapi.aspx?PostID=629098</wfw:comment><comments>http://msmvps.com/blogs/vandooren/archive/2007/03/01/my-first-article-on-api-development-in-the-nt-insider.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;It is with some pride that I can announce my first publication that is printed on processed dead trees, a.k.a. paper.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 6pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;It is titled ‘&lt;/FONT&gt;&lt;B&gt;&lt;SPAN style="COLOR:#585085;FONT-FAMILY:Arial;"&gt;Designing a Device API: Part 1 - What It Means, and Why You Should Do It&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT face="Times New Roman"&gt;’ and it is published in the ‘NT Insider’; a journal for systems programmers that is published by OSR (&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.osronline.com/"&gt;&lt;FONT face="Times New Roman" size=3&gt;www.osronline.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;It is the first article in a series that will explain the issues in developing a user mode API on top of a device driver. Each follow-up article will focus on a specific topic that is relevant for API development; explaining techniques, best practices, and common pitfalls. The tool I use for creating the user mode API is Visual C++.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;The article itself can be viewed online on their website.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 6pt;"&gt;&lt;A href="http://www.osronline.com/article.cfm?id=482"&gt;&lt;FONT face="Times New Roman" size=3&gt;http://www.osronline.com/article.cfm?id=482&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Free registration is required. &lt;/SPAN&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=629098" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vandooren/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx">Driver programming</category></item><item><title>Source code for the user mode part of my USB tutorial driver</title><link>http://msmvps.com/blogs/vandooren/archive/2007/01/03/source-code-for-the-user-mode-part-of-my-usb-tutorial-driver.aspx</link><pubDate>Wed, 03 Jan 2007 21:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:467376</guid><dc:creator>vanDooren</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/rsscomments.aspx?PostID=467376</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/commentapi.aspx?PostID=467376</wfw:comment><comments>http://msmvps.com/blogs/vandooren/archive/2007/01/03/source-code-for-the-user-mode-part-of-my-usb-tutorial-driver.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Sometime ago I wrote 2 length articles on writing device drivers, using the new Kernel Mode Driver Framework that is the bees-knees when it comes to kernel mode programming.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Of course, I had to have a demo application to interact with the device drivers to control and monitor the USB device through the driver. I whipped together an MFC dialog application and a user mode API.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Since those were not the main point of my articles, I took some shortcuts to get working demo ASAP. Within the context of my demo, these shortcuts are safe enough. However, they are not an example of how to write user mode APIs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;In fact, they might encourage bad programming style if you would not understand that some things are only valid in a particular context. That is why I have not released the source code of the application and the API.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;The problem is that every month, I get at least one and sometimes more requests for the code because there are very few examples on how to interact with device drivers.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;I still don’t want to release the code because it is not an example of good programming.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;I am writing a series of articles on how to write user mode APIs, but that is far from finished. That is why I extracted that portion of the code, since it is clean enough. It is available for download under the MIT license.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;If there is anything you can learn for this, is that you should not take shortcuts if you create tutorial articles. Even it some piece of code is only there for support purposes, some people will need it to understand the whole picture.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Now then, when you look at those sources, you’ll see that all the win32 functions have a __ prefix. Those functions are wrappers around the true win32 function that throw exceptions instead of returning an error status. I have not included those wrappers because they contain macro magic that made my life easier, but is not how I would program production code.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;This means that you cannot directly compile it, but it should be easy enough to adapt it and use it for interacting with my demo USB driver.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 6pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Good luck, and let me know if you have specific questions.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=467376" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.46.73.76/DriverIF.zip" length="7254" type="application/x-zip-compressed" /><category domain="http://msmvps.com/blogs/vandooren/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx">Driver programming</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Windows+Platform/default.aspx">Windows Platform</category></item><item><title>Is it possible to create (USB) device drivers with Visual C++?</title><link>http://msmvps.com/blogs/vandooren/archive/2006/06/15/Is-it-possible-to-create-_2800_USB_2900_-device-drivers-with-Visual-C_2B002B003F00_.aspx</link><pubDate>Thu, 15 Jun 2006 09:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:139633</guid><dc:creator>vanDooren</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/rsscomments.aspx?PostID=139633</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vandooren/commentapi.aspx?PostID=139633</wfw:comment><comments>http://msmvps.com/blogs/vandooren/archive/2006/06/15/Is-it-possible-to-create-_2800_USB_2900_-device-drivers-with-Visual-C_2B002B003F00_.aspx#comments</comments><description>&lt;p&gt;This question pops up in the Visual C++ newsgroups from time to time.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;You can&amp;rsquo;t. At least, you cannot directly perform USB communications. USB simply doesn&amp;rsquo;t work that way. They same is true for PCI, Firewire, SCSI, ...&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;All USB IO has to be performed by a USB device driver. User space applications send IO requests to the device driver. The device driver will then perform some processing and complete the request.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;The first possibility is that your USB device is of a standard device class in which case it doesn&amp;rsquo;t need a special device driver, or it needs its own device driver, but exports a standardized device interface.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;A good example of this is a USB to serial converter. The device driver registers a standardized serial interface with the system.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Any user mode application can then use the normal .NET or win32 APIs for serial communications without having to care about the fact that the serial line is in fact connected to a USB port instead of being soldered to the motherboard.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;The next possibility of course is that the device is a non-standard device. In that case you cannot access it through a standard windows high level API. Normally the device manufacturer will ship a high level API (e.g. a dll or ActiveX object) with the device driver to allow you to interact with the devices.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;If no API is available, you will have to use the CreateFile, DeviceIoControl, ReadFile, WriteFile and CloseHandle functions (among others) to directly communicate with the device driver.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Lastly, it is possible that you have a custom device of which you only have the interface documentation, but no device driver or API. In that case you need to create your own device driver. For more information on writing device drivers you can read my articles (and others on &lt;/font&gt;&lt;a href="http://www.codeproject.com/"&gt;&lt;font face="Times New Roman" size="3"&gt;www.codeproject.com&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" size="3"&gt;) as a starting point:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;a href="http://www.codeproject.com/system/wdf_kmdf_basic.asp"&gt;&lt;font face="Times New Roman" size="3"&gt;http://www.codeproject.com/system/wdf_kmdf_basic.asp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;a href="http://www.codeproject.com/system/kmdf_osr_usb_fx2.asp"&gt;&lt;font face="Times New Roman" size="3"&gt;http://www.codeproject.com/system/kmdf_osr_usb_fx2.asp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;The first article explains all the steps involved in actually creating a device driver. The second article explains all the issues in programming a fully functional USB device driver. Both articles use the Microsoft&amp;rsquo;s new KMDF framework. It is relatively easy to learn if you have C/C++ experience.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;There are some other toolkits available from 3d parties, but they cost money, and a bigger problem is that they are non-standard so you cannot ask other developers for support unless they use the same toolkit. Another problem is that the vendor might discontinue the toolkit, and leave you with nothing but unsupported software.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;In any case, as soon as you need to develop a device driver you should not use VC++. Use the DDK build tools instead. They are the standard when it comes to building device drivers, and you can get good support on microsoft.public.development.device.drivers.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;You can download the latest KMDF DDK here:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;a href="http://www.microsoft.com/whdc/driver/wdf/KMDF.mspx"&gt;&lt;font face="Times New Roman" size="3"&gt;http://www.microsoft.com/whdc/driver/wdf/KMDF.mspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=139633" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vandooren/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/Driver+programming/default.aspx">Driver programming</category><category domain="http://msmvps.com/blogs/vandooren/archive/tags/cplusplus/default.aspx">cplusplus</category></item></channel></rss>