我有一个用于注入的 DLL。这是通过 CBT-hook 注入的。现在,当通过 CBT 遇到所需的进程时,我已经用我自己的绕过了 WinAPI 的 ExtTextOutW。ExtTextOutW 的规范是:
BOOL ExtTextOutW(HDC hdc,
INT x,
INT y,
UINT flags,
const RECT* lprect,
LPCWSTR str,
UINT count,
const INT* lpDx)
在我绕道的 ExtTextOutW 中,我试图使用以下代码将 str (LPCWSTR) 转换为多字节:
BOOL Mine_ExtTextOutW(HDC hdc,
INT x,
INT y,
UINT flags,
const RECT* lprect,
LPCWSTR str,
UINT count,
const INT* lpDx)
{
BOOL rv = Real_ExtTextOutW(hdc, x, y, flags, lprect, str, count, lpDx);
HANDLE h = ::WindowFromDC(hdc);
if (!h || !str)
return ev;
CHAR *buffer = (CHAR *)::LocalAlloc(count + 1);
int l = ::WideCharToMultiByte(CP_APC, 0, str, count, buffer, count, NULL, NULL);
if (l > -1) {
buffer[l] = '\0';
g_pClient->SendViaIPC(buffer);
}
::LocalFree(buffer);
return rv;
}
不幸的是,这不起作用。WideCharToMultiByte 挂起注入的进程。为什么?