RunDLL32 è un programma che serve per avviare altri programmi o pezzi di programmi che non hanno una user interface, ma fungono solo da "server" per altri (in linea generale). Spesso però viene usato anche per mascherare virus, questo perchè nel task manager tu non vedrai il nome del processo caricato, ma sempre RUNDLL32 (infatti se apri task manager noterai quanti RUNDLL32 ci sono).
Ora bisogna capire rundll32 che processo avviava prima di andare in errore, rundll32 carica, per esempio, anche alcune routine accessorie di vari driver, o programmi e librerie necessarie per il funzionamento del computer o per implementare funzionalità accessorie.
Penso che a questo punto, per capire ti servirebbe un programma come HjackThis, in modo da sapere RUNDLL32 che processi avvia all'avvio, e poi un programma come Process Explorer, per vedere RUNDLL32 che moduli ha caricato dopo l'avvio (quello che non risulterà confrontando i due tabulati, è quello che si è bloccato all'avvio).