Skip to content

Commit

Permalink
windows XP support; can still have lots of bugs;
Browse files Browse the repository at this point in the history
  • Loading branch information
DarthTon committed Feb 27, 2015
1 parent 15cee96 commit 5612300
Show file tree
Hide file tree
Showing 21 changed files with 780 additions and 92 deletions.
20 changes: 20 additions & 0 deletions BlackBone.sln
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug(DLL)|Win32 = Debug(DLL)|Win32
Debug(DLL)|x64 = Debug(DLL)|x64
Debug(XP)|Win32 = Debug(XP)|Win32
Debug(XP)|x64 = Debug(XP)|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release(DLL)|Win32 = Release(DLL)|Win32
Release(DLL)|x64 = Release(DLL)|x64
Release(XP)|Win32 = Release(XP)|Win32
Release(XP)|x64 = Release(XP)|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
Expand All @@ -26,6 +30,10 @@ Global
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(DLL)|Win32.Build.0 = Debug(DLL)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(DLL)|x64.ActiveCfg = Debug(DLL)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(DLL)|x64.Build.0 = Debug(DLL)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(XP)|Win32.ActiveCfg = Debug(XP)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(XP)|Win32.Build.0 = Debug(XP)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(XP)|x64.ActiveCfg = Debug(XP)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug(XP)|x64.Build.0 = Debug(XP)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug|Win32.ActiveCfg = Debug|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug|Win32.Build.0 = Debug|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Debug|x64.ActiveCfg = Debug|x64
Expand All @@ -34,6 +42,10 @@ Global
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(DLL)|Win32.Build.0 = Release(DLL)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(DLL)|x64.ActiveCfg = Release(DLL)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(DLL)|x64.Build.0 = Release(DLL)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(XP)|Win32.ActiveCfg = Release(XP)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(XP)|Win32.Build.0 = Release(XP)|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(XP)|x64.ActiveCfg = Release(XP)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release(XP)|x64.Build.0 = Release(XP)|x64
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release|Win32.ActiveCfg = Release|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release|Win32.Build.0 = Release|Win32
{A2C53563-46F5-4D87-903F-3F1F2FDB2DEB}.Release|x64.ActiveCfg = Release|x64
Expand All @@ -42,6 +54,10 @@ Global
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(DLL)|Win32.Build.0 = Debug(DLL)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(DLL)|x64.ActiveCfg = Debug(DLL)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(DLL)|x64.Build.0 = Debug(DLL)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(XP)|Win32.ActiveCfg = Debug(XP)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(XP)|Win32.Build.0 = Debug(XP)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(XP)|x64.ActiveCfg = Debug(XP)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug(XP)|x64.Build.0 = Debug(XP)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug|Win32.ActiveCfg = Debug|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug|Win32.Build.0 = Debug|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Debug|Win32.Deploy.0 = Debug|Win32
Expand All @@ -53,6 +69,10 @@ Global
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(DLL)|Win32.Deploy.0 = Release(DLL)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(DLL)|x64.ActiveCfg = Release(DLL)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(DLL)|x64.Build.0 = Release(DLL)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(XP)|Win32.ActiveCfg = Release(XP)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(XP)|Win32.Build.0 = Release(XP)|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(XP)|x64.ActiveCfg = Release(XP)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release(XP)|x64.Build.0 = Release(XP)|x64
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release|Win32.ActiveCfg = Release|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release|Win32.Build.0 = Release|Win32
{D31B07B5-C75F-4382-B07F-D95922764BD7}.Release|Win32.Deploy.0 = Release|Win32
Expand Down
87 changes: 66 additions & 21 deletions contrib/VersionHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,31 @@
#ifndef _versionhelpers_H_INCLUDED_
#define _versionhelpers_H_INCLUDED_

#ifndef XP_BUILD
#include <winapifamily.h>
#else
#define WINAPI_PARTITION_DESKTOP (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
#define WINAPI_FAMILY_PARTITION(Partitions) (Partitions)

