diff options
author | Alexey Melnichuk <alexeymelnichuck@gmail.com> | 2016-11-15 16:04:57 +0300 |
---|---|---|
committer | Alexey Melnichuk <alexeymelnichuck@gmail.com> | 2016-11-15 16:08:28 +0300 |
commit | 104aff465b80a879a9a44415baa34ce53bfa602a (patch) | |
tree | 933b4c1099906d284d080cd177d29c509fc08af8 | |
parent | 93608de75f120274e68f7250f0f64f4073e8d229 (diff) |
Add. `32` and `64` access modes (close #1)
```Lua
local p = [[HKEY_LOCAL_MACHINE\SOFTWARE]]
local key = assert(winreg.openkey(p, 'r'))
local key64 = assert(winreg.openkey(p, 'r64'))
local key32 = assert(winreg.openkey(p, 'r32'))
```
-rw-r--r-- | appveyor.yml | 1 | ||||
-rw-r--r-- | src/winreg.c | 14 | ||||
-rw-r--r-- | test/test_5_1_14.lua | 21 |
3 files changed, 36 insertions, 0 deletions
diff --git a/appveyor.yml b/appveyor.yml index b978027..8500078 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,3 +33,4 @@ test_script: - lua test_5_1_9.lua - lua test_5_1_10.lua - lua test_5_1_13.lua + - lua test_5_1_14.lua diff --git a/src/winreg.c b/src/winreg.c index 5257166..1952a46 100644 --- a/src/winreg.c +++ b/src/winreg.c @@ -97,6 +97,20 @@ REGSAM reg_aux_getaccess(lua_State *L, int i){ case 'w': acc |= KEY_WRITE; break;
case 'r': acc |= KEY_READ ; break;
case 'a': acc |= KEY_ALL_ACCESS ; break;
+#ifdef KEY_WOW64_64KEY
+ case '6': if(*++psz == '4') {
+ // Access a 64-bit key from either a 32-bit or 64-bit application
+ acc |= KEY_WOW64_64KEY;
+ break;
+ }
+#endif
+#ifdef KEY_WOW64_32KEY
+ case '3': if(*++psz == '2') {
+ // Access a 64-bit key from either a 32-bit or 64-bit application
+ acc |= KEY_WOW64_32KEY;
+ break;
+ }
+#endif
default : lua_error_invalid_option(L, i);
}
}
diff --git a/test/test_5_1_14.lua b/test/test_5_1_14.lua new file mode 100644 index 0000000..a5fb409 --- /dev/null +++ b/test/test_5_1_14.lua @@ -0,0 +1,21 @@ +local winreg = require "winreg" + +local p = [[HKEY_LOCAL_MACHINE\SOFTWARE]] + +local key64 = assert(winreg.openkey(p, 'r64')) +local key32 = assert(winreg.openkey(p, 'r32')) + +function DumpKeys(hkey) + for name in hkey:enumvalue() do + result, type = hkey:getvalue(name) + print(name, result, type) + end +end + +print('X64:') +DumpKeys(key64) +print("---------------------------------") +print('X32:') +DumpKeys(key32) +print("---------------------------------") + |