<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">driver writing != bus driving</title><subtitle type="html">Ilias Tsigkogiannis&amp;#39; Introduction to Windows Device Drivers</subtitle><id>http://blogs.msdn.com/b/iliast/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/iliast/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2008-11-21T17:28:00Z</updated><entry><title>So Long, Farewell, Auf Wiedersehen, Good-bye...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2010/09/01/so-long-farewell-auf-wiedersehen-good-bye.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2010/09/01/so-long-farewell-auf-wiedersehen-good-bye.aspx</id><published>2010-09-01T23:10:19Z</published><updated>2010-09-01T23:10:19Z</updated><content type="html">&lt;p&gt;This is my last post in this blog. After 4 years at Microsoft, it's time for me to move on. This fall I'm starting a MBA degree at Northwestern University's Kellogg School of Management (Go Wildcats!). My experiences at Microsoft have been excellent, but at some point all good things need to come to an end. Hopefully, my blog will still be informative for everybody, who wants to find concentrated information about driver development.&lt;/p&gt;
&lt;p&gt;So Long, Farewell, Auf Wiedersehen, Good-bye...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10057029" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>New Blog: USB Core Team</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/10/06/new-blog-usb-core-team.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/10/06/new-blog-usb-core-team.aspx</id><published>2009-10-07T02:37:00Z</published><updated>2009-10-07T02:37:00Z</updated><content type="html">&lt;P&gt;The USB core team has started a new blog: &lt;A href="http://blogs.msdn.com/usbcoreblog/" mce_href="http://blogs.msdn.com/usbcoreblog/"&gt;http://blogs.msdn.com/usbcoreblog/&lt;/A&gt;. They'll be discussing about everything that&amp;nbsp;is related to USB.&lt;/P&gt;
&lt;P&gt;Welcome to the blogosphere USB Team :)&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9904037" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>KMDF Debugging Videos</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/09/22/kmdf-debugging-videos.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/09/22/kmdf-debugging-videos.aspx</id><published>2009-09-22T22:29:00Z</published><updated>2009-09-22T22:29:00Z</updated><content type="html">&lt;P&gt;A while ago, I wrote a &lt;A class="" href="http://blogs.msdn.com/iliast/archive/2009/06/09/umdf-debugging-videos.aspx" mce_href="http://blogs.msdn.com/iliast/archive/2009/06/09/umdf-debugging-videos.aspx"&gt;blog post&lt;/A&gt; about our &lt;A class="" href="http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx" mce_href="http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx"&gt;UMDF debugging videos&lt;/A&gt;, which were created by my teammate Abhishek.&lt;/P&gt;
&lt;P&gt;Now, I'm really excited to announce that we've released KMDF debugging videos, which can be found at &lt;A class="" href="http://www.microsoft.com/whdc/devtools/debugging/kmdf.mspx" mce_href="http://www.microsoft.com/whdc/devtools/debugging/kmdf.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/kmdf.mspx&lt;/A&gt;. These videos were created by my teammate Kumar. They present 3 important aspects of KMDF debugging:&lt;/P&gt;
&lt;P&gt;1) &lt;A class="" href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-1.wvx" mce_href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-1.wvx"&gt;How to debug the KMDF log&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2) &lt;A class="" href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-2.wvx" mce_href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-2.wvx"&gt;How to get information about a driver and its objects&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;3) &lt;A class="" href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-3.wvx" mce_href="http://www.microsoft.com/whdc/media/WinLogo/Debugging-KMDF-Drivers-Part-3.wvx"&gt;How to dump all the devices and queues&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898152" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="Debugging" scheme="http://blogs.msdn.com/b/iliast/archive/tags/Debugging/" /><category term="windbg" scheme="http://blogs.msdn.com/b/iliast/archive/tags/windbg/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>WDF Logo Requirements Regarding Coinstallers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/08/13/wdf-logo-requirements-regarding-coinstallers.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/08/13/wdf-logo-requirements-regarding-coinstallers.aspx</id><published>2009-08-14T02:51:00Z</published><updated>2009-08-14T02:51:00Z</updated><content type="html">&lt;P&gt;I've been asked many times, if a driver developer can avoid using WDF coinstallers. The answer is "yes, if the system already has the needed version of WDF installed (e.g. you want to install a WDF 1.5 driver in Vista RTM)". So, the next question that usually comes up is "Will I be able to have my WDF driver, which has no coinstaller, WHQL-signed". So, in this post I'll explain our WDF Logo requirements that are related to the coinstallers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;PART 1: WDF Logo Requirement&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The official name of the requirement is “DEVFUND-0039: Windows Driver Framework (WDF) drivers are packaged to contain the RTM fre versions of redistributables”, but the title is very misleading!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;The current situation (in WLK 1.4) for WHQL-signing is:&lt;/U&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Win7 + WDF 1.9: No coinstaller restrictions. This means that you can use any WDF 1.9 coinstaller (beta, RC, RTM, intermediate builds, etc) or you can use no coinstaller. Since the coinstaller is not used to update a Win7 system, we wanted to allow driver submissions before Win7 RTMed, so this is a temporary policy. Now that the WDF 1.9 RTM coinstallers&amp;nbsp;are out, it is suggested that you use those. We might update WLK 1.4 with a QFE to make the usage of the RTM coinstallers mandatory.&lt;/LI&gt;
&lt;LI&gt;Win7 + WDF 1.0-1.7: You can use either an RTM coinstaller or no coinstaller&lt;/LI&gt;
&lt;LI&gt;Windows 2000-Vista + WDF 1.9: You need to use the RTM WDF 1.9 coinstaller or no coinstaller. &lt;U&gt;If you use the coinstaller, then you need to install the latest errata filters from &lt;A href="http://winqual.microsoft.com/" mce_href="http://winqual.microsoft.com"&gt;http://winqual.microsoft.com&lt;/A&gt;, (under the name “&lt;A href="https://winqual.microsoft.com/member/SubmissionWizard/LegalExemptions/updatefilters.cab" mce_href="https://winqual.microsoft.com/member/SubmissionWizard/LegalExemptions/updatefilters.cab"&gt;WLK Update Filters&lt;/A&gt;”) and apply them on the DTM controller.&lt;/U&gt;&lt;/LI&gt;
&lt;LI&gt;Windows 2000-Vista + WDF 1.0-1.7: You can use any RTM WDF coinstaller or no coinstaller (of course, you need to make sure that the needed version of WDF is already inbox if you don't submit a coinstaller).&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;After WLK 1.5 comes out (October 2009) the WHQL-signing situation will be:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;For all operating systems and all versions of WDF (1.0 - 1.9) you can use either an RTM coinstaller or no coinstaller (if&amp;nbsp;you don't submit a coinstaller, then&amp;nbsp;the same restrictions as above will apply).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTES&lt;/STRONG&gt;:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;If you don't submit a coinstaller, then you'll get a warning (not an error) saying that you it's possible that in downlevel operating systems your driver might not be working (e.g. a WDF 1.7 driver will work in Vista SP1 without a coinstaller but not in Vista RTM).&lt;/LI&gt;
&lt;LI&gt;As noted above, if you have an older version of the WDK, you can still compile a WDF 1.5 driver, submit it for WHQL-signing bundled with the WDF 1.5 RTM coinstaller (or no coinstaller in Vista+). Of course, this means that you'll be using older tools (compiler, prefast, etc) to build/validate your driver.&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;PART 2: Sample INFs&lt;/U&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Now let's go to the inf files. What changes need to be made, if you are sure that you don't need a coinstaller?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1) KMDF&lt;/STRONG&gt;: Remove all references to wdfcoinstaller0100X.dll from the inx. I'm using the echo sample from the Win7 RTM WDK as an example:&lt;/P&gt;
&lt;P&gt;;&lt;BR&gt;; echo.inf&lt;BR&gt;;&lt;/P&gt;
&lt;P&gt;[Version]&lt;BR&gt;Signature="$WINDOWS NT$"&lt;BR&gt;Class=Sample&lt;BR&gt;ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}&lt;BR&gt;Provider=%MSFT%&lt;BR&gt;DriverVer=06/21/2006,6.1.7600.16385&lt;BR&gt;CatalogFile=KmdfSamples.cat&lt;/P&gt;
&lt;P&gt;[DestinationDirs]&lt;BR&gt;DefaultDestDir = 12&lt;/P&gt;
&lt;P&gt;; ================= Class section =====================&lt;/P&gt;
&lt;P&gt;[ClassInstall32]&lt;BR&gt;Addreg=SampleClassReg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;[SampleClassReg]&lt;BR&gt;HKR,,,0,%ClassName%&lt;BR&gt;HKR,,Icon,,-5&lt;/P&gt;
&lt;P&gt;[SourceDisksNames]&lt;BR&gt;1 = %DiskId1%,,,""&lt;/P&gt;
&lt;P&gt;[SourceDisksFiles]&lt;BR&gt;ECHO.sys&amp;nbsp; = 1,,&lt;/P&gt;
&lt;P&gt;;*****************************************&lt;BR&gt;; ECHO&amp;nbsp; Install Section&lt;BR&gt;;*****************************************&lt;/P&gt;
&lt;P&gt;[Manufacturer]&lt;BR&gt;%StdMfg%=Standard,NTx86&lt;/P&gt;
&lt;P&gt;; Following section is meant for Windows 2000 as it &lt;BR&gt;; cannot parse decorated model sections&lt;BR&gt;[Standard]&lt;BR&gt;;&lt;BR&gt;; Hw Id is root\ECHO&lt;BR&gt;;&lt;BR&gt;%ECHO.DeviceDesc%=ECHO_Device, root\ECHO&lt;/P&gt;
&lt;P&gt;; Decorated model section take precedence over undecorated &lt;BR&gt;; ones on XP and later.&lt;BR&gt;[Standard.NTx86]&lt;BR&gt;%ECHO.DeviceDesc%=ECHO_Device, root\ECHO&lt;/P&gt;
&lt;P&gt;[ECHO_Device.NT]&lt;BR&gt;CopyFiles=Drivers_Dir&lt;/P&gt;
&lt;P&gt;[Drivers_Dir]&lt;BR&gt;ECHO.sys&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;;-------------- Service installation&lt;BR&gt;[ECHO_Device.NT.Services]&lt;BR&gt;AddService = ECHO,%SPSVCINST_ASSOCSERVICE%, ECHO_Service_Inst&lt;/P&gt;
&lt;P&gt;; -------------- ECHO driver install sections&lt;BR&gt;[ECHO_Service_Inst]&lt;BR&gt;DisplayName&amp;nbsp;&amp;nbsp;&amp;nbsp; = %ECHO.SVCDESC%&lt;BR&gt;ServiceType&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; SERVICE_KERNEL_DRIVER&lt;BR&gt;StartType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; SERVICE_DEMAND_START &lt;BR&gt;ErrorControl&amp;nbsp;&amp;nbsp; = 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; SERVICE_ERROR_NORMAL&lt;BR&gt;ServiceBinary&amp;nbsp; = %12%\ECHO.sys&lt;BR&gt;LoadOrderGroup = Extended Base&lt;/P&gt;
&lt;P&gt;;&lt;BR&gt;;--- ECHO_Device Coinstaller installation ------&lt;BR&gt;;&lt;/P&gt;
&lt;P&gt;[DestinationDirs]&lt;BR&gt;ECHO_Device_CoInstaller_CopyFiles = 11&lt;/P&gt;
&lt;P&gt;[Strings]&lt;BR&gt;SPSVCINST_ASSOCSERVICE= 0x00000002&lt;BR&gt;MSFT = "Microsoft"&lt;BR&gt;StdMfg = "(Standard system devices)"&lt;BR&gt;DiskId1 = "WDF Sample ECHO Installation Disk #1"&lt;BR&gt;ECHO.DeviceDesc = "Sample WDF ECHO Driver"&lt;BR&gt;ECHO.SVCDESC = "Sample WDF ECHO Service"&lt;BR&gt;ClassName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Sample Device"&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;I've removed the sections ECHO_Device.NT.CoInstallers, ECHO_Device_CoInstaller_AddReg, ECHO_Device_CoInstaller_CopyFiles, SourceDiskFiles (the one at the bottom) and ECHO_Device.NT.Wdf.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2) UMDF&lt;/STRONG&gt;: You need to replace WUDFUpdate_0100X.dll with the inbox coinstaller wudfcoinstaller.dll, which is always installed as part of UMDF (i.e. you don't need to have it as part of your driver package). I'm using the UMDF echo sample from the Win7 RTM WDK.&lt;/P&gt;
&lt;P&gt;;&lt;BR&gt;; WUDFEchoDriver.inf&lt;BR&gt;;&lt;/P&gt;
&lt;P&gt;[Version]&lt;BR&gt;Signature="$WINDOWS NT$"&lt;BR&gt;Class=Sample&lt;BR&gt;ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}&lt;BR&gt;Provider=%MSFTWUDF%&lt;BR&gt;CatalogFile=WUDF.cat&lt;BR&gt;DriverVer=06/21/2006,6.1.7600.16385&lt;/P&gt;
&lt;P&gt;[Manufacturer]&lt;BR&gt;%MSFTWUDF%=Microsoft,NTx86&lt;/P&gt;
&lt;P&gt;[Microsoft.NTx86]&lt;BR&gt;%EchoDeviceName%=Echo_Install,WUDF\Echo&lt;/P&gt;
&lt;P&gt;[ClassInstall32]&lt;BR&gt;AddReg=SampleClass_RegistryAdd&lt;/P&gt;
&lt;P&gt;[SampleClass_RegistryAdd]&lt;BR&gt;HKR,,,,%ClassName%&lt;BR&gt;HKR,,Icon,,"-10"&lt;/P&gt;
&lt;P&gt;[SourceDisksFiles]&lt;BR&gt;WUDFEchoDriver.dll=1&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;[SourceDisksNames]&lt;BR&gt;1 = %MediaDescription%&lt;/P&gt;
&lt;P&gt;; =================== WUDF Echo Test Driver ==================================&lt;/P&gt;
&lt;P&gt;[Echo_Install.NT]&lt;BR&gt;CopyFiles=UMDriverCopy&lt;/P&gt;
&lt;P&gt;[Echo_Install.NT.hw]&lt;/P&gt;
&lt;P&gt;[Echo_Install.NT.Services]&lt;BR&gt;AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall&lt;/P&gt;
&lt;P&gt;[Echo_Install.NT.CoInstallers]&lt;BR&gt;AddReg = CoInstallers_AddReg&lt;BR&gt;CopyFiles = CoInstallers_CopyFiles&lt;/P&gt;
&lt;P&gt;[Echo_Install.NT.Wdf]&lt;BR&gt;UmdfService=WUDFEchoDriver,WUDFEchoDriver_Install&lt;BR&gt;UmdfServiceOrder=WUDFEchoDriver&lt;/P&gt;
&lt;P&gt;[WUDFEchoDriver_Install]&lt;BR&gt;UmdfLibraryVersion=1.9.0&lt;BR&gt;DriverCLSID={7AB7DCF5-D1D4-4085-9547-1DB968CCA720}&lt;BR&gt;ServiceBinary=%12%\UMDF\WUDFEchoDriver.dll&lt;/P&gt;
&lt;P&gt;[WUDFRD_ServiceInstall]&lt;BR&gt;DisplayName = %WudfRdDisplayName%&lt;BR&gt;ServiceType = 1&lt;BR&gt;StartType = 3&lt;BR&gt;ErrorControl = 1&lt;BR&gt;ServiceBinary = %12%\WUDFRd.sys&lt;BR&gt;LoadOrderGroup = Base&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;[CoInstallers_AddReg]&lt;BR&gt;HKR,,CoInstallers32,0x00010000,"WudfCoinstaller.dll"&lt;/P&gt;
&lt;P&gt;[CoInstallers_CopyFiles]&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;[DestinationDirs]&lt;BR&gt;UMDriverCopy=12,UMDF ; copy to drivers\UMDF&lt;BR&gt;CoInstallers_CopyFiles=11&lt;/P&gt;
&lt;P&gt;[UMDriverCopy]&lt;BR&gt;WUDFEchoDriver.dll&lt;/P&gt;
&lt;P&gt;; =================== Generic ==================================&lt;/P&gt;
&lt;P&gt;[Strings]&lt;BR&gt;MSFTWUDF="Microsoft Internal (WUDF)"&lt;BR&gt;MediaDescription="Microsoft WUDF Sample Driver Installation Media"&lt;BR&gt;ClassName="Sample Device"&lt;BR&gt;WudfRdDisplayName="Windows Driver Foundation - User-mode Driver Framework Reflector"&lt;BR&gt;EchoDeviceName="Sample WUDF Echo Driver"&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3) KMDF 1.9 + UMDF 1.9 + WinUSB 1.9:&lt;/STRONG&gt; In the Win7 RTM WDK we do have&amp;nbsp;the sample WudfBioUsbSample.inf that uses all 3 frameworks. This would normally use 3 coinstallers, however, since the sample is Win7-only and these components are all inbox, we don't need to use coinstallers. I've pasted the inf file directly&amp;nbsp;from the WDK with minor stylistic modifications.&lt;/P&gt;
&lt;P&gt;;&lt;BR&gt;; WudfBioUsbSample.inf - Install the OSR USB user-mode driver - WBDI sample&lt;BR&gt;;&lt;/P&gt;
&lt;P&gt;[Version]&lt;BR&gt;Signature="$Windows NT$"&lt;BR&gt;Class=Biometric&lt;BR&gt;ClassGuid={53D29EF7-377C-4D14-864B-EB3A85769359}&lt;BR&gt;Provider=%MSFTUMDF%&lt;BR&gt;CatalogFile=biometrics.cat&lt;BR&gt;DriverVer=06/21/2006,6.1.7600.16385&lt;/P&gt;
&lt;P&gt;[Manufacturer]&lt;BR&gt;%MSFTUMDF%=Microsoft,NTx86&lt;/P&gt;
&lt;P&gt;[Microsoft.NTx86]&lt;BR&gt;%OsrUsbDeviceName%=Biometric_Install, USB\VID_0547&amp;amp;PID_1002&lt;/P&gt;
&lt;P&gt;[ClassInstall32]&lt;BR&gt;AddReg=BiometricClass_RegistryAdd&lt;/P&gt;
&lt;P&gt;[BiometricClass_RegistryAdd]&lt;BR&gt;HKR,,,,%ClassName%&lt;BR&gt;HKR,,Icon,,"-201"&lt;BR&gt;HKR,,IconPath,0x00010000,"%SYSTEMROOT%\system32\SysClass.dll,-201"&lt;/P&gt;
&lt;P&gt;[SourceDisksFiles]&lt;BR&gt;WudfBioUsbSample.dll=1&lt;BR&gt;EngineAdapter.dll=1 ; Vendor engine adapter&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;[SourceDisksNames]&lt;BR&gt;1 = %MediaDescription%&lt;/P&gt;
&lt;P&gt;; =================== UMDF OsrUsb Device - WBDI IOCTL interface ==================================&lt;/P&gt;
&lt;P&gt;[Biometric_Install.NT]&lt;BR&gt;CopyFiles=UMDriverCopy, WinBioEngineAdapterCopy&lt;BR&gt;AddProperty=Device_Properties&lt;BR&gt;Include=WINUSB.INF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Import sections from WINUSB.INF&lt;BR&gt;Needs=WINUSB.NT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Run the CopyFiles &amp;amp; AddReg directives for WinUsb.INF&lt;/P&gt;
&lt;P&gt;[Biometric_Install.NT.hw]&lt;BR&gt;AddReg=Biometric_Device_AddReg&lt;BR&gt;AddReg=DriverPlugInAddReg, DatabaseAddReg&lt;/P&gt;
&lt;P&gt;[Device_Properties]&lt;BR&gt;DeviceIcon,,,,"%SYSTEMROOT%\system32\SysClass.dll,-201" ; This is where a device specific icon can be specified.&lt;/P&gt;
&lt;P&gt;[Biometric_Install.NT.Services]&lt;BR&gt;AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall&amp;nbsp; ; flag 0x2 sets this as the service for the device&lt;BR&gt;AddService=WinUsb,0x000001f8,WinUsb_ServiceInstall&amp;nbsp; ; this service is installed because its a filter.&lt;/P&gt;
&lt;P&gt;[Biometric_Install.NT.Wdf]&lt;BR&gt;KmdfService=WINUSB, WinUsb_Install&lt;BR&gt;UmdfDispatcher=WinUsb&lt;BR&gt;UmdfService=WudfBioUsbSample, WudfBioUsbSample_Install&lt;BR&gt;UmdfServiceOrder=WudfBioUsbSample&lt;/P&gt;
&lt;P&gt;[Biometric_Install.NT.CoInstallers]&lt;BR&gt;AddReg=CoInstallers_AddReg&lt;BR&gt;CopyFiles=CoInstallers_CopyFiles&lt;/P&gt;
&lt;P&gt;[WinUsb_Install]&lt;BR&gt;KmdfLibraryVersion = 1.9&lt;/P&gt;
&lt;P&gt;[WudfBioUsbSample_Install]&lt;BR&gt;UmdfLibraryVersion=1.9.0&lt;BR&gt;DriverCLSID = "{F1CB3C15-A916-47bc-BEA1-D5D4163BC6AE}"&lt;BR&gt;ServiceBinary = "%12%\UMDF\WudfBioUsbSample.dll"&lt;/P&gt;
&lt;P&gt;[Biometric_Device_AddReg]&lt;BR&gt;HKR,,"DeviceCharacteristics",0x10001,0x0100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Use same security checks on relative opens&lt;BR&gt;HKR,,"Security",,"D:P(A;;GA;;;BA)(A;;GA;;;SY)"&amp;nbsp; ; Allow generic-all access to Built-in administrators and Local system&lt;BR&gt;HKR,,"LowerFilters",0x00010008,"WinUsb"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND&lt;BR&gt;HKR,,"Exclusive",0x10001,1&lt;BR&gt;HKR,,"SystemWakeEnabled",0x00010001,1&lt;BR&gt;HKR,,"DeviceIdleEnabled",0x00010001,1&lt;BR&gt;HKR,,"UserSetDeviceIdleEnabled",0x00010001,1&lt;BR&gt;HKR,,"DefaultIdleState",0x00010001,1&lt;BR&gt;HKR,,"DefaultIdleTimeout",0x00010001,5000&lt;/P&gt;
&lt;P&gt;[DriverPlugInAddReg]&lt;BR&gt;HKR,WinBio\Configurations,DefaultConfiguration,,"0"&lt;BR&gt;HKR,WinBio\Configurations\0,SensorMode,0x10001,1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Basic - 1, Advanced - 2&lt;BR&gt;HKR,WinBio\Configurations\0,SystemSensor,0x10001,1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; UAC/Winlogon - 1&lt;BR&gt;HKR,WinBio\Configurations\0,SensorAdapterBinary,,"WinBioSensorAdapter.DLL"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Windows built-in WBDI sensor adapter.&lt;BR&gt;HKR,WinBio\Configurations\0,EngineAdapterBinary,,"EngineAdapter.DLL"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Vendor engine&lt;BR&gt;HKR,WinBio\Configurations\0,StorageAdapterBinary,,"WinBioStorageAdapter.DLL"&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Windows built-in storage adapter&lt;BR&gt;HKR,WinBio\Configurations\0,DatabaseId,,"6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50"&amp;nbsp; ; Unique database GUID&lt;/P&gt;
&lt;P&gt;[DatabaseAddReg]&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},BiometricType,0x00010001,0x00000008&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},Attributes,0x00010001,0x00000001&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},Format,,"00000000-0000-0000-0000-000000000000"&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},InitialSize,0x00010001,0x00000020&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},AutoCreate,0x00010001,0x00000001&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},AutoName,0x00010001,0x00000001&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},FilePath,,""&lt;BR&gt;HKLM,System\CurrentControlSet\Services\WbioSrvc\Databases\{6E9D4C5A-55B4-4c52-90B7-DDDC75CA4D50},ConnectionString,,""&lt;/P&gt;
&lt;P&gt;[WUDFRD_ServiceInstall]&lt;BR&gt;DisplayName = %WudfRdDisplayName%&lt;BR&gt;ServiceType = 1&lt;BR&gt;StartType = 3&lt;BR&gt;ErrorControl = 1&lt;BR&gt;ServiceBinary = %12%\WUDFRd.sys&lt;BR&gt;LoadOrderGroup = Base&lt;/P&gt;
&lt;P&gt;[WinUsb_ServiceInstall]&lt;BR&gt;DisplayName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %WinUsb_SvcDesc%&lt;BR&gt;ServiceType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;BR&gt;StartType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3&lt;BR&gt;ErrorControl&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;BR&gt;ServiceBinary&amp;nbsp;&amp;nbsp; = %12%\WinUSB.sys&lt;/P&gt;
&lt;P&gt;[CoInstallers_AddReg]&lt;BR&gt;HKR,,CoInstallers32,0x00010000,"WudfCoinstaller.dll"&lt;/P&gt;
&lt;P&gt;[CoInstallers_CopyFiles]&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;[DestinationDirs]&lt;BR&gt;UMDriverCopy=12,UMDF ; copy to \Windows\System32\drivers\UMDF&lt;BR&gt;WinBioEngineAdapterCopy=11,WinBioPlugins ; copy to \Windows\System32\WinBioPlugins&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;[UMDriverCopy]&lt;BR&gt;WudfBioUsbSample.dll&lt;/P&gt;
&lt;P&gt;[WinBioEngineAdapterCopy]&lt;BR&gt;EngineAdapter.dll&lt;/P&gt;
&lt;P&gt;; =================== Generic ==================================&lt;/P&gt;
&lt;P&gt;[Strings]&lt;BR&gt;MSFTUMDF="Microsoft Internal (WDF:UMDF)"&lt;BR&gt;MediaDescription="Microsoft Sample Driver Installation Media"&lt;BR&gt;ClassName="Biometric Devices"&lt;BR&gt;WudfRdDisplayName="Windows Driver Foundation - User-mode Driver Framework Reflector"&lt;BR&gt;OsrUsbDeviceName="WUDF Fx2 WBDI sample" &lt;BR&gt;WinUsb_SvcDesc="WinUSB Driver"&lt;BR&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9869092" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>UMDF Debugging Videos</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/06/09/umdf-debugging-videos.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/06/09/umdf-debugging-videos.aspx</id><published>2009-06-10T04:29:00Z</published><updated>2009-06-10T04:29:00Z</updated><content type="html">&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;UPDATE:&lt;/U&gt;&lt;/STRONG&gt;&amp;nbsp;You can find my post about KMDF debugging videos at &lt;A href="http://blogs.msdn.com/iliast/archive/2009/09/22/kmdf-debugging-videos.aspx"&gt;http://blogs.msdn.com/iliast/archive/2009/09/22/kmdf-debugging-videos.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A while back I had written that we didn't have any videos, where we talk about UMDF (KMDF seems to get all the glory :P). Well, now we do!&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;My teammate, Abhishek, has created a series of tutorials that describe how to debug UMDF drivers. They can be found at &lt;A href="http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx" mce_href="http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx&lt;/A&gt;. I've been through all the videos a few times and I think that they are very helpful and present some very nice tricks. I suggest that you install a UMDF driver and go through the same tasks that Abhishek is describing, in order to understand the tutorials better.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Feel free to give me any feedback (or any thank-you comments) that you want me to tell Abhishek :)&lt;BR&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9720591" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="Debugging" scheme="http://blogs.msdn.com/b/iliast/archive/tags/Debugging/" /><category term="windbg" scheme="http://blogs.msdn.com/b/iliast/archive/tags/windbg/" /></entry><entry><title>Viewing WDF Logs In Windbg</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/06/09/viewing-wdf-logs-in-windbg.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/06/09/viewing-wdf-logs-in-windbg.aspx</id><published>2009-06-10T03:44:00Z</published><updated>2009-06-10T03:44:00Z</updated><content type="html">&lt;p&gt;One feature that is really helpful in debugging WDF drivers is the log file that is created by the frameworks themselves. In the log files you can see many warnings and errors that are created &lt;u&gt;by the framework&lt;/u&gt; (i.e. they come for free and the driver does not have to do anything). Did you ever have a problem trying to understand why a call to a WDF function fails or what the framework is doing under the hood? Then, continue reading:&lt;/p&gt;&lt;p&gt;In this post I'll explain how to look at the framework log files, while you're debugging a driver using windbg. I assume that you have already installed the WDK in the directory %winddk%.&lt;br&gt;&lt;/p&gt;&lt;p&gt;So, let's start with UMDF:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;You need to debug the wudfhost application that hosts your driver. This is described in an &lt;a href="http://blogs.msdn.com/iliast/archive/2008/02/01/debugging-user-mode-processes-using-a-kernel-mode-debugger.aspx" mce_href="http://blogs.msdn.com/iliast/archive/2008/02/01/debugging-user-mode-processes-using-a-kernel-mode-debugger.aspx"&gt;earlier post of mine&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;In windbg execute the command "!wmitrace.searchpath %winddk%\tools\tracing\%arch%", e.g. "&lt;b&gt;!wmitrace.searchpath c:\WinDDK\6001\tools\tracing\x86&lt;/b&gt;". The directory that you use should have files with names wdf01007.tmf, wdf01009.tmf, etc.&lt;/li&gt;&lt;li&gt;Execute the command "&lt;b&gt;!wmitrace.strdump&lt;/b&gt;" and find the number that corresponds to "WUDF Trace". Let's say that this number is 0x11.&lt;/li&gt;&lt;li&gt;Execute the command "!wmitrace.logdump number_from_previous_step", e.g. "&lt;b&gt;!wmitrace.logdump 0x11&lt;/b&gt;"&lt;/li&gt;&lt;li&gt;In order to control the verbosity of the output, you can use WdfVerifier, which can be found at %winddk%\tools\wdf\%arch%\wdfverifier.exe. Select the tab "User Mode Driver Settings" and change the tracing level. Also, enable the option "Send Log Output to Kernel Debugger". These options are global (i.e. they will be applied to all UMDF drivers)&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For KMDF, things are easier:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Load wdfkd in windbg. This file is located at %winddk%\bin\%arch%. In order to load it execute "!load %winddk%\bin\%arch%\wdfkd.dll", e.g. "&lt;b&gt;!load c:\WinDDK\6001\bin\x86\wdfkd.dll&lt;/b&gt;"&lt;br&gt;&lt;/li&gt;&lt;li&gt;Execute "!wdftmffile %winddk%\tools\tracing\&amp;lt;arch&amp;gt;\wdf01009.tmf", e.g. "&lt;b&gt;!wdftmffile c:\WinDDK\tools\tracing\x86\wdf01009.tmf&lt;/b&gt;". Make sure that the file wdf01009.tmf is in that directory. If you are debugging a KMDF 1.7 driver, then you need to use the file wdf01007.tmf, etc.&lt;/li&gt;&lt;li&gt;Execute "!wdflogdump my_driver" to see the log for your driver. For example, if you are debugging the echo driver, execute "&lt;b&gt;!wdflogdump echo&lt;/b&gt;".&lt;/li&gt;&lt;li&gt;In order to control the verbosity, you can use WdfVerifier. Select the "Kernel Mode User Driver Settings" tab, select your driver in the left panel and then either select or de-select the option "Enable verbose logging". This option is per-driver, i.e. if you want to enable verbose logging for multiple drivers, then you need to select all of them in the left panel.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9720172" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="Debugging" scheme="http://blogs.msdn.com/b/iliast/archive/tags/Debugging/" /><category term="windbg" scheme="http://blogs.msdn.com/b/iliast/archive/tags/windbg/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>Analyzing the Installation of WDF 1.7 and 1.9 drivers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/06/09/analyzing-the-installation-of-wdf-1-7-and-1-9-drivers.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/06/09/analyzing-the-installation-of-wdf-1-7-and-1-9-drivers.aspx</id><published>2009-06-09T22:11:00Z</published><updated>2009-06-09T22:11:00Z</updated><content type="html">&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="PowerPoint.Slide"&gt;&lt;meta name="Generator" content="Microsoft PowerPoint 12"&gt;&lt;span style="font-size: 18pt; font-family: 'Trebuchet MS'; color: white;"&gt;&lt;/span&gt;
&lt;p&gt;Many months ago I had written a post &lt;a href="http://blogs.msdn.com/iliast/archive/2007/11/28/analyzing-the-installation-of-umdf-and-kmdf-1-5-drivers.aspx" mce_href="http://blogs.msdn.com/iliast/archive/2007/11/28/analyzing-the-installation-of-umdf-and-kmdf-1-5-drivers.aspx"&gt;analyzing the installation of WDF 1.5 drivers&lt;/a&gt;. Now that WDF 1.9 is almost out of the door, it's time to do the same thing for WDF 1.7 and 1.9. The differences in the coinstallers for these 2 versions are small, so the installation experience is almost the same. I'll try to point out any differences. For the purpose of this post, I'll use the WDF 1.9 RC coinstallers. A big part of this post was presented in more depth at WinHEC 2008 by &lt;a href="http://blogs.msdn.com/bobkjelgaard/" mce_href="http://blogs.msdn.com/bobkjelgaard/"&gt;Bob Kjeelgaard&lt;/a&gt; and me (&lt;a href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx" mce_href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx"&gt;the presentation can be found here&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;PART 1: UMDF&lt;/b&gt;&lt;/u&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Let's start with the installation of a UMDF driver. I'll use the echo sample from the WDK. It can be found at %WinDDK%\6001\src\umdf\echo (for UMDF 1.7) and%WinDDK%\%version%\src\general\echo\umdf (for UMDF 1.9). After compiling the sample, you need to put the following files in one directory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The UMDF coinstaller (%WinDDK%\%version%\redist\wdf\x86\WUDFUpdate_0100X.dll), where X is either 7 or 9&lt;br&gt;&lt;/li&gt;

