37 lines
1.3 KiB
C++
37 lines
1.3 KiB
C++
#include "anit_screen_grap.h"
|
|
#include "utils.h"
|
|
#include "kernel_function.h"
|
|
|
|
|
|
namespace anit_screen_grap
|
|
{
|
|
auto GreProtectSpriteContent(HWND hWnd, UINT Flags) -> BOOL
|
|
{
|
|
typedef BOOL(__fastcall* fn_GreProtectSpriteContent)(LPVOID, HWND, INT, UINT);
|
|
static fn_GreProtectSpriteContent _GreProtectSpriteContent = nullptr;
|
|
if (!_GreProtectSpriteContent) {
|
|
auto version = utils::GetVersion();
|
|
|
|
if (version.dwBuildNumber == 7601 || version.dwBuildNumber == 7600)
|
|
{
|
|
auto ker_win32k_base = kernel_function::GetKernelModule("win32k.sys");
|
|
auto func_offset = utils::FindSectionsCode(ker_win32k_base, "\xE8\x00\x00\x00\x00\x8B\xF8\x85\xC0\x75\x26\x85\xF6", "x????xxxxxxxx", ".text");
|
|
_GreProtectSpriteContent = (fn_GreProtectSpriteContent)((*(long*)(func_offset + 1)) + (func_offset + 5));
|
|
}
|
|
else
|
|
{
|
|
auto ker_win32kfull_base = kernel_function::GetKernelModule("win32kfull.sys");
|
|
auto func_offset = utils::FindSectionsCode(ker_win32kfull_base, "\xE8\x00\x00\x00\x00\x8B\x00\x85\xC0\x75\x0E\x85\x00\x74\x00\x33\xD2", "x????x?xxxxx?x?xx", ".text");
|
|
_GreProtectSpriteContent = (fn_GreProtectSpriteContent)((*(long*)(func_offset + 1)) + (func_offset + 5));
|
|
}
|
|
}
|
|
|
|
if (!_GreProtectSpriteContent)
|
|
return FALSE;
|
|
|
|
auto suc = _GreProtectSpriteContent(NULL, hWnd, TRUE, Flags);
|
|
|
|
return suc;
|
|
}
|
|
|
|
} |