Раньше в C/C++ не было целочисленных типов фиксированного размера (таких как uint32_t, например), а у обычных типов размер не определён - один и тот же тип в разных компиляторах может быть и 16, и 32, и 64-битным. Эта неопределённость приводит к проблемам при использовании функций из внешних библиотек (например: если функция возвращает 32-битное значение, а программа сохранит его в 16-битную переменную, то половина его разрядов будут потеряны). Поэтому в заголовочных файлах Windows и были объявлены такие типы как DWORD, которые всегда имеют один и тот же размер (что достигается использованием директив условной компиляции и макросов, подставляющих разные определения для этих типов).