&lt;li&gt;The echo driver (WUDFEchoDriver.dll)&lt;/li&gt;

&lt;li&gt;The inf file (WUDFEchoDriver.inf)&lt;/li&gt;

&lt;li&gt;devcon (%WinDDK%\%version%\tools\devcon\i386\devcon.exe)&lt;/li&gt;

&lt;li&gt;Even
though it's not mandatory, it might be useful for debugging to have the
pdb file of the driver
(WUDFEchoDriver.pdb)&lt;/li&gt;
&lt;/ul&gt;
Now in order to install the driver, you can go to a command prompt and use the command&lt;br&gt;devcon install WUDFEchoDriver.inf WUDF\Echo&lt;br&gt;&lt;br&gt;If everything goes well, you should see the following output:&lt;br&gt;&lt;br&gt;&amp;gt;devcon install WudfEchoDriver.inf WUDF\Echo&lt;br&gt;Device node created. Install is complete when drivers are installed...&lt;br&gt;Updating drivers for WUDF\Echo from WudfEchoDriver.inf.&lt;br&gt;Drivers installed successfully.&lt;br&gt;&lt;br&gt;If there's a problem, then you'll see something like:&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&amp;gt;devcon install WudfEchoDriver.inf WUDF\Echo&lt;br&gt;Device node created. Install is complete when drivers are installed...&lt;br&gt;Updating drivers for WUDF\Echo from WudfEchoDriver.inf.&lt;br&gt;devcon failed.&lt;br&gt;
&lt;p&gt;The first file that you can look at foir more information regarding the installation is %windir%\setupact.log. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 1: &lt;/b&gt;&lt;b&gt;SUCCESSFUL &lt;/b&gt;&lt;b&gt;INSTALLATION WITHOUT UPDATE&lt;/b&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;In the case of a succesful installation you should see something like:&lt;/p&gt;

