+long GetMSWViewFlags(wxRegKey::WOW64ViewMode viewMode)
+{
+ long samWOW64ViewMode = 0;
+
+ switch ( viewMode )
+ {
+ case wxRegKey::WOW64ViewMode_32:
+#ifdef __WIN64__ // the flag is only needed by 64 bit apps
+ samWOW64ViewMode = KEY_WOW64_32KEY;
+#endif // Win64
+ break;
+
+ case wxRegKey::WOW64ViewMode_64:
+#ifndef __WIN64__ // the flag is only needed by 32 bit apps
+ // 64 bit registry can only be accessed under 64 bit platforms
+ if ( wxIsPlatform64Bit() )
+ samWOW64ViewMode = KEY_WOW64_64KEY;
+#endif // Win32
+ break;
+
+ default:
+ wxFAIL_MSG("Unknown registry view.");
+ // fall through
+
+ case wxRegKey::WOW64ViewMode_Default:
+ // Use default registry view for the current application,
+ // i.e. 32 bits for 32 bit ones and 64 bits for 64 bit apps
+ ;
+ }
+
+ return samWOW64ViewMode;
+}
+
+long GetMSWAccessFlags(wxRegKey::AccessMode mode,
+ wxRegKey::WOW64ViewMode viewMode)
+{
+ long sam = mode == wxRegKey::Read ? KEY_READ : KEY_ALL_ACCESS;
+
+ sam |= GetMSWViewFlags(viewMode);
+
+ return sam;
+}
+