mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +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
|
NtProtectVirtualMemory.c
|
||||||
NtQuerySystemEnvironmentValue.c
|
NtQuerySystemEnvironmentValue.c
|
||||||
NtQueryVolumeInformationFile.c
|
NtQueryVolumeInformationFile.c
|
||||||
|
NtSaveKey.c
|
||||||
RtlBitmap.c
|
RtlBitmap.c
|
||||||
RtlDetermineDosPathNameType.c
|
RtlDetermineDosPathNameType.c
|
||||||
RtlDoesFileExists.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_NtProtectVirtualMemory(void);
|
||||||
extern void func_NtQuerySystemEnvironmentValue(void);
|
extern void func_NtQuerySystemEnvironmentValue(void);
|
||||||
extern void func_NtQueryVolumeInformationFile(void);
|
extern void func_NtQueryVolumeInformationFile(void);
|
||||||
|
extern void func_NtSaveKey(void);
|
||||||
extern void func_NtSystemInformation(void);
|
extern void func_NtSystemInformation(void);
|
||||||
extern void func_RtlBitmap(void);
|
extern void func_RtlBitmap(void);
|
||||||
extern void func_RtlDetermineDosPathNameType(void);
|
extern void func_RtlDetermineDosPathNameType(void);
|
||||||
|
@ -43,6 +44,7 @@ const struct test winetest_testlist[] =
|
||||||
{ "NtProtectVirtualMemory", func_NtProtectVirtualMemory },
|
{ "NtProtectVirtualMemory", func_NtProtectVirtualMemory },
|
||||||
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
|
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
|
||||||
{ "NtQueryVolumeInformationFile", func_NtQueryVolumeInformationFile },
|
{ "NtQueryVolumeInformationFile", func_NtQueryVolumeInformationFile },
|
||||||
|
{ "NtSaveKey", func_NtSaveKey},
|
||||||
{ "NtSystemInformation", func_NtSystemInformation },
|
{ "NtSystemInformation", func_NtSystemInformation },
|
||||||
{ "RtlBitmapApi", func_RtlBitmap },
|
{ "RtlBitmapApi", func_RtlBitmap },
|
||||||
{ "RtlDetermineDosPathNameType", func_RtlDetermineDosPathNameType },
|
{ "RtlDetermineDosPathNameType", func_RtlDetermineDosPathNameType },
|
||||||
|
|
Loading…
Reference in a new issue