В вашем коде есть несколько проблем, которые могут привести к нарушению прав доступа. Я не думаю, что кто-либо имеет какое-либо отношение к упомянутому вами составу.
Вы назначаете указатель на первый элемент массива char фиксированного размера на char *, а затем пытаетесь добавить его с помощью strcat. Это неправильно, так как в неявно распределенном строковом массиве не осталось дополнительного пространства. Вам нужно выделить достаточно большой буфер для хранения результирующей строки, а затем скопировать туда строковую константу перед вызовом strcat. Например, вот так:
char *s = (char*)malloc(1024 * sizeof(char));
strcpy(s, "HKEY_CURRENT_USER\\");
strcat(s, T2A(lpSubKey));
printf("%s", s);
free(s);
Обратите внимание, что массив фиксированного размера, который я размещаю выше, является плохой практикой. В рабочем коде вы всегда должны определять правильный размер массива на ходу, чтобы предотвратить переполнение буфера, или использовать такие функции, как strncat и strncpy, чтобы гарантировать, что вы не копируете в буфер больше данных, чем может вместить буфер.