Перехват функции EnumServicesStatus, так как mmc и другие программы (например, sc.exe) её используют. Эта функция запрашивает информацию у самого SCM. Хотя в реестре тоже надо делать перехват, некоторые программы могут попытаться сделать и так и так, чтобы выявить скрываемые службы.
Может при завершении системы записывать инфо о себе, а при старте - стирать ? Но есть вероятность, что будет аварийный перезапуск. Кстати, можно при старте записываться в \Run (на всякий случай)
Вариант 1: вместо сервиса использовать драйвер. Правда через NtQuerySystemInformation он всё равно виден будет. Но её тоже перехватить можно. Вариант 2: как Peshuha предложил - через ветку Run (правда лучше через RunOnce - во-первых стартует перед всеми сервисами, а во вторых сразу удаляется - палева меньше).