From 84cef01e4612302e984862c5c91d07b8073fbb33 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 3 Apr 2006 05:41:36 +0000 Subject: [PATCH] Windows registry access utility. --- .../.settings/org.eclipse.cdt.core.prefs | 3 + .../cdt/core/winreg/tests/WinRegTests.java | 23 ++++++++ .../library/nmake.mak | 8 +++ .../library/winreg.cpp | 53 ++++++++++++++++++ .../os/win32/x86/.cvsignore | 2 + .../os/win32/x86/winreg.dll | Bin 0 -> 49152 bytes .../eclipse/cdt/utils/WindowsRegistry.java | 39 +++++++++++++ 7 files changed, 128 insertions(+) create mode 100644 core/org.eclipse.cdt.core.tests/.settings/org.eclipse.cdt.core.prefs create mode 100644 core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/winreg/tests/WinRegTests.java create mode 100644 core/org.eclipse.cdt.core.win32/library/nmake.mak create mode 100644 core/org.eclipse.cdt.core.win32/library/winreg.cpp create mode 100644 core/org.eclipse.cdt.core.win32/os/win32/x86/.cvsignore create mode 100644 core/org.eclipse.cdt.core.win32/os/win32/x86/winreg.dll create mode 100644 core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/WindowsRegistry.java diff --git a/core/org.eclipse.cdt.core.tests/.settings/org.eclipse.cdt.core.prefs b/core/org.eclipse.cdt.core.tests/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..0e9287b8de5 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,3 @@ +#Sun Apr 02 23:10:10 EDT 2006 +eclipse.preferences.version=1 +indexerId=org.eclipse.cdt.core.nullindexer diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/winreg/tests/WinRegTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/winreg/tests/WinRegTests.java new file mode 100644 index 00000000000..5bef66d737f --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/winreg/tests/WinRegTests.java @@ -0,0 +1,23 @@ +package org.eclipse.cdt.core.winreg.tests; + +import org.eclipse.cdt.utils.WindowsRegistry; +import org.eclipse.core.runtime.Platform; + +import junit.framework.TestCase; + +public class WinRegTests extends TestCase { + + public void test1() { + WindowsRegistry registry = WindowsRegistry.getRegistry(); + if (Platform.getOS().equals(Platform.OS_WIN32)) { + assertNotNull(registry); + String value = registry.getLocalMachineValue("SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "ProgramFilesDir"); + // Not sure how you set this to anything else so it seems safe. + assertEquals("C:\\Program Files", value); + } else { + // Should be null on non-Windows platforms + assertNotNull(registry); + } + } + +} diff --git a/core/org.eclipse.cdt.core.win32/library/nmake.mak b/core/org.eclipse.cdt.core.win32/library/nmake.mak new file mode 100644 index 00000000000..a3ce6c74cc8 --- /dev/null +++ b/core/org.eclipse.cdt.core.win32/library/nmake.mak @@ -0,0 +1,8 @@ +TARGET = ..\os\win32\x86\winreg.dll + +OBJS = winreg.obj + +CPPFLAGS = /nologo /I C:\Java\jdk1.5.0_06\include /I C:\Java\jdk1.5.0_06\include\win32 /DUNICODE + +$(TARGET): $(OBJS) + link /nologo /dll /out:$(TARGET) $(OBJS) advapi32.lib user32.lib diff --git a/core/org.eclipse.cdt.core.win32/library/winreg.cpp b/core/org.eclipse.cdt.core.win32/library/winreg.cpp new file mode 100644 index 00000000000..3f892b95fa7 --- /dev/null +++ b/core/org.eclipse.cdt.core.win32/library/winreg.cpp @@ -0,0 +1,53 @@ +#include +#include +#include + +jstring getErrorMsg(JNIEnv * env, wchar_t * name) { + wchar_t msg[256]; + wchar_t * msgBuff; + DWORD err = GetLastError(); + + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &msgBuff, + 0, NULL ); + + wsprintf(msg, L"%s failed with error %d: %s", name, err, msgBuff); + + LocalFree(msgBuff); + + return env->NewString((jchar *)msg, wcslen(msg)); +} + +extern "C" +JNIEXPORT jstring Java_org_eclipse_cdt_utils_WindowsRegistry_getLocalMachineValue( + JNIEnv * env, jobject obj, jstring subkey, jstring name) +{ + const jchar * csubkey = env->GetStringChars(subkey, NULL); + const jchar * cname = env->GetStringChars(name, NULL); + jstring result; + + HKEY key; + LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t *)csubkey, 0, KEY_READ, &key); + if (rc != ERROR_SUCCESS) { + result = getErrorMsg(env, L"RegOpenKeyEx"); + } else { + DWORD type; + wchar_t buffer[256]; + DWORD len = sizeof(buffer); + rc = RegQueryValueEx(key, (const wchar_t *)cname, NULL, &type, (BYTE *)&buffer, &len); + if (rc != ERROR_SUCCESS) { + result = getErrorMsg(env, L"RegQueryValueEx"); + } else { + result = env->NewString((jchar *)buffer, wcslen(buffer)); + } + } + + env->ReleaseStringChars(subkey, csubkey); + env->ReleaseStringChars(name, cname); + + return result; +} diff --git a/core/org.eclipse.cdt.core.win32/os/win32/x86/.cvsignore b/core/org.eclipse.cdt.core.win32/os/win32/x86/.cvsignore new file mode 100644 index 00000000000..d3879971eec --- /dev/null +++ b/core/org.eclipse.cdt.core.win32/os/win32/x86/.cvsignore @@ -0,0 +1,2 @@ +winreg.lib +winreg.exp 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 new file mode 100644 index 0000000000000000000000000000000000000000..2c113d73d3f882fc72de3de41122f3e9f07e0801 GIT binary patch literal 49152 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 literal 0 HcmV?d00001 diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/WindowsRegistry.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/WindowsRegistry.java new file mode 100644 index 00000000000..bb811dfb7b8 --- /dev/null +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/WindowsRegistry.java @@ -0,0 +1,39 @@ +/** + * + */ +package org.eclipse.cdt.utils; + +import org.eclipse.core.runtime.Platform; + +/** + * @author DSchaefer + * + */ +public class WindowsRegistry { + + private static boolean failed = false; + private static WindowsRegistry registry; + + private WindowsRegistry() { + } + + public static WindowsRegistry getRegistry() { + if (registry == null && !failed) { + if (Platform.getOS().equals(Platform.OS_WIN32)) { + try { + System.loadLibrary("winreg"); + registry = new WindowsRegistry(); + } catch (UnsatisfiedLinkError e) { + failed = true; + return null; + } + } else + failed = true; + } + + return registry; + } + + public native String getLocalMachineValue(String subkey, String name); + +}