Единственное, что не так со всеми функциями - вы забыли проверить возвращаемое значение. Даже функции String Safe могут давать сбой, и если они это сделают, они будут молча в вашем коде. Возвращаемые значения для строковых функций должны быть проверены всегда , иначе вы открылись для дыр в безопасности.
Кроме этого, очень трудно ответить на это определенным да или нет, потому что есть тонкие вопросы, которые нужно рассмотреть. Давайте возьмем их в порядке
StringCchCopyW(s1, _countof(s1), someString);
Это правильно и не имеет реальных проблем, кроме игнорируемого возвращаемого значения.
StringCchCopyW(s1 + 100, _countof(s1) - 100, someString); // Is it right?
Трудно ответить на этот вопрос. После этой операции s1+100
будет указывать на допустимый строковый объект, но это ничего не делает для s1. Это не открывает никаких дыр в безопасности, хотя.
StringCchCopyW(s1 + 100, _countof(s1), someString); // Is it right?
Это очень неправильно. Вы указываете, что количество допустимых символов MAX_PATH
, но передается буфер, в котором есть MAX_PATH-100
символов. Это может быть переполнение буфера, если someString
достаточно долго.
StringCchCatW(s1, _countof(s1) - wcslen(s1), someString); // Is it right?
Это неправильно, но не так опасно. Вы сообщаете, что длина s1 на самом деле меньше, чем есть. Это не вызовет переполнения, но предотвратит добавление допустимых строк.
StringCchCatW(s1, _countof(s1), someString); // Is it right?
Это правильно при условии, что в s1 есть допустимая строка. Если в s1 нет правильной строки, это может привести к некорректному выполнению функции.