@@ -24,21 +24,17 @@ using namespace d2dx;
2424
2525static 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-
4238CompatModeState 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_
153141CompatModeState 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