This MSDN article is supposed to demonstrate how to delete a registry key which has subkeys, but the code is flawed.
The line that says
StringCchCopy (lpEnd, MAX_PATH*2, szName);
causes an exception, which is due to trying to copy to beyond the buffer of lpEnd. I tried correcting the solution by replacing that line with the following
size_t subKeyLen = lstrlen(lpSubKey);
size_t bufLen = subKeyLen + lstrlen(szName)+1;
LPTSTR buf = new WCHAR[bufLen];
StringCchCopy(buf,bufLen,lpSubKey);
StringCchCopy(buf+subKeyLen,lstrlen(szName)+1,szName);
buf[bufLen-1]='\0';
I’m unable to step through the code as the target platform and dev platform are different, but from the logging I’ve put in the code it looks like it just freezes up, but doesn’t throw an exception.
It’s frustrating that MSDN articles are wrong…you’d think they would be checked.
Any ideas on how to correct this?
Thanks.
If you don’t mind having
Shlwapi.dllas an additional dependency, it may be easier for you just to use SHDeleteKey. If you’re only targetting Vista+, RegDeleteTree (which lives inAdvapi32.dll) is another alternative.