From da3a26338a647b1e7e30ea1eb9682678246c7173 Mon Sep 17 00:00:00 2001 From: love-code-yeyixiao <188240888@qq.com> Date: Sat, 16 Mar 2024 11:53:15 +0800 Subject: [PATCH] Fix. --- Sandboxie/core/dll/gdi.c | 20 ++++++++++++++++++++ Sandboxie/core/dll/guimisc.c | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/Sandboxie/core/dll/gdi.c b/Sandboxie/core/dll/gdi.c index 2d07169d..70fd12aa 100644 --- a/Sandboxie/core/dll/gdi.c +++ b/Sandboxie/core/dll/gdi.c @@ -428,6 +428,8 @@ _FX HDC Gui_CreateDCA(LPCSTR pwszDriver, LPCSTR pwszDevice, LPCSTR pszPort, co typedef HDC(*P_CreateCompatibleDC)(HDC hdc); //typedef BOOL(*P_DeleteDC)(HDC hdc); GET_WIN_API(CreateCompatibleDC, DllName_gdi32); + typedef HBITMAP (*P_CreateCompatibleBitmap)(_In_ HDC hdc, _In_ int cx, _In_ int cy); + GET_WIN_API(CreateCompatibleBitmap, DllName_gdi32); GET_WIN_API(DeleteDC, DllName_gdi32); typedef HGDIOBJ(*P_SelectObject)(_In_ HDC hdc, _In_ HGDIOBJ h); @@ -470,6 +472,8 @@ _FX HDC Gui_CreateDCW(LPCWSTR pwszDriver, LPCWSTR pwszDevice, LPCWSTR pszPort, typedef HDC(*P_CreateCompatibleDC)(HDC hdc); //typedef BOOL(*P_DeleteDC)(HDC hdc); GET_WIN_API(CreateCompatibleDC, DllName_gdi32); + typedef HBITMAP(*P_CreateCompatibleBitmap)(_In_ HDC hdc, _In_ int cx, _In_ int cy); + GET_WIN_API(CreateCompatibleBitmap, DllName_gdi32); GET_WIN_API(DeleteDC, DllName_gdi32); typedef HGDIOBJ(*P_SelectObject)(_In_ HDC hdc, _In_ HGDIOBJ h); @@ -929,6 +933,10 @@ _FX BOOLEAN Gdi_Full_Init_impl(HMODULE module, BOOLEAN full) P_RemoveFontResourceExW RemoveFontResourceExW; P_GetFontResourceInfoW GetFontResourceInfoW; P_CreateScalableFontResourceW CreateScalableFontResourceW; + P_BitBlt BitBlt; + P_StretchBlt StretchBlt; + P_CreateDCA CreateDCA; + P_DeleteDC DeleteDC; P_EnumFontFamiliesEx EnumFontFamiliesExA; P_EnumFontFamiliesEx EnumFontFamiliesExW; @@ -954,6 +962,18 @@ _FX BOOLEAN Gdi_Full_Init_impl(HMODULE module, BOOLEAN full) GetFontResourceInfoW = (P_GetFontResourceInfoW) GetProcAddress(module, "GetFontResourceInfoW"); + CreateDCA = (P_CreateDCA) + GetProcAddress(module, "CreateDCA"); + + BitBlt = (P_BitBlt) + GetProcAddress(module, "BitBlt"); + + StretchBlt = (P_StretchBlt) + GetProcAddress(module, "StretchBlt"); + + DeleteDC = (P_DeleteDC) + GetProcAddress(module, "DeleteDC"); + if (full) { CreateScalableFontResourceW = (P_CreateScalableFontResourceW) GetProcAddress(module, "CreateScalableFontResourceWImpl"); diff --git a/Sandboxie/core/dll/guimisc.c b/Sandboxie/core/dll/guimisc.c index 5551a45b..7a1d6cab 100644 --- a/Sandboxie/core/dll/guimisc.c +++ b/Sandboxie/core/dll/guimisc.c @@ -1513,6 +1513,8 @@ _FX HDC Gui_GetDC(HWND hWnd) GET_WIN_API(SelectObject, DllName_gdi32); typedef int (*P_GetDeviceCaps)(_In_opt_ HDC hdc, _In_ int index); GET_WIN_API(GetDeviceCaps, DllName_gdi32); + typedef HBITMAP(*P_CreateCompatibleBitmap)(_In_ HDC hdc, _In_ int cx, _In_ int cy); + GET_WIN_API(CreateCompatibleBitmap, DllName_gdi32); GET_WIN_API(CreateCompatibleDC, DllName_gdi32); GET_WIN_API(DeleteDC, DllName_gdi32); @@ -1559,6 +1561,8 @@ _FX HDC Gui_GetWindowDC(HWND hWnd) GET_WIN_API(SelectObject, DllName_gdi32); typedef int (*P_GetDeviceCaps)(_In_opt_ HDC hdc, _In_ int index); GET_WIN_API(GetDeviceCaps, DllName_gdi32); + typedef HBITMAP(*P_CreateCompatibleBitmap)(_In_ HDC hdc, _In_ int cx, _In_ int cy); + GET_WIN_API(CreateCompatibleBitmap, DllName_gdi32); int iWidth, iHeight; @@ -1602,6 +1606,9 @@ _FX HDC Gui_GetDCEx(HWND hWnd, HRGN hrgnClip, DWORD flags) GET_WIN_API(SelectObject, DllName_gdi32); typedef int (*P_GetDeviceCaps)(_In_opt_ HDC hdc, _In_ int index); GET_WIN_API(GetDeviceCaps, DllName_gdi32); + typedef HBITMAP(*P_CreateCompatibleBitmap)(_In_ HDC hdc, _In_ int cx, _In_ int cy); + GET_WIN_API(CreateCompatibleBitmap, DllName_gdi32); + int iWidth, iHeight; HDC ret2 = CreateCompatibleDC(ret);