J'ai injecté ma DLL dans une application cible où j'ai également connecté quelques fonctions WINAPI . L'un d'eux est DrawTextExW. J'essaie de remplacer toutes les lettres 'l' par '!' avant il l'imprime. Ma solution fonctionne correctement pendant quelques secondes, mais l'application cible se bloque. Je ne comprends vraiment pas pourquoi.Un crash dans une application cible injectée/accrochée
est ici la fonction:
Edition - Solution de travail:
int WINAPI DetouredDrawTextExW(__in HDC hdc,
__inout LPWSTR lpchText,
__in int cchText,
__inout LPRECT lprc,
__in UINT dwDTFormat,
__in LPDRAWTEXTPARAMS lpDTParams)
{
std::wstring s_wc(lpchText, cchText);
std::replace(s_wc.begin(), s_wc.end(), L'l', L'!');
return ::DrawTextExW(hdc, const_cast<wchar_t *>(s_wc.c_str()),
s_wc.length(), lprc, dwDTFormat, lpDTParams);
}
Ainsi, quelqu'un peut pointer vers moi ce que je fais mal?
Merci pour la réponse, mais vous étiez en fin de compte dès le début. J'ai ignoré cchText. La chaîne, selon les spécifications, n'a pas besoin d'être terminée par un caractère nul. Par conséquent, std :: wstring (lpchText, cchText) a fait l'affaire. – nhaa123