А они и в реальном запуске работают не от имени системы. От системы запускаются только
Logon Scripts.
На счет RunOnce - тот, что сидит в HKCU - от имени пользователя, а из HKLM - просто с повышенными привилегиями.
rundll32 запускает команды с наследованием прав, которые ей дают при запуске.
RunOnce исполняется при входе Администратора в систему.
Сначала загружаются RunServicesOnce и RunServices.
После них RunOnce, при условии входа Администратора (в случае c HKLM), а не пользователя с ограниченными правами:
http://support.microsoft.com/kb/179365/ru
В безопасном режиме эта ветка не работает.
Кстати, там пишется, что команды выполняются синхронно.
Значит для полной имитации нужно добавить ключ /WAIT:
... start /WAIT "" "%~b""
Вообще, права запуска можно проверить создав ключ:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100]
"test"="cmd /c \"whoami& pause\""
Утилита WhoAmi есть только в Vista +. Для XP нужно писать по-другому.
Если все же хочется симитировать запуск от имени системы, достаточно добавить в начало скрипта psexec, например:
psexec -s -i rundll32.exe iernonce.dll,RunOnceExProcess
Это будет работать только для ветки HKLM.