Я вижу, что многие функции нуждаются в вас, чтобы установить размер для строки, которая является выходной.
GetComputerNameW необходимо:
WCHAR wStrName[16U];
DWORD uSize = 16U;
GetComputerNameW(wStrName, &uSize);
RegSetValueExW необходимо:
WCHAR wStrExec[1024U];
RegSetValueExW(..., (wcslen(wStrExec) + 1U) * sizeof(WCHAR));
GetWindowTextW необходимо:
WCHAR wStrText[1024U];
GetWindowsTextW(..., sizeof(wStrText));
GetModuleBaseNameW необходимо:
WCHAR wStrName[1024U];
GetModuleBaseNameW(..., sizeof(wStrName) / sizeof(WCHAR));
У меня вопрос, как сделать разницу между размерами? Строки всегда определяются как WCHAR, а установленные размеры сильно отличаются.
Если вы внимательно читать документацию, вы увидите, что параметр size это размер выходного буфера в байтах:
cbData [in]
Размер информации, на которую указывает параметр lpData, в
байт. Если данные имеют тип REG_SZ, REG_EXPAND_SZ или REG_MULTI_SZ,
cbData должен включать размер завершающего нулевого символа или
персонажи.
Что, конечно, дает то, что вам нужно:
WCHAR wStrExec[1024U];
RegSetValueExW(..., sizeof (wStrExec));
Других решений пока нет …