&lt;p&gt;WudfUpdate: installing version (1,9,0,7100).&lt;br&gt;WudfUpdate: Checking for presence of previous UMDF installation.&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfrd.sys version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfpf.sys version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfhost.exe version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfsvc.dll version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfx.dll version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfplatform.dll version (1.9.0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfcoinstaller.dll version (1.9.0.7100)&lt;br&gt;WudfUpdate: UMDF installation is same as update.
WudfUpdate: Loading configuration coinstaller from D:\Windows\system32\wudfcoinstaller.dll.&lt;br&gt;WudfCoInstaller: ReadWdfSection: Checking WdfSection [Echo_Install.NT.Wdf]&lt;br&gt;WudfCoInstaller: Configuring UMDF Service&amp;nbsp; WUDFEchoDriver.&lt;br&gt;WudfCoInstaller: Service WudfSvc is already running.&lt;br&gt;WudfCoInstaller: Final status: error(0) The operation completed successfully.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;As you see in the above scenario, the coinstaller initially looks at the version of all the UMDF files that are installed in the system and does the following checks to determine, if an update is required:&lt;/p&gt;

&lt;p&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="PowerPoint.Slide"&gt;&lt;meta name="Generator" content="Microsoft PowerPoint 12"&gt;1) If max on-disk file version &amp;gt; co-installer -&amp;gt; NO UPDATE&lt;br&gt;2) If max on-disk file version == co-installer BUT mismatched versions found (or missing files)-&amp;gt; damaged installation -&amp;gt; UPDATE&lt;br&gt;3) If all on-disk file versions == co-installer AND&amp;gt;= 1 UMDF service cannot be opened (wudfsvc, wudfrd, wudfpf) -&amp;gt; UPDATE&lt;br&gt;4) If all on-disk file versions &amp;lt; co-installer -&amp;gt; UPDATE&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 2: &lt;/b&gt;&lt;b&gt;SUCCESSFUL &lt;/b&gt;&lt;b&gt;INSTALLATION WITH UPDATE&lt;/b&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;In the previous scenario we saw that no update was required. Let's see what happens, if an update is required:&lt;br&gt;&lt;/p&gt;

