windows.registry: add change-registry-value and delete-value
parent
b21f9ed3eb
commit
7298918029
|
@ -1317,7 +1317,14 @@ FUNCTION: LONG RegDeleteKeyExW (
|
||||||
ALIAS: RegDeleteKeyEx RegDeleteKeyExW
|
ALIAS: RegDeleteKeyEx RegDeleteKeyExW
|
||||||
|
|
||||||
! : RegDeleteValueA ;
|
! : RegDeleteValueA ;
|
||||||
! : RegDeleteValueW ;
|
|
||||||
|
FUNCTION: LONG RegDeleteValueW (
|
||||||
|
HKEY hKey,
|
||||||
|
LPCWSTR lpValueName
|
||||||
|
)
|
||||||
|
|
||||||
|
ALIAS: RegDeleteValue RegDeleteValueW
|
||||||
|
|
||||||
! : RegDisablePredefinedCache ;
|
! : RegDisablePredefinedCache ;
|
||||||
! : RegEnumKeyA ;
|
! : RegEnumKeyA ;
|
||||||
! : RegEnumKeyExA ;
|
! : RegEnumKeyExA ;
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
Doug Coleman
|
Doug Coleman
|
||||||
|
Alexander Ilin
|
||||||
|
|
|
@ -1,7 +1,27 @@
|
||||||
! Copyright (C) 2010 Doug Coleman.
|
! Copyright (C) 2010 Doug Coleman.
|
||||||
|
! Copyright (C) 2018 Alexander Ilin.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel tools.test windows.advapi32 windows.registry ;
|
USING: byte-arrays io.encodings.string io.encodings.utf16n
|
||||||
|
kernel sequences tools.test windows.advapi32 windows.kernel32
|
||||||
|
windows.registry ;
|
||||||
IN: windows.registry.tests
|
IN: windows.registry.tests
|
||||||
|
|
||||||
[ ]
|
[ ]
|
||||||
[ HKEY_CURRENT_USER "SOFTWARE\\\\Microsoft" read-registry drop ] unit-test
|
[ HKEY_CURRENT_USER "SOFTWARE\\\\Microsoft" read-registry drop ] unit-test
|
||||||
|
|
||||||
|
[ t ]
|
||||||
|
[
|
||||||
|
HKEY_CURRENT_USER "Environment" KEY_SET_VALUE [
|
||||||
|
"factor-test" "value" utf16n encode dup length set-reg-sz
|
||||||
|
] with-open-registry-key
|
||||||
|
HKEY_CURRENT_USER "Environment" "factor-test" [
|
||||||
|
"test-string" ";" glue
|
||||||
|
] change-registry-value
|
||||||
|
HKEY_CURRENT_USER "Environment" KEY_QUERY_VALUE [
|
||||||
|
"factor-test" f f MAX_PATH <byte-array> reg-query-value-ex
|
||||||
|
utf16n decode "value;test-string\0" =
|
||||||
|
] with-open-registry-key
|
||||||
|
HKEY_CURRENT_USER "Environment" KEY_SET_VALUE [
|
||||||
|
"factor-test" delete-value
|
||||||
|
] with-open-registry-key
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
! Copyright (C) 2010 Doug Coleman.
|
! Copyright (C) 2010 Doug Coleman.
|
||||||
|
! Copyright (C) 2018 Alexander Ilin.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.c-types byte-arrays kernel locals sequences
|
USING: accessors alien.c-types alien.data byte-arrays
|
||||||
windows.advapi32 windows.errors math windows
|
classes.struct continuations io.encodings.string
|
||||||
windows.kernel32 windows.time accessors alien.data
|
io.encodings.utf16n kernel literals locals math sequences sets
|
||||||
windows.types classes.struct continuations ;
|
splitting windows windows.advapi32 windows.errors
|
||||||
|
windows.kernel32 windows.time windows.types ;
|
||||||
IN: windows.registry
|
IN: windows.registry
|
||||||
|
|
||||||
ERROR: open-key-failed key subkey mode error-string ;
|
ERROR: open-key-failed key subkey mode error-string ;
|
||||||
|
@ -66,22 +68,31 @@ CONSTANT: registry-value-max-length 16384
|
||||||
: grow-buffer ( byte-array -- byte-array' )
|
: grow-buffer ( byte-array -- byte-array' )
|
||||||
length 2 * <byte-array> ;
|
length 2 * <byte-array> ;
|
||||||
|
|
||||||
:: reg-query-value-ex ( key subkey ptr1 ptr2 buffer -- buffer )
|
PRIVATE>
|
||||||
|
|
||||||
|
:: reg-query-value-ex ( key value-name ptr1 lpType buffer -- buffer )
|
||||||
buffer length uint <ref> :> pdword
|
buffer length uint <ref> :> pdword
|
||||||
key subkey ptr1 ptr2 buffer pdword [ RegQueryValueEx ] 2keep
|
key value-name ptr1 lpType buffer pdword [ RegQueryValueEx ] 2keep
|
||||||
rot :> ret
|
rot :> ret
|
||||||
ret ERROR_SUCCESS = [
|
ret ERROR_SUCCESS = [
|
||||||
uint deref head
|
uint deref head
|
||||||
] [
|
] [
|
||||||
ret ERROR_MORE_DATA = [
|
ret ERROR_MORE_DATA = [
|
||||||
2drop
|
2drop
|
||||||
key subkey ptr1 ptr2 buffer
|
key value-name ptr1 lpType buffer
|
||||||
grow-buffer reg-query-value-ex
|
grow-buffer reg-query-value-ex
|
||||||
] [
|
] [
|
||||||
ret n>win32-error-string throw
|
ret n>win32-error-string throw
|
||||||
] if
|
] if
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
|
: delete-value ( key value-name -- )
|
||||||
|
RegDeleteValue dup ERROR_SUCCESS = [
|
||||||
|
drop
|
||||||
|
] [
|
||||||
|
n>win32-error-string throw
|
||||||
|
] if ;
|
||||||
|
|
||||||
TUPLE: registry-info
|
TUPLE: registry-info
|
||||||
key
|
key
|
||||||
class-name
|
class-name
|
||||||
|
@ -184,11 +195,30 @@ TUPLE: registry-enum-key ;
|
||||||
: set-reg-sz ( hkey value lpdata cbdata -- )
|
: set-reg-sz ( hkey value lpdata cbdata -- )
|
||||||
[ REG_SZ ] 2dip set-reg-key ;
|
[ REG_SZ ] 2dip set-reg-key ;
|
||||||
|
|
||||||
PRIVATE>
|
|
||||||
|
|
||||||
: windows-performance-data ( -- byte-array )
|
: windows-performance-data ( -- byte-array )
|
||||||
HKEY_PERFORMANCE_DATA "Global" f f
|
HKEY_PERFORMANCE_DATA "Global" f f
|
||||||
21 2^ <byte-array> reg-query-value-ex ;
|
21 2^ <byte-array> reg-query-value-ex ;
|
||||||
|
|
||||||
: read-registry ( key subkey -- registry-info )
|
: read-registry ( key subkey -- registry-info )
|
||||||
KEY_READ [ reg-query-info-key ] with-open-registry-key ;
|
KEY_READ [ reg-query-info-key ] with-open-registry-key ;
|
||||||
|
|
||||||
|
:: change-registry-value ( key subkey value-name quot: ( value -- value' ) -- )
|
||||||
|
0 DWORD <ref> :> type
|
||||||
|
key subkey KEY_QUERY_VALUE KEY_SET_VALUE bitor [
|
||||||
|
dup :> hkey value-name f type MAX_PATH <byte-array>
|
||||||
|
reg-query-value-ex
|
||||||
|
type DWORD deref ${ REG_SZ REG_EXPAND_SZ REG_MULTI_SZ } in?
|
||||||
|
dup :> string-type? [
|
||||||
|
utf16n decode type DWORD deref REG_MULTI_SZ = [
|
||||||
|
"\0" split 2
|
||||||
|
] [ 1 ] if head*
|
||||||
|
] when
|
||||||
|
quot call( x -- x' )
|
||||||
|
string-type? [
|
||||||
|
type DWORD deref REG_MULTI_SZ = [
|
||||||
|
"\0" join 2
|
||||||
|
] [ 1 ] if [ CHAR: \0 suffix ] times utf16n encode
|
||||||
|
] when
|
||||||
|
[ hkey value-name type DWORD deref ] dip dup length
|
||||||
|
set-reg-key
|
||||||
|
] with-open-registry-key ;
|
||||||
|
|
Loading…
Reference in New Issue