in src/main/cpp/jnilib/windows/src/jni_WindowsRegistry.c [540:582]
JNIEXPORT jbyteArray JNICALL Java_org_netbeans_installer_utils_system_windows_WindowsRegistry_getBinaryValue0(JNIEnv *jEnv, jobject jObject, jint jMode, jint jSection, jstring jKey, jstring jName) {
HKEY hkey = 0;
unsigned short* key = getWideChars(jEnv, jKey);
unsigned short* value = getWideChars(jEnv, jName);
jbyteArray result = NULL;
if (RegOpenKeyExW(getHKEY(jSection), key, 0, KEY_QUERY_VALUE | getMode(jMode), &hkey) == ERROR_SUCCESS) {
DWORD dwType = 0;
DWORD dwValue = 0;
DWORD size = 0;
BYTE* data = NULL;
if (RegQueryValueExW(hkey, value, NULL, &dwType, NULL, &size) == ERROR_SUCCESS) {
if (dwType == REG_BINARY || dwType == REG_NONE) {
data = (BYTE*) LocalAlloc(LPTR, size + 8);
if (RegQueryValueExW(hkey, value, NULL, &dwType, (BYTE*) data, &size) == ERROR_SUCCESS) {
if (data != NULL) {
result = (*jEnv)->NewByteArray(jEnv, (jsize) size);
(*jEnv)->SetByteArrayRegion(jEnv, result, 0, (jsize) size, (jbyte*) data);
}
} else {
throwException(jEnv, "Could not read key data");
}
FREE(data);
} else {
throwException(jEnv, "Value is of wrong type");
}
} else {
throwException(jEnv, "Could not read key data");
}
} else {
throwException(jEnv, "Could not open key");
}
if (hkey != 0) {
RegCloseKey(hkey);
}
FREE(key);
FREE(value);
return result;
}