[PATCH 3/6] ntdll/tests: Add more tests for deleted keys.
Zebediah Figura
z.figura12 at gmail.com
Tue Jun 29 23:31:17 CDT 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/ntdll/tests/reg.c | 53 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 50 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c
index 7463f98aa29..91b752ac069 100644
--- a/dlls/ntdll/tests/reg.c
+++ b/dlls/ntdll/tests/reg.c
@@ -125,6 +125,8 @@ static NTSTATUS (WINAPI * pRtlOpenCurrentUser)(IN ACCESS_MASK, PHANDLE);
static NTSTATUS (WINAPI * pNtOpenKey)(PHANDLE, IN ACCESS_MASK, IN POBJECT_ATTRIBUTES);
static NTSTATUS (WINAPI * pNtOpenKeyEx)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG);
static NTSTATUS (WINAPI * pNtClose)(IN HANDLE);
+static NTSTATUS (WINAPI * pNtEnumerateKey)(HANDLE, ULONG, KEY_INFORMATION_CLASS, void *, DWORD, DWORD *);
+static NTSTATUS (WINAPI * pNtEnumerateValueKey)(HANDLE, ULONG, KEY_VALUE_INFORMATION_CLASS, void *, DWORD, DWORD *);
static NTSTATUS (WINAPI * pNtFlushKey)(HANDLE);
static NTSTATUS (WINAPI * pNtDeleteKey)(HANDLE);
static NTSTATUS (WINAPI * pNtCreateKey)( PHANDLE retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr,
@@ -132,6 +134,7 @@ static NTSTATUS (WINAPI * pNtCreateKey)( PHANDLE retkey, ACCESS_MASK access, con
PULONG dispos );
static NTSTATUS (WINAPI * pNtQueryKey)(HANDLE,KEY_INFORMATION_CLASS,PVOID,ULONG,PULONG);
static NTSTATUS (WINAPI * pNtQueryLicenseValue)(const UNICODE_STRING *,ULONG *,PVOID,ULONG,ULONG *);
+static NTSTATUS (WINAPI * pNtQueryObject)(HANDLE, OBJECT_INFORMATION_CLASS, void *, ULONG, ULONG *);
static NTSTATUS (WINAPI * pNtQueryValueKey)(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
static NTSTATUS (WINAPI * pNtSetValueKey)(HANDLE, const PUNICODE_STRING, ULONG,
ULONG, const void*, ULONG );
@@ -181,9 +184,12 @@ static BOOL InitFunctionPtrs(void)
NTDLL_GET_PROC(NtClose)
NTDLL_GET_PROC(NtDeleteValueKey)
NTDLL_GET_PROC(NtCreateKey)
+ NTDLL_GET_PROC(NtEnumerateKey)
+ NTDLL_GET_PROC(NtEnumerateValueKey)
NTDLL_GET_PROC(NtFlushKey)
NTDLL_GET_PROC(NtDeleteKey)
NTDLL_GET_PROC(NtQueryKey)
+ NTDLL_GET_PROC(NtQueryObject)
NTDLL_GET_PROC(NtQueryValueKey)
NTDLL_GET_PROC(NtQueryInformationProcess)
NTDLL_GET_PROC(NtSetValueKey)
@@ -844,20 +850,61 @@ static void test_NtQueryValueKey(void)
static void test_NtDeleteKey(void)
{
+ UNICODE_STRING string;
+ char buffer[200];
NTSTATUS status;
- HANDLE hkey;
+ HANDLE hkey, hkey2;
OBJECT_ATTRIBUTES attr;
- ACCESS_MASK am = KEY_ALL_ACCESS;
+ DWORD size;
status = pNtDeleteKey(NULL);
ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got: 0x%08x\n", status);
InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0);
- status = pNtOpenKey(&hkey, am, &attr);
+ status = pNtOpenKey(&hkey, KEY_ALL_ACCESS, &attr);
ok(status == STATUS_SUCCESS, "NtOpenKey Failed: 0x%08x\n", status);
status = pNtDeleteKey(hkey);
ok(status == STATUS_SUCCESS, "NtDeleteKey Failed: 0x%08x\n", status);
+
+ status = pNtQueryKey(hkey, KeyNameInformation, buffer, sizeof(buffer), &size);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtEnumerateKey(hkey, 0, KeyFullInformation, buffer, sizeof(buffer), &size);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ pRtlInitUnicodeString(&string, L"value");
+ status = pNtQueryValueKey(hkey, &string, KeyValueBasicInformation, buffer, sizeof(buffer), &size);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtEnumerateValueKey(hkey, 0, KeyValuePartialInformation, buffer, sizeof(buffer), &size);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtSetValueKey(hkey, &string, 0, REG_SZ, "test", 5);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtDeleteValueKey(hkey, &string);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtDeleteKey(hkey);
+ todo_wine ok(!status, "got %#x\n", status);
+
+ RtlInitUnicodeString(&string, L"subkey");
+ InitializeObjectAttributes(&attr, &string, OBJ_CASE_INSENSITIVE, hkey, NULL);
+ status = pNtOpenKey(&hkey2, KEY_READ, &attr);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtCreateKey(&hkey2, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtQueryObject(hkey, ObjectNameInformation, buffer, sizeof(buffer), &size);
+ ok(status == STATUS_KEY_DELETED, "got %#x\n", status);
+
+ status = pNtQueryObject(hkey, ObjectBasicInformation, buffer, sizeof(OBJECT_BASIC_INFORMATION), &size);
+ ok(!status, "got %#x\n", status);
+
+ status = pNtClose(hkey);
+ ok(status == STATUS_SUCCESS, "got %#x\n", status);
}
static void test_NtQueryLicenseKey(void)
--
2.30.2
More information about the wine-devel
mailing list