&lt;p&gt;WudfUpdate: installing version (1,9,0,7100).&lt;br&gt;WudfUpdate: Checking for presence of previous UMDF installation.&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfrd.sys version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfpf.sys version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfhost.exe version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfsvc.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfx.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfplatform.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfcoinstaller.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: UMDF installation is older than current.&lt;br&gt;WudfUpdate: Locating resource stream WUDF_UPDATE_VISTA-RTM.&lt;br&gt;WudfUpdate: unpacking update from resource to Microsoft User-Mode Driver Framework Install-v1.9-Vista.msu.&lt;br&gt;WudfUpdate: Temporary path is D:\Windows\Temp\WDF114A.tmp.&lt;br&gt;WudfUpdate: Invoking update "%SYSTEMROOT%\system32\wusa.exe" with command line "D:\Windows\Temp\WDF114A.tmp\Microsoft User-Mode Driver Framework Install-v1.9-Vista.msu /quiet /norestart".&lt;br&gt;WudfUpdate: Waiting for update to terminate.
WudfUpdate: Update process returned 3010.&lt;br&gt;WudfUpdate: WUDF version 1.9.0 () was installed succesfully, but requires a reboot.&lt;br&gt;WudfUpdate: Cleaning up update.&lt;br&gt;WudfUpdate: Requesting reboot to bring device online.&lt;br&gt;WudfUpdate: Installation will be restarted after reboot&amp;nbsp;&lt;/p&gt;