#define _WIN32_WINNT_NT4 0x0400
#define _WIN32_WINNT_WIN2K 0x0500
#define _WIN32_WINNT_WINXP 0x0501
#define _WIN32_WINNT_WS03 0x0502
#define _WIN32_WINNT_WIN6 0x0600
#define _WIN32_WINNT_VISTA 0x0600
#define _WIN32_WINNT_WS08 0x0600
#define _WIN32_WINNT_LONGHORN 0x0600
#define _WIN32_WINNT_WIN7 0x0601
#define _WIN32_WINNT_WIN8 0x0602
#endif

#ifdef _MSC_VER
#pragma once
#endif // _MSC_VER

#pragma region Application Family

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

#include <specstrings.h> // for _In_, etc.
Expand All @@ -36,112 +54,139 @@
#endif // __cplusplus

#define _WIN32_WINNT_WINBLUE 0x0603
#define _WIN32_WINNT_WIN10 0x0A00

typedef NTSTATUS( NTAPI* fnRtlGetVersion )(PRTL_OSVERSIONINFOW lpVersionInformation);

VERSIONHELPERAPI
IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
{
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
/*OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
DWORDLONG const dwlConditionMask = VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
VER_MINORVERSION, VER_GREATER_EQUAL),
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
VER_MINORVERSION, VER_GREATER_EQUAL),
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
osvi.dwMajorVersion = wMajorVersion;
osvi.dwMinorVersion = wMinorVersion;
osvi.wServicePackMajor = wServicePackMajor;
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;*/

RTL_OSVERSIONINFOEXW verInfo = { 0 };
verInfo.dwOSVersionInfoSize = sizeof( verInfo );

static auto RtlGetVersion = (fnRtlGetVersion)GetProcAddress( GetModuleHandleW( L"ntdll.dll" ), "RtlGetVersion" );

if (RtlGetVersion != 0 && RtlGetVersion( (PRTL_OSVERSIONINFOW)&verInfo ) == 0)
{
if (verInfo.dwMajorVersion > wMajorVersion)
return true;
else if (verInfo.dwMajorVersion < wMajorVersion)
return false;

if (verInfo.dwMinorVersion > wMinorVersion)
return true;
else if (verInfo.dwMinorVersion < wMinorVersion)
return false;

if (verInfo.wServicePackMajor >= wServicePackMajor)
return true;
}

return false;
}

VERSIONHELPERAPI
IsWindowsXPOrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 0 );
}

VERSIONHELPERAPI
IsWindowsXPSP1OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 1 );
}

VERSIONHELPERAPI
IsWindowsXPSP2OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 2 );
}

VERSIONHELPERAPI
IsWindowsXPSP3OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 3 );
}

VERSIONHELPERAPI
IsWindowsVistaOrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 0 );
}

VERSIONHELPERAPI
IsWindowsVistaSP1OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 1 );
}

VERSIONHELPERAPI
IsWindowsVistaSP2OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 2 );
}

VERSIONHELPERAPI
IsWindows7OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 0 );
}

VERSIONHELPERAPI
IsWindows7SP1OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 1 );
}

VERSIONHELPERAPI
IsWindows8OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN8 ), LOBYTE( _WIN32_WINNT_WIN8 ), 0 );
}

VERSIONHELPERAPI
IsWindows8Point1OrGreater()
{
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINBLUE ), LOBYTE( _WIN32_WINNT_WINBLUE ), 0 );
}

VERSIONHELPERAPI
IsWindows10OrGreater()
{
return IsWindowsVersionOrGreater( HIBYTE( 0x604 ), LOBYTE( 0x604 ), 0 );
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN10 ), LOBYTE( _WIN32_WINNT_WIN10 ), 0 );
}


VERSIONHELPERAPI
IsWindowsServer()
{
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION };
OSVERSIONINFOEXW osvi = { sizeof( osvi ), 0, 0, 0, 0, { 0 }, 0, 0, 0, VER_NT_WORKSTATION };
DWORDLONG const dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL );

return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);
return !VerifyVersionInfoW( &osvi, VER_PRODUCT_TYPE, dwlConditionMask );
}

#endif // NTDDI_VERSION

#endif // defined(__midl)

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */

#pragma endregion

#endif // _VERSIONHELPERS_H_INCLUDED_
Loading

0 comments on commit 5612300

Please sign in to comment.