Unicode scheint erstmal kein Problem zu sein, bei dem alten Code. (auf den ersten Blick)
Aber bei der Fehlerbehandlung fehlt ein bissl was ... alles mit GetLastError bei Fehlern.
Vieles ist richtig mit
if ... <> 0 then
abgefangen, aber im ELSE wird der Fehler nicht ausgewertet.
Was sagt der Debugger?
Delphi mit Adminrechten starten und dann diesen Code mal schrittweise durchgehn.
Nicht schlimm, aber k.A. warum ServiceGetStatus/ServiceRunnig mit PChar und nicht auch mit String deklariert wirden.