James Hawkins wrote:
+ PWSTR keyname;
- keyname = CRYPT_Alloc(strlen(KEYSTR) + strlen(pProvName) +1); + keyname = CRYPT_Alloc((strlenW(KEYSTR) + strlenW(pProvName) + 1) * sizeof(WCHAR)); if (keyname) { - strcpy(keyname, KEYSTR); - strcpy(keyname + strlen(KEYSTR), pProvName); + strcpyW(keyname, KEYSTR); + strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName); } else SetLastError(ERROR_NOT_ENOUGH_MEMORY); return keyname; }
This doesn't look right.... when using pointer arithmetic, you do so in increments of the pointer's type (eg. WCHAR). The following two lines are the same, and are both wrong: strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName); strcpyW(&keyname[strlenW(KEYSTR) * sizeof(WCHAR)], pProvName); The right version would be: strcpyW(&keyname[strlenW(KEYSTR)], pProvName); but how about just using: strcatW( keyname, pProvname ); Mike