It's probem in the registry.
You need to download a live linux cd specifically made for editing the windows registry because you can't get into your PC any other way, I had the same problem and fixed it by bypassing Userinit.exe, by replacing it with Explorer.exe
but microsoft says the correct way is to do the following
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
Edit these values and type the correct path of shell:
Shell = explorer.exe
Userinit=X:\windows\system32\userinit.exe
which is probably what will set it up to now that I can actually get into windows...
But just to get in, again I replaced userinit.exe with explorer.exe
*home.eunet.no/~pnordahl/ntpasswd/bootdisk.html
I chose the bootable CD link at the bottom of that page.
Go there and download the zip, unzip the file to drive and burn a new cd with the ISO.
If you're not familiar with that do a Google for Burn4free or cdBurnerXP. Both free cd burners. Both burn ISO, zip is a winzip file. winzip.com
Once burned you'll have a bootable linux live cd, power up the pc or laptop, you'll need to set it up to boot from CDrom in BIOS before HD.
or with some laptops you can power the notebook on and put in the cd, quickly hit ctrl alt delete then hold down C and it will try to boot from cd-rom. otherwise hit Esc before it boots, then F1 to go into BIOS and change the booting order.
Then the steps are something like this:
(When it boots, don't take too long to type in nt_pass at the boot: prompt or it will continue to boot to a Latvian version of the Linux GUI, which does not appear to have a GUI version of a windows registry editor.)
"nt_pass" apparently runs a linux script that eventually runs chntpw (change nt passord?) that appears to be a version of the same program created by pnordahl.
If by now you are lost don't worry, just let the CD load, it'll take a while then stop. hit enter a few times and eventually you will get to the next point. some of this is from memory, sorry.
The script will stop and ask you to hit enter to continue to load SCSI drivers, it then asked me if I wanted it to probe for SCSI drivers: [n], I took the default [n]o and hit enter.
Next, it asked what partition contains your NT installation, I took the default again, in this case [/dev/hda1] and hit enter.
Then it asked: what is the full path to the registry directory, again select the default [windows\system32\config].
Next came the question, which hives (files) do you want to edit (leave default for password setting, separate multiple names with spaces), the default was [sam system security], I chose to type software and hit enter.
I then chose option 9 - registry editor.
A ? will get you a list of commands that are available, I used ls which appears to be equivalent to a DOS dir command... cd to change directories... cat to print the value of a key... and ed to change the value of a key.
For instance (this is from memory, not notes... sorry) at the prompt [1020], type cd Microsoft and hit enter, (case sensitive!)
then cd Windows NT and hit enter, then cd CurrentVersion and hit enter, finally cd Winlogon and hit enter (case is important).
Maybe you could just type one cd Microsoft/Windows NT/CurrentVersion/Winlogon and hit enter... I don't know. But it seems to be the registry equivalent of
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
At that point I typed cat Userinit and lo and behold, up came
C:\WINDOWS\System32\userinit.exe... At any rate I typed ed Userinit and at the prompt [C:\Windows\System32\userinit.exe] I typed C:\Windows\Explorer.exe and hit enter.
Then q to quit (you will be asked if there is something to save), q to keep quitting and y when it asks if you're sure you want to write the changes (careful, careful... good luck). The program then dumped me out to a # prompt and said I could rerun the script if I typed a space followed by sh /script/main.rc
I removed the cdrom from the drive and rebooted to Windows XP, no problems.