Using the Windows XP DDK (or, really, ANY time you build a driver) make sure you do not to define NT_UP.
NT_UP is defined when the uniprocessor build of the o/s is created, and turns on various short-cuts that can be used when it is known that only a single CPU is present.
Due to conditionals in ntddk.h and wdm.h, a driver that's built with NT_UP defined will not work correctly on an MP system. The symptoms that are exhibited can be rather subtle: For example, calls to KeGetCurrentProcessorNumber() can return the wrong processor number.
NOT defining the symbol produces a driver that works on BOTH uni- and multi- processor systems. So, there's really no reason a driver should ever define this symbol -- EVEN when that driver is targetted to work solely to a uniprocessor system.