<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.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>driver writing != bus driving : Drivers (General)</title><link>http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx</link><description>Tags: Drivers (General)</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>A study guide for KMDF, UMDF, and Windows device driver concepts </title><link>http://blogs.msdn.com/iliast/archive/2008/09/28/a-study-guide-for-kmdf-umdf-and-windows-device-driver-concepts.aspx</link><pubDate>Sun, 28 Sep 2008 11:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8967934</guid><dc:creator>iliast</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/iliast/comments/8967934.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=8967934</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=8967934</wfw:comment><description>One of the most common question that beginner driver developers ask is how they can start learning about driver development. Today, Eliyas, my manager, pointed out that we have already created a study guide that covers WDF and general Windows device driver concepts. It can be found &lt;a href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/WDFSyllabus2008.docx" mce_href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/WDFSyllabus2008.docx"&gt;here&lt;/a&gt;. I think that this self-study guide is really helpful and covers the important points that a driver developer should be accustomed with.&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8967934" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Books/default.aspx">Books</category></item><item><title>Driver Developer Conference - DDC 2008</title><link>http://blogs.msdn.com/iliast/archive/2008/09/25/driver-developer-conference-ddc-2008.aspx</link><pubDate>Fri, 26 Sep 2008 08:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8965981</guid><dc:creator>iliast</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/iliast/comments/8965981.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=8965981</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=8965981</wfw:comment><description>Next week (9/29 - 10/1) we'll have the &lt;a href="http://www.microsoft.com/whdc/491F34B0-E3D0-D1B1-0667-D4065525389C/default.mspx" mce_href="http://www.microsoft.com/whdc/491F34B0-E3D0-D1B1-0667-D4065525389C/default.mspx"&gt;Microsoft Windows Driver Developer Conference (DDC)&lt;/a&gt; in Redmond. We're expecting several driver developers. I'm excited about this, not only because it's the first time that I'll be participating in a Microsoft conference, but also because I'll be giving a talk! Indeed, &lt;a href="http://blogs.msdn.com/bobkjelgaard/" mce_href="http://blogs.msdn.com/bobkjelgaard/"&gt;Bob Kjelgaard&lt;/a&gt; and I are giving a talk titled "Packaging and Deploying KMDF and UMDF drivers". Actually, a better name for the talk would be "Everything technical that you ever wanted to know about the WDF coinstallers and were afraid to ask" (yes, I actually requested to have this title, however it didn't go through :) ). I think that right now the information that's externally available for the coinstallers is pretty limited. Actually, apart from the fact that "they are coinstallers and you need to have them with all your WDF drivers" and a few posts that Bob and I have written, I don't think that anything else is known about them. In our talk we'll try to show lots of light into this part of WDF.&lt;p&gt;The last several days we've been practising our talk and I'm pretty happy about it. There is enough technical information in the talk to explain all the common questions that people have and also there will be enough time in the end to answer all sorts of questions that might arise from the presentation. Also, we'll both be available to answer questions in the "Ask The Experts" session, in the panel discussion for WDF and of course we'll be talking to customers and partners in the corridors and in the halls, in order to answer the questions that they might have. I've been teasing Bob by telling him that I'll forward all the hard questions to him, however I've been really happy to work with Bob for such a long time. He's definately a really technical person and he's explaining all these advanced techniques of testing different parts of the framework that blow me away :)&lt;/p&gt;&lt;p&gt;Apart from our talk, there will be a series of presentations for WDF. I've actually sat through all the dry runs of the talks and I think that we have excellent material to present (yes, I know that it's kind of weird to praise the team that I'm part of, but I really believe it). I won't try to write down all the WDF presentations, however you can look at the &lt;a href="http://download.microsoft.com/download/2/9/e/29edfd7f-2ad8-480f-b06e-7aba65f8b029/DDC_2008_Agenda.xlsx" mce_href="http://download.microsoft.com/download/2/9/e/29edfd7f-2ad8-480f-b06e-7aba65f8b029/DDC_2008_Agenda.xlsx"&gt;agenda&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/whdc/491F34B0-E3D0-D1B1-0667-D4065525389C/sessions.aspx" mce_href="http://www.microsoft.com/whdc/491F34B0-E3D0-D1B1-0667-D4065525389C/sessions.aspx"&gt;descriptions&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So, for those of you, who are coming to DDC and are interested in the WDF coinstallers, please come with all your questions and we'll be happy to answer them as best as we can! &lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8965981" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Channel9 Video on Debugging BSODs</title><link>http://blogs.msdn.com/iliast/archive/2008/09/14/channel9-video-on-debugging-bsods.aspx</link><pubDate>Sun, 14 Sep 2008 22:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8951853</guid><dc:creator>iliast</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/iliast/comments/8951853.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=8951853</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=8951853</wfw:comment><description>&lt;p&gt;I found a very interesting channel9 video on how to debug BSODs (Blue Screens of Death): &lt;a href="http://channel9.msdn.com/posts/Dan/Daniel-Pearson-Debugging-a-Windows-Blue-Screen-of-Death/" mce_href="http://channel9.msdn.com/posts/Dan/Daniel-Pearson-Debugging-a-Windows-Blue-Screen-of-Death/"&gt;http://channel9.msdn.com/posts/Dan/Daniel-Pearson-Debugging-a-Windows-Blue-Screen-of-Death/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Daniel Pearson explains why blue screens happen in Windows, how a user can find the cause and how Driver Verifier works. Also, in the end he talks a little bit about how to debug applications and he shows a neat trick with notepad :)&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8951853" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/iliast/archive/tags/windbg/default.aspx">windbg</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item><item><title>Developing Windows Drivers With Visual Studio</title><link>http://blogs.msdn.com/iliast/archive/2008/01/29/developing-windows-drivers-with-visual-studio.aspx</link><pubDate>Wed, 30 Jan 2008 01:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7314269</guid><dc:creator>iliast</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/iliast/comments/7314269.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=7314269</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=7314269</wfw:comment><description>&lt;p&gt;Today morning I received an email from &lt;a href="http://blogs.msdn.com/888_umdf_4_you/" mce_href="http://blogs.msdn.com/888_umdf_4_you/"&gt;Patrick&lt;/a&gt; with a &lt;a href="http://www.generationxwing.members.winisp.net/intellisensational.png" mce_href="http://www.generationxwing.members.winisp.net/intellisensational.png"&gt;picture of Visual Studio with Intellisense on a WDF driver&lt;/a&gt;. Ok, I have to admit that in the beginning I thought that Patrick was using Photoshop! He's a guy, who just doesn't like GUIs in the first place! He can just go on and on about the advantages of using kd instead of windbg! He even refuses to look at the source code (even if it's available), since "he can look at the assembly"! I have to admit that until now I thought that he was doing "copy con driver.c" to write drivers... and then use edit.com from a full-screen command prompt to do additional editing. Anyway, it seems that I was wrong.&lt;/p&gt;&lt;p&gt;So, in order to be sure that Patrick hadn't used Photoshop (or just opened the screenshot with a hex editor and manually edited it, in order to add Intellisense!), I went to his office. Over there, indeed he showed me that it's really easy to Intellisense and help integration to Visual Studio (yay!). That's nice stuff! My next question was, if it's possible to load wudfext.dll (the UMDF windbg extension) from Visual Studio and use the UMDF extensions from the VS debugger, however it's not possible (even though there's some info on how to load windbg extensions at http://www.osronline.com/showThread.cfm?link=66160), because not all windbg interfaces are implemented by Visual Studio.&lt;/p&gt;&lt;p&gt;Anyway, Patrick has written a &lt;a href="http://blogs.msdn.com/888_umdf_4_you/archive/2008/01/29/7312079.aspx" mce_href="http://blogs.msdn.com/888_umdf_4_you/archive/2008/01/29/7312079.aspx"&gt;post&lt;/a&gt; saying that indeed he's been using Visual Studio for ever, in order to develop Windows Drivers. If more people ask him tips on how to make VS the best editor for Windows Drivers, he promised that he'll share a small part of his infinite wisdom :) So, feel free to ask him and/or send him an email!&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;DISCLAIMER: Visual Studio is not officially supported by Microsoft for driver development. The only currently supported build environment is the command window that comes with the WDK. Any opinions expressed in this article don't affect Microsoft's policy on this issue.&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7314269" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Driver-Driver and Driver-Application Communication</title><link>http://blogs.msdn.com/iliast/archive/2007/10/06/driver-driver-and-driver-application-communication.aspx</link><pubDate>Sun, 07 Oct 2007 01:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5324344</guid><dc:creator>iliast</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/iliast/comments/5324344.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=5324344</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=5324344</wfw:comment><description>&lt;p&gt;Everybody knows how an application communicates with a driver: call CreateFile to open a handle to the PDO, and use ReadFile(Ex), WriteFile(Ex) and DeviceIoControl to read data, write data or send a control code.&lt;/p&gt;&lt;p&gt;However, what about the opposite? How does a driver send data to an application (whenever it wants)? And how do drivers exchange data? These types of questions come very often in OSR's NTDEV list, so I found a list of resources that provide answers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Driver-Driver Communication&lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/article.cfm?id=177" mce_href="http://www.osronline.com/article.cfm?id=177"&gt;Driver to Driver Communication&lt;/a&gt;: Explanation of the way that drivers exchange data between each other&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/article.cfm?id=24" mce_href="http://www.osronline.com/article.cfm?id=24"&gt;Buddy Drivers&lt;/a&gt;: An implementation of 2 drivers exchanging data&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Driver-Application Communication&lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Peter Wieland has written &lt;a href="http://blogs.msdn.com/peterwie/archive/2007/02/05/my-umdf-driver-has-some-data-how-do-i-get-it-to-my-app.aspx" mce_href="http://blogs.msdn.com/peterwie/archive/2007/02/05/my-umdf-driver-has-some-data-how-do-i-get-it-to-my-app.aspx"&gt;this post&lt;/a&gt; on how the driver uses the Push or the Pull model to send data to an application&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/article.cfm?id=94" mce_href="http://www.osronline.com/article.cfm?id=94"&gt;Inverted Call Model&lt;/a&gt;: An implementation of Peter's model that shows how the driver sends data to the application&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/article.cfm?id=39" mce_href="http://www.osronline.com/article.cfm?id=39"&gt;Sharing memory between drivers and applications&lt;/a&gt;: Why, when and how?&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/article.cfm?article=391" mce_href="http://www.osronline.com/article.cfm?article=391"&gt;Driver-Application communication using IRQs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/showThread.CFM?link=103638" mce_href="http://www.osronline.com/showThread.CFM?link=103638"&gt;OSR's thread on Driver-Application communication&lt;/a&gt;: Many driver developers write down their opinions on this issue&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/kb/117308" mce_href="http://support.microsoft.com/kb/117308"&gt;Microsoft's documentation&lt;/a&gt;: How to use asynchronous events, in order to send data from a driver to an application&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;UMDF drivers&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osronline.com/showthread.cfm?link=101250" mce_href="http://www.osronline.com/showthread.cfm?link=101250"&gt;How an application communicates with a UMDF driver&lt;/a&gt;:Overview of the WDK sample that is located at %WinDDK%\src\umdf\usb\fx2_driver\final&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5324344" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item><item><title>How Driver Installation Works</title><link>http://blogs.msdn.com/iliast/archive/2007/10/06/how-driver-installation-works.aspx</link><pubDate>Sat, 06 Oct 2007 23:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5323592</guid><dc:creator>iliast</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/iliast/comments/5323592.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=5323592</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=5323592</wfw:comment><description>&lt;p&gt;The last few months I've been working on the WDF 1.7 (UMDF+KMDF) coinstallers (that's one of the reasons that I've been silent for quite some time).&lt;/p&gt;&lt;p&gt;Through this process I managed to learn a lot of things about how driver installation works and what is required by the driver developer. Unfortunately, this area is often a black box for driver developers, since their job ends, after the driver is up and running (and hopefully tested :) ). However, it's possible that you might want the driver installation to do something "more", e.g. change the icon of the device in the device manager or add a page in the device manager that shows the driver capabilities, etc. This is when a coinstaller or a class installer is needed.&lt;/p&gt;&lt;p&gt;Let's start from the beginning though. If you have a driver, then how do you install it? The easy way is &lt;a href="http://www.osronline.com/article.cfm?article=157" mce_href="http://www.osronline.com/article.cfm?article=157"&gt;OSR's Driver Loader&lt;/a&gt;. Just point to your sys file, click "Register Service" (i.e. create the appropriate settings in the registry at HKLM\System\CurrentControlSet\Services\&amp;lt;Driver Name&amp;gt;) and "Start Service" (i.e. call the Service Control Manager APIs that load the driver according to the registry settings). If you want to remove the driver, just click on "Stop Service" (stops the driver from running) and "Unregister Service" (deletes the registry settings). Easy, right? You don't need an inf file or anything more apart from your driver. However, this program supports non-pnp (legacy) drivers only.&lt;br&gt;&lt;/p&gt;&lt;p&gt;For WDF drivers we provide a coinstaller (one for UMDF and one for KMDF). The main tasks of the coinstaller is to upgrade the framework (e.g. from 1.5 to 1.7), parse the inf file and configure the driver correctly. In the past, we've had some issues with the previous versions of the coinstallers, as shown by Bob Kjelgaard (&lt;a href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/02/what-would-you-do-for-a-customer.aspx" mce_href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/02/what-would-you-do-for-a-customer.aspx"&gt;part 1&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/10/root-causing-a-not-reproducible-kmdf-installation-issue-part-2-not-stupid-merely-human.aspx" mce_href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/10/root-causing-a-not-reproducible-kmdf-installation-issue-part-2-not-stupid-merely-human.aspx"&gt;part 2&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/16/root-causing-a-not-reproducible-kmdf-installation-issue-part-3-pay-dirt.aspx" mce_href="http://blogs.msdn.com/bobkjelgaard/archive/2007/08/16/root-causing-a-not-reproducible-kmdf-installation-issue-part-3-pay-dirt.aspx"&gt;part 3&lt;/a&gt;), however we're trying our best to tackle them. By the way, if you have any problems with the installation of a WDF driver, please look at the &lt;a href="http://blogs.msdn.com/doronh/archive/2006/08/31/734412.aspx" mce_href="http://blogs.msdn.com/doronh/archive/2006/08/31/734412.aspx"&gt;Doron's post&lt;/a&gt; for information on how to debug it and at &lt;a href="http://blogs.msdn.com/bobkjelgaard/archive/2007/09/11/wdf-support-channels-changing-looking-for-more-info-on-installation-issues.aspx" mce_href="http://blogs.msdn.com/bobkjelgaard/archive/2007/09/11/wdf-support-channels-changing-looking-for-more-info-on-installation-issues.aspx"&gt;Bob's post&lt;/a&gt; for information about how you can ask more help from Microsoft.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Microsoft has lots of useful information on Driver Installation at &lt;a href="http://www.microsoft.com/whdc/driver/install/default.mspx" mce_href="http://www.microsoft.com/whdc/driver/install/default.mspx"&gt;http://www.microsoft.com/whdc/driver/install/default.mspx&lt;/a&gt;, however I'd also like to point specifically to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Eugene Lin and Jason Cobb's &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=156316" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=156316"&gt;channel9 video&lt;/a&gt;: Introductory overview on how the user-mode Plug-and-Play manager works and how the installation works from the point that the device is connected to the machine, until the corresponding driver is selected and the device is running&lt;br&gt;&lt;/li&gt;&lt;li&gt;Jim Cavalaris' &lt;a href="http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/DVR-T394_WH07.pptx" mce_href="http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/DVR-T394_WH07.pptx"&gt;presentation on coinstallers and class installers&lt;/a&gt;: Excellent presentation that shows how the class installers and the coinstaller cooperate during driver installation. Also look at the resources, which are provided at the last page.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/DVR-T502_WH07.pptx" mce_href="http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/DVR-T502_WH07.pptx"&gt;Debugging Device Installation on Windows Vista&lt;/a&gt;: Everything that you wanted to know (and even more than that!) about how to debug problems during device installation (and were afraid to ask)&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library//ms790231.aspx" mce_href="http://msdn2.microsoft.com/en-us/library//ms790231.aspx"&gt;Device Installation Design Guide&lt;/a&gt;: Microsoft's official documentation on everything that has to do with device installation&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5323592" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Windows Development Videos and Presentations</title><link>http://blogs.msdn.com/iliast/archive/2006/10/31/windows-development-videos-and-presentations.aspx</link><pubDate>Tue, 31 Oct 2006 13:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:907907</guid><dc:creator>iliast</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/iliast/comments/907907.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=907907</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=907907</wfw:comment><description>&lt;P&gt;WHDC has a very nice page that with many presentations and videos about driver development at &lt;A href="http://www.microsoft.com/whdc/driver/foundation/DevNotes.mspx" mce_href="http://www.microsoft.com/whdc/driver/foundation/DevNotes.mspx"&gt;http://www.microsoft.com/whdc/driver/foundation/DevNotes.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You'll find there 9 videos about WDF, 3 about KMDF, and 2 about kernel debugging, as well as many presentations. There is no video for UMDF, yet :( For those of you, who prefer looking at videos instead of reading documentation, this site should be really helpful :)&lt;/P&gt;
&lt;P&gt;A few other pages that is not easy to find are &lt;A href="http://www.microsoft.com/whdc/winhec/papers04.mspx" mce_href="http://www.microsoft.com/whdc/winhec/papers04.mspx"&gt;WinHEC 2004&lt;/A&gt; and &lt;A href="http://www.microsoft.com/whdc/winhec/papers05.mspx" mce_href="http://www.microsoft.com/whdc/winhec/papers05.mspx"&gt;WinHEC 2005&lt;/A&gt;. From the main WHDC website, somebody can find directly only the material for WinHEC 2006 &lt;A href="http://www.microsoft.com/whdc/winhec/papers06.mspx" mce_href="http://www.microsoft.com/whdc/winhec/papers06.mspx"&gt;conference papers&lt;/A&gt; and &lt;A href="http://www.microsoft.com/whdc/winhec/pres06.mspx" mce_href="http://www.microsoft.com/whdc/winhec/pres06.mspx"&gt;presentations&lt;/A&gt;. WinHEC stands for WINdows Hardware Engineering Conference and is a conference, in which Microsoft presents the newest directions regarding hardware development and drivers (mostly).If somebody is interested in buying the DVD from one of the Microsoft events (WinHEC, PDC, TechEd, etc), he should look &lt;A href="http://shop.ecompanystore.com/mseventdvd/MSD_Shop.asp" mce_href="http://shop.ecompanystore.com/mseventdvd/MSD_Shop.asp"&gt;here&lt;/A&gt;.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;UPDATE:&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The WDF videos from the WHDC link provide a very complete and easy&amp;nbsp; to understand introduction to WDF, focusing on KMDF. Since in that site they are not shown with the same order that the were presented in WinHEC 2004, I'll give the links in order:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04035.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04035.exe"&gt;WDF Introduction&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04033.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04033.exe"&gt;Fundamentals Concepts - Part 1&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04051.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04051.exe"&gt;Fundamentals Concepts - Part 2&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04038.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04038.exe"&gt;Versioning, Tracing and Debugging&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04036.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04036.exe"&gt;Overview of Plug-n-Play and Power Management model&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04037.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04037.exe"&gt;PnP and Power callbacks and how to use them – Part 1&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04052.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04052.exe"&gt;PnP and Power callbacks and how to use them – Part 2&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04034.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04034.exe"&gt;How to conserve device power&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04032.exe" mce_href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04032.exe"&gt;Device Interface Generation&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;B&gt;UPDATE 2:&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Another site with many videos is &lt;A href="http://www.microsoft.com/seminar/mmcfeed/mmcdisplay.asp?lang=en&amp;amp;pf=100502" mce_href="http://www.microsoft.com/seminar/mmcfeed/mmcdisplay.asp?lang=en&amp;amp;pf=100502"&gt;http://www.microsoft.com/seminar/mmcfeed/mmcdisplay.asp?lang=en&amp;amp;pf=100502&lt;/A&gt;. For example, you'll be able to find there many videos from WinHEC 2002. There are some interesting videos there, like the "&lt;SPAN class=IndexLinkText style="COLOR: rgb(0,0,0)"&gt;General Driver: Windows Driver Power Management"&amp;nbsp; (you can also compare this presentation with the WDF presentations on Power Management from the WHDC website), and the &lt;/SPAN&gt;&lt;SPAN class=IndexLinkText style="COLOR: rgb(0,0,0)"&gt;"General Driver Understanding Driver Security" presentations by Adrian Oney, the presentations on PnP, etc.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Finally, Microsoft also offers webcasts on-demand in the website &lt;A href="http://www.microsoft.com/events/webcasts/ondemand.mspx" mce_href="http://www.microsoft.com/events/webcasts/ondemand.mspx"&gt;http://www.microsoft.com/events/webcasts/ondemand.mspx&lt;/A&gt;. I think that particularly interesting are the ones related to security that can be specifically found by going to the &lt;A href="http://www.microsoft.com/events/series/default.mspx" mce_href="http://www.microsoft.com/events/series/default.mspx"&gt;"Webcast Series"&lt;/A&gt; and clicking on the "Digital Blackbelt Series".&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=907907" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/WDF/default.aspx">WDF</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item><item><title>Windows Device Drivers Book Reviews</title><link>http://blogs.msdn.com/iliast/archive/2006/10/25/Windows-Device-Drivers-Book-Reviews.aspx</link><pubDate>Thu, 26 Oct 2006 03:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:875118</guid><dc:creator>iliast</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/iliast/comments/875118.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=875118</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=875118</wfw:comment><description>&lt;p&gt;A quick search in the web reveals that the number of the books that are related to windows device drivers can be counted with the fingers of one hand. Even worse, most of the books are either too old (published before or around windows 2000) and/or not easily readable. Another problem is that the Windows Driver Model (WDM) is becoming more complex as time passes, so the newer books are relatively more complex to read than the older ones.&lt;/p&gt;
&lt;p&gt;Based on all of this and after looking at different book reviews, I decided to read a few books that make it easier for a beginner to get an insight on driver development.&lt;/p&gt;
&lt;p&gt;So, I think that the best book to start with regarding driver development is &lt;a href="http://www.amazon.com/Windows-Device-Development-Classic-Reprints/dp/0976717522/sr=8-2/qid=1161822833/ref=sr_1_2/102-9497207-8447336?ie=UTF8&amp;amp;s=books" mce_href="http://www.amazon.com/Windows-Device-Development-Classic-Reprints/dp/0976717522/sr=8-2/qid=1161822833/ref=sr_1_2/102-9497207-8447336?ie=UTF8&amp;amp;s=books"&gt;Windows NT Device Driver Development (OSR Classic Reprints)&lt;/a&gt; (original version was published in 1997) by Peter G. Viscarola and W. Anthony Mason. This book is divided into 3 parts. The first part (chapters 1-8) talk about Windows internals fundamental concepts, like HAL, scheduling, virtual memory, registry, etc. The second part (chapters 9-20) is the bulk of the book and talks about the development of device drivers. Actually, this can be further subdivided into chapters 8-10, which talk about the I/O manager, 11-17, which is the core part of the book (DriverEntry, Dispatch routines, Interrupt Service Routines, Deffered Procedure Calls, Programmed I/O and DMA), and chapters 18-20, which talk about building and debugging a driver. Finally, chapters 21-24 talk about alternate NT driver architectures, like File system drivers, SCSI drivers, Video miniport drivers and NDIS (network) miniport drivers. I think that there are both advantages and disadvantages in this book. I'll start with the advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It's very easy to read. It starts with very fundamental stuff, builds on top of them and explains the concepts in an easy-to-understand way. This is really to hard to find in the rest of the books. Possibly the fact that both writers teach driver development courses make it easier for them to understand what questions and problems a beginner driver developer might have, so they try to answer them in front.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;It focuses on explaining the concepts and doesn't present pages and pages of un-understandable code. It just presents the functions, explains how they work and shows a cumulative example that shows the use of a few functions bundled together.&lt;/li&gt;
&lt;li&gt;It's a short book (the first 20 chapters take less than 550 pages) and has small chapters. I think that this fine grain analysis helps the reader. I like the fact that I can read a few small chapters within a day and then pickup the book the next day (or a few days later) without breaking my reading in the middle of the chapter and trying to remember what the first part of the chapter was saying.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Of course, the book has also some disadvantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It doesn't cover plug-n-play, power management and other WDM concepts. This is normal, since the book covers NT drivers and not WDM drivers.I haven't found many outdated parts of the book (i.e. almost everything that is written in the book applies even for WDM drivers in Windows XP), apart from the fact that the DriverEntry chapter (chapter 13) talks a lot about manually finding the resources (memory+I/O) that the driver should be using, whereas for WDM drivers this is done automatically. It also doesn't cover Physical Device Objects (PDOs), Function Device Objects (FDOs) and Filter Device Objects (FiDOs), since they didn't exist at that time.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;The examples are small and after understanding the concepts, it's nice to be able to look at some code that will explain them.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So, in order to solve the disadvantages of the first book, I think that the solution is to read &lt;a href="http://www.amazon.com/Windows-2000-Device-Driver-Book/dp/0130204315/sr=8-2/qid=1161822060/ref=pd_bbs_sr_2/102-9497207-8447336?ie=UTF8&amp;amp;s=books" mce_href="http://www.amazon.com/Windows-2000-Device-Driver-Book/dp/0130204315/sr=8-2/qid=1161822060/ref=pd_bbs_sr_2/102-9497207-8447336?ie=UTF8&amp;amp;s=books"&gt;The Windows 2000 Device Driver Book: A Guide for Programmers (2nd Edition)&lt;/a&gt; (published in 2000) by Art Baker and Jerry Lozano. The strengths of this book are exactly those above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The book covers Windows 2000 drivers, so it covers Power Management, Plug-n-Play, Windows Management Instrumentation (WMI) and many WDM concepts that were not covered by the first book.&lt;/li&gt;
&lt;li&gt;The book is full of examples. The writer also provides the source code in the accompanying cd-rom, so it's easy to build them and learn from the source.&lt;/li&gt;
&lt;li&gt;Again, the book is easy to read and short. I like a lot compact books that stick to the topic and don't provide stuff that distract the reader. This book is one of those. The whole book is around 400 pages, so it can be finished quite quickly.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So, after finishing both these books and playing with the source code (and with the source code that can be found in the WDK or elsewhere in the net), I think that the next step is to read &lt;a href="http://www.microsoft.com/MSPress/books/6262.asp" class="" mce_href="http://www.microsoft.com/MSPress/books/6262.asp"&gt;Programming the Microsoft Windows Driver Model, Second Edition&lt;/a&gt; (published in 2002) by Walter Oney. Again, this book has both advantages and disadvantages. This time, I'll start with the disadvantages :) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This book is definately NOT for beginners. I consider it hard to understand and it considers way too many things as known.&lt;/li&gt;
&lt;li&gt;I don't like the structure of the book very well. For example, even though the author mentions that the first 7 chapters are fundamentals and the rest go deeper, he puts the I/O control operations after the plug-n-play or the power management. Of course, this is a personal view, however I was overwhelmed, when I managed to reach the 6th chapter. The first 3 chapters are very good, however I think that after that the difficulty grows exponentially, at least for a beginner.&lt;/li&gt;
&lt;li&gt;The material presented in the book is very dense, so a lot of stuff is presented within a small number of pages and then you look at a big code listing that should explain everything. As I said above, I prefer a slower approach that goes step by step and builds on top of fundamental concepts.&lt;/li&gt;
&lt;li&gt;I don't think that the book gives a a clear high-level view of what a device driver is composed of (I'll explain this below). I had the feeling that the author explains one thing, then the next and the next, but it's hard to understand how everything fits together and how all of these components are related.&lt;/li&gt;&lt;/ul&gt;On the other hand, this book has some advantages that cannot be covered by any other existing book:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;It is the newest book, so it provides the best picture about the current version of the Windows Driver Model (WDM). &lt;br&gt;&lt;/li&gt;
&lt;li&gt;It's the only book that covers Windows XP, so it's the only choice for somebody, who wants to take advantage of this platform.&lt;/li&gt;
&lt;li&gt;I think that each section is described more deeply than from the rest of the books.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Finally, I think that such a review would be incomplete, if I didn't refer to &lt;a href="http://www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207015630&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207015630&amp;amp;sr=8-1"&gt;Microsoft Windows Internals, Fourth Edition: Microsoft Windows Server(TM) 2003, Windows XP, and Windows 2000 (Pro-Developer)&lt;/a&gt; (published in December 2004) by Mark E. Russinovich and David A. Solomon. This book doesn' t talk directly about writing device drivers, but it talks about windows internals in general. Some of them are covered in the above mentioned books, however this book is the newest of all and provides the most in-depth analysis. Also, chapter 9 is devoted specifically to the I/O manager and to windows device drivers, so it's definately worth to read. I especially like one particular section in chapter 9 that is titled "&lt;b&gt;Structure of a Driver&lt;/b&gt;" and gives a high-level overview of all the components of a driver. That's exactly an important thing that is missing from Walter Oney's book and is not clearly explained in the rest of the books. So, according to the book, a windows device driver is composed of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;An initialization routine:&lt;/b&gt; This function is named DriverEntry (for WDM drivers) and is called by the I/O manager only once, when the driver is initially loaded. It is used by the driver to initialize its internal (global) structures.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;An add-on device routine:&lt;/b&gt; This function is named AddDevice and is called by the I/O manager, whenever a new device, for which the driver is responsible, is detected. It is used by the driver to initialize the device object (i.e. the internal structure) that corresponds to the newly-found device.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A set of dispatch routines:&lt;/b&gt; These are the functions that are called by an application (or another driver) to communicate with the device. They include functions like read, write, open, close, control, etc. When called to perform an I/O operation, the I/O manager creates an IRP (I/O Request Packet), which is a structure that descibes the request, and sends it to the driver.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;An Interrupt Service Routine (ISR):&lt;/b&gt; One of the ways that an external device can communicate with the CPU is through interrupts (the other way is polling, but let's forget about it for now). So, whenever the device wants to communicate with the CPU, it sends an interrupt to the CPU and the CPU executes some code that needs to serve the device (e.g. find if the device finished some calculation or received a packet, etc and find what to do afterwards). The code that is executed is called the Interrupt Service Routine (ISR). Therefore, the driver that controls the device needs to implement this ISR.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Deffered Procedure Call (DPC):&lt;/b&gt; Whenever an ISR is executing, the IRQL (IRQ Level) of the CPU is high, so all the interrupts that have lower IRQL than the current interrupt cannot be served. In order to solve this problem, drivers perform only very basic calculation in their ISR and for the rest of the processing they schedule a DPC. This function executes in a low IRQL (which is named DISPATCH_LEVEL), so that the rest of the interrupts can be serviced. Therefore, the DPC can be considered as just an extension to the ISR (they serve the same purpose, but they execute at different IRQL). Of course, a driver can execute DPCs not only from an ISR, but from any other function, however this is the main use of a DPC.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A start I/O routine:&lt;/b&gt; Some drivers wants to process the incoming I/O requests serially, i.e. one at a time. Therefore, they ask the I/O manager to queue the incoming IRPs. This function is used to initiate the next data transfer to or from the device.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;One or more I/O completion routines:&lt;/b&gt; Sometimes a driver, which receives an I/O request does some processing and passes the IRP to the next driver in the stack, without finalizing the IRP processing (finalizing means that the I/O operation was completed successfully, failed or cancelled). The I/O completion routine informs the driver that another driver in the stack has marked the I/O as "finalized", so the current driver's I/O completion routine can be called, in order to perform some cleanup operations.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A cancel I/O routine:&lt;/b&gt; This function is called, when the I/O manager wants to cancel the processing of an IRP. This function mostly releases any resources that were acquired during the processing of the IRP and it also marks the IRP as "cancelled". Not all IRPs can be cancelled, though.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;An unload routine:&lt;/b&gt; The I/O manager calls this routine, when it wants to unload the driver from memory. The drives releases any resources that it might have acquired.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A system shutdown notification routine:&lt;/b&gt; The I/O manager calls this routine, when the system is about to shutdown.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Error-logging routines:&lt;/b&gt; Whenever an error occurs, the driver uses these routines to log the error and notify the I/O manager.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Here I would like to note that all the above books are for the Windows Driver Model. As I've mentioned many times before, Microsoft is changing the driver model for Windows Vista. However, there aren't any books for the Windows Driver Foundation (WDF - the new windows model) yet. The only public announcement for such a book is the &lt;a href="https://www.osronline.com/custom.cfm?name=index_fullframeset.cfm&amp;amp;pageURL=https://www.osronline.com/store/index.cfm" mce_href="https://www.osronline.com/custom.cfm?name=index_fullframeset.cfm&amp;amp;pageURL=https://www.osronline.com/store/index.cfm"&gt;Introduction to the Windows Driver Foundation - Kernel Mode Driver Framework&lt;/a&gt;&amp;nbsp;&lt;span class="prodname"&gt;&lt;b&gt;&lt;/b&gt;by Peter Viscarola, Tony Mason, Mark Cariddi, Brenda Ryan, Scott Noone, and OSR.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=875118" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Books/default.aspx">Books</category></item><item><title>Hardware and Driver Developer Blogs + Driver tips</title><link>http://blogs.msdn.com/iliast/archive/2006/10/07/Driver-development-community.aspx</link><pubDate>Sun, 08 Oct 2006 05:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:803108</guid><dc:creator>iliast</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/iliast/comments/803108.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=803108</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=803108</wfw:comment><description>&lt;P&gt;Thanks, to &lt;A href="http://blogs.msdn.com/craigrow/default.aspx" mce_href="http://blogs.msdn.com/craigrow/default.aspx"&gt;craigrow&lt;/A&gt;, I saw that Microsoft has created a list for &lt;A href="http://www.microsoft.com/whdc/resources/blogs.mspx" mce_href="http://www.microsoft.com/whdc/resources/blogs.mspx"&gt;hardware and driver developer blogs&lt;/A&gt;. I'm still not there yet, but I hope that this will change :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Another interesting link are the &lt;A href="http://www.microsoft.com/whdc/driver/tips/default.mspx" mce_href="http://www.microsoft.com/whdc/driver/tips/default.mspx"&gt;driver tips&lt;/A&gt;, which include papers about driver synchronization, memory management, driver design, debugging, etc.&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=803108" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category></item><item><title>A Comparison of the Linux and Windows Device Driver Architectures</title><link>http://blogs.msdn.com/iliast/archive/2006/10/03/A-Comparison-of-the-Linux-and-Windows-Device-Driver-Architectures.aspx</link><pubDate>Wed, 04 Oct 2006 02:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:788057</guid><dc:creator>iliast</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/iliast/comments/788057.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=788057</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=788057</wfw:comment><description>&lt;p&gt;While searching for something irrelevant, I found a very interesting paper, called "A Comparison of the Linux and Windows Device Driver Architectures" by Melekam Tsegaye and Richard Foss. It was published at the ACM Operating Systems Review, Volume 38, Number 2, 2004. You can find a link to the paper &lt;a href="http://www.cs.ru.ac.za/research/g98t4414/static/papers/oscomposr.pdf" mce_href="http://www.cs.ru.ac.za/research/g98t4414/static/papers/oscomposr.pdf"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.cs.ru.ac.za/research/students/g98t4414/static/papers/oscomposr.pdf" mce_href="http://www.cs.ru.ac.za/research/students/g98t4414/static/papers/oscomposr.pdf"&gt;paper&lt;/a&gt; compares the device driver architectures between linux and windows. It starts by providing an extensive analysis to both architectures and then presenting a detailed comparison. The paper covers the 2.4 linux kernel and the Windows Driver Model (WDM) from Windows XP, so it can be considered that it is quite up-to-date (at least from the Windows perspective). Also, in the same page, you'll find Melekam Tsegaye's &lt;a href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/thesis.pdf.zip" mce_href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/thesis.pdf.zip"&gt;MSc Thesis&lt;/a&gt;, which covers the same contents as the paper, but it also presents the design and the implementation of an IEEE-1394 driver for both windows and linux. Both drivers can be found &lt;a href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/thesis_software.zip" mce_href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/thesis_software.zip"&gt;here&lt;/a&gt;, while the presentation of the thesis can be found &lt;a href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/msc_present.ppt" mce_href="http://www.cs.ru.ac.za/research/students/g98t4414/static/masters/msc_present.ppt"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=788057" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Linux/default.aspx">Linux</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category><category domain="http://blogs.msdn.com/iliast/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Key Driver Concepts and Driver Development books</title><link>http://blogs.msdn.com/iliast/archive/2006/10/02/Key-Driver-Concepts-and-Driver-Development-books.aspx</link><pubDate>Mon, 02 Oct 2006 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:781850</guid><dc:creator>iliast</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/iliast/comments/781850.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=781850</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=781850</wfw:comment><description>&lt;P&gt;While looking at the traffic&amp;nbsp;at the &lt;A class="" href="http://www.microsoft.com/whdc/driver/kernel/default.mspx" mce_href="http://www.microsoft.com/whdc/driver/kernel/default.mspx"&gt;OSR ndev mailing list&lt;/A&gt;&amp;nbsp;I saw that some introductory questions&amp;nbsp;are answered in &lt;A class="" href="http://www.microsoft.com/whdc/driver/kernel/default.mspx" mce_href="http://www.microsoft.com/whdc/driver/kernel/default.mspx"&gt;Microsoft's Key Driver Concepts&lt;/A&gt; page.&amp;nbsp;The links in this page include (but are not limited to) information about:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://www.microsoft.com/whdc/driver/kernel/locks.mspx" mce_href="http://www.microsoft.com/whdc/driver/kernel/locks.mspx"&gt;Synchronization primitives&lt;/A&gt; (mutexes, fast mutexes, semaphores, spinlocks, etc)&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.microsoft.com/whdc/driver/kernel/mem-mgmt.mspx" mce_href="http://www.microsoft.com/whdc/driver/kernel/mem-mgmt.mspx"&gt;Memory management&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/controlpanel/blogs/%09Scheduling,%20Thread%20Context,%20and%20IRQL" mce_href="http://blogs.msdn.com/controlpanel/blogs/&amp;#9;Scheduling, Thread Context, and IRQL"&gt;Windows scheduling&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/controlpanel/blogs/Writing%20kernel-mode%20drivers%20in%20C++:%20should%20you%20or%20shouldn%27t%20you?%20" mce_href="http://blogs.msdn.com/controlpanel/blogs/Writing kernel-mode drivers in C++: should you or shouldn't you? "&gt;C vs C++ as a language for driver development&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/whdc/driver/kernel/KM-UMGuide.mspx"&gt;User-Mode Interactions: Guidelines for Kernel-Mode Drivers&lt;/A&gt;&lt;IMG height=1 src="http://www.microsoft.com/whdc/images/shared/common/space.gif" width=1 border=0&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/whdc/driver/kernel/km-fns.mspx"&gt;Recommended Functions for Kernel-Mode Drivers&lt;/A&gt;&lt;IMG height=1 src="http://www.microsoft.com/whdc/images/shared/common/space.gif" width=1 border=0&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/whdc/driver/kernel/cancel_logic.mspx"&gt;Cancel Logic in Windows Drivers&lt;/A&gt;&lt;IMG height=1 src="http://www.microsoft.com/whdc/images/shared/common/space.gif" width=1 border=0&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://download.microsoft.com/download/f/0/5/f05a42ce-575b-4c60-82d6-208d3754b2d6/Porting-WDM-Drvs-to-KMDF.ppt" mce_href="http://download.microsoft.com/download/f/0/5/f05a42ce-575b-4c60-82d6-208d3754b2d6/Porting-WDM-Drvs-to-KMDF.ppt"&gt;How to Port WDM Drivers to KMDF&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;and many more...&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Also, I would like to like to provide a brief list of the most popular books for development of windows device drivers:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN class=srTitle&gt;&lt;A class="" href="http://www.microsoft.com/MSPress/books/6262.asp" mce_href="http://www.microsoft.com/MSPress/books/6262.asp"&gt;Programming the Microsoft Windows Driver Model, Second Edition&lt;/A&gt;&lt;/SPAN&gt; by Walter Oney (2002): The latest (and possibly the most complete) book on drivers. It covers all Plug-n-Play drivers in detail.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.phptr.com/bookstore/product.asp?isbn=0130204315&amp;amp;rl=1" mce_href="http://www.phptr.com/bookstore/product.asp?isbn=0130204315&amp;amp;rl=1"&gt;The Windows 2000 Device Driver Book: A Guide for Programmers (2nd Edition)&lt;/A&gt; by Art Baker and Jerry Lozano (2000): A classic book for windows device drivers, however it's definately showing its age. It covers the WDM model for Windows 2000 and is short in legnth (less than&amp;nbsp;500 pages)&amp;nbsp;compared to&amp;nbsp;the rest of the books&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.amazon.com/Writing-Windows-Wdm-Device-Drivers/dp/0879305657" mce_href="http://www.amazon.com/Writing-Windows-Wdm-Device-Drivers/dp/0879305657"&gt;Writing Windows Wdm Device Drivers: Covers Nt 4, Win 98, and Win 2000&lt;/A&gt; by Chris Cant (1999): Another relatively short in length easy to read book that is currently outdated, since it covers earlier versions of windows.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.osronline.com/article.cfm?article=20" mce_href="http://www.osronline.com/article.cfm?article=20"&gt;Windows NT Device Driver Development&lt;/A&gt; by Viscarola and Mason, published by New Riders (1998, reprint in 2006): (Copying from OSR's website) Written by OSR's consulting partners, this book contains the details about the NT I/O subsystem. The only disadvantage of this book is that it was written in the NT V4 timeframe, before Win2K and therefore before the introduction of Plug and Play support. No matter, it's still the most solid architectural reference around.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/Developing-Windows-Device-Drivers-Programmers/dp/0201695901/sr=1-1/qid=1160025078/ref=sr_1_1/104-3901661-5598324?ie=UTF8&amp;amp;s=books" mce_href="http://www.amazon.com/Developing-Windows-Device-Drivers-Programmers/dp/0201695901/sr=1-1/qid=1160025078/ref=sr_1_1/104-3901661-5598324?ie=UTF8&amp;amp;s=books"&gt;Developing Windows NT Device Drivers: A Programmer's Handbook&lt;/A&gt; by Edward Dekker and Joseph Newcomer (1999): It is a thick (over 1200 pages), extensive and verbose books that covers every aspect of Windows device drivers. You can find a review &lt;A href="http://www.ercb.com/brief/brief.0113.html" mce_href="http://www.ercb.com/brief/brief.0113.html"&gt;here&lt;/A&gt;.&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN class=text&gt;&lt;SPAN class=text&gt;&lt;FONT face=Arial size=2&gt;&lt;FONT face=Arial&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=text&gt;Finally, for those curious/interested to learn about windows NT's&amp;nbsp;history, I would like to point out the book &lt;A class="" href="http://www.amazon.com/Show-Stopper-Cloth-GENERATION-MICROSOFT/dp/0029356717" mce_href="http://www.amazon.com/Show-Stopper-Cloth-GENERATION-MICROSOFT/dp/0029356717"&gt;Show Stopper! Cloth: THE BREAKNECK RACE TO CREATE WINDOWS NT AND THE NEXT GENERATION AT MICROSOFT&lt;/A&gt;&amp;nbsp;by Pascal Zachary (1994). It is a short (around 300 pages), easy-to-read book that describes both Windows NT's creation by David Cutler (chief architect), and Microsoft's culture. The book is out of print, but it's definately worth reading.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=781850" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item><item><title>Introductory driver writing resources</title><link>http://blogs.msdn.com/iliast/archive/2006/09/29/Introductory-driver-writing-resources.aspx</link><pubDate>Fri, 29 Sep 2006 23:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:776407</guid><dc:creator>iliast</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/iliast/comments/776407.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=776407</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=776407</wfw:comment><description>After having finished with the initial resources on the windows internals, it is time for a developer to start learning about windows drivers. The goal of this post is to provide a list of links that can be used by somebody to get accustomed with the idea of a driver, the tools that he needs to use, etc.&lt;br&gt;&lt;br&gt;A very important url for this case is &lt;a href="http://www.osronline.com" mce_href="http://www.osronline.com"&gt;http://www.osronline.com&lt;/a&gt;. At the top of that page it says "Everything (About) Windows Driver Development" and this is (almost :) ) the case. In fact, this site has a lots of resources that are really useful both to new and to more experienced developers. The first thing that I suggest that you should do, after visiting this website is to become a member (by clicking on the "Join" button). Membership is free and it gives you access to a lot of additional helpful resources:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;First of all (and maybe most important for now) you'll find a list of "fundamental" resources at &lt;a href="http://www.osronline.com/section.cfm?section=26" mce_href="http://www.osronline.com/section.cfm?section=26"&gt;http://www.osronline.com/section.cfm?section=26&lt;/a&gt;. This list is consisted of several interesting subjects, like &lt;a href="http://www.osronline.com/article.cfm?article=20" mce_href="http://www.osronline.com/article.cfm?article=20"&gt;Getting Started with Windows Drivers&lt;/a&gt; (which is the very first document that you should read, in order to get answers to lots of your questions about drivers), &lt;a href="http://www.osronline.com/article.cfm?article=233" mce_href="http://www.osronline.com/article.cfm?article=233"&gt;Exactly what is a Driver&lt;/a&gt; (which gives a simple technical overview of a driver) and also some basic information about what are the &lt;a href="http://www.osronline.com/article.cfm?article=231" mce_href="http://www.osronline.com/article.cfm?article=231"&gt;threads&lt;/a&gt;, the &lt;a href="http://www.osronline.com/article.cfm?article=224" mce_href="http://www.osronline.com/article.cfm?article=224"&gt;rings&lt;/a&gt;, &lt;a href="http://www.osronline.com/article.cfm?article=222" mce_href="http://www.osronline.com/article.cfm?article=222"&gt;page fault&lt;/a&gt; and &lt;a href="http://www.osronline.com/article.cfm?article=225" mce_href="http://www.osronline.com/article.cfm?article=225"&gt;real mode&lt;/a&gt; (even though I hope that you've learned these by looking at the resources that I mentioned in my previous posts).&lt;/li&gt;
&lt;li&gt;Another important link in the website is the &lt;a href="http://www.osronline.com/page.cfm?name=ListServer" mce_href="http://www.osronline.com/page.cfm?name=ListServer"&gt;listserv&lt;/a&gt;. There are 3 lists that are being maintained by OSR: ntdev (various windows system-level topics), windbg (windows debugger or windbg is a really important tool for driver debugging) and ntfsd (file systems and file system filter drivers). The range of the members in these lists is pretty wide, from beginners to veterans. MOST IMPORTANTLY, there are many Microsoft employees, who participate actively in the list and answer the questions. All of the lists are a MUST-join (especially the 2 first ones, if you are not interested in file system drivers).&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Apart from the above very important links there are some more like the &lt;a href="http://www.osronline.com/section.cfm?section=17" mce_href="http://www.osronline.com/section.cfm?section=17"&gt;NT Insider&lt;/a&gt; (similar to an online magazine that covers articles relative to driver development), &lt;a href="http://www.osronline.com/section.cfm?section=27" mce_href="http://www.osronline.com/section.cfm?section=27"&gt;Downloads&lt;/a&gt; (includes many useful utilities like the Driver loader) and &lt;a href="http://www.osronline.com/section.cfm?section=16" mce_href="http://www.osronline.com/section.cfm?section=16"&gt;Hector's Memos&lt;/a&gt; (another interesting blog about driver development).&lt;/li&gt;&lt;/ol&gt;In addition, Microsoft also offers a lot of really valuable resources:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;By clicking &lt;a href="http://www.microsoft.com/whdc/driver/foundation/DrvDev_Intro.mspx" mce_href="http://www.microsoft.com/whdc/driver/foundation/DrvDev_Intro.mspx"&gt;here&lt;/a&gt;, you'll get redirected to an article that provides all the introductory information that you need about drivers: types of drivers, development environment, debugging tools (windbg rocks!), etc. It's more technical than the corresponding OSR paper, but it remains an all-encompassing easy-to-read paper.&lt;/li&gt;
&lt;li&gt;All the current windows drivers (excluding the legacy ones) are written in a way that is called the &lt;a href="http://www.microsoft.com/whdc/archive/wdmoverview.mspx" mce_href="http://www.microsoft.com/whdc/archive/wdmoverview.mspx"&gt;Windows Driver Model &lt;/a&gt;(WDM). However, the new model (from Windows Vista and afterwards it is the default model, however there will be versions for previous operating systems, too) is the &lt;a href="http://www.microsoft.com/whdc/driver/wdf/default.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/default.mspx"&gt;Windows Driver Foundation&lt;/a&gt; (WDF). This model is much much simpler than WDM and is the model that will be used for drivers in the future (i.e. that's the model that a new driver developer should become accustomed with!). This model allows both the creation of kernel-mode and user-mode drivers. The former framework is called &lt;a href="http://www.microsoft.com/whdc/driver/wdf/KMDF.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/KMDF.mspx"&gt;Kernel-Mode Driver Framework&lt;/a&gt; (KMDF) and you can find an introduction &lt;a href="http://www.microsoft.com/whdc/driver/wdf/KMintro_appdevs.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/KMintro_appdevs.mspx"&gt;here&lt;/a&gt;. The latter framework is called &lt;a href="http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx"&gt;User-Mode Driver Framework&lt;/a&gt; (UMDF) and you can find an introduction &lt;a href="http://www.microsoft.com/whdc/driver/wdf/UMDF_Intro.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/UMDF_Intro.mspx"&gt;here&lt;/a&gt;. Also, the UMDF Beta, which includes&amp;nbsp; sample code, documentation, development tools, etc can be downloaded from &lt;a href="http://www.microsoft.com/whdc/driver/wdf/UMDF_pkg.mspx" mce_href="http://www.microsoft.com/whdc/driver/wdf/UMDF_pkg.mspx"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Another very useful website with videos from Microsoft employees is &lt;a href="http://channel9.msdn.com/" mce_href="http://channel9.msdn.com/"&gt;http://channel9.msdn.com/&lt;/a&gt;. I think that the most interesting videos for driver developers are the ones in the &lt;a href="http://channel9.msdn.com/Shows/Going_Deep" mce_href="http://channel9.msdn.com/Shows/Going_Deep"&gt;"Going Deep" series&lt;/a&gt; and the ones marked with the &lt;a href="http://channel9.msdn.com/tags/Drivers" mce_href="http://channel9.msdn.com/tags/Drivers"&gt;"Drivers" tag&lt;/a&gt;. Some interesting relevant topics are (I'll try to update this list int the future):&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=148820#148820" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=148820#148820"&gt;&lt;/a&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=148820#148820" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=148820#148820"&gt;Windows Vista's internal architecture&lt;/a&gt; by Rob Short (corporate vice president)&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=61390" mce_href="http://channel9.msdn.com/Showpost.aspx?postid=61390"&gt;Windows I/O manager part 1&lt;/a&gt; by Nar Ganapathy (architect)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=61390" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=61390"&gt;Windows I/O manager part 2&lt;/a&gt; by Nar Ganapathy (architect)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=239845" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=239845"&gt;Windows Vista I/O&lt;/a&gt; by Nar Ganapathy (architect)&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=236023" mce_href="http://channel9.msdn.com/Showpost.aspx?postid=236023"&gt;User-Mode Driver Framework&lt;/a&gt; by Peter Wieland (UMDF Dev Lead)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=236023" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=236023"&gt;Kernel-Mode Driver Framework&lt;/a&gt; by Doron Holan (KMDF Dev Lead)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=233076#233076" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=233076#233076"&gt;PreFAST for Drivers&lt;/a&gt; by Donn Terry (Software Developer)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=116345" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=116345"&gt;I/O cancellation&lt;/a&gt; (whole team)&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;The &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Intro_g/hh/Intro_g/ddksplash_d0c992d8-3d64-44cc-ab2c-13bcfa0faffb.xml.asp?frame=true" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Intro_g/hh/Intro_g/ddksplash_d0c992d8-3d64-44cc-ab2c-13bcfa0faffb.xml.asp?frame=true"&gt;Windows Driver Kit&lt;/a&gt; (try visiting the link with IE), which is an all-in-one driver development kit. It is the definitive source for driver development, since it includes Microsoft's public documentation about the driver model, as well as all the public APIs. The information in the WDK is relatively easy to read (up to a point). I suggest that you read "&lt;font color="#0000ff"&gt;Getting started with Windows Drivers&lt;/font&gt;" and the "&lt;font color="#0000ff"&gt;Kernel-Mode Driver Architecture Design Guide&lt;/font&gt;" (As much as possible. Most of the information there should be familiar after reading the Windows Internals book, too). After that, depending on the type of the driver that you are interested in (kernel-mode or user-mode) you should look at the "&lt;font color="#0000ff"&gt;Kernel-Mode Framework Design Guide&lt;/font&gt;" or the "&lt;font color="#0000ff"&gt;User-Mode Framework Design Guide&lt;/font&gt;" respectively. The former is more complete, but I think that the latter is written in a more simple style. Generally, the WDK is a valuable reference, so you can also find available tools, installation techniques, etc. Peter Wieland has written a post with &lt;a href="http://blogs.msdn.com/peterwie/archive/2006/05/30/611070.aspx" mce_href="http://blogs.msdn.com/peterwie/archive/2006/05/30/611070.aspx"&gt;extensive instructions&lt;/a&gt; on how to download the WDK (warning: it's 2.3GB!), which will allow you to take advantage of the development environment, the samples, etc.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;The public Microsoft newsgroups can be found at the newsgroup server msnews.microsoft.com (you'll need a newsgroup reader like Outlook Express to read them). The most important ones are Microsoft.pulbic.development.device.drivers, Microsoft.public.win32.programmer.kernel and Microsoft.public.windowsxp.device_driver.dev.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=776407" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item><item><title>Prerequisites for a driver developer</title><link>http://blogs.msdn.com/iliast/archive/2006/09/28/Prerequisites-for-a-driver-developer.aspx</link><pubDate>Thu, 28 Sep 2006 21:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:774979</guid><dc:creator>iliast</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/iliast/comments/774979.aspx</comments><wfw:commentRss>http://blogs.msdn.com/iliast/commentrss.aspx?PostID=774979</wfw:commentRss><wfw:comment>http://blogs.msdn.com/iliast/rsscomments.aspx?PostID=774979</wfw:comment><description>&lt;P&gt;If somebody wants to build a solid house, he needs to have a solid foundation. That's why, if somebody wants to become a good driver developer, he needs to be familiar with some fundamental computer science terms. At minimum, he needs to know the basics about operating systems, computer architecture and computer networks. &lt;BR&gt;&lt;BR&gt;The easiest way to become familiar with these concepts is to take undergrad computer science courses on operating systems and computer networks. In case somebody is unable to do this or if he wants to refresh his knowledge, I can point out to a few links from universities that offer online recorded relevant courses:&lt;BR&gt;&lt;BR&gt;1)Operating systems from the University of Notre Dame: &lt;A href="http://www.cse.nd.edu/~surendar/teach/spr06/cse30341/lecture.shtml" mce_href="http://www.cse.nd.edu/%7Esurendar/teach/spr06/cse30341/lecture.shtml"&gt;http://www.cse.nd.edu/~surendar/teach/spr06/cse30341/lecture.shtml&lt;/A&gt;&lt;BR&gt;2)Computer networks from Carnegie Mellon University: &lt;A href="http://www.cs.cmu.edu/~srini/15-441/S05/" mce_href="http://www.cs.cmu.edu/%7Esrini/15-441/S05/"&gt;http://www.cs.cmu.edu/~srini/15-441/S05/&lt;/A&gt;&lt;BR&gt;Of course, there are many relevant links in the internet, however these are the only 2 links that I know of, which offer the videos of the lectures online for free (please feel free to write down more, if you know).&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Finally, I would like to mention that the University of Washington offers a list of useful graduate courses (e.g. computer architecture, databases, etc), whose lectures can be viewed online: &lt;A href="http://www.cs.washington.edu/education/dl/course_index.html" mce_href="http://www.cs.washington.edu/education/dl/course_index.html"&gt;http://www.cs.washington.edu/education/dl/course_index.html&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;For the rest of the blog, I'll consider that the basic terms as known (e.g. What is a driver? What is an I/O port? etc) and that I won't have to explain them.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=774979" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/iliast/archive/tags/Drivers+_2800_General_2900_/default.aspx">Drivers (General)</category></item></channel></rss>