]> git.proxmox.com Git - rustc.git/blame - vendor/ntapi/src/ntregapi.rs
New upstream version 1.70.0+dfsg1
[rustc.git] / vendor / ntapi / src / ntregapi.rs
CommitLineData
923072b8
FG
1use crate::ntioapi::{PIO_APC_ROUTINE, PIO_STATUS_BLOCK};
2use winapi::shared::ntdef::{
3 BOOLEAN, HANDLE, LARGE_INTEGER, NTSTATUS, OBJECT_ATTRIBUTES, PHANDLE, POBJECT_ATTRIBUTES,
4 PULONG, PUNICODE_STRING, PVOID, UCHAR, ULONG, UNICODE_STRING, USHORT, WCHAR,
5};
6use winapi::um::winnt::ACCESS_MASK;
7pub const REG_INIT_BOOT_SM: USHORT = 0x0000;
8pub const REG_INIT_BOOT_SETUP: USHORT = 0x0001;
9pub const REG_INIT_BOOT_ACCEPTED_BASE: USHORT = 0x0002;
10pub const REG_INIT_BOOT_ACCEPTED_MAX: USHORT = REG_INIT_BOOT_ACCEPTED_BASE;
11pub const REG_MAX_KEY_VALUE_NAME_LENGTH: u32 = 32767;
12pub const REG_MAX_KEY_NAME_LENGTH: u32 = 512;
13ENUM!{enum KEY_INFORMATION_CLASS {
14 KeyBasicInformation = 0,
15 KeyNodeInformation = 1,
16 KeyFullInformation = 2,
17 KeyNameInformation = 3,
18 KeyCachedInformation = 4,
19 KeyFlagsInformation = 5,
20 KeyVirtualizationInformation = 6,
21 KeyHandleTagsInformation = 7,
22 KeyTrustInformation = 8,
23 KeyLayerInformation = 9,
24 MaxKeyInfoClass = 10,
25}}
26STRUCT!{struct KEY_BASIC_INFORMATION {
27 LastWriteTime: LARGE_INTEGER,
28 TitleIndex: ULONG,
29 NameLength: ULONG,
30 Name: [WCHAR; 1],
31}}
32pub type PKEY_BASIC_INFORMATION = *mut KEY_BASIC_INFORMATION;
33STRUCT!{struct KEY_NODE_INFORMATION {
34 LastWriteTime: LARGE_INTEGER,
35 TitleIndex: ULONG,
36 ClassOffset: ULONG,
37 ClassLength: ULONG,
38 NameLength: ULONG,
39 Name: [WCHAR; 1],
40}}
41pub type PKEY_NODE_INFORMATION = *mut KEY_NODE_INFORMATION;
42STRUCT!{struct KEY_FULL_INFORMATION {
43 LastWriteTime: LARGE_INTEGER,
44 TitleIndex: ULONG,
45 ClassOffset: ULONG,
46 ClassLength: ULONG,
47 SubKeys: ULONG,
48 MaxNameLen: ULONG,
49 MaxClassLen: ULONG,
50 Values: ULONG,
51 MaxValueNameLen: ULONG,
52 MaxValueDataLen: ULONG,
53 Class: [WCHAR; 1],
54}}
55pub type PKEY_FULL_INFORMATION = *mut KEY_FULL_INFORMATION;
56STRUCT!{struct KEY_NAME_INFORMATION {
57 NameLength: ULONG,
58 Name: [WCHAR; 1],
59}}
60pub type PKEY_NAME_INFORMATION = *mut KEY_NAME_INFORMATION;
61STRUCT!{struct KEY_CACHED_INFORMATION {
62 LastWriteTime: LARGE_INTEGER,
63 TitleIndex: ULONG,
64 SubKeys: ULONG,
65 MaxNameLen: ULONG,
66 Values: ULONG,
67 MaxValueNameLen: ULONG,
68 MaxValueDataLen: ULONG,
69 NameLength: ULONG,
70 Name: [WCHAR; 1],
71}}
72pub type PKEY_CACHED_INFORMATION = *mut KEY_CACHED_INFORMATION;
73STRUCT!{struct KEY_FLAGS_INFORMATION {
74 UserFlags: ULONG,
75}}
76pub type PKEY_FLAGS_INFORMATION = *mut KEY_FLAGS_INFORMATION;
77STRUCT!{struct KEY_VIRTUALIZATION_INFORMATION {
78 Bitfields: ULONG,
79}}
80BITFIELD!{KEY_VIRTUALIZATION_INFORMATION Bitfields: ULONG [
81 VirtualizationCandidate set_VirtualizationCandidate[0..1],
82 VirtualizationEnabled set_VirtualizationEnabled[1..2],
83 VirtualTarget set_VirtualTarget[2..3],
84 VirtualStore set_VirtualStore[3..4],
85 VirtualSource set_VirtualSource[4..5],
86 Reserved set_Reserved[5..32],
87]}
88pub type PKEY_VIRTUALIZATION_INFORMATION = *mut KEY_VIRTUALIZATION_INFORMATION;
89STRUCT!{struct KEY_TRUST_INFORMATION {
90 Bitfields: ULONG,
91}}
92BITFIELD!{KEY_TRUST_INFORMATION Bitfields: ULONG [
93 TrustedKey set_TrustedKey[0..1],
94 Reserved set_Reserved[1..32],
95]}
96pub type PKEY_TRUST_INFORMATION = *mut KEY_TRUST_INFORMATION;
97STRUCT!{struct KEY_LAYER_INFORMATION {
98 IsTombstone: ULONG,
99 IsSupersedeLocal: ULONG,
100 IsSupersedeTree: ULONG,
101 ClassIsInherited: ULONG,
102 Reserved: ULONG,
103}}
104pub type PKEY_LAYER_INFORMATION = *mut KEY_LAYER_INFORMATION;
105ENUM!{enum KEY_SET_INFORMATION_CLASS {
106 KeyWriteTimeInformation = 0,
107 KeyWow64FlagsInformation = 1,
108 KeyControlFlagsInformation = 2,
109 KeySetVirtualizationInformation = 3,
110 KeySetDebugInformation = 4,
111 KeySetHandleTagsInformation = 5,
112 KeySetLayerInformation = 6,
113 MaxKeySetInfoClass = 7,
114}}
115STRUCT!{struct KEY_WRITE_TIME_INFORMATION {
116 LastWriteTime: LARGE_INTEGER,
117}}
118pub type PKEY_WRITE_TIME_INFORMATION = *mut KEY_WRITE_TIME_INFORMATION;
119STRUCT!{struct KEY_WOW64_FLAGS_INFORMATION {
120 UserFlags: ULONG,
121}}
122pub type PKEY_WOW64_FLAGS_INFORMATION = *mut KEY_WOW64_FLAGS_INFORMATION;
123STRUCT!{struct KEY_HANDLE_TAGS_INFORMATION {
124 HandleTags: ULONG,
125}}
126pub type PKEY_HANDLE_TAGS_INFORMATION = *mut KEY_HANDLE_TAGS_INFORMATION;
127STRUCT!{struct KEY_SET_LAYER_INFORMATION {
128 Bitfields: ULONG,
129}}
130BITFIELD!{KEY_SET_LAYER_INFORMATION Bitfields: ULONG [
131 IsTombstone set_IsTombstone[0..1],
132 IsSupersedeLocal set_IsSupersedeLocal[1..2],
133 IsSupersedeTree set_IsSupersedeTree[2..3],
134 ClassIsInherited set_ClassIsInherited[3..4],
135 Reserved set_Reserved[4..32],
136]}
137pub type PKEY_SET_LAYER_INFORMATION = *mut KEY_SET_LAYER_INFORMATION;
138STRUCT!{struct KEY_CONTROL_FLAGS_INFORMATION {
139 ControlFlags: ULONG,
140}}
141pub type PKEY_CONTROL_FLAGS_INFORMATION = *mut KEY_CONTROL_FLAGS_INFORMATION;
142STRUCT!{struct KEY_SET_VIRTUALIZATION_INFORMATION {
143 HandleTags: ULONG,
144}}
145BITFIELD!{KEY_SET_VIRTUALIZATION_INFORMATION HandleTags: ULONG [
146 VirtualTarget set_VirtualTarget[0..1],
147 VirtualStore set_VirtualStore[1..2],
148 VirtualSource set_VirtualSource[2..3],
149 Reserved set_Reserved[3..32],
150]}
151pub type PKEY_SET_VIRTUALIZATION_INFORMATION = *mut KEY_SET_VIRTUALIZATION_INFORMATION;
152ENUM!{enum KEY_VALUE_INFORMATION_CLASS {
153 KeyValueBasicInformation = 0,
154 KeyValueFullInformation = 1,
155 KeyValuePartialInformation = 2,
156 KeyValueFullInformationAlign64 = 3,
157 KeyValuePartialInformationAlign64 = 4,
158 KeyValueLayerInformation = 5,
159 MaxKeyValueInfoClass = 6,
160}}
161STRUCT!{struct KEY_VALUE_BASIC_INFORMATION {
162 TitleIndex: ULONG,
163 Type: ULONG,
164 NameLength: ULONG,
165 Name: [WCHAR; 1],
166}}
167pub type PKEY_VALUE_BASIC_INFORMATION = *mut KEY_VALUE_BASIC_INFORMATION;
168STRUCT!{struct KEY_VALUE_FULL_INFORMATION {
169 TitleIndex: ULONG,
170 Type: ULONG,
171 DataOffset: ULONG,
172 DataLength: ULONG,
173 NameLength: ULONG,
174 Name: [WCHAR; 1],
175}}
176pub type PKEY_VALUE_FULL_INFORMATION = *mut KEY_VALUE_FULL_INFORMATION;
177STRUCT!{struct KEY_VALUE_PARTIAL_INFORMATION {
178 TitleIndex: ULONG,
179 Type: ULONG,
180 DataLength: ULONG,
181 Data: [UCHAR; 1],
182}}
183pub type PKEY_VALUE_PARTIAL_INFORMATION = *mut KEY_VALUE_PARTIAL_INFORMATION;
184STRUCT!{struct KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
185 Type: ULONG,
186 DataLength: ULONG,
187 Data: [UCHAR; 1],
188}}
189pub type PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64 = *mut KEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
190STRUCT!{struct KEY_VALUE_LAYER_INFORMATION {
191 IsTombstone: ULONG,
192 Reserved: ULONG,
193}}
194pub type PKEY_VALUE_LAYER_INFORMATION = *mut KEY_VALUE_LAYER_INFORMATION;
195STRUCT!{struct KEY_VALUE_ENTRY {
196 ValueName: PUNICODE_STRING,
197 DataLength: ULONG,
198 DataOffset: ULONG,
199 Type: ULONG,
200}}
201pub type PKEY_VALUE_ENTRY = *mut KEY_VALUE_ENTRY;
202ENUM!{enum REG_ACTION {
203 KeyAdded = 0,
204 KeyRemoved = 1,
205 KeyModified = 2,
206}}
207STRUCT!{struct REG_NOTIFY_INFORMATION {
208 NextEntryOffset: ULONG,
209 Action: REG_ACTION,
210 KeyLength: ULONG,
211 Key: [WCHAR; 1],
212}}
213pub type PREG_NOTIFY_INFORMATION = *mut REG_NOTIFY_INFORMATION;
214STRUCT!{struct KEY_PID_ARRAY {
215 PID: HANDLE,
216 KeyName: UNICODE_STRING,
217}}
218pub type PKEY_PID_ARRAY = *mut KEY_PID_ARRAY;
219STRUCT!{struct KEY_OPEN_SUBKEYS_INFORMATION {
220 Count: ULONG,
221 KeyArray: [KEY_PID_ARRAY; 1],
222}}
223pub type PKEY_OPEN_SUBKEYS_INFORMATION = *mut KEY_OPEN_SUBKEYS_INFORMATION;
224EXTERN!{extern "system" {
225 fn NtCreateKey(
226 KeyHandle: PHANDLE,
227 DesiredAccess: ACCESS_MASK,
228 ObjectAttributes: POBJECT_ATTRIBUTES,
229 TitleIndex: ULONG,
230 Class: PUNICODE_STRING,
231 CreateOptions: ULONG,
232 Disposition: PULONG,
233 ) -> NTSTATUS;
234 fn NtCreateKeyTransacted(
235 KeyHandle: PHANDLE,
236 DesiredAccess: ACCESS_MASK,
237 ObjectAttributes: POBJECT_ATTRIBUTES,
238 TitleIndex: ULONG,
239 Class: PUNICODE_STRING,
240 CreateOptions: ULONG,
241 TransactionHandle: HANDLE,
242 Disposition: PULONG,
243 ) -> NTSTATUS;
244 fn NtOpenKey(
245 KeyHandle: PHANDLE,
246 DesiredAccess: ACCESS_MASK,
247 ObjectAttributes: POBJECT_ATTRIBUTES,
248 ) -> NTSTATUS;
249 fn NtOpenKeyTransacted(
250 KeyHandle: PHANDLE,
251 DesiredAccess: ACCESS_MASK,
252 ObjectAttributes: POBJECT_ATTRIBUTES,
253 TransactionHandle: HANDLE,
254 ) -> NTSTATUS;
255 fn NtOpenKeyEx(
256 KeyHandle: PHANDLE,
257 DesiredAccess: ACCESS_MASK,
258 ObjectAttributes: POBJECT_ATTRIBUTES,
259 OpenOptions: ULONG,
260 ) -> NTSTATUS;
261 fn NtOpenKeyTransactedEx(
262 KeyHandle: PHANDLE,
263 DesiredAccess: ACCESS_MASK,
264 ObjectAttributes: POBJECT_ATTRIBUTES,
265 OpenOptions: ULONG,
266 TransactionHandle: HANDLE,
267 ) -> NTSTATUS;
268 fn NtDeleteKey(
269 KeyHandle: HANDLE,
270 ) -> NTSTATUS;
271 fn NtRenameKey(
272 KeyHandle: HANDLE,
273 NewName: PUNICODE_STRING,
274 ) -> NTSTATUS;
275 fn NtDeleteValueKey(
276 KeyHandle: HANDLE,
277 ValueName: PUNICODE_STRING,
278 ) -> NTSTATUS;
279 fn NtQueryKey(
280 KeyHandle: HANDLE,
281 KeyInformationClass: KEY_INFORMATION_CLASS,
282 KeyInformation: PVOID,
283 Length: ULONG,
284 ResultLength: PULONG,
285 ) -> NTSTATUS;
286 fn NtSetInformationKey(
287 KeyHandle: HANDLE,
288 KeySetInformationClass: KEY_SET_INFORMATION_CLASS,
289 KeySetInformation: PVOID,
290 KeySetInformationLength: ULONG,
291 ) -> NTSTATUS;
292 fn NtQueryValueKey(
293 KeyHandle: HANDLE,
294 ValueName: PUNICODE_STRING,
295 KeyValueInformationClass: KEY_VALUE_INFORMATION_CLASS,
296 KeyValueInformation: PVOID,
297 Length: ULONG,
298 ResultLength: PULONG,
299 ) -> NTSTATUS;
300 fn NtSetValueKey(
301 KeyHandle: HANDLE,
302 ValueName: PUNICODE_STRING,
303 TitleIndex: ULONG,
304 Type: ULONG,
305 Data: PVOID,
306 DataSize: ULONG,
307 ) -> NTSTATUS;
308 fn NtQueryMultipleValueKey(
309 KeyHandle: HANDLE,
310 ValueEntries: PKEY_VALUE_ENTRY,
311 EntryCount: ULONG,
312 ValueBuffer: PVOID,
313 BufferLength: PULONG,
314 RequiredBufferLength: PULONG,
315 ) -> NTSTATUS;
316 fn NtEnumerateKey(
317 KeyHandle: HANDLE,
318 Index: ULONG,
319 KeyInformationClass: KEY_INFORMATION_CLASS,
320 KeyInformation: PVOID,
321 Length: ULONG,
322 ResultLength: PULONG,
323 ) -> NTSTATUS;
324 fn NtEnumerateValueKey(
325 KeyHandle: HANDLE,
326 Index: ULONG,
327 KeyValueInformationClass: KEY_VALUE_INFORMATION_CLASS,
328 KeyValueInformation: PVOID,
329 Length: ULONG,
330 ResultLength: PULONG,
331 ) -> NTSTATUS;
332 fn NtFlushKey(
333 KeyHandle: HANDLE,
334 ) -> NTSTATUS;
335 fn NtCompactKeys(
336 Count: ULONG,
337 KeyArray: *mut HANDLE,
338 ) -> NTSTATUS;
339 fn NtCompressKey(
340 Key: HANDLE,
341 ) -> NTSTATUS;
342 fn NtLoadKey(
343 TargetKey: POBJECT_ATTRIBUTES,
344 SourceFile: POBJECT_ATTRIBUTES,
345 ) -> NTSTATUS;
346 fn NtLoadKey2(
347 TargetKey: POBJECT_ATTRIBUTES,
348 SourceFile: POBJECT_ATTRIBUTES,
349 Flags: ULONG,
350 ) -> NTSTATUS;
351 fn NtLoadKeyEx(
352 TargetKey: POBJECT_ATTRIBUTES,
353 SourceFile: POBJECT_ATTRIBUTES,
354 Flags: ULONG,
355 TrustClassKey: HANDLE,
356 Event: HANDLE,
357 DesiredAccess: ACCESS_MASK,
358 RootHandle: PHANDLE,
359 IoStatus: PIO_STATUS_BLOCK,
360 ) -> NTSTATUS;
361 fn NtReplaceKey(
362 NewFile: POBJECT_ATTRIBUTES,
363 TargetHandle: HANDLE,
364 OldFile: POBJECT_ATTRIBUTES,
365 ) -> NTSTATUS;
366 fn NtSaveKey(
367 KeyHandle: HANDLE,
368 FileHandle: HANDLE,
369 ) -> NTSTATUS;
370 fn NtSaveKeyEx(
371 KeyHandle: HANDLE,
372 FileHandle: HANDLE,
373 Format: ULONG,
374 ) -> NTSTATUS;
375 fn NtSaveMergedKeys(
376 HighPrecedenceKeyHandle: HANDLE,
377 LowPrecedenceKeyHandle: HANDLE,
378 FileHandle: HANDLE,
379 ) -> NTSTATUS;
380 fn NtRestoreKey(
381 KeyHandle: HANDLE,
382 FileHandle: HANDLE,
383 Flags: ULONG,
384 ) -> NTSTATUS;
385 fn NtUnloadKey(
386 TargetKey: POBJECT_ATTRIBUTES,
387 ) -> NTSTATUS;
388}}
389pub const REG_FORCE_UNLOAD: ULONG = 1;
390pub const REG_UNLOAD_LEGAL_FLAGS: ULONG = REG_FORCE_UNLOAD;
391EXTERN!{extern "system" {
392 fn NtUnloadKey2(
393 TargetKey: POBJECT_ATTRIBUTES,
394 Flags: ULONG,
395 ) -> NTSTATUS;
396 fn NtUnloadKeyEx(
397 TargetKey: POBJECT_ATTRIBUTES,
398 Event: HANDLE,
399 ) -> NTSTATUS;
400 fn NtNotifyChangeKey(
401 KeyHandle: HANDLE,
402 Event: HANDLE,
403 ApcRoutine: PIO_APC_ROUTINE,
404 ApcContext: PVOID,
405 IoStatusBlock: PIO_STATUS_BLOCK,
406 CompletionFilter: ULONG,
407 WatchTree: BOOLEAN,
408 Buffer: PVOID,
409 BufferSize: ULONG,
410 Asynchronous: BOOLEAN,
411 ) -> NTSTATUS;
412 fn NtNotifyChangeMultipleKeys(
413 MasterKeyHandle: HANDLE,
414 Count: ULONG,
415 SubordinateObjects: *mut OBJECT_ATTRIBUTES,
416 Event: HANDLE,
417 ApcRoutine: PIO_APC_ROUTINE,
418 ApcContext: PVOID,
419 IoStatusBlock: PIO_STATUS_BLOCK,
420 CompletionFilter: ULONG,
421 WatchTree: BOOLEAN,
422 Buffer: PVOID,
423 BufferSize: ULONG,
424 Asynchronous: BOOLEAN,
425 ) -> NTSTATUS;
426 fn NtQueryOpenSubKeys(
427 TargetKey: POBJECT_ATTRIBUTES,
428 HandleCount: PULONG,
429 ) -> NTSTATUS;
430 fn NtQueryOpenSubKeysEx(
431 TargetKey: POBJECT_ATTRIBUTES,
432 BufferLength: ULONG,
433 Buffer: PVOID,
434 RequiredSize: PULONG,
435 ) -> NTSTATUS;
436 fn NtInitializeRegistry(
437 BootCondition: USHORT,
438 ) -> NTSTATUS;
439 fn NtLockRegistryKey(
440 KeyHandle: HANDLE,
441 ) -> NTSTATUS;
442 fn NtLockProductActivationKeys(
443 pPrivateVer: *mut ULONG,
444 pSafeMode: *mut ULONG,
445 ) -> NTSTATUS;
446 fn NtFreezeRegistry(
447 TimeOutInSeconds: ULONG,
448 ) -> NTSTATUS;
449 fn NtThawRegistry() -> NTSTATUS;
450}}