Driver Tips: What Every Driver Writer Needs to Know

Driver Tips offers succinct information about essential techniques, tools, and best practices for writing drivers for released versions of Windows, with steps to follow and links to more information.

Recent Driver Tips:
White PaperHow to Enable the Frameworks Verifier
White PaperHow to Use the KMDF Log
White PaperTroubleshooting KMDF Driver Installation
White PaperWhen does EvtCleanupCallback run?

KMDF Tips
White PaperHow to Enable the Frameworks Verifier
White PaperHow to Use the KMDF Log
White PaperIs That Handle Still Valid?
White PaperTroubleshooting KMDF Driver Installation
White PaperWhen does EvtCleanupCallback run?
Microsoft.comHow to View the KMDF Log for Your Driver

Memory Management Driver Tips
White PaperCommon-buffer DMA? No translation required!
White PaperHow do I keep my driver from running out of kernel-mode stack?
White PaperSix Tips for Efficient Memory Use
White PaperWhat does MmProbeAndLockPages actually lock?
White PaperWhat Is Really in That MDL?
White PaperWhere did all that contiguous memory come from?
White PaperWho's Using the Pool?

I/O Request Driver Tips
White PaperGetting your driver to handle more than one I/O request at a time
White PaperI/O cancellation: when does it matter?
White PaperMy device is gone. Why am I still getting IRPs?
White PaperQueuing a work item: Once is enough!
White PaperToo long, too short, or just right? Buffer size matters
White PaperWhat does DO_DEVICE_INITIALIZING really do?

Plug and Play and Power Management Driver Tips
White PaperHello, user mode? Plug and Play calling
White PaperSurprise! Your device is gone. What should your driver do?
White PaperWhen WDF Drivers Can Use Power-Managed I/O Queues

Driver Design Tips
White PaperFrom Sample Code to Production Driver: What to Change in the Sample  
White PaperNo time to write a bus driver? Try using a device object namespace
White PaperWriting kernel-mode drivers in C++: should you or shouldn't you?

Synchronization Driver Tips:
White PaperOne at a time! Protecting shared data from concurrent routines
White PaperSummary of Windows Synchronization Primitives

Security and Reliability Driver Tips
White PaperCustom Power Settings for Signed Drivers  
White PaperHelp prevent buffer overruns in your driver! Use safe string functions
White PaperHow safe is your device namespace?
White PaperHow to Release-Sign File System Drivers  
White PaperIOCTLs with FILE_ANY_ACCESS: safe or sorry?
White PaperOf course it's a valid handle! (Or is it?)

Building, Testing, and Debugging Tips
White PaperCalling a DLL in a Kernel-Mode Driver
White PaperDebugging Windows Vista
White PaperDriver won't load on Windows 2000? VER_SET_CONDITION may be the culprit
White PaperHow do I keep the debugger from looking for symbols I don't need?
White PaperHow much time is your driver spending in its DPCs and ISRs?
White PaperHow to Use Function typedefs in C++ Driver Code to Improve PREfast Results
White PaperInstalling Test Builds of Inbox Drivers on Windows Vista
White PaperTesting for Errors in Accessing and Allocating Memory
White PaperTrack down hard-to-find bugs in driver source code with PREfast

Resources
White PaperWDK Documentation Download
WHDC Portal/NodalDriver Developer Community Resources
WHDC Portal/NodalDriver Signing Requirements for Windows
WHDC Portal/NodalDriver Tips: Best Practices for Windows Device Drivers
WHDC Portal/NodalNotes from Windows Development Teams
WHDC Portal/NodalSupport for Developer Kits and Tools
OtherDriver Developer Blogs
Microsoft.comWDK Online

See also: 
Notes from Windows Development Teams