Skip to content

Commit ea201b9

Browse files
committed
Some fixes to comptability mode detection. Remove debug printing.
1 parent dd09fc6 commit ea201b9

File tree

1 file changed

+26
-38
lines changed

1 file changed

+26
-38
lines changed

src/d2dx/CompatModeCheck.cpp

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,17 @@ using namespace d2dx;
2424

2525
static const wchar_t* CompatModeStrings[] =
2626
{
27-
L"WIN8"
28-
L"WIN7",
27+
L"WIN8RTM",
28+
L"WIN7RTM",
2929
L"VISTASP2",
3030
L"VISTASP1",
31-
L"VISTA",
31+
L"VISTARTM",
3232
L"WINXPSP3",
3333
L"WINXPSP2",
34-
L"WINXPSP1",
35-
L"WINXP",
3634
L"WIN98",
3735
L"WIN95",
3836
};
3937

40-
const wchar_t* CompatModeKey = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
41-
4238
CompatModeState CheckCompatModeReg(
4339
_In_ HKEY hRootKey,
4440
_In_ const wchar_t* path,
@@ -51,16 +47,8 @@ CompatModeState CheckCompatModeReg(
5147
0,
5248
KEY_QUERY_VALUE | KEY_WOW64_64KEY | (remove ? KEY_SET_VALUE : 0),
5349
&hKey);
54-
switch (result)
50+
if (result != ERROR_SUCCESS)
5551
{
56-
case ERROR_SUCCESS:
57-
break;
58-
59-
case ERROR_FILE_NOT_FOUND:
60-
D2DX_LOG("nf");
61-
return CompatModeState::Disabled;
62-
63-
default:
6452
return CompatModeState::Unknown;
6553
}
6654

@@ -152,6 +140,19 @@ CompatModeState CheckCompatModeReg(
152140
_Use_decl_annotations_
153141
CompatModeState d2dx::CheckCompatMode(bool remove)
154142
{
143+
auto version = d2dx::GetWindowsVersion();
144+
auto realVersion = d2dx::GetActualWindowsVersion();
145+
146+
if (realVersion.major == version.major && realVersion.minor == version.minor)
147+
{
148+
return CompatModeState::Disabled;
149+
}
150+
if (version.major > 6 || (version.major == 6 && version.minor >= 3))
151+
{
152+
// Compat mode is set to at least win10.
153+
return CompatModeState::Disabled;
154+
}
155+
155156
HMODULE module = GetModuleHandleW(nullptr);
156157
std::vector<wchar_t> path;
157158
DWORD result = MAX_PATH / 2;
@@ -167,32 +168,19 @@ CompatModeState d2dx::CheckCompatMode(bool remove)
167168
} while (result == path.size());
168169
path.resize(static_cast<std::size_t>(result + 1));
169170

170-
CompatModeState machine_state = CheckCompatModeReg(HKEY_LOCAL_MACHINE, path.data(), false);
171-
if (machine_state == CompatModeState::Enabled)
172-
{
173-
return machine_state;
174-
}
175-
176-
CompatModeState user_state = CheckCompatModeReg(HKEY_CURRENT_USER, path.data(), remove);
177-
if (user_state == CompatModeState::Enabled || user_state == CompatModeState::Updated)
171+
CompatModeState ustate = CheckCompatModeReg(HKEY_CURRENT_USER, path.data(), remove);
172+
if (ustate == CompatModeState::Enabled || ustate == CompatModeState::Updated)
178173
{
179-
return user_state;
174+
return ustate;
180175
}
181176

182-
if (machine_state == CompatModeState::Disabled)
177+
CompatModeState mstate = CheckCompatModeReg(HKEY_LOCAL_MACHINE, path.data(), false);
178+
if (mstate == CompatModeState::Enabled)
183179
{
184-
return machine_state;
180+
return mstate;
185181
}
186182

187-
auto reportedWindowsVersion = d2dx::GetWindowsVersion();
188-
auto realWindowsVersion = d2dx::GetActualWindowsVersion();
189-
190-
return reportedWindowsVersion.major > 6 || (reportedWindowsVersion.major == 6 && reportedWindowsVersion.minor >= 3)
191-
? CompatModeState::Disabled // Reported >= Win10
192-
: realWindowsVersion.major == 0
193-
? CompatModeState::Unknown // No real version
194-
: reportedWindowsVersion.major < realWindowsVersion.major
195-
|| (reportedWindowsVersion.major == realWindowsVersion.major && reportedWindowsVersion.minor < realWindowsVersion.minor)
196-
? CompatModeState::Enabled // reported < real
197-
: CompatModeState::Disabled; // reported >= real
183+
return realVersion.major == 0 && mstate == CompatModeState::Unknown && ustate == CompatModeState::Unknown
184+
? CompatModeState::Unknown
185+
: CompatModeState::Enabled;
198186
}

0 commit comments

Comments
 (0)