mirror of
https://github.com/reactos/reactos.git
synced 2025-01-01 03:54:02 +00:00
[NTDLL_APITESTS]
Add tests for NtSaveKey. svn path=/trunk/; revision=63507
This commit is contained in:
parent
a5a69f46e6
commit
2996e28ecd
3 changed files with 134 additions and 0 deletions
|
@ -11,6 +11,7 @@ list(APPEND SOURCE
|
|||
NtProtectVirtualMemory.c
|
||||
NtQuerySystemEnvironmentValue.c
|
||||
NtQueryVolumeInformationFile.c
|
||||
NtSaveKey.c
|
||||
RtlBitmap.c
|
||||
RtlDetermineDosPathNameType.c
|
||||
RtlDoesFileExists.c
|
||||
|
|
131
rostests/apitests/ntdll/NtSaveKey.c
Normal file
131
rostests/apitests/ntdll/NtSaveKey.c
Normal file
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
* PROJECT: ReactOS API Tests
|
||||
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
||||
* PURPOSE: Test for NtSaveKey
|
||||
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <ndk/rtlfuncs.h>
|
||||
#include <ndk/cmfuncs.h>
|
||||
#include <ndk/obfuncs.h>
|
||||
#include <ndk/setypes.h>
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
OpenRegistryKeyHandle(PHANDLE KeyHandle,
|
||||
ACCESS_MASK AccessMask,
|
||||
PWCHAR RegistryPath)
|
||||
{
|
||||
UNICODE_STRING KeyName;
|
||||
OBJECT_ATTRIBUTES Attributes;
|
||||
|
||||
RtlInitUnicodeString(&KeyName, RegistryPath);
|
||||
InitializeObjectAttributes(&Attributes,
|
||||
&KeyName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
return NtOpenKey(KeyHandle, AccessMask, &Attributes);
|
||||
}
|
||||
|
||||
START_TEST(NtSaveKey)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE KeyHandle;
|
||||
HANDLE FileHandle;
|
||||
BOOLEAN OldPrivilegeStatus;
|
||||
|
||||
/* Open the file */
|
||||
FileHandle = CreateFileW(L"saved_key.dat",
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE,
|
||||
NULL);
|
||||
if (FileHandle == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
skip("CreateFileW failed with error: %lu\n", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
/* Try saving HKEY_LOCAL_MACHINE\Hardware */
|
||||
Status = OpenRegistryKeyHandle(&KeyHandle, KEY_READ, L"\\Registry\\Machine\\Hardware");
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
skip("NtOpenKey failed with status: 0x%08lX\n", Status);
|
||||
NtClose(FileHandle);
|
||||
return;
|
||||
}
|
||||
|
||||
Status = NtSaveKey(KeyHandle, FileHandle);
|
||||
ok_ntstatus(Status, STATUS_PRIVILEGE_NOT_HELD);
|
||||
|
||||
NtClose(KeyHandle);
|
||||
|
||||
/* Set the SeBackupPrivilege */
|
||||
Status = RtlAdjustPrivilege(SE_BACKUP_PRIVILEGE,
|
||||
TRUE,
|
||||
FALSE,
|
||||
&OldPrivilegeStatus);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
skip("RtlAdjustPrivilege failed with status: 0x%08lX\n", (ULONG)Status);
|
||||
NtClose(FileHandle);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Try saving HKEY_LOCAL_MACHINE\Hardware again */
|
||||
Status = OpenRegistryKeyHandle(&KeyHandle, KEY_READ, L"\\Registry\\Machine\\Hardware");
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
skip("NtOpenKey failed with status: 0x%08lX\n", Status);
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
Status = NtSaveKey(KeyHandle, FileHandle);
|
||||
ok_ntstatus(Status, STATUS_SUCCESS);
|
||||
|
||||
NtClose(KeyHandle);
|
||||
|
||||
/* Try saving HKEY_LOCAL_MACHINE */
|
||||
Status = OpenRegistryKeyHandle(&KeyHandle, KEY_READ, L"\\Registry\\Machine");
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
skip("NtOpenKey failed with status: 0x%08lX\n", Status);
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
Status = NtSaveKey(KeyHandle, FileHandle);
|
||||
ok_ntstatus(Status, STATUS_ACCESS_DENIED);
|
||||
|
||||
NtClose(KeyHandle);
|
||||
|
||||
/* Try saving HKEY_USERS */
|
||||
Status = OpenRegistryKeyHandle(&KeyHandle, KEY_READ, L"\\Registry\\User");
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
skip("NtOpenKey failed with status: 0x%08lX\n", Status);
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
Status = NtSaveKey(KeyHandle, FileHandle);
|
||||
ok_ntstatus(Status, STATUS_ACCESS_DENIED);
|
||||
|
||||
NtClose(KeyHandle);
|
||||
|
||||
Cleanup:
|
||||
|
||||
/* Restore the SeBackupPrivilege */
|
||||
RtlAdjustPrivilege(SE_BACKUP_PRIVILEGE,
|
||||
OldPrivilegeStatus,
|
||||
FALSE,
|
||||
&OldPrivilegeStatus);
|
||||
|
||||
/* Close the file handle */
|
||||
NtClose(FileHandle);
|
||||
}
|
|
@ -14,6 +14,7 @@ extern void func_NtMutant(void);
|
|||
extern void func_NtProtectVirtualMemory(void);
|
||||
extern void func_NtQuerySystemEnvironmentValue(void);
|
||||
extern void func_NtQueryVolumeInformationFile(void);
|
||||
extern void func_NtSaveKey(void);
|
||||
extern void func_NtSystemInformation(void);
|
||||
extern void func_RtlBitmap(void);
|
||||
extern void func_RtlDetermineDosPathNameType(void);
|
||||
|
@ -43,6 +44,7 @@ const struct test winetest_testlist[] =
|
|||
{ "NtProtectVirtualMemory", func_NtProtectVirtualMemory },
|
||||
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
|
||||
{ "NtQueryVolumeInformationFile", func_NtQueryVolumeInformationFile },
|
||||
{ "NtSaveKey", func_NtSaveKey},
|
||||
{ "NtSystemInformation", func_NtSystemInformation },
|
||||
{ "RtlBitmapApi", func_RtlBitmap },
|
||||
{ "RtlDetermineDosPathNameType", func_RtlDetermineDosPathNameType },
|
||||
|
|
Loading…
Reference in a new issue