87 lines
3.4 KiB
C
87 lines
3.4 KiB
C
#define WIN32_LEAN_AND_MEAN
|
|
#define NOUSER
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <windows.h>
|
|
|
|
#define DLL_EXPORT __declspec(dllexport)
|
|
|
|
typedef int (WINAPI *MessageBoxAPtr)(HWND hwnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
|
|
typedef int (WINAPI *MessageBoxWPtr)(HWND hwnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
|
|
|
|
DLL_EXPORT WINAPI int MessageBoxA(HWND hwnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {
|
|
MessageBoxAPtr proc = (MessageBoxAPtr) GetProcAddress(GetModuleHandle("user32.dll"), "MessageBoxA");
|
|
LPSTR buffer = malloc(strlen(lpText) + 1 + 26);
|
|
strcpy(buffer, "MessageBoxA gruesst Sie!\n"),
|
|
strcat(buffer, lpText);
|
|
int result = proc(hwnd, buffer, lpCaption, uType);
|
|
free(buffer);
|
|
return result;
|
|
return 0;
|
|
}
|
|
|
|
DLL_EXPORT WINAPI int MessageBoxW(HWND hwnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) {
|
|
MessageBoxWPtr proc = (MessageBoxWPtr) GetProcAddress(GetModuleHandle("user32.dll"), "MessageBoxW");
|
|
LPWSTR buffer = malloc(wcslen(lpText) + 1 + 26);
|
|
wcscpy(buffer, L"MessageBoxW gruesst Sie!\n");
|
|
wcscat(buffer, lpText);
|
|
int result = proc(hwnd, buffer, lpCaption, uType);
|
|
free(buffer);
|
|
return result;
|
|
}
|
|
|
|
DLL_EXPORT WINAPI BOOL GetVersionExW(LPOSVERSIONINFOW version) {
|
|
if (version->dwOSVersionInfoSize == sizeof(OSVERSIONINFOW)) {
|
|
version->dwMajorVersion = 4;
|
|
version->dwMinorVersion = 0;
|
|
version->dwBuildNumber = 1381;
|
|
version->dwPlatformId = VER_PLATFORM_WIN32_NT;
|
|
//wcscpy(version->szCSDVersion, L"Befator Inc gruesst Sie!");
|
|
|
|
/*HKEY key;
|
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\BCompat"), 0, KEY_READ, &key) == ERROR_SUCCESS) {
|
|
DWORD size;
|
|
DWORD major = 0;
|
|
if (RegQueryValueEx(key, TEXT("ReportedMajor"), NULL, NULL, (LPBYTE) &major, &size) == ERROR_SUCCESS) {
|
|
version->dwMajorVersion = major;
|
|
}
|
|
DWORD minor = 0;
|
|
if (RegQueryValueEx(key, TEXT("ReportedMinor"), NULL, NULL, (LPBYTE) &minor, &size) == ERROR_SUCCESS) {
|
|
version->dwMinorVersion = minor;
|
|
}
|
|
DWORD build = 0;
|
|
if (RegQueryValueEx(key, TEXT("ReportedBuild"), NULL, NULL, (LPBYTE) &build, &size) == ERROR_SUCCESS) {
|
|
version->dwBuildNumber = build;
|
|
}
|
|
DWORD platform = 0;
|
|
if (RegQueryValueEx(key, TEXT("ReportedPlatform"), NULL, NULL, (LPBYTE) &platform, &size) == ERROR_SUCCESS) {
|
|
version->dwPlatformId = platform;
|
|
}
|
|
RegCloseKey(key);
|
|
}*/
|
|
return TRUE;
|
|
} else {
|
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
DLL_EXPORT WINAPI BOOL GetVersionExA(LPOSVERSIONINFOA version) {
|
|
if (version->dwOSVersionInfoSize == sizeof(OSVERSIONINFOA)) {
|
|
OSVERSIONINFOW versionW;
|
|
versionW.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
|
|
if (GetVersionExW(&versionW)) {
|
|
version->dwMajorVersion = versionW.dwMajorVersion;
|
|
version->dwMinorVersion = versionW.dwMinorVersion;
|
|
version->dwBuildNumber = versionW.dwBuildNumber;
|
|
version->dwPlatformId = versionW.dwPlatformId;
|
|
//wcstombs(version->szCSDVersion, versionW.szCSDVersion, ARRAYSIZE(version->szCSDVersion));
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
} else {
|
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
|
return FALSE;
|
|
}
|
|
}
|