10 void dprintf(char* fmt, ...)
16 vsprintf(buffer,fmt,args);
17 WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL);
21 void do_enumeratekey(PWSTR Name)
24 KEY_BASIC_INFORMATION KeyInformation[5];
26 OBJECT_ATTRIBUTES ObjectAttributes;
28 UNICODE_STRING KeyName;
30 RtlInitUnicodeString(&KeyName, Name);
31 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
33 Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
34 dprintf("NtEnumerateKey : \n");
36 while(Status == STATUS_SUCCESS)
38 Status=NtEnumerateKey(hKey1,Index++,KeyBasicInformation
39 ,&KeyInformation[0], sizeof(KeyInformation)
41 if(Status== STATUS_SUCCESS)
43 dprintf("\tSubKey Name = ");
44 for (i=0;i<KeyInformation[0].NameLength/2;i++)
45 dprintf("%C",KeyInformation[0].Name[i]);
53 void CreateKeyTest(void)
56 OBJECT_ATTRIBUTES ObjectAttributes;
57 UNICODE_STRING KeyName;
60 dprintf("Create key: '\\Registry\\Machine\\Software\\testkey':\n");
61 RtlInitUnicodeStringFromLiteral(&KeyName,
62 L"\\Registry\\Machine\\Software\\testkey");
63 InitializeObjectAttributes(&ObjectAttributes,
68 dprintf("NtCreateKey: ");
69 Status = NtCreateKey(&hKey,
74 REG_OPTION_NON_VOLATILE,
76 dprintf("Status = %lx\n",Status);
77 if (NT_SUCCESS(Status))
84 void DeleteKeyTest(void)
86 OBJECT_ATTRIBUTES ObjectAttributes;
87 UNICODE_STRING KeyName;
91 dprintf("Delete key '\\Registry\\Machine\\Software\\testkey':\n");
92 RtlInitUnicodeStringFromLiteral(&KeyName,
93 L"\\Registry\\Machine\\Software\\testkey");
94 InitializeObjectAttributes(&ObjectAttributes,
99 dprintf("NtOpenKey: ");
100 Status = NtOpenKey(&hKey,
103 dprintf("Status = %lx\n",Status);
104 if (!NT_SUCCESS(Status))
107 dprintf("NtDeleteKey: ");
108 Status = NtDeleteKey(hKey);
109 dprintf("Status = %lx\n",Status);
114 void EnumerateKeyTest(void)
116 HKEY hKey = NULL, hKey1;
117 OBJECT_ATTRIBUTES ObjectAttributes;
119 UNICODE_STRING KeyName;
123 KEY_BASIC_INFORMATION KeyInformation[5];
125 dprintf("Enumerate key '\\Registry\\Machine\\Software':\n");
126 RtlInitUnicodeStringFromLiteral(&KeyName,
127 L"\\Registry\\Machine\\Software");
128 InitializeObjectAttributes(&ObjectAttributes,
130 OBJ_CASE_INSENSITIVE,
133 dprintf("NtOpenKey: ");
134 Status = NtOpenKey(&hKey,
137 dprintf("Status = %lx\n", Status);
138 if (!NT_SUCCESS(Status))
141 dprintf("NtQueryKey: ");
142 Status = NtQueryKey(hKey,
145 sizeof(KeyInformation),
147 dprintf("Status = %lx\n", Status);
148 if (NT_SUCCESS(Status))
150 dprintf("\tKey Name = ");
151 for (i = 0; i < KeyInformation[0].NameLength / 2; i++)
152 dprintf("%C", KeyInformation[0].Name[i]);
156 dprintf("NtEnumerateKey: \n");
158 while(NT_SUCCESS(Status))
160 Status = NtEnumerateKey(hKey,
164 sizeof(KeyInformation),
166 if (NT_SUCCESS(Status))
168 dprintf("\tSubKey Name = ");
169 for (i = 0; i < KeyInformation[0].NameLength / 2; i++)
170 dprintf("%C", KeyInformation[0].Name[i]);
176 dprintf("NtClose: ");
177 Status = NtClose(hKey);
178 dprintf("Status = %lx\n", Status);
182 void SetValueTest1(void)
185 OBJECT_ATTRIBUTES ObjectAttributes;
186 UNICODE_STRING KeyName;
187 UNICODE_STRING ValueName;
190 dprintf("Create key: '\\Registry\\Machine\\Software\\testkey':\n");
191 RtlInitUnicodeStringFromLiteral(&KeyName,
192 L"\\Registry\\Machine\\Software\\testkey");
193 InitializeObjectAttributes(&ObjectAttributes,
195 OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
198 dprintf("NtCreateKey: ");
199 Status = NtCreateKey(&hKey,
204 REG_OPTION_NON_VOLATILE,
206 dprintf("Status = %lx\n",Status);
207 if (!NT_SUCCESS(Status))
210 RtlInitUnicodeStringFromLiteral(&ValueName,
212 dprintf("NtSetValueKey: ");
213 Status = NtSetValueKey(hKey,
217 (PVOID)L"TestString",
219 dprintf("Status = %lx\n",Status);
225 void SetValueTest2(void)
228 OBJECT_ATTRIBUTES ObjectAttributes;
229 UNICODE_STRING KeyName;
230 UNICODE_STRING ValueName;
233 dprintf("Create key: '\\Registry\\Machine\\Software\\testkey':\n");
234 RtlInitUnicodeStringFromLiteral(&KeyName,
235 L"\\Registry\\Machine\\Software\\testkey");
236 InitializeObjectAttributes(&ObjectAttributes,
238 OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
241 dprintf("NtCreateKey: ");
242 Status = NtCreateKey(&hKey,
247 REG_OPTION_NON_VOLATILE,
249 dprintf(" Status = %lx\n",Status);
250 if (!NT_SUCCESS(Status))
253 RtlInitUnicodeStringFromLiteral(&ValueName,
255 dprintf("NtSetValueKey:\n");
256 Status = NtSetValueKey(hKey,
262 dprintf(" Status = %lx\n",Status);
268 void DeleteValueTest(void)
270 OBJECT_ATTRIBUTES ObjectAttributes;
271 UNICODE_STRING KeyName;
272 UNICODE_STRING ValueName;
276 dprintf("Open key: '\\Registry\\Machine\\Software\\testkey':\n");
277 RtlInitUnicodeStringFromLiteral(&KeyName,
278 L"\\Registry\\Machine\\Software\\testkey");
279 InitializeObjectAttributes(&ObjectAttributes,
281 OBJ_CASE_INSENSITIVE,
284 Status=NtOpenKey(&KeyHandle,
287 dprintf(" Status = %lx\n", Status);
288 if (!NT_SUCCESS(Status))
291 dprintf("Delete value:\n");
292 RtlInitUnicodeStringFromLiteral(&ValueName,
294 Status = NtDeleteValueKey(KeyHandle,
296 dprintf(" Status = %lx\n", Status);
298 dprintf("Close key:\n");
299 Status = NtClose(KeyHandle);
300 dprintf(" Status = %lx\n", Status);
304 void EnumerateValueTest(void)
306 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
307 KEY_BASIC_INFORMATION KeyInformation[5];
308 OBJECT_ATTRIBUTES ObjectAttributes;
309 UNICODE_STRING KeyName;
310 ULONG Index,Length,i;
314 dprintf("Open key: '\\Registry\\Machine\\Software\\testkey':\n");
315 RtlInitUnicodeStringFromLiteral(&KeyName,
316 L"\\Registry\\Machine\\Software\\testkey");
317 InitializeObjectAttributes(&ObjectAttributes,
319 OBJ_CASE_INSENSITIVE,
322 Status=NtOpenKey(&hKey,
325 dprintf(" Status = %lx\n", Status);
326 if (!NT_SUCCESS(Status))
329 dprintf("Enumerate values: \n");
331 while (Status == STATUS_SUCCESS)
333 Status = NtEnumerateValueKey(hKey,
335 KeyValueFullInformation,
336 &KeyValueInformation[0],
337 sizeof(KeyValueInformation),
339 if (Status == STATUS_SUCCESS)
341 dprintf(" Value:DO=%d, DL=%d, NL=%d, Name = ",
342 KeyValueInformation[0].DataOffset,
343 KeyValueInformation[0].DataLength,
344 KeyValueInformation[0].NameLength);
345 for (i = 0; i < KeyValueInformation[0].NameLength / 2; i++)
346 dprintf("%C", KeyValueInformation[0].Name[i]);
347 dprintf(", Type = %d\n", KeyValueInformation[0].Type);
349 if (KeyValueInformation[0].Type == REG_SZ)
350 dprintf(" Value = %S\n",
351 ((char*)&KeyValueInformation[0]+KeyValueInformation[0].DataOffset));
353 if (KeyValueInformation[0].Type == REG_DWORD)
354 dprintf(" Value = %X\n",
355 *((DWORD*)((char*)&KeyValueInformation[0]+KeyValueInformation[0].DataOffset)));
359 dprintf("NtClose:\n");
360 Status = NtClose(hKey);
361 dprintf(" Status = %lx\n", Status);
369 HKEY hKey = NULL, hKey1;
370 OBJECT_ATTRIBUTES ObjectAttributes;
373 UNICODE_STRING KeyName = UNICODE_STRING_INITIALIZER(L"\\Registry");
375 UNICODE_STRING KeyName = UNICODE_STRING_INITIALIZER(L"\\Registry\\Machine\\Software");
376 ULONG Index,Length,i;
377 KEY_BASIC_INFORMATION KeyInformation[5];
378 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
381 dprintf("NtOpenKey \\Registry : ");
383 dprintf("NtOpenKey \\Registry\\Machine\\Software : ");
384 InitializeObjectAttributes(&ObjectAttributes,
386 OBJ_CASE_INSENSITIVE,
389 Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
390 dprintf("\t\t\t\tStatus =%x\n",Status);
393 dprintf("NtQueryKey : ");
394 Status=NtQueryKey(hKey1,KeyBasicInformation
395 ,&KeyInformation[0], sizeof(KeyInformation)
397 dprintf("\t\t\t\t\tStatus =%x\n",Status);
398 if (Status == STATUS_SUCCESS)
400 dprintf("\tKey Name = ");
401 for (i=0;i<KeyInformation[0].NameLength/2;i++)
402 dprintf("%C",KeyInformation[0].Name[i]);
405 dprintf("NtEnumerateKey : \n");
407 while(Status == STATUS_SUCCESS)
409 Status=NtEnumerateKey(hKey1,Index++,KeyBasicInformation
410 ,&KeyInformation[0], sizeof(KeyInformation)
412 if(Status== STATUS_SUCCESS)
414 dprintf("\tSubKey Name = ");
415 for (i=0;i<KeyInformation[0].NameLength/2;i++)
416 dprintf("%C",KeyInformation[0].Name[i]);
420 dprintf("NtClose : ");
421 Status = NtClose( hKey1 );
422 dprintf("\t\t\t\t\tStatus =%x\n",Status);
427 dprintf("NtOpenKey \\Registry\\Machine : ");
428 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine");
429 InitializeObjectAttributes(&ObjectAttributes,
431 OBJ_CASE_INSENSITIVE,
434 Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
435 dprintf("\t\t\tStatus =%x\n",Status);
437 dprintf("NtOpenKey System\\Setup : ");
438 RtlInitUnicodeStringFromLiteral(&KeyName, L"System\\Setup");
439 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
441 Status = NtOpenKey ( &hKey, KEY_READ , &ObjectAttributes);
442 dprintf("\t\t\tStatus =%x\n",Status);
445 dprintf("NtQueryValueKey : ");
446 RtlInitUnicodeStringFromLiteral(&KeyName, L"CmdLine");
447 Status=NtQueryValueKey(hKey,&KeyName,KeyValueFullInformation
448 ,&KeyValueInformation[0], sizeof(KeyValueInformation)
450 dprintf("\t\t\t\tStatus =%x\n",Status);
451 if (Status == STATUS_SUCCESS)
453 dprintf("\tValue:DO=%d, DL=%d, NL=%d, Name = "
454 ,KeyValueInformation[0].DataOffset
455 ,KeyValueInformation[0].DataLength
456 ,KeyValueInformation[0].NameLength);
457 for (i=0;i<10 && i<KeyValueInformation[0].NameLength/2;i++)
458 dprintf("%C",KeyValueInformation[0].Name[i]);
460 dprintf("\t\tType = %d\n",KeyValueInformation[0].Type);
461 if (KeyValueInformation[0].Type == REG_SZ)
462 dprintf("\t\tValue = %S\n",
463 (PWCHAR)((PCHAR)&KeyValueInformation[0] + KeyValueInformation[0].DataOffset));
465 dprintf("NtEnumerateValueKey : \n");
467 while(Status == STATUS_SUCCESS)
469 Status=NtEnumerateValueKey(hKey,Index++,KeyValueFullInformation
470 ,&KeyValueInformation[0], sizeof(KeyValueInformation)
472 if(Status== STATUS_SUCCESS)
474 dprintf("\tValue:DO=%d, DL=%d, NL=%d, Name = "
475 ,KeyValueInformation[0].DataOffset
476 ,KeyValueInformation[0].DataLength
477 ,KeyValueInformation[0].NameLength);
478 for (i=0;i<KeyValueInformation[0].NameLength/2;i++)
479 dprintf("%C",KeyValueInformation[0].Name[i]);
480 dprintf(", Type = %d\n",KeyValueInformation[0].Type);
481 if (KeyValueInformation[0].Type == REG_SZ)
482 dprintf("\t\tValue = %S\n",((char*)&KeyValueInformation[0]
483 +KeyValueInformation[0].DataOffset));
486 dprintf("NtClose : ");
487 Status = NtClose( hKey );
488 dprintf("\t\t\t\t\tStatus =%x\n",Status);
498 OBJECT_ATTRIBUTES ObjectAttributes;
499 UNICODE_STRING KeyName,ValueName;
501 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
502 ULONG Index,Length,i;
505 dprintf("NtCreateKey non volatile: \n");
506 dprintf(" \\Registry\\Machine\\Software\\test3reactos: ");
507 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos");
508 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
510 Status = NtCreateKey ( &hKey, KEY_ALL_ACCESS , &ObjectAttributes
511 ,0,NULL,REG_OPTION_NON_VOLATILE,NULL);
512 dprintf("\t\tStatus=%x\n",Status);
515 do_enumeratekey(L"\\Registry\\Machine\\Software");
516 dprintf("NtOpenKey: ");
517 Status=NtOpenKey( &hKey, MAXIMUM_ALLOWED, &ObjectAttributes);
518 dprintf("\t\tStatus=%x\n",Status);
520 dprintf(" ...\\test3 :");
521 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos\\test3");
522 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
524 Status = NtCreateKey ( &hKey, KEY_ALL_ACCESS , &ObjectAttributes
525 ,0,NULL,REG_OPTION_NON_VOLATILE,NULL);
526 dprintf("\t\t\t\t\tStatus=%x\n",Status);
527 dprintf("NtOpenKey: ");
528 Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
529 dprintf("\t\tStatus=%x\n",Status);
531 dprintf(" ...\\testNonVolatile :");
532 RtlInitUnicodeStringFromLiteral(&KeyName, L"TestNonVolatile");
533 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
535 Status = NtCreateKey ( &hKey, KEY_ALL_ACCESS , &ObjectAttributes
536 ,0,NULL,REG_OPTION_NON_VOLATILE,NULL);
537 dprintf("\t\t\t\tStatus=%x\n",Status);
539 RtlInitUnicodeStringFromLiteral(&ValueName, L"TestREG_SZ");
540 dprintf("NtSetValueKey reg_sz: ");
541 Status=NtSetValueKey(hKey,&ValueName,0,REG_SZ,(PVOID)L"Test Reg_sz",24);
542 dprintf("\t\t\t\tStatus=%x\n",Status);
543 RtlInitUnicodeStringFromLiteral(&ValueName, L"TestDWORD");
544 dprintf("NtSetValueKey reg_dword: ");
545 Status=NtSetValueKey(hKey,&ValueName,0,REG_DWORD,(PVOID)"reac",4);
546 dprintf("\t\t\tStatus=%x\n",Status);
548 dprintf("NtOpenKey \\Registry\\Machine\\Software\\test3reactos\\test3\\testNonVolatile : ");
549 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos\\test3\\testNonVolatile");
550 InitializeObjectAttributes(&ObjectAttributes,
552 OBJ_CASE_INSENSITIVE,
555 Status=NtOpenKey( &hKey, MAXIMUM_ALLOWED, &ObjectAttributes);
556 dprintf("\t\t\t\tStatus =%x\n",Status);
559 dprintf("NtEnumerateValueKey : \n");
561 while(Status == STATUS_SUCCESS)
563 Status=NtEnumerateValueKey(hKey,Index++,KeyValueFullInformation
564 ,&KeyValueInformation[0], sizeof(KeyValueInformation)
566 if(Status== STATUS_SUCCESS)
568 dprintf("\tValue:DO=%d, DL=%d, NL=%d, Name = "
569 ,KeyValueInformation[0].DataOffset
570 ,KeyValueInformation[0].DataLength
571 ,KeyValueInformation[0].NameLength);
572 for (i=0;i<KeyValueInformation[0].NameLength/2;i++)
573 dprintf("%C",KeyValueInformation[0].Name[i]);
574 dprintf(", Type = %d\n",KeyValueInformation[0].Type);
575 if (KeyValueInformation[0].Type == REG_SZ)
576 dprintf("\t\tValue = %S\n",((char*)&KeyValueInformation[0]
577 +KeyValueInformation[0].DataOffset));
584 dprintf("delete \\Registry\\Machine\\software\\test3reactos ?");
585 ReadConsoleA(InputHandle, Buffer, 3, &Result, NULL) ;
586 if (Buffer[0] != 'y' && Buffer[0] != 'Y') return;
588 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos\\test3\\testNonvolatile");
589 InitializeObjectAttributes(&ObjectAttributes,
591 OBJ_CASE_INSENSITIVE,
594 dprintf("NtOpenKey : ");
595 Status=NtOpenKey( &hKey, KEY_ALL_ACCESS, &ObjectAttributes);
596 dprintf("\t\t\t\tStatus =%x\n",Status);
597 dprintf("NtDeleteKey : ");
598 Status=NtDeleteKey(hKey);
599 dprintf("\t\t\t\tStatus =%x\n",Status);
600 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos\\test3");
601 InitializeObjectAttributes(&ObjectAttributes,
603 OBJ_CASE_INSENSITIVE,
606 dprintf("NtOpenKey : ");
607 Status=NtOpenKey( &hKey, KEY_ALL_ACCESS, &ObjectAttributes);
608 dprintf("\t\t\t\tStatus =%x\n",Status);
609 dprintf("NtDeleteKey : ");
610 Status=NtDeleteKey(hKey);
611 dprintf("\t\t\t\tStatus =%x\n",Status);
614 dprintf("delete \\Registry\\Machine\\software\\test3reactos ?");
615 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\Software\\test3reactos");
616 InitializeObjectAttributes(&ObjectAttributes,
618 OBJ_CASE_INSENSITIVE,
621 dprintf("NtOpenKey : ");
622 Status=NtOpenKey( &hKey, KEY_ALL_ACCESS, &ObjectAttributes);
623 dprintf("\t\t\t\tStatus =%x\n",Status);
624 dprintf("NtDeleteKey : ");
625 Status=NtDeleteKey(hKey);
626 dprintf("\t\t\t\tStatus =%x\n",Status);
632 HKEY hKey = NULL,hKey1;
635 DWORD RegDataType, RegDataSize;
636 BOOL GlobalFifoEnable;
638 DWORD RegDisposition;
645 DWORD cchMaxValueName;
646 DWORD cbMaxValueData;
647 DWORD cbSecurityDescriptor;
648 FILETIME ftLastWriteTime;
649 SYSTEMTIME LastWriteTime;
651 dprintf ("RegOpenKeyExW HKLM\\System\\Setup: ");
652 dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
657 dprintf("\t\tdwError =%x\n",dwError);
658 if (dwError == ERROR_SUCCESS)
660 dprintf("RegQueryInfoKeyW: ");
662 dwError = RegQueryInfoKeyW(hKey1
663 , szClass, &cchClass, NULL, &cSubKeys
664 , &cchMaxSubkey, &cchMaxClass, &cValues, &cchMaxValueName
665 , &cbMaxValueData, &cbSecurityDescriptor, &ftLastWriteTime);
666 dprintf ("\t\t\t\tdwError %x\n", dwError);
667 FileTimeToSystemTime(&ftLastWriteTime,&LastWriteTime);
668 dprintf ("\tnb of subkeys=%d,last write : %d/%d/%d %d:%02.2d'%02.2d''%03.3d\n",cSubKeys
669 ,LastWriteTime.wMonth
673 ,LastWriteTime.wMinute
674 ,LastWriteTime.wSecond
675 ,LastWriteTime.wMilliseconds
680 dprintf ("RegOpenKeyExW: ");
681 dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
682 L"System\\ControlSet001\\Services\\Serial",
686 dprintf ("\t\t\t\t\tdwError %x\n", dwError);
687 RegDataSize = sizeof(GlobalFifoEnable);
688 if (dwError == ERROR_SUCCESS)
690 dprintf ("RegQueryValueExW: ");
691 dwError = RegQueryValueExW(hKey,
695 (PBYTE)&GlobalFifoEnable,
697 dprintf("\t\t\t\tdwError =%x\n",dwError);
700 dprintf("\tValue:DT=%d, DS=%d, Value=%d\n"
706 dprintf ("RegCreateKeyExW: ");
707 dwError = RegCreateKeyExW(hKey,
708 L"Parameters\\Serial001",
717 dprintf ("\t\t\t\tdwError %x\n", dwError);
719 dprintf ("RegCreateKeyExW: ");
720 dwError = RegCreateKeyExW (HKEY_LOCAL_MACHINE,
721 L"Software\\test4reactos\\test",
724 REG_OPTION_NON_VOLATILE,
730 dprintf ("\t\t\t\tdwError %x ", dwError);
731 dprintf ("dwDisposition %x\n", dwDisposition);
732 if (dwError == ERROR_SUCCESS)
734 dprintf ("RegSetValueExW: ");
735 dwError = RegSetValueExW (hKey,
739 (BYTE*)L"TestString",
742 dprintf ("\t\t\t\tdwError %x\n", dwError);
743 dprintf ("RegCloseKey: ");
744 dwError = RegCloseKey (hKey);
745 dprintf ("\t\t\t\t\tdwError %x\n", dwError);
751 dprintf ("RegCreateKeyExW: ");
752 dwError = RegCreateKeyExW (HKEY_LOCAL_MACHINE,
762 dprintf ("\t\t\t\tdwError %x ", dwError);
763 dprintf ("dwDisposition %x\n", dwDisposition);
766 if (dwError == ERROR_SUCCESS)
768 dprintf("RegQueryInfoKeyW: ");
770 dwError = RegQueryInfoKeyW(hKey
771 , szClass, &cchClass, NULL, &cSubKeys
772 , &cchMaxSubkey, &cchMaxClass, &cValues, &cchMaxValueName
773 , &cbMaxValueData, &cbSecurityDescriptor, &ftLastWriteTime);
774 dprintf ("\t\t\t\tdwError %x\n", dwError);
775 FileTimeToSystemTime(&ftLastWriteTime,&LastWriteTime);
776 dprintf ("\tnb of subkeys=%d,last write : %d/%d/%d %d:%02.2d'%02.2d''%03.3d\n",cSubKeys
777 ,LastWriteTime.wMonth
781 ,LastWriteTime.wMinute
782 ,LastWriteTime.wSecond
783 ,LastWriteTime.wMilliseconds
785 dprintf ("RegCloseKey: ");
786 dwError = RegCloseKey (hKey);
787 dprintf ("\t\t\t\t\tdwError %x\n", dwError);
789 dprintf ("\nTests done...\n");
795 OBJECT_ATTRIBUTES ObjectAttributes;
796 UNICODE_STRING KeyName,ValueName;
798 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
799 ULONG Index,Length,i;
803 dprintf("NtOpenKey : \n");
804 dprintf(" \\Registry\\Machine\\Software\\reactos : ");
805 RtlInitUnicodeStringFromLiteral(&KeyName,L"\\Registry\\Machine\\Software\\reactos");
806 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
808 Status=NtOpenKey( &hKey, KEY_ALL_ACCESS, &ObjectAttributes);
809 dprintf("\t\tStatus=%x\n",Status);
810 dprintf("NtFlushKey : \n");
811 Status = NtFlushKey(hKey);
812 dprintf("\t\tStatus=%x\n",Status);
813 dprintf("NtCloseKey : \n");
814 Status=NtClose(hKey);
815 dprintf("\t\tStatus=%x\n",Status);
818 /* registry link create test */
822 OBJECT_ATTRIBUTES ObjectAttributes;
823 UNICODE_STRING KeyName,ValueName;
825 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
826 ULONG Index,Length,i;
830 dprintf("Create target key\n");
831 dprintf(" Key: \\Registry\\Machine\\SOFTWARE\\Reactos\n");
832 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\SOFTWARE\\Reactos");
833 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
835 Status = NtCreateKey(&hKey, KEY_ALL_ACCESS , &ObjectAttributes
836 ,0,NULL, REG_OPTION_VOLATILE,NULL);
837 dprintf(" NtCreateKey() called (Status %lx)\n",Status);
838 if (!NT_SUCCESS(Status))
841 dprintf("Create target value\n");
842 dprintf(" Value: TestValue = 'Test String'\n");
843 RtlInitUnicodeStringFromLiteral(&ValueName, L"TestValue");
844 Status=NtSetValueKey(hKey,&ValueName,0,REG_SZ,(PVOID)L"TestString",22);
845 dprintf(" NtSetValueKey() called (Status %lx)\n",Status);
846 if (!NT_SUCCESS(Status))
849 dprintf("Close target key\n");
853 dprintf("Create link key\n");
854 dprintf(" Key: \\Registry\\Machine\\SOFTWARE\\Test\n");
855 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\SOFTWARE\\Test");
856 InitializeObjectAttributes(&ObjectAttributes,
858 OBJ_CASE_INSENSITIVE | OBJ_OPENLINK,
861 Status = NtCreateKey(&hKey,
862 KEY_ALL_ACCESS | KEY_CREATE_LINK,
866 REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK,
868 dprintf(" NtCreateKey() called (Status %lx)\n",Status);
869 if (!NT_SUCCESS(Status))
872 dprintf("Create link value\n");
873 dprintf(" Value: SymbolicLinkValue = '\\Registry\\Machine\\SOFTWARE\\Reactos'\n");
874 RtlInitUnicodeStringFromLiteral(&ValueName, L"SymbolicLinkValue");
875 Status=NtSetValueKey(hKey,&ValueName,0,REG_LINK,(PVOID)L"\\Registry\\Machine\\SOFTWARE\\Reactos",68);
876 dprintf(" NtSetValueKey() called (Status %lx)\n",Status);
877 if (!NT_SUCCESS(Status))
879 dprintf("Creating link value failed! Test failed!\n");
884 dprintf("Close link key\n");
887 dprintf("Open link key\n");
888 dprintf(" Key: \\Registry\\Machine\\SOFTWARE\\Test\n");
889 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\SOFTWARE\\Test");
890 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE | OBJ_OPENIF
892 Status = NtCreateKey(&hKey, KEY_ALL_ACCESS , &ObjectAttributes
893 ,0,NULL, REG_OPTION_VOLATILE, NULL);
894 dprintf(" NtCreateKey() called (Status %lx)\n",Status);
895 if (!NT_SUCCESS(Status))
898 dprintf("Query value\n");
899 dprintf(" Value: TestValue\n");
900 RtlInitUnicodeStringFromLiteral(&ValueName, L"TestValue");
901 Status=NtQueryValueKey(hKey,
903 KeyValueFullInformation,
904 &KeyValueInformation[0],
905 sizeof(KeyValueInformation),
907 dprintf(" NtQueryValueKey() called (Status %lx)\n",Status);
908 if (Status == STATUS_SUCCESS)
910 dprintf(" Value: Type %d DataLength %d NameLength %d Name '",
911 KeyValueInformation[0].Type,
912 KeyValueInformation[0].DataLength,
913 KeyValueInformation[0].NameLength);
914 for (i=0; i < KeyValueInformation[0].NameLength / sizeof(WCHAR); i++)
915 dprintf("%C",KeyValueInformation[0].Name[i]);
917 if (KeyValueInformation[0].Type == REG_SZ)
918 dprintf(" Value '%S'\n",
919 KeyValueInformation[0].Name+1
920 +KeyValueInformation[0].NameLength/2);
923 dprintf("Close link key\n");
926 dprintf("Test successful!\n");
929 /* registry link delete test */
933 OBJECT_ATTRIBUTES ObjectAttributes;
934 UNICODE_STRING KeyName,ValueName;
937 dprintf("Open link key\n");
938 dprintf(" Key: \\Registry\\Machine\\SOFTWARE\\Test\n");
939 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine\\SOFTWARE\\Test");
940 InitializeObjectAttributes(&ObjectAttributes,
942 OBJ_CASE_INSENSITIVE | OBJ_OPENIF | OBJ_OPENLINK,
945 Status = NtCreateKey(&hKey,
950 REG_OPTION_VOLATILE | REG_OPTION_OPEN_LINK,
952 dprintf(" NtCreateKey() called (Status %lx)\n",Status);
953 if (!NT_SUCCESS(Status))
955 dprintf("Could not open the link key. Please run the link create test first!\n");
959 dprintf("Delete link value\n");
960 RtlInitUnicodeStringFromLiteral(&ValueName, L"SymbolicLinkValue");
961 Status = NtDeleteValueKey(hKey,
963 dprintf(" NtDeleteValueKey() called (Status %lx)\n",Status);
965 dprintf("Delete link key\n");
966 Status=NtDeleteKey(hKey);
967 dprintf(" NtDeleteKey() called (Status %lx)\n",Status);
969 dprintf("Close link key\n");
976 OBJECT_ATTRIBUTES ObjectAttributes;
977 UNICODE_STRING KeyName;
980 TOKEN_PRIVILEGES NewPrivileges;
984 Status=NtOpenProcessToken(GetCurrentProcess()
985 ,TOKEN_ADJUST_PRIVILEGES,&Token);
986 // ,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&Token);
987 dprintf("\t\t\t\tStatus =%x\n",Status);
988 // bRes=LookupPrivilegeValueA(NULL,SE_RESTORE_NAME,&Luid);
989 // dprintf("\t\t\t\tbRes =%x\n",bRes);
990 NewPrivileges.PrivilegeCount = 1;
991 NewPrivileges.Privileges[0].Luid = Luid;
992 // NewPrivileges.Privileges[0].Luid.u.LowPart=18;
993 // NewPrivileges.Privileges[0].Luid.u.HighPart=0;
994 NewPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
996 // Status = NtAdjustPrivilegesToken(
997 bRes = AdjustTokenPrivileges(
1005 dprintf("\t\t\t\tbRes =%x\n",bRes);
1007 // Status=NtClose(Token);
1008 // dprintf("\t\t\t\tStatus =%x\n",Status);
1011 RtlInitUnicodeStringFromLiteral(&KeyName,L"test5");
1012 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
1014 Status = NtLoadKey(HKEY_LOCAL_MACHINE,&ObjectAttributes);
1015 dprintf("\t\t\t\tStatus =%x\n",Status);
1016 dwError=RegLoadKey(HKEY_LOCAL_MACHINE,"def"
1018 dprintf("\t\t\t\tdwError =%x\n",dwError);
1020 dprintf("NtOpenKey \\Registry\\Machine : ");
1021 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine");
1022 InitializeObjectAttributes(&ObjectAttributes,
1024 OBJ_CASE_INSENSITIVE,
1027 Status=NtOpenKey( &hKey, MAXIMUM_ALLOWED, &ObjectAttributes);
1028 dprintf("\t\t\tStatus =%x\n",Status);
1029 RtlInitUnicodeStringFromLiteral(&KeyName,L"test5");
1030 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE
1032 Status = NtLoadKey(hKey,&ObjectAttributes);
1033 dprintf("\t\t\t\tStatus =%x\n",Status);
1038 HKEY hKey = NULL, hKey1;
1039 OBJECT_ATTRIBUTES ObjectAttributes;
1041 UNICODE_STRING KeyName = UNICODE_STRING_INITIALIZER(L"\\Registry");
1042 ULONG Index,Length,i;
1043 KEY_BASIC_INFORMATION KeyInformation[5];
1044 KEY_VALUE_FULL_INFORMATION KeyValueInformation[5];
1046 dprintf("NtOpenKey \\Registry : ");
1047 InitializeObjectAttributes(&ObjectAttributes,
1049 OBJ_CASE_INSENSITIVE,
1052 Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
1053 dprintf("\t\t\t\tStatus =%x\n",Status);
1055 dprintf("NtQueryKey : ");
1056 Status = NtQueryKey(hKey1, KeyBasicInformation, &KeyInformation[0], sizeof(KeyInformation), &Length);
1057 dprintf("\t\t\t\t\tStatus =%x\n",Status);
1058 if (Status == STATUS_SUCCESS) {
1059 dprintf("\tKey Name = ");
1060 for (i=0;i<KeyInformation[0].NameLength/2;i++)
1061 dprintf("%C",KeyInformation[0].Name[i]);
1065 dprintf("NtEnumerateKey : \n");
1067 while (Status == STATUS_SUCCESS) {
1068 Status = NtEnumerateKey(hKey1,Index++,KeyBasicInformation,&KeyInformation[0], sizeof(KeyInformation),&Length);
1069 if (Status == STATUS_SUCCESS) {
1070 dprintf("\tSubKey Name = ");
1071 for (i = 0; i < KeyInformation[0].NameLength / 2; i++)
1072 dprintf("%C",KeyInformation[0].Name[i]);
1076 dprintf("NtClose : ");
1077 Status = NtClose( hKey1 );
1078 dprintf("\t\t\t\t\tStatus =%x\n",Status);
1080 NtClose(hKey); // RobD - hKey unused so-far, should this have been hKey1 ???
1082 dprintf("NtOpenKey \\Registry\\Machine : ");
1083 RtlInitUnicodeStringFromLiteral(&KeyName, L"\\Registry\\Machine");
1084 InitializeObjectAttributes(&ObjectAttributes,
1086 OBJ_CASE_INSENSITIVE,
1089 Status = NtOpenKey(&hKey1, MAXIMUM_ALLOWED, &ObjectAttributes);
1090 dprintf("\t\t\tStatus =%x\n",Status);
1092 //Status of c0000001 opening \Registry\Machine\System\CurrentControlSet\Services\Tcpip\Linkage
1094 // dprintf("NtOpenKey System\\CurrentControlSet\\Services\\Tcpip : ");
1095 // RtlInitUnicodeStringFromLiteral(&KeyName, L"System\\CurrentControlSet\\Services\\Tcpip");
1097 dprintf("NtOpenKey System\\ControlSet001\\Services\\Tcpip\\Parameters : ");
1098 RtlInitUnicodeStringFromLiteral(&KeyName, L"System\\ControlSet001\\Services\\Tcpip\\Parameters");
1100 dprintf("NtOpenKey System\\CurrentControlSet\\Services\\Tcpip : ");
1101 RtlInitUnicodeStringFromLiteral(&KeyName, L"System\\CurrentControlSet\\Services\\Tcpip");
1103 InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, hKey1 , NULL);
1104 Status = NtOpenKey(&hKey, KEY_READ , &ObjectAttributes);
1105 dprintf("\t\t\tStatus =%x\n",Status);
1107 dprintf("NtQueryValueKey : ");
1108 RtlInitUnicodeStringFromLiteral(&KeyName, L"NameServer");
1109 Status = NtQueryValueKey(hKey, &KeyName, KeyValueFullInformation, &KeyValueInformation[0], sizeof(KeyValueInformation), &Length);
1110 dprintf("\t\t\t\tStatus =%x\n",Status);
1111 if (Status == STATUS_SUCCESS) {
1112 dprintf("\tValue:DO=%d, DL=%d, NL=%d, Name = "
1113 ,KeyValueInformation[0].DataOffset
1114 ,KeyValueInformation[0].DataLength
1115 ,KeyValueInformation[0].NameLength);
1116 for (i = 0; i < 10 && i < KeyValueInformation[0].NameLength / 2; i++)
1117 dprintf("%C", KeyValueInformation[0].Name[i]);
1119 dprintf("\t\tType = %d\n", KeyValueInformation[0].Type);
1120 if (KeyValueInformation[0].Type == REG_SZ)
1121 //dprintf("\t\tValue = %S\n", KeyValueInformation[0].Name + 1 + KeyValueInformation[0].NameLength / 2);
1122 dprintf("\t\tValue = %S\n", KeyValueInformation[0].Name + KeyValueInformation[0].NameLength / 2);
1124 dprintf("NtEnumerateValueKey : \n");
1126 while (Status == STATUS_SUCCESS) {
1127 Status = NtEnumerateValueKey(hKey, Index++, KeyValueFullInformation, &KeyValueInformation[0], sizeof(KeyValueInformation), &Length);
1128 if (Status == STATUS_SUCCESS) {
1129 dprintf("\tValue:DO=%d, DL=%d, NL=%d, Name = "
1130 ,KeyValueInformation[0].DataOffset
1131 ,KeyValueInformation[0].DataLength
1132 ,KeyValueInformation[0].NameLength);
1133 for (i = 0; i < KeyValueInformation[0].NameLength / 2; i++)
1134 dprintf("%C", KeyValueInformation[0].Name[i]);
1135 dprintf(", Type = %d\n", KeyValueInformation[0].Type);
1136 if (KeyValueInformation[0].Type == REG_SZ)
1137 dprintf("\t\tValue = %S\n", ((char*)&KeyValueInformation[0]+KeyValueInformation[0].DataOffset));
1138 if (KeyValueInformation[0].Type == REG_DWORD)
1139 dprintf("\t\tValue = %X\n", *((DWORD*)((char*)&KeyValueInformation[0]+KeyValueInformation[0].DataOffset)));
1142 dprintf("NtClose : ");
1143 Status = NtClose(hKey);
1144 dprintf("\t\t\t\t\tStatus =%x\n", Status);
1150 int main(int argc, char* argv[])
1156 InputHandle = GetStdHandle(STD_INPUT_HANDLE);
1157 OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);
1160 dprintf("choose test :\n");
1161 dprintf(" 0 = Exit\n");
1162 dprintf(" 1 = Create key\n");
1163 dprintf(" 2 = Delete key\n");
1164 dprintf(" 3 = Enumerate key\n");
1165 dprintf(" 4 = Set value (REG_SZ)\n");
1166 dprintf(" 5 = Set value (REG_DWORD)\n");
1167 dprintf(" 6 = Delete value\n");
1168 dprintf(" 7 = Enumerate value\n");
1169 ReadConsoleA(InputHandle, Buffer, 3, &Result, NULL) ;
1200 EnumerateValueTest();