Хендлы уникальны в пределах процесса, а не системы. Ты передаёшь значение хендла из одного процесса в другой, но этого недостаточно, необходимо скопировать сам хендл из таблицы хендлов исходного процесса (в твоём случае, UI-приложение) в таблицу хендлов целевого процесса (в твоём случае, служба). Для этого следует воспользоваться DuplicateHandle(), а для этого, в свою очередь, у тебя должен быть хендл исходного процесса с соответствующими правами. Ну и наконец, полученный в результате копирования хендл уже можно будет использовать в контексте твоего целевого процесса (служба). Что ещё?