@SuppressWarnings("unchecked") private static <T> T invokeRegistryMethod(Method method, Object... args) { try { return (T) method.invoke(_prefsInstance, args); } catch (InvocationTargetException e) { throw new WindowsRegistryException("Error executing registry method " + method.getName(), e); } catch (IllegalAccessException e) { throw new WindowsRegistryException("Error executing registry method " + method.getName(), e); } }
/** * Closes a previously opened key. * * @param keyHandle handle to opened key. */ private static void closeKey(Integer keyHandle) { if (keyHandle == null) return; // Invoke registry operation, get result: Integer result = invokeRegistryMethod(_closeKeyMethod, keyHandle); if (result != ERROR_SUCCESS) throw new WindowsRegistryException("Error. Code=" + result); }
/** * Opens a registry key. * * @param baseKey One of the predefined keys, or a key previously returned by openKey. * @param keyPath Path relative to baseKey. * @param securityToken Security modifiers for key. * @return Handle to opened key. Null if not exists. */ private static Integer openKey(Integer baseKey, String keyPath, int securityToken) { // Invoke registry operation, get result: int[] result = invokeRegistryMethod(_openKeyMethod, baseKey, toByteArray(keyPath), securityToken); // Check result: int errorCode = result[ERROR_CODE]; switch (errorCode) { case ERROR_SUCCESS: return result[NATIVE_HANDLE]; case ERROR_FILE_NOT_FOUND: return null; case ERROR_ACCESS_DENIED: throw new WindowsRegistryException("Access denied. Path=" + keyPath + ", securityToken=" + securityToken); default: throw new WindowsRegistryException("Error. Code=" + errorCode + ", Path=" + keyPath + ", securityToken=" + securityToken); } }