windows-nt/Source/XPSP1/NT/base/ntos/ex/regtest.c

332 lines
5.2 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
regtest.c
Abstract:
Test for quick and dirty registry test (very basic)
Author:
Bryan M. Willman (bryanwi) 30-Apr-1991
Environment:
User mode.
Revision History:
--*/
#include "stdio.h"
#include "nt.h"
int strlen(PUCHAR);
void main();
VOID DoTest(HANDLE RootKey);
#define MAX_VALUE 256
UCHAR ValueBuffer[MAX_VALUE];
VOID
main()
{
DbgPrint("Machine\n");
DoTest((HANDLE)REG_LOCAL_MACHINE);
DbgPrint("User\n");
DoTest((HANDLE)REG_LOCAL_USER);
}
VOID
DoTest(
HANDLE RootKey
)
{
NTSTATUS rc;
STRING String1;
UCHAR Value1[] = "This string is value 1.";
UCHAR Value2[] = "Value 2 is represented by this string.";
HANDLE Handle1;
HANDLE Handle2;
ULONG ValueLength;
ULONG Type;
LARGE_INTEGER Time;
//
// Create parent node
//
DbgPrint("Part1\n");
RtlInitString(&String1, "Test1");
rc = NtCreateKey(
RootKey,
&String1,
0,
NULL,
GENERIC_READ|GENERIC_WRITE,
&Handle1
);
if (!NT_SUCCESS(rc)) {
DbgPrint("1:CreateKey failed rc = %08lx", rc);
return;
}
//
// Set data into parent
//
DbgPrint("Part2\n");
rc = NtSetValueKey(
Handle1,
1, // type
Value1,
strlen(Value1)
);
if (!NT_SUCCESS(rc)) {
DbgPrint("2:SetValueKey failed rc = %08lx", rc);
return;
}
//
// Query and compare data from parent
//
DbgPrint("Part2b\n");
ValueLength = MAX_VALUE;
rc = NtQueryValueKey(
Handle1,
&Type,
ValueBuffer,
&ValueLength,
&Time
);
if (!NT_SUCCESS(rc)) {
DbgPrint("2b:QueryValueKey failed rc = %08lx", rc);
return;
}
if (ValueLength != (ULONG)strlen(Value1)) {
DbgPrint("2b1:Wrong value length\n");
return;
} else if (RtlCompareMemory(
ValueBuffer, Value1, ValueLength) != ValueLength) {
DbgPrint("2b2:Wrong value\n");
return;
} else if (Type != 1) {
DbgPrint("2b3:Wrong type\n");
return;
}
//
// Close parent
//
DbgPrint("Part3\n");
NtCloseKey(Handle1);
if (!NT_SUCCESS(rc)) {
DbgPrint("3:CloseKey failed rc = %08lx", rc);
return;
}
//
// Reopen parent
//
DbgPrint("Part4\n");
rc = NtOpenKey(
RootKey,
&String1,
0,
GENERIC_READ|GENERIC_WRITE,
&Handle1
);
if (!NT_SUCCESS(rc)) {
DbgPrint("4:OpenKey failed rc = %08lx", rc);
return;
}
//
// Create child
//
DbgPrint("Part5\n");
RtlInitString(&String1, "Test2");
rc = NtCreateKey(
Handle1,
&String1,
0,
NULL,
GENERIC_READ|GENERIC_WRITE,
&Handle2
);
if (!NT_SUCCESS(rc)) {
DbgPrint("5:CreateKey failed rc = %08lx", rc);
return;
}
//
// Set data into child
//
DbgPrint("Part6\n");
rc = NtSetValueKey(
Handle2,
2, // type
Value2,
strlen(Value2)
);
if (!NT_SUCCESS(rc)) {
DbgPrint("6:SetValueKey failed rc = %08lx", rc);
return;
}
//
// Query and compare data from child
//
DbgPrint("Part7\n");
ValueLength = MAX_VALUE;
rc = NtQueryValueKey(
Handle2,
&Type,
ValueBuffer,
&ValueLength,
&Time
);
if (!NT_SUCCESS(rc)) {
DbgPrint("7:QueryValueKey failed rc = %08lx", rc);
return;
}
if (ValueLength != (ULONG)strlen(Value2)) {
DbgPrint("7.1:Wrong value length\n");
return;
} else if (RtlCompareMemory(
ValueBuffer, Value2, ValueLength) != ValueLength) {
DbgPrint("7.2:Wrong value\n");
return;
} else if (Type != 2) {
DbgPrint("7.3:Wrong type\n");
return;
}
//
// Query and compare data from parent again
//
DbgPrint("Part8\n");
ValueLength = MAX_VALUE;
rc = NtQueryValueKey(
Handle1,
&Type,
ValueBuffer,
&ValueLength,
&Time
);
if (!NT_SUCCESS(rc)) {
DbgPrint("8:QueryValueKey failed rc = %08lx", rc);
return;
}
if (ValueLength != (ULONG)strlen(Value1)) {
DbgPrint("8.1:Wrong value length\n");
return;
} else if (RtlCompareMemory(
ValueBuffer, Value1, ValueLength) != ValueLength) {
DbgPrint("8.2:Wrong value\n");
return;
} else if (Type != 1) {
DbgPrint("8.3:Wrong type\n");
return;
}
//
// Reset parent data
//
DbgPrint("Part9\n");
rc = NtSetValueKey(
Handle1,
1, // type
Value2,
strlen(Value2)
);
if (!NT_SUCCESS(rc)) {
DbgPrint("9:SetValueKey failed rc = %08lx", rc);
return;
}
//
// Query and compare reset data
//
DbgPrint("Part10\n");
ValueLength = MAX_VALUE;
rc = NtQueryValueKey(
Handle1,
&Type,
ValueBuffer,
&ValueLength,
&Time
);
if (!NT_SUCCESS(rc)) {
DbgPrint("10:QueryValueKey failed rc = %08lx", rc);
return;
}
if (ValueLength != (ULONG)strlen(Value2)) {
DbgPrint("10.1:Wrong value length\n");
return;
} else if (RtlCompareMemory(
ValueBuffer, Value2, ValueLength) != ValueLength) {
DbgPrint("10.2:Wrong value\n");
return;
} else if (Type != 1) {
DbgPrint("10.3:Wrong type\n");
return;
}
//
// Close off handles and return
//
DbgPrint("Part11\n");
rc = NtCloseKey(Handle1);
if (!NT_SUCCESS(rc)) {
DbgPrint("11:CloseKey failed rc = %08lx", rc);
return;
}
DbgPrint("Part12\n");
rc = NtCloseKey(Handle2);
if (!NT_SUCCESS(rc)) {
DbgPrint("12:CloseKey failed rc = %08lx", rc);
return;
}
return;
}