Пример #1
0
JNIEXPORT jstring JNICALL
Java_net_rubygrapefruit_platform_internal_jni_WindowsRegistryFunctions_getStringValue(JNIEnv *env, jclass target, jint keyNum, jstring subkey, jstring valueName, jobject result) {
    HKEY key = get_key_from_ordinal(keyNum);
    wchar_t* subkeyStr = java_to_wchar(env, subkey, result);
    wchar_t* valueNameStr = java_to_wchar(env, valueName, result);
    DWORD size = 0;

    LONG retval = SHRegGetValueW(key, subkeyStr, valueNameStr, SRRF_RT_REG_SZ, NULL, NULL, &size);
    if (retval != ERROR_SUCCESS) {
        free(subkeyStr);
        free(valueNameStr);
        if (retval != ERROR_FILE_NOT_FOUND) {
            mark_failed_with_code(env, "could not determine size of registry value", retval, NULL, result);
        }
        return NULL;
    }

    wchar_t* value = (wchar_t*)malloc(sizeof(wchar_t) * (size+1));
    retval = SHRegGetValueW(key, subkeyStr, valueNameStr, SRRF_RT_REG_SZ, NULL, value, &size);
    free(subkeyStr);
    free(valueNameStr);
    if (retval != ERROR_SUCCESS) {
        free(value);
        mark_failed_with_code(env, "could not get registry value", retval, NULL, result);
        return NULL;
    }

    jstring jvalue = wchar_to_java(env, value, wcslen(value), result);
    free(value);

    return jvalue;
}
Пример #2
0
static void init_logging() {
  InitializeCriticalSection(&debug_file_section);

  WCHAR path[MAX_PATH];
  DWORD path_size = MAX_PATH;
  DWORD err;
  if ((err = SHRegGetValueW(HKEY_LOCAL_MACHINE, L"Software\\Google\\WebP Codec",
                  L"DebugPath", SRRF_RT_REG_SZ, NULL, path, &path_size)) != ERROR_SUCCESS) {
    StringCchCopyW(path, MAX_PATH, L"C:\\DebugOut");
  }

  WCHAR filename[MAX_PATH];
  time_t timestamp;
  time(&timestamp);
  StringCchPrintfW(filename, MAX_PATH, L"%s\\webp-codec-debug-%010Ld-%08x.txt",
      path, (LONGLONG)timestamp, GetCurrentProcessId());
  debug_file = _wfopen(filename, L"w");
}