&lt;p&gt;In the above scenario, the coinstaller called the update package, which tried to update UMDF, however Windows Update determined that a reboot is required before the installation can continue. So, the installation stops and the user is prompted for reboot. After the reboot, the installation is restarted automatically in the background and we see the following output:&lt;/p&gt;

&lt;p&gt;WudfUpdate: installing version (1,9,0,7100).&lt;br&gt;WudfUpdate: Checking for presence of previous UMDF installation.&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfrd.sys version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfpf.sys version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfhost.exe version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfsvc.dll version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfx.dll version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfplatform.dll version (1.9,0.7100)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfcoinstaller.dll version (1.9,0.7100)&lt;br&gt;WudfUpdate: UMDF installation is newer than update.&lt;br&gt;WudfUpdate: Loading configuration coinstaller from D:\Windows\system32\wudfcoinstaller.dll.&lt;br&gt;WudfCoInstaller: ReadWdfSection: Checking WdfSection [Echo_Install.NT.Wdf]&lt;br&gt;WudfCoInstaller: UMDF Service UMDFSkeleton is already installed - removing existing settings in preparation for setting new ones.&lt;br&gt;WudfCoInstaller: Configuring UMDF Service WUDFEchoDriver.&lt;br&gt;WudfCoInstaller: Using "Vista" service configuration&lt;br&gt;WudfCoInstaller: Service WudfSvc is already running.&lt;br&gt;WudfCoInstaller: Final status: error(0) The operation completed successfully.&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;NOTE&lt;/b&gt;&lt;/u&gt;: If the coinstaller determines that a system needs to be updated, then it will always prompt the user for reboot in the end. On the other hand, the KMDF coinstaller makes independent decisions about the reboot and the update (more information in the part that is discussing the KMDF coinstaller).&lt;br&gt;&lt;br&gt;&lt;b&gt;SCENARIO 3: UNSUCCESSFUL INSTALLATION&lt;/b&gt; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;If there is an error, you will see a message that says something similar to:&lt;/p&gt;

&lt;p&gt;WudfUpdate: installing version (1,9,0,7100).&lt;br&gt;WudfUpdate: Checking for presence of previous UMDF installation.&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfrd.sys version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\drivers\wudfpf.sys version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfhost.exe version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfsvc.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfx.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfplatform.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: Found binary %WINDIR%\system32\wudfcoinstaller.dll version (1.5.0.6000)&lt;br&gt;WudfUpdate: UMDF installation is older than current.&lt;br&gt;WudfUpdate: Locating resource stream WUDF_UPDATE_VISTA-RTM.&lt;br&gt;WudfUpdate: unpacking update from resource to Microsoft User-Mode Driver Framework Install-v1.9-Vista.msu.&lt;br&gt;WudfUpdate: Temporary path is D:\Windows\Temp\WDF7625.tmp.&lt;br&gt;WudfUpdate: Invoking update "%SYSTEMROOT%\system32\wusa.exe" with command line "D:\Windows\Temp\WDF7625.tmp\Microsoft User-Mode Driver Framework Install-v1.9-Vista.msu /quiet /norestart".&lt;br&gt;WudfUpdate: Waiting for update to terminate.&lt;br&gt;WudfUpdate: Update process returned 22.&lt;br&gt;WudfUpdate: update returned error 0x16 - error(22) The device does not recognize the command.&lt;br&gt;&lt;u&gt;WudfUpdate: For additional information please look at the log files %windir%\windowsupdate.log and %windir%\Logs\CBS\CBS.log&lt;/u&gt;&lt;br&gt;WudfUpdate: Cleaning up update.&lt;br&gt;WudfUpdate: Error updating UMDF - error(22) The device does not recognize the command. Aborting installation.&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;As the message says, in order to understand the cause of the error, you can look at the files %windir%\windowsupdate.log and %windir%\logs\cbs\cbs.log. The UMDF 1.7 coinstaller incorrectly prints the 2nd log file as %windir%\cbs\logs\cbs.log, but that has been fixed in the UMDF 1.9 coinstaller. In order to find more information about how to read windowsupdate.log, you can look at &lt;a href="http://support.microsoft.com/kb/902093" mce_href="http://support.microsoft.com/kb/902093"&gt;http://support.microsoft.com/kb/902093&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;In a Windows XP system, the previous line says &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;WudfUpdate: For additional information please look at the log file %windir%\temp\wudf_update.log&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;So, either the reason of the error will be shown in setupact.log or in this file you'll find pointers about which file to look at. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;WALKTHROUGH OF UMDF COINSTALLER ACTIONS:&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;The UMDF coinstaller handles only the DIF_INSTALLDEVICE code and performs the following steps:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;PREDEVICE INSTALL phase&lt;/u&gt; &lt;br&gt;&lt;/p&gt;

