[SIGAR-120] Support WoW registry reflection
This commit is contained in:
		
							parent
							
								
									7ac30e778a
								
							
						
					
					
						commit
						61327b9034
					
				| @ -106,6 +106,19 @@ JNIEXPORT jint SIGAR_JNI(win32_RegistryKey_RegLoadKey) | ||||
|     return lResult; | ||||
| } | ||||
| 
 | ||||
| /* http://msdn.microsoft.com/en-us/library/aa384129(VS.85).aspx */ | ||||
| #ifndef KEY_WOW64_64KEY | ||||
| #define KEY_WOW64_64KEY 0x0100 | ||||
| #endif | ||||
| #ifndef KEY_WOW64_32KEY | ||||
| #define KEY_WOW64_32KEY 0x0200 | ||||
| #endif | ||||
| 
 | ||||
| static DWORD RegOpenOpts[] = { | ||||
|     KEY_WOW64_32KEY, | ||||
|     KEY_WOW64_64KEY | ||||
| }; | ||||
| 
 | ||||
| JNIEXPORT jlong SIGAR_JNI(win32_RegistryKey_RegOpenKey) | ||||
| (JNIEnv *env, jclass, jlong hkey, jstring subkey) | ||||
| { | ||||
| @ -113,6 +126,7 @@ JNIEXPORT jlong SIGAR_JNI(win32_RegistryKey_RegOpenKey) | ||||
|     jsize len = env->GetStringLength(subkey); | ||||
|     LPTSTR lpSubkey = (LPTSTR)env->GetStringChars(subkey, NULL); | ||||
|     LPTSTR copy; | ||||
|     int i; | ||||
| 
 | ||||
|     /* required under IBM/WebSphere 4.0 for certain keys */ | ||||
|     if (lpSubkey[len] != '\0') { | ||||
| @ -122,7 +136,18 @@ JNIEXPORT jlong SIGAR_JNI(win32_RegistryKey_RegOpenKey) | ||||
|     else { | ||||
|         copy = lpSubkey; | ||||
|     } | ||||
|     RegOpenKey((HKEY)hkey, copy, &hkeyResult); | ||||
| 
 | ||||
|     /* try both flags so 32-bit apps can access registry entries
 | ||||
|        of 64-bit apps and vice-versa */ | ||||
|     for (i=0; i<sizeof(RegOpenOpts)/sizeof(RegOpenOpts[0]); i++) { | ||||
|         DWORD status = | ||||
|             RegOpenKeyEx((HKEY)hkey, copy, | ||||
|                          0, KEY_READ|RegOpenOpts[i], | ||||
|                          &hkeyResult); | ||||
|         if (status == ERROR_SUCCESS) { | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     env->ReleaseStringChars(subkey, (const jchar *)lpSubkey); | ||||
|     if (copy != lpSubkey) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Doug MacEachern
						Doug MacEachern