wm_copydata,变量周围的堆栈endpaint_text已损坏

wm_copydata, stack around variable endpaint_text was corrupted

本文关键字:堆栈 endpaint 已损坏 text 周围 copydata 变量 wm      更新时间:2023-10-16

我在下面钩住了 Winapi EndPaint() 函数,在它里面我发送了一些wm_copydata但与此同时,在 ocassion 上我得到了"wm_copydata,围绕变量的堆栈endpaint_text被损坏了......"挂钩应用程序的崩溃。

BOOL WINAPI Mine_EndPaint(HWND hWnd, const PAINTSTRUCT *lpPaint) {

    BOOL result = fpEndPaint(hWnd, lpPaint);
    if (hWnd == g_win)
    {
        if (lpPaint->rcPaint.left == g_12x && lpPaint->rcPaint.top == g_12y)
        {
        painting = 0;
        wchar_t endpaint_text[MAX_PATH] = L"deleting_a";
         COPYDATASTRUCT cds;
        ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
        cds.cbData = sizeof(paint_dc);
        cds.lpData = endpaint_text;
        ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
        }
        else if (lpPaint->rcPaint.left == g_list12x && lpPaint->rcPaint.top == 137)
        {
        big_painting = 0;
        wchar_t endpaint_text[MAX_PATH] = L"deleting_b";
         COPYDATASTRUCT cds;
        ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
        cds.cbData = sizeof(paint_dc);
        cds.lpData = endpaint_text;
        ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
        }
    }
    else if (check_d)
    {
        re_window = NULL;
        GetWindowText(hWnd, window_text, MAX_PATH);
        if (!wcscmp(window_text, L"Text"))
        {
            check_d = false;
            re_window = hWnd;
            wchar_t re_info[MAX_PATH] = L"";
            //wcscat(re_info, text);
            COPYDATASTRUCT cds;
            ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
            cds.dwData = 931;
            cds.cbData = sizeof(re_info);
            cds.lpData = re_info;
            wsprintf(re_info, L"Text='%s', HWND='%X'", d_text, re_window);
            ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
        }
    }
    return result;
}

它是溢出的wsprint,与提到的任何损坏的var无关。