&lt;ol&gt;&lt;/ol&gt;

&lt;p&gt;1) Check for supported OS version (XP SP2+, 2003 SP1+, Vista RTM+, 2008, Windows 7 or newer)&lt;br&gt;2) Check status of current installation:&lt;br&gt;a) Read version information for all UMDF binaries&lt;br&gt;b) If max on-disk file version &amp;gt; co-installer -&amp;gt; NO UPDATE&lt;br&gt;c) If max on-disk file version == co-installer BUT mismatched versions found (or missing files)-&amp;gt; damaged installation -&amp;gt; UPDATE&lt;br&gt;d) If all on-disk file versions == co-installer AND&amp;gt;= 1 UMDF service cannot be opened (wudfsvc, wudfrd, wudfpf) -&amp;gt; UPDATE&lt;br&gt;e) If all on-disk file versions &amp;lt; co-installer -&amp;gt; UPDATE&lt;br&gt;3) Extract MSU or update.exe package to temporary folder&lt;br&gt;4) Call MSU or update.exe package to update system&lt;br&gt;5) The update package creates marker file for the framework (e.g. %windir%\system32\drivers\MsftWdf_user_01_09_00.Wdf)&lt;br&gt;a) Possible that the update package asks for reboot, because files were marked for replacement after reboot&lt;br&gt;b) If reboot is needed, then the installation stops and will be restarted after&#xB;the reboot&lt;br&gt;6) Load the UMDF 1.9 config co-installer (%windir%\system32\wudfcoinstaller.dll)&lt;br&gt;7) Parse and validate INF (DDInstall.WDF section)&lt;br&gt;8) Create UMDF registry keys based on INF: impersonation level, kernel-mode client support, I/O dispatcher, host timeout, etc.&lt;br&gt;9) Start UMDF Device Manager (wudfsvc)&lt;br&gt;&lt;/p&gt;

&lt;p&gt;The PNP manager proceeds with installation (file copy, registry entries, etc.)&lt;/p&gt;

&lt;p&gt;&lt;u&gt;POSTDEVICE INSTALL phase&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;1) UMDF config co-installer creates marker file for the driver (e.g. %windir%\system32\drivers\Msft_User_WUDFEchoDriver_01_09_00.Wdf)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;PART 2: KMDF&lt;/b&gt;&lt;/u&gt; &lt;/p&gt;

&lt;p&gt;First of all we need to compile the echo sample and put the following files in the same directory:&lt;/p&gt;

&lt;p&gt;Now it's time for KMDF. In order to install the KMDF you need to create a directory with the following files:&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The KMDF coinstaller (%WinDDK%\%version%\redist\wdf\x86\WdfCoInstaller0100X.dll), where X is 7 or 9&lt;br&gt;&lt;/li&gt;

&lt;li&gt;The echo driver (echo.sys)&lt;/li&gt;

&lt;li&gt;The inf file (echo.inf)&lt;/li&gt;

&lt;li&gt;devcon.exe (%WinDDK%\%version%\tools\devcon\i386\devcon.exe)&lt;/li&gt;

&lt;li&gt;The
pdb file of the driver
(echo.pdb). This is
not mandatory, but it might be helpful to debug the driver.&lt;/li&gt;
&lt;/ul&gt;
In order to install the driver you can open a command prompt and type&lt;br&gt;devcon install ECHO.inf root\ECHO&lt;br&gt;&lt;br&gt;If everything goes well, you should see the following output:&lt;br&gt;&lt;br&gt;&amp;gt;devcon install echo.inf root\Echo&lt;br&gt;Device node created. Install is complete when drivers are installed...&lt;br&gt;Updating drivers for root\Echo from echo.inf.&lt;br&gt;Drivers installed successfully.&lt;br&gt;&lt;br&gt;If there's a problem, then you'll see something like:&lt;br&gt;&lt;br&gt;&amp;gt;devcon install echo.inf root\Echo&lt;br&gt;Device node created. Install is complete when drivers are installed...&lt;br&gt;Updating drivers for root\Echo from echo.inf.&lt;br&gt;devcon failed.
&lt;p&gt;The first file that you can look at foir more information regarding the installation is %windir%\setupact.log. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 1: &lt;/b&gt;&lt;b&gt;SUCCESSFUL &lt;/b&gt;&lt;b&gt;INSTALLATION WITHOUT UPDATE OR REBOOT&lt;br&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Pre-Processing&lt;br&gt;WdfCoInstaller: ReadComponents:&amp;nbsp; WdfSection for Driver Service ECHO using KMDF lib version Major 0x1, minor 0x9 &lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Coinstaller version: 1.9.7100&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF in-memory version: 1.9.7100&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF on-disk version: 1.9.7100&lt;br&gt;WdfCoInstaller: Service Wdf01000 is running&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Update is not required. The on-disk KMDF version is newer than or same as the version of the coinstaller&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Post-Processing&lt;br&gt;&lt;/p&gt;

&lt;p&gt;In the above scenario we see that no update was necessary, because on-disk and in-memory we have KMDF 1.9 and this version is the same as the version of the coinstaller. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 2: SUCCESSFUL INSTALLATION WITH UPDATE AND REBOOT&lt;br&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Pre-Processing &lt;br&gt;
WdfCoInstaller: ReadComponents:&amp;nbsp; WdfSection for Driver Service ECHO using KMDF lib version Major 0x1, minor 0x9 &lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Coinstaller version: 1.9.7100&lt;br&gt;WdfCoInstaller: GetInMemoryVersionUlong: No information about in-memory KMDF version&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF in-memory version: 0.0.0&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF on-disk version: 1.5.6000&lt;br&gt;WdfCoInstaller: Service Wdf01000 is running&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Reboot is required, so that the newer KMDF version will be loaded to memory&lt;br&gt;WdfCoInstaller: VerifyMSRoot: exit: error(0) The operation completed successfully.&lt;br&gt;WdfCoInstaller: Invoking "D:\Windows\system32\wusa.exe "D:\Windows\Temp\WdfTemp\Microsoft Kernel-Mode Driver Framework Install-v1.9-Vista.msu" /quiet /norestart".&lt;br&gt;WdfCoInstaller: Update process returned error code 0 :error(0) The operation completed successfully.&lt;br&gt;WdfCoInstaller: InstallComponents: KMDF installed successfully&lt;br&gt;WdfCoInstaller: InstallComponents: Reboot needed by windows update&lt;br&gt;WdfCoInstaller: ReadComponents:&amp;nbsp; WdfSection for Driver Service Echo using KMDF lib version Major 0x1, minor 0x9 &lt;br&gt;&lt;/p&gt;

&lt;p&gt;In this scenario we see that on-disk we have KMDF 1.5, but we have no information about the in-memory version of KMDF. We implemented the functionality for the detection of the in-memory KMDF version in KMDF 1.7, so version 0.0.0 means that KMDF 1.5 (or older) is running.&lt;/p&gt;

