From 4082f4efa89e412ae5a4b4ae79abd1ba71f64702 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Thu, 24 May 2007 04:08:08 +0000 Subject: [PATCH] Added support for HKEY_CURRENT_USER to the registry access routines. --- .../library/winreg/winreg.cpp | 85 ++++++++++++------ .../os/win32/x86/winreg.dll | Bin 16949 -> 17909 bytes .../eclipse/cdt/utils/WindowsRegistry.java | 36 +++++++- 3 files changed, 94 insertions(+), 27 deletions(-) diff --git a/core/org.eclipse.cdt.core.win32/library/winreg/winreg.cpp b/core/org.eclipse.cdt.core.win32/library/winreg/winreg.cpp index c10d37a253e..e5c284d9437 100644 --- a/core/org.eclipse.cdt.core.win32/library/winreg/winreg.cpp +++ b/core/org.eclipse.cdt.core.win32/library/winreg/winreg.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2006 QNX Software Systems + * Copyright (c) 2005, 2007 QNX Software Systems * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,25 +12,22 @@ #include #include -extern "C" -JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineValue( - JNIEnv * env, jobject obj, jstring subkey, jstring name) -{ +static jstring getValue(JNIEnv * env, HKEY key, jstring subkey, jstring name) { const jchar * csubkey = env->GetStringChars(subkey, NULL); const jchar * cname = env->GetStringChars(name, NULL); jstring result = NULL; - HKEY key; - LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t *)csubkey, 0, KEY_READ, &key); + HKEY skey; + LONG rc = RegOpenKeyEx(key, (const wchar_t *)csubkey, 0, KEY_READ, &skey); if (rc == ERROR_SUCCESS) { DWORD type; wchar_t buffer[256]; DWORD len = sizeof(buffer); - rc = RegQueryValueEx(key, (const wchar_t *)cname, NULL, &type, (BYTE *)&buffer, &len); + rc = RegQueryValueEx(skey, (const wchar_t *)cname, NULL, &type, (BYTE *)&buffer, &len); if (rc == ERROR_SUCCESS) { result = env->NewString((jchar *)buffer, wcslen(buffer)); } - RegCloseKey(key); + RegCloseKey(skey); } env->ReleaseStringChars(subkey, csubkey); @@ -39,28 +36,39 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMac return result; } +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineValue( + JNIEnv * env, jobject obj, jstring subkey, jstring name) +{ + return getValue(env, HKEY_LOCAL_MACHINE, subkey, name); +} + +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getCurrentUserValue( + JNIEnv * env, jobject obj, jstring subkey, jstring name) +{ + return getValue(env, HKEY_CURRENT_USER, subkey, name); +} + /* * Given a subkey (string) under HKEY_LOCAL_MACHINE, and an index (starting from 0) * to the key's array of values, return the name of the indexed value. * The return value is null on any error or when the index is invalid. */ - -extern "C" -JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineValueName( - JNIEnv * env, jobject obj, jstring subkey, jint index) -{ + +static jstring getValueName(JNIEnv * env, HKEY key, jstring subkey, jint index) { const jchar * csubkey = env->GetStringChars(subkey, NULL); jstring result = NULL; - HKEY key; - LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t *)csubkey, 0, KEY_READ, &key); + HKEY skey; + LONG rc = RegOpenKeyEx(key, (const wchar_t *)csubkey, 0, KEY_READ, &skey); if (rc != ERROR_SUCCESS) return NULL; wchar_t valueName[256]; DWORD nameSize = sizeof(valueName) + 2; - rc = RegEnumValue(key, index, + rc = RegEnumValue(skey, index, valueName, // UNICODE string &nameSize, NULL, NULL, @@ -72,35 +80,46 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMac result = env->NewString((jchar *)valueName, nameSize); } - RegCloseKey(key); + RegCloseKey(skey); env->ReleaseStringChars(subkey, csubkey); return result; } +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineValueName( + JNIEnv * env, jobject obj, jstring subkey, jint index) +{ + return getValueName(env, HKEY_LOCAL_MACHINE, subkey, index); +} + +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getCurrentUserValueName( + JNIEnv * env, jobject obj, jstring subkey, jint index) +{ + return getValueName(env, HKEY_CURRENT_USER, subkey, index); +} + /* * Given a subkey (string) under HKEY_LOCAL_MACHINE, and an index (starting from 0) * to the key's array of keys, return the name of the indexed key. * The return value is null on any error or when the index is invalid. */ -extern "C" -JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineKeyName( - JNIEnv * env, jobject obj, jstring subkey, jint index) -{ +static jstring getKeyName(JNIEnv * env, HKEY key, jstring subkey, jint index) { const jchar * csubkey = env->GetStringChars(subkey, NULL); jstring result = NULL; - HKEY key; - LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t *)csubkey, 0, KEY_READ, &key); + HKEY skey; + LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t *)csubkey, 0, KEY_READ, &skey); if (rc != ERROR_SUCCESS) return NULL; wchar_t keyName[256]; DWORD nameSize = sizeof(keyName) + 2; - rc = RegEnumKeyEx(key, index, + rc = RegEnumKeyEx(skey, index, keyName, // UNICODE string &nameSize, NULL, NULL, @@ -112,9 +131,23 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMac result = env->NewString((jchar *)keyName, nameSize); } - RegCloseKey(key); + RegCloseKey(skey); env->ReleaseStringChars(subkey, csubkey); return result; } + +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineKeyName( + JNIEnv * env, jobject obj, jstring subkey, jint index) +{ + return getKeyName(env, HKEY_LOCAL_MACHINE, subkey, index); +} + +extern "C" +JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_WindowsRegistry_getCurrentUserKeyName( + JNIEnv * env, jobject obj, jstring subkey, jint index) +{ + return getKeyName(env, HKEY_CURRENT_USER, subkey, index); +} diff --git a/core/org.eclipse.cdt.core.win32/os/win32/x86/winreg.dll b/core/org.eclipse.cdt.core.win32/os/win32/x86/winreg.dll index 0d613301f7a29c8c9be77d92d1e14987e9ff6d0c..d80166ce1d9b690f949d4ff179462c97570716e4 100644 GIT binary patch delta 3979 zcma)=P*NnB`GiU|kS-%TlwCyE>w<4Tj1f5u<6E6=5-$<t8SB6qaWnasTDi2CBU!6!#s@CP8N!uxD zsX?2=@6%DMHZ~Zejy|tz;}2@-thR8)Ct8;CBC=pP*VD_IRUM;XA@}0Y;2g#mid?^1 ziW5?|4;oHfii46ilHx55Qmo)8J*L~w&#PH#!5%E6oZ36;2Tx}Xl=mh4pd8|+^h@(i zXY>Dm5~g1L4$efU^qFf-eJ!;;pI~41r(xrL@3U}t_qV_Ergi$r#$Gg$ed;K(Iw5^DH-r3~qp(Dm}!!qWj$BdgGe&Jl& z8dcEtg6*{Jb=y_jd$!xQPi0@dk(#`*7>;eN$1nf1I~WubIy~_QRgq66V40Hx15)qpE=cn zL0Bc^3szx+P%YF6O~PT}gzyvLCE78ujNV!VWg?TU~(~j)yj29y&n-+8Aokhr1keWzi`clM< zZ!};b7AcpV6WqkCr1-Wrkd%aYG6o_j$RbEIm0l=V|{x(9u|=p@XCqg zM^~?Yi1wTJ<~O1PvDdC{Z%<2Sso(4CY?iw|%R*{ny}~S6z29&?=Ed^+T>|YYGV3(U4a)X>?WFj$8B8foqm*^iZu^vG5qOhLZZk7QVAE_qHgP88t{aL_ zM<`D72uOxP(*UwZp=kwSdknW|oCAfh&3KeU4>33VoQNwZt=G8rc<%FbqM(HyD$>%G zUiTylk9g1qstd&~K1vT778ZOSIKQ35< z*5TY{`c8?4t}1NjKP1##YT@_DG`*-J8eytPir^@gtn~Diq(9P^M1CL9L?%K)m+y1C!HAqT z9{v;6$b(fQ+iA4O(^$arS0r5tG7iWZ#9=hToF}9z4mGpZXc0y1JK=Q@+3hGZu^2Kr zrJ*|?wgg{c1Vx^NX^;XCS$Z|1>1&ZSHyKf6dKcuk3NQ8on+6fb=V|x0cY6b*Ua@dx zL5OA*s1oE=MW9_E^I4EU+jZ?<`nyF0Ge5a*RU4rI1R*x zBZhtjBB_YvH>|T*ik<__-9B#zF~j0$oPgcaHA#C>E8q$`p%8>`3D)QxYz zK)GTVQ+g64;|g>MZhK;GtdnaX)40nofqNh(3{oE1N-URD#L-(orel%qc=A;HeB1EZ zP}Q*Gu|ShQ(9>0EtsvCrEGhIn;n?R5un$siz5UU;t?rIzJ@vMlTK8^`r{3Y&-yQI` zb?kd=y=U^8Q{dEze-oUR+JN delta 3190 zcmZve3s6+&7017O-M#ECYBwm4EXcz05HLK$?tO@g1}qt?CY?@Uv_hQ+Zjfc(8L9*@T^+NjCeAlT>!)@nS@STj-ainSc}$JRVNS4tHQltk}_Vo%v< zv$S2Tw9&YfQ{JD3v`xjfBZvQRJ06E+8EdwUT8d-Cyk7I{SaXcG{+vc{NiOj&8+{~Y zr>}xO(;*oQs zhi6c2Eb&Zb5r`!F-NGi)?A^i%I&H6T7D8>L_`a2=$aw>E@_$l{Q^4^pA(t*XTx)X= zb!zde3{`_Ws5DPw#)ccltcOO5Z)c?Y{5&x_raF3E!metna4JB^S$zyhZMnAD2(c z=j1o!>+*Z@Kjd5Tm$F^irtDJoDEpLy%8>G;GNDW=FDhr03(A|yTgrbGtLjv9)l#)q zZBU!k9cr68to~U2iF#VSrh48}Z>ge|p?S1AZHx9z?IA6s4Qt1>=e4uiW$l_axPI!@ zyj!ABNf+Gfs6Ic(I*I}1QBQ$8`xS2CFbS+6aa{FoE4a*7L%_WWX?go1^HVa zOqh!Uhe4c}R3p{vAetpbss;js14up%ia)kYII)a27Pbm9oh)=qPMnARR;tQ((Tzeo zj!dku+tUo)e4MdPp|iccr>(2EsvX3*@wJ zlB9Y8`3IhEVJGb@a!WgTyp*VYw8$<<^h{BAX#{1GwRyd6NQ^6$B_dIz+CxW69Q26W zMZLuZIgjbW)b?WRY2GD?Zn*QqQ!t}?U$}s=--0yajcH2kNXGsI;zSECo%|Ih--L$d z6ObH}W*(%~q{%>m{U%aW4pabSr1pZe;MZrr%XKY6J>AAL*_)T{?h&>iS#hG>O~0rQ3OndduUonwvo_xuu0@oj3Va5X}0bh_74evh3Nji#u=`!wrIzff&id z3C*DnLvxf9Q=eV{xnzpEWTi$WGi+Lt>rhRb$SlaqrZ@`<*MRWRCuiUeka4t(S@M7k zEZSLng9rNeu^H3Os)1&jVWEt$2B0Vs;iaeE#ZCQ67V88VU+AL$V0(Ws(8~%I2p4~E zNz@pK(IKvxNNPG46?+Nj9k{qBS?pDqGbZv!kV#Xq4|TaQ`|}{5o1&Jd(M8o0F2pb0 z2PQ`i$n?Ur;A0UC_O&yoslWzkjAM#$#{Zl8(v)X62w!od6QKm*G&Pu!Fc9CjhUhrR z97u8q{UpNYV#7Z8)Sc?(|oLce_MZlAT&^88pd85>tqoVI)Jd&g)m;^agZq9 z#_4_$BoCXx=;E(IQde@9T;)*