他人の空似自作物置場

dwmapi_dummy.zip/src/dwmapi.cpp


#include <string.h>

#include <windows.h>

#include "boost/filesystem/path.hpp"

FARPROC p_NONAME0 = NULL;
FARPROC p_NONAME1 = NULL;
FARPROC p_DwmEnableComposition = NULL;
FARPROC p_NONAME3 = NULL;
FARPROC p_NONAME4 = NULL;
FARPROC p_NONAME5 = NULL;
FARPROC p_NONAME6 = NULL;
FARPROC p_NONAME7 = NULL;
FARPROC p_NONAME8 = NULL;
FARPROC p_NONAME9 = NULL;
FARPROC p_NONAME10 = NULL;
FARPROC p_DwmAttachMilContent = NULL;
FARPROC p_NONAME12 = NULL;
FARPROC p_NONAME13 = NULL;
FARPROC p_NONAME14 = NULL;
FARPROC p_NONAME15 = NULL;
FARPROC p_DwmDefWindowProc = NULL;
FARPROC p_DwmDetachMilContent = NULL;
FARPROC p_NONAME18 = NULL;
FARPROC p_NONAME19 = NULL;
FARPROC p_NONAME20 = NULL;
FARPROC p_NONAME21 = NULL;
FARPROC p_DwmEnableBlurBehindWindow = NULL;
FARPROC p_DwmEnableMMCSS = NULL;
FARPROC p_NONAME24 = NULL;
FARPROC p_NONAME25 = NULL;
FARPROC p_NONAME26 = NULL;
FARPROC p_NONAME27 = NULL;
FARPROC p_NONAME28 = NULL;
FARPROC p_NONAME29 = NULL;
FARPROC p_NONAME30 = NULL;
FARPROC p_NONAME31 = NULL;
FARPROC p_NONAME32 = NULL;
FARPROC p_NONAME33 = NULL;
FARPROC p_NONAME34 = NULL;
FARPROC p_DwmExtendFrameIntoClientArea = NULL;
FARPROC p_DwmFlush = NULL;
FARPROC p_DwmGetColorizationColor = NULL;
FARPROC p_DwmGetCompositionTimingInfo = NULL;
FARPROC p_DwmGetGraphicsStreamClient = NULL;
FARPROC p_DwmGetGraphicsStreamTransformHint = NULL;
FARPROC p_DwmGetTransportAttributes = NULL;
FARPROC p_DwmGetWindowAttribute = NULL;
FARPROC p_DwmInvalidateIconicBitmaps = NULL;
FARPROC p_DwmIsCompositionEnabled = NULL;
FARPROC p_DwmModifyPreviousDxFrameDuration = NULL;
FARPROC p_DwmQueryThumbnailSourceSize = NULL;
FARPROC p_DwmRegisterThumbnail = NULL;
FARPROC p_DwmSetDxFrameDuration = NULL;
FARPROC p_DwmSetIconicLivePreviewBitmap = NULL;
FARPROC p_DwmSetIconicThumbnail = NULL;
FARPROC p_DwmSetPresentParameters = NULL;
FARPROC p_DwmSetWindowAttribute = NULL;
FARPROC p_DwmUnregisterThumbnail = NULL;
FARPROC p_DwmUpdateThumbnailProperties = NULL;