&lt;p&gt;So, the system needs to be updated (in order to put KMDF 1.9 on the disk) and rebooted (in order to bring KMDF 1.9 in memory). &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 3: SUCCESSFUL INSTALLATION WITH REBOOT, BUT NO UPDATE&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;WdfCoInstaller: ReadComponents:&amp;nbsp; WdfSection for Driver Service ECHO using KMDF lib version Major 0x1, minor 0x9&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Coinstaller version: 1.9.7100&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF in-memory version: 1.7.6000&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF on-disk version: 1.9.7100&lt;br&gt;WdfCoInstaller: Service Wdf01000 is running&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Reboot is required, because the in-memory KMDF version is older than the coinstaller's version.&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Update is not required. The on-disk KMDF version is newer than or same as the version of the coinstaller&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Here we see that on disk we have KMDF 1.9, but in memory we still have KMDF 1.7. So, we don't need to update the system, but we need to reboot (in order to bring KMDF 1.9 in memory).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;NOTE 1:&lt;/u&gt;&lt;/b&gt; &lt;u&gt;It is also possible to need to update the system (if an older version of KMDF is installed), without the need to reboot (if no KMDF driver is currently running).&lt;/u&gt; Generally, the reason for the reboot is that a KMDF driver is running and therefore we cannot replace the in-memory KMDF version without a reboot. On the other hand, the UMDF coinstaller will always prompt for reboot, if it determines that an update is required (this happens because the kernel-mode files are memory-mapped, so they can be replaced without a need for reboot, however for user-mode files the memory manage keeps an open handle to them, so they cannot be updated without a reboot).&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;NOTE 2:&lt;/u&gt;&lt;/b&gt; A big difference between UMDF and KMDF is that the UMDF installation is restarted after the reboot, whereas the &lt;u&gt;KMDF one has already finished, when the user is prompted to reboot the system. &lt;/u&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;SCENARIO 4: UNSUCCESSFUL INSTALLATION WITH UPDATE AND REBOOT&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;WdfCoInstaller: ReadComponents:&amp;nbsp; WdfSection for Driver Service ECHO using KMDF lib version Major 0x1, minor 0x9&amp;nbsp; &lt;br&gt;
WdfCoInstaller: DIF_INSTALLDEVICE: Coinstaller version: 1.9.7100&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF in-memory version: 1.7.6000&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: KMDF on-disk version: 1.7.6000&lt;br&gt;WdfCoInstaller: Service Wdf01000 is running&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Reboot is required, because the in-memory KMDF version is older than the coinstaller's version.&lt;br&gt;WdfCoInstaller: DIF_INSTALLDEVICE: Update is required, because the on-disk KMDF version is older than the coinstaller&lt;br&gt;WdfCoInstaller: VerifyMSRoot: exit: error(0) The operation completed successfully.&lt;br&gt;WdfCoInstaller: Invoking "D:\Windows\system32\wusa.exe "D:\Windows\Temp\WdfTemp\Microsoft Kernel-Mode Driver Framework Install-v1.9-Vista.msu" /quiet /norestart".&lt;br&gt;WdfCoInstaller: The update process returned error code :error(265) &amp;lt;no error text&amp;gt;. &lt;br&gt;&lt;u&gt;WdfCoInstaller: For additional information please look at the log files %windir%\windowsupdate.log and %windir%\Logs\CBS\CBS.log&lt;/u&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;In this scenario, the coinstaller points to the log files, where you can find more information regarding the reason of the failure. In Windows 2000 or XP, the underlined line would be:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;WdfCoInstaller: For additional information please look at the log file &lt;/u&gt;&lt;u&gt;%windir%\Wdf01007Inst.log&lt;/u&gt; (for the KMDF 1.7 coinstaller) or&lt;/p&gt;&lt;p&gt;&lt;u&gt;WdfCoInstaller: For additional information please look at the log file &lt;/u&gt;&lt;u&gt;%windir%\Wdf01009Inst.log&lt;/u&gt; (for the KMDF 1.9 coinstaller)&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;WALKTHROUGH OF KMDF COINSTALLER ACTIONS:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The UMDF coinstaller handles only the DIF_INSTALLDEVICE code and performs the following steps:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;PHASE 1: Pre-device installation&lt;/u&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;1) Check for supported OS version (Windows 2000 or higher is supported)&lt;br&gt;2) Find KmdfLibraryVersion in INF and check if it is supported (major version has to be equal to the major version of the coinstaller)&lt;br&gt;3) Check if system needs to be updated (Vista SP1/2008 or lower)&lt;br&gt;a) On-disk version of wdf01000.sys &amp;lt; co-installer version OR&lt;br&gt;b) On-disk version of wdf01000.sys == co-installer version AND damaged installation (ARP registry entry missing OR KMDF service cannot be opened using SCM APIs)&lt;br&gt;4) Check if reboot is required:&lt;br&gt;a) KMDF service is running AND&lt;br&gt;b) KMDF in-memory &amp;lt; co-installer version
5) Extract WDFCAB_RESOURCE to temporary folder&lt;br&gt;6) Call MSU or update.exe package to update system&lt;br&gt;a) It's possible that the update package asks for reboot, because files were marked for replacement after reboot&lt;br&gt;7) Create marker file for the framework (e.g. %windir%\system32\drivers\MsftWdf_Kernel_01009_Coinstaller_Critical.Wdf)&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;PHASE 2: PNP manager&lt;/u&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;The PNP manager proceeds with the installation (file copy, registry entries, etc.)&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;PHASE 3: Post-device installation&lt;/u&gt;&lt;/p&gt;&lt;p&gt;1) If driver is marked as bootstart, then KMDF service is set to bootstart&lt;br&gt;2) Create marker file for the driver (e.g. %windir%\system32\drivers\Msft_Kernel_WdfRamdisk_01009.Wdf)&lt;br&gt;3) If reboot is required, then the PNP manager prompts the user&#xB; for reboot&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;PART 3: Additional resources&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/iliast/archive/2007/11/28/analyzing-the-installation-of-umdf-and-kmdf-1-5-drivers.aspx" mce_href="http://blogs.msdn.com/iliast/archive/2007/11/28/analyzing-the-installation-of-umdf-and-kmdf-1-5-drivers.aspx"&gt;Analyzing the installation of UMDF and KMDF 1.5 drivers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx" mce_href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx"&gt;WinHEC 2008 presentation: Packaging, Logo, And Deployment of Windows Driver Frameworks Drivers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/iliast/archive/2009/03/18/how-to-install-wdf-drivers.aspx" mce_href="http://blogs.msdn.com/iliast/archive/2009/03/18/how-to-install-wdf-drivers.aspx"&gt;How to install WDF Drivers (Quick-Start)&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9717811" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>How to install WDF drivers (Quick-Start)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/03/18/how-to-install-wdf-drivers.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/03/18/how-to-install-wdf-drivers.aspx</id><published>2009-03-19T00:23:00Z</published><updated>2009-03-19T00:23:00Z</updated><content type="html">&lt;p&gt;This post is a small quick-start on how to install WDF drivers.

&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Part 1: Installing a UMDF driver&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;You can start with the echo sample, which is located at %WinDDK%\6001.18002\src\umdf\echo. &lt;/p&gt;&lt;p&gt;First, you need to do a bcz in that directory. In your output directory you should see the following files:&lt;/p&gt;&lt;p&gt;1) WudfEchoDriver.dll: This is the UMDF echo driver&lt;/p&gt;&lt;p&gt;2) WudfEchoDriver.inf: This is your inf&lt;/p&gt;&lt;p&gt;3) WudfEchoDriver.pdb: This is the pdb of your driver &lt;br&gt;&lt;/p&gt;&lt;p&gt;
Copy these 3 files (the pdb is not needed actually, but it might help you in debugging) to a separate directory (e.g. c:\umdfdriver), together with:&lt;/p&gt;&lt;p&gt;4) devcon.exe: This is used to install the driver. You can find it at %WinDDK%\6001.18002\tools\devcon\&lt;arch&gt;devcon.exe
&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;5) WUDFUpdate_01007.dll: This is the coinstaller that will update your system to the correct version of UMDF You can find it at %WinDDK%\6001.18002\redist\wdf&lt;arch&gt;\WUDFUpdate_01007.dll
&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;&lt;arch&gt;
After you put all these 5 files in the same directory (make sure that the architecture for all these files matches the architecture of your system, i.e. use x86, if you have 32-bit windows, amd64 if you have 64-bit), you can install the driver by executing (from an elevated command prompt):
&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;arch&gt;&lt;arch&gt;devcon install WudfEchoDriver.inf WUDF\Echo&lt;/arch&gt;&lt;/arch&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;&lt;arch&gt;

