|
@@ -35,7 +35,9 @@
|
|
|
// prior to calling this function.
|
|
// prior to calling this function.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool WindowsRegistry::
|
|
bool WindowsRegistry::
|
|
|
-set_string_value(const string &key, const string &name, const string &value) {
|
|
|
|
|
|
|
+set_string_value(const string &key, const string &name, const string &value,
|
|
|
|
|
+ WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
TextEncoder encoder;
|
|
TextEncoder encoder;
|
|
|
wstring wvalue = encoder.decode_text(value);
|
|
wstring wvalue = encoder.decode_text(value);
|
|
|
|
|
|
|
@@ -72,7 +74,7 @@ set_string_value(const string &key, const string &name, const string &value) {
|
|
|
<< "' for storing in registry.\n";
|
|
<< "' for storing in registry.\n";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return do_set(key, name, REG_SZ, mb_result, mb_result_len);
|
|
|
|
|
|
|
+ return do_set(key, name, REG_SZ, mb_result, mb_result_len, rl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
@@ -83,9 +85,11 @@ set_string_value(const string &key, const string &name, const string &value) {
|
|
|
// to calling this function.
|
|
// to calling this function.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool WindowsRegistry::
|
|
bool WindowsRegistry::
|
|
|
-set_int_value(const string &key, const string &name, int value) {
|
|
|
|
|
|
|
+set_int_value(const string &key, const string &name, int value,
|
|
|
|
|
+ WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
DWORD dw = value;
|
|
DWORD dw = value;
|
|
|
- return do_set(key, name, REG_DWORD, &dw, sizeof(dw));
|
|
|
|
|
|
|
+ return do_set(key, name, REG_DWORD, &dw, sizeof(dw), rl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
@@ -95,10 +99,12 @@ set_int_value(const string &key, const string &name, int value) {
|
|
|
// the key is not known or is some unsupported type.
|
|
// the key is not known or is some unsupported type.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
WindowsRegistry::Type WindowsRegistry::
|
|
WindowsRegistry::Type WindowsRegistry::
|
|
|
-get_key_type(const string &key, const string &name) {
|
|
|
|
|
|
|
+get_key_type(const string &key, const string &name,
|
|
|
|
|
+ WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
int data_type;
|
|
int data_type;
|
|
|
string data;
|
|
string data;
|
|
|
- if (!do_get(key, name, data_type, data)) {
|
|
|
|
|
|
|
+ if (!do_get(key, name, data_type, data, rl)) {
|
|
|
return T_none;
|
|
return T_none;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -126,10 +132,12 @@ get_key_type(const string &key, const string &name) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
string WindowsRegistry::
|
|
string WindowsRegistry::
|
|
|
get_string_value(const string &key, const string &name,
|
|
get_string_value(const string &key, const string &name,
|
|
|
- const string &default_value) {
|
|
|
|
|
|
|
+ const string &default_value,
|
|
|
|
|
+ WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
int data_type;
|
|
int data_type;
|
|
|
string data;
|
|
string data;
|
|
|
- if (!do_get(key, name, data_type, data)) {
|
|
|
|
|
|
|
+ if (!do_get(key, name, data_type, data, rl)) {
|
|
|
return default_value;
|
|
return default_value;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -184,10 +192,12 @@ get_string_value(const string &key, const string &name,
|
|
|
// value, default_value is returned instead.
|
|
// value, default_value is returned instead.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
int WindowsRegistry::
|
|
int WindowsRegistry::
|
|
|
-get_int_value(const string &key, const string &name, int default_value) {
|
|
|
|
|
|
|
+get_int_value(const string &key, const string &name, int default_value,
|
|
|
|
|
+ WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
int data_type;
|
|
int data_type;
|
|
|
string data;
|
|
string data;
|
|
|
- if (!do_get(key, name, data_type, data)) {
|
|
|
|
|
|
|
+ if (!do_get(key, name, data_type, data, rl)) {
|
|
|
return default_value;
|
|
return default_value;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -211,12 +221,17 @@ get_int_value(const string &key, const string &name, int default_value) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool WindowsRegistry::
|
|
bool WindowsRegistry::
|
|
|
do_set(const string &key, const string &name,
|
|
do_set(const string &key, const string &name,
|
|
|
- int data_type, const void *data, int data_length) {
|
|
|
|
|
- HKEY hkey;
|
|
|
|
|
|
|
+ int data_type, const void *data, int data_length,
|
|
|
|
|
+ const WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
|
|
+ HKEY hkey, regkey = HKEY_LOCAL_MACHINE;
|
|
|
LONG error;
|
|
LONG error;
|
|
|
|
|
|
|
|
|
|
+ if (rl == rl_user) // switch to user local settings
|
|
|
|
|
+ regkey = HKEY_CURRENT_USER;
|
|
|
|
|
+
|
|
|
error =
|
|
error =
|
|
|
- RegOpenKeyEx(HKEY_LOCAL_MACHINE, key.c_str(), 0, KEY_SET_VALUE, &hkey);
|
|
|
|
|
|
|
+ RegOpenKeyEx(regkey, key.c_str(), 0, KEY_SET_VALUE, &hkey);
|
|
|
if (error != ERROR_SUCCESS) {
|
|
if (error != ERROR_SUCCESS) {
|
|
|
express_cat.error()
|
|
express_cat.error()
|
|
|
<< "Unable to open registry key " << key
|
|
<< "Unable to open registry key " << key
|
|
@@ -254,12 +269,17 @@ do_set(const string &key, const string &name,
|
|
|
// value.
|
|
// value.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool WindowsRegistry::
|
|
bool WindowsRegistry::
|
|
|
-do_get(const string &key, const string &name, int &data_type, string &data) {
|
|
|
|
|
- HKEY hkey;
|
|
|
|
|
|
|
+do_get(const string &key, const string &name, int &data_type, string &data,
|
|
|
|
|
+ const WindowsRegistry::RegLevel rl)
|
|
|
|
|
+{
|
|
|
|
|
+ HKEY hkey, regkey = HKEY_LOCAL_MACHINE;
|
|
|
LONG error;
|
|
LONG error;
|
|
|
|
|
|
|
|
|
|
+ if (rl == rl_user) // switch to user local settings
|
|
|
|
|
+ regkey = HKEY_CURRENT_USER;
|
|
|
|
|
+
|
|
|
error =
|
|
error =
|
|
|
- RegOpenKeyEx(HKEY_LOCAL_MACHINE, key.c_str(), 0, KEY_QUERY_VALUE, &hkey);
|
|
|
|
|
|
|
+ RegOpenKeyEx(regkey, key.c_str(), 0, KEY_QUERY_VALUE, &hkey);
|
|
|
if (error != ERROR_SUCCESS) {
|
|
if (error != ERROR_SUCCESS) {
|
|
|
express_cat.debug()
|
|
express_cat.debug()
|
|
|
<< "Unable to open registry key " << key
|
|
<< "Unable to open registry key " << key
|