-
Notifications
You must be signed in to change notification settings - Fork 2
/
registry.spf
301 lines (246 loc) · 10 KB
/
registry.spf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
\ Ôàéë: registry.spf
\ Àâòîð: VoidVolker
\ Äàòà: 18/06/2018 16:41
\ Âåðñèÿ: 1.2
\ Îïèñàíèå: Ðàáîòà ñ ðååñòðîì: ÷òåíèå/çàïèñü, óäàëåíèå çíà÷åíèé/êëþ÷åé.
MODULE: REGISTRY_MODULE
\ ----------
\ Ìàêñèìàëüíûé ðàçìåð ýëåìåíòîâ ðååñòðà (Registry Element Size Limits)
\ Èìÿ êëþ÷à 255 ñèìâîëîâ
\ Èìÿ çíà÷åíèÿ 16383 ñèìâîëà; Windows 2000: 260 ANSI ñèìâîëîâ èëè 16383 þíèêîä-ñèìâîëîâ
\ Çíà÷åíèå Âñÿ äîñòóïíàÿ ïàìÿòü (ïîñëåäíèé ôîðìàò); 1 ÌÁ (ñòàíäàðòíûé ôîðìàò)
\ Äåðåâî Ìàêñèìóì 512 óðîâíåé. Çà îäèí àïè-âûçîâ ìîæíî ñîñçäàòü íå áîëåå 32-óõ óðîíâåé.
EXPORT
0x80000000 CONSTANT HKEY_CLASSES_ROOT HKEY_CLASSES_ROOT CONSTANT HKCR
0x80000001 CONSTANT HKEY_CURRENT_USER HKEY_CURRENT_USER CONSTANT HKCU
0x80000002 CONSTANT HKEY_LOCAL_MACHINE HKEY_LOCAL_MACHINE CONSTANT HKLM
0x80000003 CONSTANT HKEY_USERS HKEY_USERS CONSTANT HKU
0x80000004 CONSTANT HKEY_PERFORMANCE_DATA HKEY_PERFORMANCE_DATA CONSTANT HKPD
0x80000050 CONSTANT HKEY_PERFORMANCE_TEXT HKEY_PERFORMANCE_TEXT CONSTANT HKPT
0x80000060 CONSTANT HKEY_PERFORMANCE_NLSTEXT HKEY_PERFORMANCE_NLSTEXT CONSTANT HKPN
0x80000005 CONSTANT HKEY_CURRENT_CONFIG HKEY_CURRENT_CONFIG CONSTANT HKCC
0x80000006 CONSTANT HKEY_DYN_DATA HKEY_DYN_DATA CONSTANT HKDD
DEFINITIONS
0x103 CONSTANT ERROR_NO_MORE_ITEMS
0xEA CONSTANT ERROR_MORE_DATA
\ #define ERROR_SUCCESS 0
\ #define ERROR_FILE_NOT_FOUND 2
\ #define ERROR_ACCESS_DENIED 5
\ #define ERROR_INVALID_HANDLE 6
\ #define ERROR_NOT_ENOUGH_MEMORY 8
\ #define ERROR_BAD_UNIT 20
\ #define ERROR_SEEK 25
\ #define ERROR_SHARING_VIOLATION 32
\ #define ERROR_DUP_NAME 52
\ #define ERROR_INVALID_PARAMETER 87
\ #define ERROR_DISK_FULL 112
\ #define ERROR_INSUFFICIENT_BUFFER 122
\ #define ERROR_ALREADY_EXISTS 183
\ #define ERROR_NO_DATA 232
\ #define ERROR_NO_MORE_ITEMS 259
\ #define ERROR_KEY_DELETED 1018
\ #define INVALID_HANDLE_VALUE ((HANDLE)-1)
\ #define INVALID_FILE_SIZE ((DWORD)0xFFFFFFFF)
\ !define KEY_QUERY_VALUE 0x0001
\ !define KEY_ENUMERATE_SUB_KEYS 0x0008
EXPORT
0 CONSTANT REG_NONE REG_NONE CONSTANT RK-NONE
1 CONSTANT REG_SZ REG_SZ CONSTANT RK-SZ
2 CONSTANT REG_EXPAND_SZ REG_EXPAND_SZ CONSTANT RK-ESZ
3 CONSTANT REG_BINARY REG_BINARY CONSTANT RK-BIN
4 CONSTANT REG_DWORD REG_DWORD CONSTANT RK-DW
4 CONSTANT REG_DWORD_LITTLE_ENDIAN REG_DWORD_LITTLE_ENDIAN CONSTANT RK-DWLE
5 CONSTANT REG_DWORD_BIG_ENDIAN REG_DWORD_BIG_ENDIAN CONSTANT RK-DWBE
6 CONSTANT REG_LINK REG_LINK CONSTANT RK-LINK
7 CONSTANT REG_MULTI_SZ REG_MULTI_SZ CONSTANT RK-MSZ
: REG-TYPE2STR \ ( type -- a u )
CASE
RK-NONE OF S" NONE" ENDOF
RK-SZ OF S" SZ" ENDOF
RK-ESZ OF S" EXPAND_SZ" ENDOF
RK-BIN OF S" BINARY" ENDOF
RK-DW OF S" DWORD" ENDOF
RK-DWLE OF S" DWORD_LITTLE_ENDIAN" ENDOF
RK-DWBE OF S" DWORD_BIG_ENDIAN" ENDOF
RK-LINK OF S" LINK" ENDOF
RK-MSZ OF S" MULTI_SZ" ENDOF
DUP OF S" UNKNOWN" ENDOF
ENDCASE
;
DEFINITIONS
\ 0xF003F CONSTANT KEY_ALL_ACCESS
\ 0x0020 CONSTANT KEY_CREATE_LINK
\ 0x0004 CONSTANT KEY_CREATE_SUB_KEY
\ 0x0008 CONSTANT KEY_ENUMERATE_SUB_KEYS
\ 0x20019 CONSTANT KEY_EXECUTE
\ 0x0010 CONSTANT KEY_NOTIFY
\ 0x0001 CONSTANT KEY_QUERY_VALUE
\ 0x20019 CONSTANT KEY_READ
\ 0x0002 CONSTANT KEY_SET_VALUE
0x0200 CONSTANT KEY_WOW64_32KEY
0x0100 CONSTANT KEY_WOW64_64KEY
\ 0x20006 CONSTANT KEY_WRITE
KEY_WOW64_32KEY VALUE WOW64_KEY
\ WINAPI: RegCloseKey Advapi32.dll
WINAPI: RegConnectRegistryA Advapi32.dll
\ WINAPI: RegCreateKeyExA Advapi32.dll
\ \ WINAPI: RegDeleteKeyExA Advapi32.dll
WINAPI: RegDeleteKeyA Advapi32.dll
\ WINAPI: RegDeleteValueA Advapi32.dll
WINAPI: RegEnumKeyExA Advapi32.dll
WINAPI: RegEnumValueA Advapi32.dll
\ WINAPI: RegQueryValueExA Advapi32.dll
\ WINAPI: RegOpenKeyExA Advapi32.dll
\ WINAPI: RegSetValueExA Advapi32.dll
USER-VALUE RK-FOR-PAD
EXPORT
: WOW64_32KEY KEY_WOW64_32KEY TO WOW64_KEY ;
: WOW64_64KEY KEY_WOW64_64KEY TO WOW64_KEY ;
USER-VALUE RK-ERROR \ Ðåçóëüòàò ðàáîòû àïè ñ ðååñòðîì
10240 CONSTANT /RK-PAD
USER-CREATE RK-PAD /RK-PAD CELL+ ALLOT \ Áóôåð äëÿ äàííûõ - çíà÷åíèé ïàðàìåòðîâ è ïðî÷åå
USER RK-PAD#
: RK-CLOSE \ ( hKey -- ) \ Çàêðûòü êëþ÷ ðååñòðà, èäåíòèôèöèðóåìûé õýíäëîì hKey
RegCloseKey TO RK-ERROR ;
: RK-CONNECT \ ( hkey az_computername -- hkey1|0 ) \ az = \\computername
0 SP@ 2SWAP RegConnectRegistryA TO RK-ERROR
;
: RK-CREATE \ ( az_subkey hkey -- hkey1|0 )
\ Ïðèëîæåíèå íå ìîæåò ñîçäàâàòü êëþ÷ ïîä HKEY_USERS èëè HKEY_LOCAL_MACHINE.
2>R 0 SP@
0 SWAP 0 0xF003F 0 0 0 2R>
RegCreateKeyExA TO RK-ERROR
;
: RK-DELETE \ ( az_subkey hkey -- )
\ 0 0 2SWAP SWAP RegDeleteKeyExA TO RK-ERROR
RegDeleteKeyA TO RK-ERROR
;
: RV-DELETE \ ( az_valname hkey -- )
RegDeleteValueA TO RK-ERROR
;
: RK-ENUM \ ( i hkey -- a u )
2>R
RK-PAD /RK-PAD SP@ >R
0 0 0 0 R> RK-PAD 2R> RegEnumKeyExA TO RK-ERROR
RK-ERROR IF
2DROP ""
THEN
;
: FOUND-KEY \ ( -- a u )
RK-FOR-PAD XCOUNT
\ 2DUP + OFF \ Çàïèñûâàåì â êîíåö ñòðîêè 4 íóëÿ íà âñÿêèé ñëó÷àé
;
: FOUND-KEYI \ ( -- i )
RK-FOR-PAD CELL- @
;
DEFINITIONS
: (FOR-SUBKEYS) \ ( hkey xt -- )
{ hkey xt -- }
RK-FOR-PAD >R \ Ñîõðàíÿåì àäðåñ òåêóùåãî áóôåðà - äëÿ âëîæåííûõ ñëó÷àåâ
/RK-PAD 2 CELLS + ALLOCATE THROW \ Âûäåëÿåì ïàìÿòü äëÿ ïàðàìåòðîâ: èíäåêñ - ÿ÷åéêà -1; äëèíà - ÿ÷åéêà 0; áóôåð ïîä ñòðîêó - ÿ÷åéêà +1, /RK-PAD
DUP >R \ Ñîõðàíÿåì íà ñòåêå âîçâðàòîâ àäðåñ áóôåðà ïîä èíäåêñ
CELL+ TO RK-FOR-PAD \ Ñîõðàíÿåì àäðåñ áóôåðà
BEGIN
/RK-PAD RK-FOR-PAD ! \ Çàïèñûâàåì â áóôåð ìàêñèìàëüíóþ äëèíó ñòðîêè; ñþäà æå àïè çàïèøåò äëèíó ðåçóëüòèðóþùåé ñòðîêè
0 0 0 0 RK-FOR-PAD DUP CELL+ R@ @ hkey \ Êëàäåì âñå ïàðàìåòðû íåîáõîäèìûå äëÿ âûçîâà àïè
RegEnumKeyExA TO RK-ERROR \ Âûçûâàåì àïè
\ RK-ERROR ERROR_NO_MORE_ITEMS <> WHILE \ Äî òåõ ïîð, ïîêà íå çàêîí÷àòñÿ âñå ýëåìåíòû
RK-ERROR 0= WHILE \ Äî ïåðâîé îøèáêè
xt EXECUTE \ Âûïîëíÿåì êîä
R@ 1+! \ Óâåëè÷èâàåì ñ÷åòèê
REPEAT
R> FREE THROW
R> TO RK-FOR-PAD
;
EXPORT
: FOR-SUBKEYS
POSTPONE [NONAME
; IMMEDIATE
: ;FOR-SUBKEYS
POSTPONE NONAME]
POSTPONE (FOR-SUBKEYS)
; IMMEDIATE
: FOUND-VALNAME \ ( -- a u ) \ Èìÿ íàéäåííîãî çíà÷åíèÿ
RK-FOR-PAD XCOUNT
\ 2DUP + OFF \ Çàïèñûâàåì â êîíåö ñòðîêè 4 íóëÿ íà âñÿêèé ñëó÷àé
;
: FOUND-VALINDEX \ ( -- i ) \ Èíäåêñ íàéäåííîãî çíà÷åíèÿ
RK-FOR-PAD CELL- @
;
: FOUND-VALTYPE \ ( -- type ) \ Òèï íàéäåííîãî çíà÷åíèÿ
RK-FOR-PAD 2 CELLS - @
;
DEFINITIONS
: (FOR-VALUES) \ ( hkey xt -- )
{ hkey xt -- }
RK-FOR-PAD >R \ Ñîõðàíÿåì àäðåñ òåêóùåãî áóôåðà - äëÿ âëîæåííûõ ñëó÷àåâ
/RK-PAD 3 CELLS + ALLOCATE THROW \ Âûäåëÿåì ïàìÿòü äëÿ ïàðàìåòðîâ:
\ òèï çíà÷åíÿ - ÿ÷åéêà -2; èíäåêñ - ÿ÷åéêà -1; äëèíà - ÿ÷åéêà 0; áóôåð ïîä ñòðîêó - ÿ÷åéêà +1, /RK-PAD
CELL+
DUP >R \ Ñîõðàíÿåì íà ñòåêå âîçâðàòîâ àäðåñ áóôåðà ïîä èíäåêñ
CELL+ TO RK-FOR-PAD \ Ñîõðàíÿåì àäðåñ áóôåðà
BEGIN
/RK-PAD RK-FOR-PAD ! \ Çàïèñûâàåì â áóôåð ìàêñèìàëüíóþ äëèíó ñòðîêè; ñþäà æå àïè çàïèøåò äëèíó ðåçóëüòèðóþùåé ñòðîêè
0 0 R@ CELL- 0 RK-FOR-PAD DUP CELL+ R@ @ hkey \ Êëàäåì âñå ïàðàìåòðû íåîáõîäèìûå äëÿ âûçîâà àïè
RegEnumValueA TO RK-ERROR \ Âûçûâàåì àïè
\ RK-ERROR ERROR_NO_MORE_ITEMS <> WHILE \ Äî òåõ ïîð, ïîêà íå çàêîí÷àòñÿ âñå ýëåìåíòû
RK-ERROR 0= WHILE \ Äî ïåðâîé îøèáêè
xt EXECUTE \ Âûïîëíÿåì êîä
R@ 1+! \ Óâåëè÷èâàåì ñ÷åòèê
REPEAT
R> CELL- FREE THROW \ Îñâîáîæäàåì ïàìÿòü
R> TO RK-FOR-PAD \ Âîññòàíàâëèâàåì èñõîäíîå çíà÷åíèå RK-FOR-PAD
;
EXPORT
: FOR-VALUES
POSTPONE [NONAME
; IMMEDIATE
: ;FOR-VALUES
POSTPONE NONAME]
POSTPONE (FOR-VALUES)
; IMMEDIATE
: RSK-OPEN \ ( az_keyname hkey -- )
2>R 0
SP@ 0xF003F 0 2R> RegOpenKeyExA TO RK-ERROR
;
: RK-VALUE@ \ ( az_valuename hkey -- a uz type )
\ Ïîìåòêà: äëÿ SZ, MULTI_SZ, EXPAND_SZ u âêëþ÷àåò â ñåáÿ åùå è íîëü â êîíöå, ïîýòîìó è îáîçíà÷àåòñÿ êàê uz
2>R
RK-PAD /RK-PAD SP@ >R 0 \ a u type R: 'u
SP@ R> RK-PAD ROT 0 2R> \ a u type 'u a 'type 0 az_valname hkey
RegQueryValueExA TO RK-ERROR
;
: RK-VALUE! \ ( a uz type az_valname hkey -- )
2>R
>R SWAP R> 0 2R> RegSetValueExA TO RK-ERROR
;
: RK-TVALUE! \ ( a uz a_name u_name hkey type -- )
2>R DROP 2R> -ROT \ a uz type az_name hkey
;
: RK-NONE! \ ( a uz a_name u_name hkey -- )
RK-NONE RK-TVALUE! ;
: RK-SZ! \ ( a u a_name u_name hkey -- )
SP@ 3 CELLS + 1+! \ Óâåëè÷èâàåì äëèíó ñòðîêè íà îäèí(íîëü â êîíöå) - òðåáîâàíèå âèíàïè
RK-SZ RK-TVALUE! ;
\ Ìîæåò ñäåëàòü êîíâåðòåð a_u <-> esz,msz,a_uz ...
: RK-ESZ! \ ( a uz a_name u_name hkey -- )
RK-ESZ RK-TVALUE! ;
: RK-MSZ! \ ( a uz a_name u_name hkey -- )
RK-MSZ RK-TVALUE! ;
: RK-BIN! \ ( a u a_name u_name hkey -- )
RK-BIN RK-TVALUE! ;
: RK-DW! \ ( value a_name u_name hkey -- )
RK-DW 2>R 2>R SP@ 4
RK-TVALUE!
DROP ;
: RK-DWLE! \ ( value a_name u_name hkey -- )
RK-DW 2>R 2>R SP@ 4
RK-TVALUE!
DROP ;
: RK-DWBE! \ ( value a_name u_name hkey -- )
RK-DW 2>R 2>R SP@ 4
RK-TVALUE!
DROP ;
: RK-LINK! \ ( a u a_name u_name hkey -- )
RK-LINK RK-TVALUE! ;
;MODULE