Пока ваша рекурсия выполняется только один раз для каждого уровня подключа, я не понимаю, почему это должно переполнять стек. Конечно, реестр Windows - это кошмар, но я не думаю, что его иерархия ключей имеет тысячи уровней.
Я подозреваю, что вы используете в стеке несколько гигантских массивов, что в целом является плохой идеей, особенно в случае рекурсии Попробуйте выделить любые большие данные, которые вам нужны, с помощью malloc
.