|
|
/*++
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; }
|