Указание своего image base не гарантирует, что код будет загружен именно по этому адресу, там уже может быть занято какой-нить библиотекой.
Помнится, для системных библиотек image base прописан так, чтобы минимизировать вероятность того, что память по указанному адресу в момент их загрузки уже будет занята, - такой же подход можно применить и к своей dll: прописать не штатный адрес 0x00400000, а что-нить "повыше", поближе к границе 2-го гигабайта адресного пространства. Вообще же, здесь была упомянута WinXP в контексте того, что в Vista уже появилась такая вещь, как Address Space Layout Randomization (ASLR). Т.е. Vista специально случайным образом меняет адреса, на которые в адресном пространстве отображаются загружаемые модули. Об этой дополнительной "мере предосторожности" подробно рассказывается в упомянутом докладе - равно как и способах минимизировать эффект этой "меры предосторожности" ОС