After the installation succeeds, you can go to the device manager and see a driver with the name "Sample WUDF Echo Driver". This is your UMDF driver that is running. If you look at the task manager, you will see an application with the name wudfhost.exe running. This is the exe that loads your driver (i.e. the dll).&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;arch&gt;&lt;arch&gt;In order to test the driver, you can compile the application at %WinDDK%\6001.18002\src\kmdf\echo\exe and then run it. If you see success messages, it means that your driver is working correctly. You can look at the sources of the echo driver (possibly it might be easier for you to look at the sources of the UMDF skeleton driver, which is located at %WinDDK%\6001.18002\src\umdf\skeleton, because it is simpler) to understand how the driver is structured. &lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Part 2: Installing a KMDF driver&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Again, let's start with the echo sample, which is located at %WinDDK%\6001.18002\src\kmdf\echo\sys. &lt;/p&gt;&lt;p&gt;First, you need to do a bcz in that directory. In your output directory you should see the following files:&lt;/p&gt;&lt;p&gt;1) echo.sys: This is the KMDF echo driver&lt;/p&gt;&lt;p&gt;2) echo.inf: This is your inf&lt;/p&gt;&lt;p&gt;3) echo.pdb: This is the pdb of your driver &lt;br&gt;
&lt;/p&gt;&lt;p&gt;Copy these 3 files (the pdb is not needed actually, but it might
help you in debugging) to a separate directory (e.g. c:\kmdfdriver),
together with:&lt;/p&gt;&lt;p&gt;4) devcon.exe: This is used to install the driver. You can find it at %WinDDK%\6001.18002\tools\devcon\&lt;arch&gt;devcon.exe
&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;5) WdfCoinstaller01007.dll: This is the coinstaller
that will update your system to the correct version of KMDF You can
find it at %WinDDK%\6001.18002\redist\wdf\&lt;arch&gt;WdfCoinstaller01007.dll
&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;&lt;arch&gt;
After you put all these 5 files in the same directory (make sure that
the architecture for all these files matches the architecture of your
system, i.e. use x86, if you have 32-bit windows, amd64 if you have
64-bit), you can install the driver by executing (from an elevated
command prompt):
&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;arch&gt;&lt;arch&gt;devcon install echo.inf root\ECHO&lt;br&gt;&lt;/arch&gt;&lt;/arch&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;&lt;arch&gt;After
the installation succeeds, you can go to the device manager and see a
driver with the name "Sample WDF ECHO Driver". This is your KMDF
echo driver that is running&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;arch&gt;&lt;arch&gt;In
order to test the driver, you can use the same application as for the UMDF driver (echoapp), which is located at %WinDDK%\6001.18002\src\kmdf\echo\exe and then run it. If you see
success messages, it means that your driver is working correctly.&lt;/arch&gt;&lt;/arch&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;NOTE:&amp;nbsp;&lt;/b&gt; Since both the KMDF and UMDF echo driver as identical from echoapp's perspective, it would be good for you to have only one of the two installed, if you want to make sure that everything worked successfully.&lt;br&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9488159" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>The WDF team needs your help in ensuring compatibility</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2009/02/12/the-wdf-team-needs-your-help-in-ensuring-compatibility.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2009/02/12/the-wdf-team-needs-your-help-in-ensuring-compatibility.aspx</id><published>2009-02-12T22:03:00Z</published><updated>2009-02-12T22:03:00Z</updated><content type="html">&lt;font face="Verdana" size="2"&gt;You might know that the Windows Driver
Framework team is working on the next version of WDF, version 1.9, and
planning to release it with Windows 7.
&lt;br&gt;
&lt;br&gt;Windows 7 will have this new version of framework built in.
However, we will also provide a redistributable coinstaller so that you
can install this framework on downlevel operating system with latest
service packs. We have added several new features to:
&lt;br&gt;
a) Further simplify driver development. &lt;br&gt;
b) Make it easier to debug &amp;amp; diagnose failures during development and also in the field after deployment.
&lt;br&gt;
c) Reduce CPU utilization and memory footprint. &lt;br&gt;
d) Enable the use of the framework in certain new technologies. &lt;br&gt;
e) Fixed numerous bugs to harden the framework to handle edge conditions - in particular run down scenarios.
&lt;br&gt;
&lt;br&gt;So we have put in lot of effort to make driver and driver writing
experience better. The presentation "What's new in WDF 1.9" that we
gave in WinHEC 2008 (&lt;/font&gt;&lt;a href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2fE%2f6%2f5E66B27B-988B-4F50-AF3A-C2FF1E62180F%2fCOR-T546_WH08.pptx" mce_href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2fE%2f6%2f5E66B27B-988B-4F50-AF3A-C2FF1E62180F%2fCOR-T546_WH08.pptx" class="x_WNAnc" target="_blank"&gt;&lt;font face="Verdana" size="2"&gt;http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T546_WH08.pptx&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt;)
 has more details on the work we did. &lt;br&gt;
&lt;br&gt;&lt;b&gt;
How can you help us? &lt;/b&gt;&lt;br&gt;
&lt;br&gt;
Based on our telemetry, we know there is a large number (over 1000) of
framework drivers of all versions (1.1, 1.5, 1.7) written and released
to
public. In order to make sure that these drivers continue to work
on Windows 7, and even on downlevel OSes - if a new device brings in
the latest
framework - we request you to test your drivers with framework version
1.9 and make sure it's fully functional. We have put an extraordinary
effort to maintain compatibility but when you have such a large
eco-system, we will not be able to cover every possible scenario.
&lt;br&gt;
&lt;br&gt;We made a very successful transition from 1.5 to 1.7 with
absolutely no compatibility issues and we would like to ensure that we
repeat that success and keep you all happy.
&lt;br&gt;
&lt;br&gt;So please take some time and try out the new version. You can get
the 1.9 version from Windows 7 beta WDK. Information on how to get the
WDK is given on this page
&lt;/font&gt;&lt;a href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fwhdc%2fDevTools%2fWDK%2fWDKbeta.mspx" mce_href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fwhdc%2fDevTools%2fWDK%2fWDKbeta.mspx" class="x_WNAnc" target="_blank"&gt;&lt;font face="Verdana" size="2"&gt;http://www.microsoft.com/whdc/DevTools/WDK/WDKbeta.mspx&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt;.
&lt;br&gt;
&lt;br&gt;We are also putting together a small lab with some devices to do
compatibility testing on our own. We are in need of more devices that
use
framework drivers. So if you have released a device that we can
buy from a store and use it in our lab, please send me the description.
&lt;br&gt;
&lt;br&gt;
You can post your feedback here or email to (&lt;a href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=mailto%3awdfinfo%40discussion.microsoft.com" mce_href="https://mail.microsoft.com/OWA/redir.aspx?C=ccd43f379eea444faee3e136d5ee4b61&amp;amp;URL=mailto%3awdfinfo%40discussion.microsoft.com"&gt;wdfinfo@discussion.microsoft.com&lt;/a&gt;). Remove the word 'discussion' from the email
address. &lt;br&gt;
&lt;br&gt;
Thank you,&amp;nbsp;&lt;br&gt;
On behalf of the WDF team - Microsoft&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9415479" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry><entry><title>WinHEC 2008 Presentations</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/iliast/archive/2008/11/21/winhec-2008-presentations.aspx" /><id>http://blogs.msdn.com/b/iliast/archive/2008/11/21/winhec-2008-presentations.aspx</id><published>2008-11-22T04:28:00Z</published><updated>2008-11-22T04:28:00Z</updated><content type="html">As many of you know, &lt;a href="http://www.microsoft.com/whdc/winhec/default.mspx" mce_href="http://www.microsoft.com/whdc/winhec/default.mspx"&gt;WinHEC 2008&lt;/a&gt; took place in Los Angeles, at the beginning of this month. I gave a presentation in the conference with&lt;a href="http://blogs.msdn.com/bobkjelgaard/" mce_href="http://blogs.msdn.com/bobkjelgaard/"&gt; Bob Kjelgaard&lt;/a&gt; about the WDF coinstallers and WDF logo requirements. This presentation includes a step-by-step walkthrough of the execution of the coinstallers, their contents, the methodology that we are using in order to debug WDF installation failures, as well as the tests that WDF drivers need to pass, in order to be logo-ed. This presentation can be found &lt;a href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx" mce_href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/COR-T593_WH08.pptx"&gt;here&lt;/a&gt;. The list with all the presentations in WinHEC 2008 can be found &lt;a href="http://www.microsoft.com/whdc/winhec/2008/pres.mspx" mce_href="http://www.microsoft.com/whdc/winhec/2008/pres.mspx"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9132483" width="1" height="1"&gt;</content><author><name>iliast</name><uri>http://blogs.msdn.com/iliast/ProfileUrlRedirect.ashx</uri></author><category term="UMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/UMDF/" /><category term="KMDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/KMDF/" /><category term="WDF" scheme="http://blogs.msdn.com/b/iliast/archive/tags/WDF/" /></entry></feed>