Last Friday (12/7/2007) we completed the final build for the Windows Server 2008 RC1 WDK (you can find it here), which includes WDF 1.7 RC1 (both UMDF 1.7 and KMDF 1.7). Beware, though, that this is just the WDF RC1 version and not the RTM one, so you can use it for development and testing, but not to ship it with commercial drivers. I know that everybody in my team is really happy about it, since now KMDF and UMDF are available for many more platforms. KMDF 1.7 supports 2000 Service Pack 4, XP, Server 2003, Vista and Server 2008. UMDF supports XP Service Pack 2, Server 2003, Vista and Server 2008. This is something that we've been asked for many times.
Here's a table, which shows which versions of Windows are supported by each version of WDF:
|Version||Framework||Windows 2000 SP4||Windows XP SP2||Windows Server 2003 SP1||Windows Vista||Windows Server 2008||Release Date|
|UMDF||Yes||Oct 2006 (with WMP 11)|
|1.5||KMDF||Yes||Yes||Yes||Yes||Nov 2006 (with Windows Vista)|
|1.7||KMDF||Yes||Yes||Yes||Yes (SP1)||Yes||With Windows Server 2008|
What's new with WDF 1.7? Let's start with UMDF:
- Bug fixing in many critical areas (power management. more stable reflector, driver impersonation, hardening against all sorts of errors, etc): Lots of background work to make this version more secure and robust.
- Sample updates: New socket echo driver (uses ATL), Idle and Wake support in Fx2 sample driver, additional Fx2 driver that uses impersonation and shows how to cancel synchronous requests, hybrid sample that uses winusb, etc.
- New debugger extensions to dump I/O target, USB and File objects.
Now for KMDF:
- New wait-wake policy between parent and children
- New samples: PCMCIA smartcard reader, HID minidriver, NDIS 6.0, bluetooth
- New tools: DDI fault injection tester, driver call tracer
- Lots of bug fixing in key areas
New tool: WdfVerifier
- GUI tool that manages:
- KMDF verifier settings
- UMDF debug/trace and other global settings
- Makes it easier to hook debuggers to UMDF drivers
- Works on all versions of UMDF and KMDF
- Takes care of niceties like KMDF loader spew, flips DbgPrint on and off, if the OS suppresses it, etc
What's changed in the coinstallers?
- Support for all these operating systems! From version 1.7, the coinstaller supports many more operating systems. Also, the way that we update the frameworks in Vista (and later) is very different than what was happening pre-Vista. We managed to overcome lots of issues in this journey.
- File size is kept low: Both coinstallers were modified to use as few update packages as possible (e.g. KMDF uses one package for 2k, XP, 2k3, instead of 3). This decreased the total size of the coinstaller by a lot (the KMDF coinstaller was decreased by 50%!).
- In the previous versions of WDF, many times a user would install a driver without any problem and the driver would be shown in the device manager with a "!". After reboot everything would "magically" be solved. Now we've changed the way that the coinstallers determine, if a reboot is needed (and prompt the user accordingly, instead of being silent) and when an update is necessary.
- Now we have lots more debugging information in %windir%\setupact.log. As I wrote in my previous post, setupact.log is the main logging file for the coinstaller. Now the information is more verbose and in case of an error, there's information that tells a user which additional files to look at. (this also means that I need to write a post about the logging information of the WDF 1.7 coinstallers)
- While fixing all the above, we fixed several bugs in the coinstallers (parsing infs, solving edge cases to help external companies, etc). As far as we know, many of the issues that we've been informed about, have now been fixed. So, please if there are any new issues that you see with the new coinstallers please tell us either by contacting me, or Bob, or the alias email@example.com or any of the above blogs for WDF and KMDF that I've mentioned.
Warning: "Ops" we did it (hopefully not again) for ia64
We'd like to warn all the ia64 WDF developers that there are a few "small" problems with the ia64 coinstallers. Unfortunately, we discovered them too late and we didn't have time to fix them for RC1 (as I wrote above, the Windows Server 2008 RC1 WDK deadline had arrived). Currently, these errors have been fixed and won't exist in RTM:
- The ia64 KMDF and UMDF fre coinstallers install chk KMDF/UMDF files and the opposite (i.e. the chk coinstallers install fre files). If this doesn't bother you, then no problem (i.e. you can test your drivers regardless of whether UMDF/KMDF is fre or chk. Just keep in mind that in some cases you might see some asserts in the chk versions). However, if you're using WDF in ia64 and want to use fre files you'll have to use the workaround that's described in Bob's post. This means that you'll have to install the chk files using the fre coinstaller and then extract the fre files from the chk coinstaller. This was caused by an error in the scripts of the build lab.
- UMDF doesn't install in ia64 Windows Server 2008 (it works fine in all other ia64 versions of Windows). The UMDF coinstaller checks if the WudfPf service is installed. If it isn't, then it tries to update the framework, however it fails to do so and the installation stops. This is because of a bug in the actual coinstaller (the check for WudfPf should not be there). So, if you want to bypass this issue just use "sc create" to create a fake WudfPf service (it would be nice to make it point to the binary at %windir%\system32\drivers\wudfpd.sys, however apart from that, you can use any arguments that you like). After creating the fake WudfPf service, UMDF should install in ia64 Windows Server 2008 without any problem.
The WDF 1.7 team
The above is just a high-level summary of the coinstaller changes. There were many changes under the covers, lots of testing and hopefully everything will work smoother than before. I know that Bob had a blast testing them all these months 😛 I also know how much our Test Lead, Shefali, and my manager, Eliyas, had to fight the last couple of months in the War room, so that we can have as many bugs fixed as possible before the Windows Server 2008 deadline. Also, I've lost count of how many times I've gone to Peter and Vishal asking them about the coinstaller internals (for UMDF andf KMDF respectively). And Patrick, who loves to walk in front of my office and stare at me weirdly at random moments for no apparent reason (I don't know why he's doing that... send him an email and ask him 🙂 ). Of course there are more people, who contributed to WDF 1.7. Our devs: Praveen, Abhishek (together with Peter they're the 3 UMDF gurus... or the Three Musketeers of UMDF... ok I just made up the last one, however it sounds so cool!), Egidio (he's a human quality gate... if your code passes his code review, then it has to be good!), Guru (unfortunately for the team, he's decided to switch jobs. Good luck with your new position!) and Kumar (who just moved from the test team to the dev team. Welcome!). Our amazing test team: Shyamal (for UMDF) and Ravi (for KMDF). Our PMs: Jeff and Rob (now it's a good time to bust a long-living myth... NO! PM doesn't stand for "Provider of Meals"! They're doing an excellent job in WDF! 🙂 ). Yeah, we've had lots of fun during this period. I love my team 🙂
- Test your drivers with UMDF and KMDF 1.7 on all supported versions of Windows and let us know about any potential problems
- Write new drivers using UMDF and KMDF 1.7 or tell us what's preventing you from doing that
- Start using the new samples and debugging tools
- Inform us about any issues that you find:
- Doron Holan's blog (writes emails, blog posts and newsgroup posts faster than a speeding bullet... if Superman was a driver developer, then he would do all the above things slower than Doron)
- Peter Wieland's blog (really cool guy... has correct answers for everything 🙂 )
- Patman's blog (he is sooooooooooo jealous of Batman for choosing that nickname first :P)
- Bob Kjelgaard's blog (the first car, which arrives at MS eaaaaaaaaaaaaarly in the morning has to be his... Sometimes he's going to work at the same time that I'm going to sleep 🙂 )
- My blog (I couldn't resist having it in the list 🙂 )