bool CheckDwmExists(bool &is_dwm_exists) {
	OSVERSIONINFOEX osvi;
	::ZeroMemory(&osvi, sizeof(osvi));
	osvi.dwOSVersionInfoSize = sizeof(osvi);
	const BOOL bOsVersionInfoEx = ::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&osvi));
	if(bOsVersionInfoEx == 0) {
		return false;
	}

	if(VER_PLATFORM_WIN32_NT != osvi.dwPlatformId || osvi.dwMajorVersion <= 4) {
		return false;
	}
	if(osvi.dwMajorVersion == 6) {
		is_dwm_exists = true;
	} else {
		is_dwm_exists = false;
	}
	return true;
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
	static HMODULE h_original = NULL;
	switch(ul_reason_for_call) {
		case DLL_PROCESS_ATTACH: {
			bool is_dwm_exists;
			if(!CheckDwmExists(is_dwm_exists) || !is_dwm_exists) {
				return FALSE;
			}
			wchar_t sys_dir[256];
			::GetSystemDirectoryW(sys_dir, sizeof(sys_dir) / sizeof(wchar_t));
			boost::filesystem::path file_path = boost::filesystem::path(sys_dir) / L"dwmapi.dll";
			h_original = ::LoadLibraryW(file_path.wstring().c_str());
			if(h_original == NULL) {
				return FALSE;
			}
			p_NONAME0 = GetProcAddress( h_original, MAKEINTRESOURCE(100) );
			p_NONAME1 = GetProcAddress( h_original, MAKEINTRESOURCE(101) );
			//p_DwmEnableComposition = GetProcAddress( h_original, "DwmEnableComposition" ); // 実装済み
			p_NONAME3 = GetProcAddress( h_original, MAKEINTRESOURCE(103) );
			p_NONAME4 = GetProcAddress( h_original, MAKEINTRESOURCE(104) );
			p_NONAME5 = GetProcAddress( h_original, MAKEINTRESOURCE(105) );
			p_NONAME6 = GetProcAddress( h_original, MAKEINTRESOURCE(106) );
			p_NONAME7 = GetProcAddress( h_original, MAKEINTRESOURCE(107) );
			p_NONAME8 = GetProcAddress( h_original, MAKEINTRESOURCE(108) );
			p_NONAME9 = GetProcAddress( h_original, MAKEINTRESOURCE(109) );
			p_NONAME10 = GetProcAddress( h_original, MAKEINTRESOURCE(110) );
			p_DwmAttachMilContent = GetProcAddress( h_original, "DwmAttachMilContent" );
			p_NONAME12 = GetProcAddress( h_original, MAKEINTRESOURCE(112) );
			p_NONAME13 = GetProcAddress( h_original, MAKEINTRESOURCE(113) );
			p_NONAME14 = GetProcAddress( h_original, MAKEINTRESOURCE(114) );
			p_NONAME15 = GetProcAddress( h_original, MAKEINTRESOURCE(115) );
			p_DwmDefWindowProc = GetProcAddress( h_original, "DwmDefWindowProc" );
			p_DwmDetachMilContent = GetProcAddress( h_original, "DwmDetachMilContent" );
			p_NONAME18 = GetProcAddress( h_original, MAKEINTRESOURCE(118) );
			p_NONAME19 = GetProcAddress( h_original, MAKEINTRESOURCE(119) );
			p_NONAME20 = GetProcAddress( h_original, MAKEINTRESOURCE(120) );
			p_NONAME21 = GetProcAddress( h_original, MAKEINTRESOURCE(121) );
			p_DwmEnableBlurBehindWindow = GetProcAddress( h_original, "DwmEnableBlurBehindWindow" );
			p_DwmEnableMMCSS = GetProcAddress( h_original, "DwmEnableMMCSS" );
			p_NONAME24 = GetProcAddress( h_original, MAKEINTRESOURCE(124) );
			p_NONAME25 = GetProcAddress( h_original, MAKEINTRESOURCE(125) );
			p_NONAME26 = GetProcAddress( h_original, MAKEINTRESOURCE(126) );
			p_NONAME27 = GetProcAddress( h_original, MAKEINTRESOURCE(127) );
			p_NONAME28 = GetProcAddress( h_original, MAKEINTRESOURCE(128) );
			p_NONAME29 = GetProcAddress( h_original, MAKEINTRESOURCE(129) );
			p_NONAME30 = GetProcAddress( h_original, MAKEINTRESOURCE(130) );
			p_NONAME31 = GetProcAddress( h_original, MAKEINTRESOURCE(131) );
			p_NONAME32 = GetProcAddress( h_original, MAKEINTRESOURCE(132) );
			p_NONAME33 = GetProcAddress( h_original, MAKEINTRESOURCE(133) );
			p_NONAME34 = GetProcAddress( h_original, MAKEINTRESOURCE(134) );
			p_DwmExtendFrameIntoClientArea = GetProcAddress( h_original, "DwmExtendFrameIntoClientArea" );
			p_DwmFlush = GetProcAddress( h_original, "DwmFlush" );
			p_DwmGetColorizationColor = GetProcAddress( h_original, "DwmGetColorizationColor" );
			p_DwmGetCompositionTimingInfo = GetProcAddress( h_original, "DwmGetCompositionTimingInfo" );
			p_DwmGetGraphicsStreamClient = GetProcAddress( h_original, "DwmGetGraphicsStreamClient" );
			p_DwmGetGraphicsStreamTransformHint = GetProcAddress( h_original, "DwmGetGraphicsStreamTransformHint" );
			p_DwmGetTransportAttributes = GetProcAddress( h_original, "DwmGetTransportAttributes" );
			p_DwmGetWindowAttribute = GetProcAddress( h_original, "DwmGetWindowAttribute" );
			p_DwmInvalidateIconicBitmaps = GetProcAddress( h_original, "DwmInvalidateIconicBitmaps" );
			//p_DwmIsCompositionEnabled = GetProcAddress( h_original, "DwmIsCompositionEnabled" ); // 実装済み
			p_DwmModifyPreviousDxFrameDuration = GetProcAddress( h_original, "DwmModifyPreviousDxFrameDuration" );
			p_DwmQueryThumbnailSourceSize = GetProcAddress( h_original, "DwmQueryThumbnailSourceSize" );
			p_DwmRegisterThumbnail = GetProcAddress( h_original, "DwmRegisterThumbnail" );
			p_DwmSetDxFrameDuration = GetProcAddress( h_original, "DwmSetDxFrameDuration" );
			p_DwmSetIconicLivePreviewBitmap = GetProcAddress( h_original, "DwmSetIconicLivePreviewBitmap" );
			p_DwmSetIconicThumbnail = GetProcAddress( h_original, "DwmSetIconicThumbnail" );
			p_DwmSetPresentParameters = GetProcAddress( h_original, "DwmSetPresentParameters" );
			p_DwmSetWindowAttribute = GetProcAddress( h_original, "DwmSetWindowAttribute" );
			p_DwmUnregisterThumbnail = GetProcAddress( h_original, "DwmUnregisterThumbnail" );
			p_DwmUpdateThumbnailProperties = GetProcAddress( h_original, "DwmUpdateThumbnailProperties" );
			break;
		}
		case DLL_THREAD_ATTACH:
			break;
		case DLL_THREAD_DETACH:
			break;
		case DLL_PROCESS_DETACH:
			if(h_original != NULL) {
				::FreeLibrary(h_original);
			}
			break;
	}
	return TRUE;
}