You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Added patches to implement NtBuildNumber and ExInitializeNPagedLookasideList.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
From f928d6182289fb703fff3bd549b9df9b6a6558c6 Mon Sep 17 00:00:00 2001
|
||||
From 8c09da5559b124f97fd5f24540c25b28009562f5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 20 Jan 2015 18:39:36 +0100
|
||||
Subject: ntoskrnl.exe/tests: Add kernel compliant test functions.
|
||||
@@ -6,23 +6,23 @@ Subject: ntoskrnl.exe/tests: Add kernel compliant test functions.
|
||||
---
|
||||
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/Makefile.in | 3 +-
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.c | 38 ++---
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.h | 18 ++-
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.c | 65 ++++++---
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.h | 11 +-
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/test.c | 195 +++++++++++++++++++++++++
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/test.h | 181 +++++++++++++++++++++++
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/test.h | 158 ++++++++++++++++++++
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/util.h | 47 ++++++
|
||||
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 53 +++++--
|
||||
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 36 ++---
|
||||
include/wine/test.h | 39 ++++-
|
||||
9 files changed, 535 insertions(+), 41 deletions(-)
|
||||
9 files changed, 509 insertions(+), 47 deletions(-)
|
||||
create mode 100644 dlls/ntoskrnl.exe/tests/driver.sys/test.c
|
||||
create mode 100644 dlls/ntoskrnl.exe/tests/driver.sys/test.h
|
||||
create mode 100644 dlls/ntoskrnl.exe/tests/driver.sys/util.h
|
||||
|
||||
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
index 1319ada..06794ba 100644
|
||||
index 25649c9b3b6..99c5749c6cf 100644
|
||||
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
@@ -1423,7 +1423,7 @@
|
||||
@@ -1427,7 +1427,7 @@
|
||||
@ cdecl -private _strrev(str) msvcrt._strrev
|
||||
@ cdecl -private _strset(str long) msvcrt._strset
|
||||
@ cdecl -private _strupr(str) msvcrt._strupr
|
||||
@@ -32,7 +32,7 @@ index 1319ada..06794ba 100644
|
||||
@ cdecl -private _wcsicmp(wstr wstr) msvcrt._wcsicmp
|
||||
@ cdecl -private _wcslwr(wstr) msvcrt._wcslwr
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/Makefile.in b/dlls/ntoskrnl.exe/tests/driver.sys/Makefile.in
|
||||
index bc040e4..b3a6839 100644
|
||||
index 1c49b2bd5cd..b200eec7e95 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/Makefile.in
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/Makefile.in
|
||||
@@ -8,4 +8,5 @@ CROSSFLAGS = -nostartfiles -nostdlib -nodefaultlibs \
|
||||
@@ -43,7 +43,7 @@ index bc040e4..b3a6839 100644
|
||||
+ driver.c \
|
||||
+ test.c
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
index 35f78d1..f39aa37 100644
|
||||
index 35f78d1ab2f..78fb55a961c 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
@@ -30,6 +30,9 @@
|
||||
@@ -56,11 +56,17 @@ index 35f78d1..f39aa37 100644
|
||||
#include "driver.h"
|
||||
|
||||
const WCHAR driver_device[] = {'\\','D','e','v','i','c','e',
|
||||
@@ -37,24 +40,17 @@ const WCHAR driver_device[] = {'\\','D','e','v','i','c','e',
|
||||
@@ -37,24 +40,25 @@ const WCHAR driver_device[] = {'\\','D','e','v','i','c','e',
|
||||
const WCHAR driver_link[] = {'\\','D','o','s','D','e','v','i','c','e','s',
|
||||
'\\','W','i','n','e','T','e','s','t','D','r','i','v','e','r',0};
|
||||
|
||||
-
|
||||
+/* In each kernel testcase the following variables are available:
|
||||
+ *
|
||||
+ * device - DEVICE_OBJECT used for ioctl
|
||||
+ * irp - IRP pointer passed to ioctl
|
||||
+ * __state - used internally for test macros
|
||||
+ */
|
||||
|
||||
-static NTSTATUS test_basic_ioctl(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info)
|
||||
+KERNEL_TESTCASE(PsGetCurrentProcessId)
|
||||
{
|
||||
@@ -77,8 +83,9 @@ index 35f78d1..f39aa37 100644
|
||||
-
|
||||
- for (i = 0; i < sizeof(str)-1; i++)
|
||||
- buffer[i] = str[i];
|
||||
+ test->processid = (DWORD)(ULONG_PTR)PsGetCurrentProcessId();
|
||||
+ ok(test->processid, "Expected processid to be non zero\n");
|
||||
+ struct test_PsGetCurrentProcessId *test = (void *)&__state->userdata;
|
||||
+ test->pid = (DWORD)(ULONG_PTR)PsGetCurrentProcessId();
|
||||
+ ok(test->pid, "Expected processid to be non zero\n");
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
|
||||
@@ -90,12 +97,32 @@ index 35f78d1..f39aa37 100644
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -72,16 +68,20 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp)
|
||||
@@ -69,19 +73,44 @@ static NTSTATUS WINAPI driver_Create(DEVICE_OBJECT *device, IRP *irp)
|
||||
static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation(irp);
|
||||
+ struct kernel_test_state *state = irp->AssociatedIrp.SystemBuffer;
|
||||
NTSTATUS status = STATUS_NOT_SUPPORTED;
|
||||
ULONG_PTR information = 0;
|
||||
|
||||
+ if (!state)
|
||||
+ {
|
||||
+ status = STATUS_ACCESS_VIOLATION;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ if (stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(*state) ||
|
||||
+ stack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(*state))
|
||||
+ {
|
||||
+ status = STATUS_BUFFER_TOO_SMALL;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ kernel_memset(&state->temp, 0, sizeof(state->temp));
|
||||
+ kernel_memset(&state->output, 0, sizeof(state->output));
|
||||
+
|
||||
+#define DECLARE_TEST(name) \
|
||||
+ case WINE_IOCTL_##name: status = RUN_TESTCASE(name, irp, stack, &information); break;
|
||||
+ case WINE_IOCTL_##name: status = test_##name(device, irp, state); break;
|
||||
+
|
||||
switch (stack->Parameters.DeviceIoControl.IoControlCode)
|
||||
{
|
||||
@@ -111,14 +138,18 @@ index 35f78d1..f39aa37 100644
|
||||
|
||||
+#undef DECLARE_TEST
|
||||
+
|
||||
+ kernel_memset(&state->temp, 0, sizeof(state->temp));
|
||||
+ if (status == STATUS_SUCCESS) information = sizeof(*state);
|
||||
+
|
||||
+done:
|
||||
irp->IoStatus.Status = status;
|
||||
irp->IoStatus.Information = information;
|
||||
IoCompleteRequest(irp, IO_NO_INCREMENT);
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
index 372e908..e48bbdd 100644
|
||||
index 372e9080896..1af2dcec249 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
@@ -20,9 +20,19 @@
|
||||
@@ -20,9 +20,12 @@
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
@@ -129,22 +160,15 @@ index 372e908..e48bbdd 100644
|
||||
- */
|
||||
+#define WINE_IOCTL_PsGetCurrentProcessId WINE_TEST_IOCTL(0)
|
||||
+#define WINE_IOCTL_PsGetCurrentThread WINE_TEST_IOCTL(1)
|
||||
+
|
||||
+struct test_PsGetCurrentProcessId_state
|
||||
+{
|
||||
+ struct kernel_test_state __state;
|
||||
+ DWORD processid; /* output */
|
||||
+};
|
||||
+
|
||||
+struct test_PsGetCurrentThread_state
|
||||
+{
|
||||
+ struct kernel_test_state __state;
|
||||
+};
|
||||
|
||||
-#define IOCTL_WINETEST_BASIC_IOCTL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
+struct test_PsGetCurrentProcessId
|
||||
+{
|
||||
+ DWORD pid;
|
||||
+};
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/test.c b/dlls/ntoskrnl.exe/tests/driver.sys/test.c
|
||||
new file mode 100644
|
||||
index 0000000..01adf60
|
||||
index 00000000000..01adf609371
|
||||
--- /dev/null
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/test.c
|
||||
@@ -0,0 +1,195 @@
|
||||
@@ -345,10 +369,10 @@ index 0000000..01adf60
|
||||
+}
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/test.h b/dlls/ntoskrnl.exe/tests/driver.sys/test.h
|
||||
new file mode 100644
|
||||
index 0000000..6f1df76
|
||||
index 00000000000..65d08c0d645
|
||||
--- /dev/null
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/test.h
|
||||
@@ -0,0 +1,181 @@
|
||||
@@ -0,0 +1,158 @@
|
||||
+/*
|
||||
+ * ntoskrnl.exe testing framework
|
||||
+ *
|
||||
@@ -374,6 +398,7 @@ index 0000000..6f1df76
|
||||
+
|
||||
+struct kernel_test_state
|
||||
+{
|
||||
+ char userdata[1024];
|
||||
+ struct
|
||||
+ {
|
||||
+ int debug_level;
|
||||
@@ -443,66 +468,42 @@ index 0000000..6f1df76
|
||||
+ winetest_end_todo(__state, windows))
|
||||
+#define todo_wine todo(0)
|
||||
+
|
||||
+#define KERNEL_TESTCASE(name) \
|
||||
+ static NTSTATUS test_##name(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info, \
|
||||
+ struct test_##name##_state *test, struct kernel_test_state *__state); \
|
||||
+ \
|
||||
+ static NTSTATUS __test_##name(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info) \
|
||||
+ { \
|
||||
+ ULONG input_length = stack->Parameters.DeviceIoControl.InputBufferLength; \
|
||||
+ ULONG output_length = stack->Parameters.DeviceIoControl.OutputBufferLength; \
|
||||
+ struct kernel_test_state *state = irp->AssociatedIrp.SystemBuffer; \
|
||||
+ NTSTATUS status; \
|
||||
+ \
|
||||
+ if (!state) \
|
||||
+ return STATUS_ACCESS_VIOLATION; \
|
||||
+ \
|
||||
+ if (input_length < sizeof(struct test_##name##_state) || \
|
||||
+ output_length < sizeof(struct test_##name##_state)) \
|
||||
+ return STATUS_BUFFER_TOO_SMALL; \
|
||||
+ \
|
||||
+ kernel_memset(&state->temp, 0, sizeof(state->temp)); \
|
||||
+ kernel_memset(&state->output, 0, sizeof(state->output)); \
|
||||
+ status = test_##name(irp, stack, info, irp->AssociatedIrp.SystemBuffer, state); \
|
||||
+ \
|
||||
+ kernel_memset(&state->temp, 0, sizeof(state->temp)); \
|
||||
+ *info = sizeof(struct test_##name##_state); \
|
||||
+ return status; \
|
||||
+ } \
|
||||
+ \
|
||||
+ static NTSTATUS test_##name(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info, \
|
||||
+ struct test_##name##_state *test, struct kernel_test_state *__state)
|
||||
+
|
||||
+#define RUN_TESTCASE(name, irp, stack, info) \
|
||||
+ __test_##name(irp, stack, info)
|
||||
+#define KERNEL_TESTCASE(name) \
|
||||
+ static NTSTATUS test_##name(DEVICE_OBJECT *device, IRP *irp, \
|
||||
+ struct kernel_test_state *__state)
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+#define wine_run_kernel_test(device, ioctl, state, size, returned) \
|
||||
+ __wine_run_kernel_test(__FILE__, __LINE__, device, ioctl, state, size, returned)
|
||||
+#define wine_run_kernel_test(device_path, ioctl, state) \
|
||||
+ __wine_run_kernel_test(__FILE__, __LINE__, device_path, ioctl, state)
|
||||
+
|
||||
+static BOOL __wine_run_kernel_test(const char* file, int line, HANDLE device, DWORD ioctl,
|
||||
+ void *data, DWORD size, DWORD *returned)
|
||||
+static void __wine_run_kernel_test(const char *file, int line, const char *device_path,
|
||||
+ DWORD ioctl, struct kernel_test_state *state)
|
||||
+{
|
||||
+ struct kernel_test_state *state = data;
|
||||
+ DWORD bytes_returned;
|
||||
+ BOOL res;
|
||||
+ struct kernel_test_state temp_state;
|
||||
+ DWORD returned;
|
||||
+ HANDLE device;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ if (!returned)
|
||||
+ returned = &bytes_returned;
|
||||
+ device = CreateFileA(device_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
+ ok_(file, line)(device != INVALID_HANDLE_VALUE, "CreateFileA failed with error %u\n", GetLastError());
|
||||
+ if (device == INVALID_HANDLE_VALUE) return;
|
||||
+
|
||||
+ if (!state)
|
||||
+ {
|
||||
+ state = &temp_state;
|
||||
+ memset(state, 0, sizeof(*state));
|
||||
+ }
|
||||
+
|
||||
+ memset(state, 0, sizeof(*state));
|
||||
+ state->input.debug_level = winetest_get_debug();
|
||||
+ state->input.report_success = winetest_get_report_success();
|
||||
+ state->input.windows = !strcmp(winetest_platform, "windows");
|
||||
+
|
||||
+ res = DeviceIoControl(device, ioctl, data, size, data, size, returned, NULL);
|
||||
+
|
||||
+ if (returned == &bytes_returned)
|
||||
+ ok_(file, line)(bytes_returned == size,
|
||||
+ "DeviceIoControl returned %u bytes, expected %u bytes\n", bytes_returned, size);
|
||||
+ ret = DeviceIoControl(device, ioctl, state, sizeof(*state), state, sizeof(*state), &returned, NULL);
|
||||
+ ok_(file, line)(ret, "DeviceIoControl failed with error %u\n", GetLastError());
|
||||
+ ok_(file, line)(returned == sizeof(*state), "DeviceIoControl returned %u bytes\n", returned);
|
||||
+
|
||||
+ if (state->output.offset >= sizeof(state->output.debug))
|
||||
+ state->output.offset = sizeof(state->output.debug) - 1;
|
||||
@@ -524,7 +525,7 @@ index 0000000..6f1df76
|
||||
+ winetest_add_todo_successes(state->output.todo_successes);
|
||||
+ winetest_add_skipped(state->output.skipped);
|
||||
+
|
||||
+ return res;
|
||||
+ CloseHandle(device);
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
@@ -532,7 +533,7 @@ index 0000000..6f1df76
|
||||
+#endif /* _WINE_KERNEL_TEST_ */
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/util.h b/dlls/ntoskrnl.exe/tests/driver.sys/util.h
|
||||
new file mode 100644
|
||||
index 0000000..881a4a2
|
||||
index 00000000000..881a4a2952f
|
||||
--- /dev/null
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/util.h
|
||||
@@ -0,0 +1,47 @@
|
||||
@@ -584,7 +585,7 @@ index 0000000..881a4a2
|
||||
+ return ptr;
|
||||
+}
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
index 9b8a6a7..64e9d97 100644
|
||||
index 9b8a6a7c5b0..6f020101b4c 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
@@ -25,6 +25,7 @@
|
||||
@@ -595,7 +596,7 @@ index 9b8a6a7..64e9d97 100644
|
||||
#include "driver.sys/driver.h"
|
||||
|
||||
static const char driver_name[] = "WineTestDriver";
|
||||
@@ -184,29 +185,52 @@ err:
|
||||
@@ -184,29 +185,21 @@ err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -606,62 +607,38 @@ index 9b8a6a7..64e9d97 100644
|
||||
- DWORD bytes_returned;
|
||||
- char buf[32];
|
||||
- HANDLE file;
|
||||
+ struct test_PsGetCurrentProcessId_state state;
|
||||
+ DWORD processid;
|
||||
+ HANDLE device;
|
||||
BOOL res;
|
||||
- BOOL res;
|
||||
+ struct kernel_test_state state;
|
||||
+ struct test_PsGetCurrentProcessId *test = (void *)&state.userdata;
|
||||
|
||||
- file = CreateFileA(device_path, GENERIC_READ | GENERIC_WRITE,
|
||||
- 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
- if (file == INVALID_HANDLE_VALUE)
|
||||
+ trace("Running tests for PsGetCurrentProcessId\n");
|
||||
+
|
||||
+ device = CreateFileA(device_path, GENERIC_READ | GENERIC_WRITE,
|
||||
+ 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
+ if (device == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
ok(0, "Connecting to driver failed with %x\n", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
- {
|
||||
- ok(0, "Connecting to driver failed with %x\n", GetLastError());
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- res = DeviceIoControl(file, IOCTL_WINETEST_BASIC_IOCTL, NULL, 0, buf,
|
||||
- sizeof(buf), &bytes_returned, NULL);
|
||||
+ res = wine_run_kernel_test(device, WINE_IOCTL_PsGetCurrentProcessId, &state, sizeof(state), NULL);
|
||||
ok(res, "DeviceIoControl failed with %x\n", GetLastError());
|
||||
- ok(res, "DeviceIoControl failed with %x\n", GetLastError());
|
||||
- ok(bytes_returned == sizeof(str)-1, "Unexpected number of bytes\n");
|
||||
- ok(!memcmp(buf, str, sizeof(str)-1), "Unexpected response data\n");
|
||||
+ memset(&state, 0, sizeof(state));
|
||||
+ trace("Running tests for PsGetCurrentProcessId\n");
|
||||
+ wine_run_kernel_test(device_path, WINE_IOCTL_PsGetCurrentProcessId, &state);
|
||||
+ ok(test->pid == GetCurrentProcessId(), "Expected pid %u, got %u\n", GetCurrentProcessId(), test->pid);
|
||||
+}
|
||||
|
||||
- CloseHandle(file);
|
||||
+ processid = GetCurrentProcessId();
|
||||
+ ok(state.processid == processid, "Expected processid %u, got %u\n", processid, state.processid);
|
||||
+
|
||||
+ CloseHandle(device);
|
||||
+}
|
||||
+
|
||||
+static void test_PsGetCurrentThread(void)
|
||||
+{
|
||||
+ struct test_PsGetCurrentThread_state state;
|
||||
+ HANDLE device;
|
||||
+ BOOL res;
|
||||
+
|
||||
+ trace("Running tests for PsGetCurrentThread\n");
|
||||
+
|
||||
+ device = CreateFileA(device_path, GENERIC_READ | GENERIC_WRITE,
|
||||
+ 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
+ if (device == INVALID_HANDLE_VALUE)
|
||||
+ {
|
||||
+ ok(0, "Connecting to driver failed with %x\n", GetLastError());
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ res = wine_run_kernel_test(device, WINE_IOCTL_PsGetCurrentThread, &state, sizeof(state), NULL);
|
||||
+ ok(res, "DeviceIoControl failed with %x\n", GetLastError());
|
||||
+
|
||||
+ CloseHandle(device);
|
||||
+ wine_run_kernel_test(device_path, WINE_IOCTL_PsGetCurrentThread, NULL);
|
||||
}
|
||||
|
||||
START_TEST(ntoskrnl)
|
||||
@@ -220,7 +244,8 @@ START_TEST(ntoskrnl)
|
||||
@@ -220,7 +213,8 @@ START_TEST(ntoskrnl)
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -672,7 +649,7 @@ index 9b8a6a7..64e9d97 100644
|
||||
unload_driver(service, filename);
|
||||
}
|
||||
diff --git a/include/wine/test.h b/include/wine/test.h
|
||||
index 0d81a24..63e2cfa 100644
|
||||
index af602c0fac0..e7d7961f2a9 100644
|
||||
--- a/include/wine/test.h
|
||||
+++ b/include/wine/test.h
|
||||
@@ -61,7 +61,13 @@ extern int winetest_loop_todo(void);
|
||||
@@ -689,7 +666,7 @@ index 0d81a24..63e2cfa 100644
|
||||
extern void winetest_wait_child_process( HANDLE process );
|
||||
|
||||
extern const char *wine_dbgstr_wn( const WCHAR *str, int n );
|
||||
@@ -428,10 +434,39 @@ LONG winetest_get_failures(void)
|
||||
@@ -429,10 +435,39 @@ LONG winetest_get_failures(void)
|
||||
return failures;
|
||||
}
|
||||
|
||||
@@ -732,5 +709,5 @@ index 0d81a24..63e2cfa 100644
|
||||
|
||||
void winetest_wait_child_process( HANDLE process )
|
||||
--
|
||||
2.7.0
|
||||
2.13.1
|
||||
|
||||
|
@@ -0,0 +1,115 @@
|
||||
From 823f783bfa8b733abed5ec67d3119c2bbccf3d14 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 10 Jun 2017 15:45:03 +0200
|
||||
Subject: ntoskrnl.exe/tests: Add tests for NtBuildNumber.
|
||||
|
||||
---
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.c | 34 +++++++++++++++++++++++++++++
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.h | 1 +
|
||||
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 7 ++++++
|
||||
3 files changed, 42 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
index 78fb55a961c..28fbaf1747f 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
@@ -35,11 +35,29 @@
|
||||
#include "test.h"
|
||||
#include "driver.h"
|
||||
|
||||
+extern PVOID WINAPI MmGetSystemRoutineAddress(PUNICODE_STRING);
|
||||
+
|
||||
const WCHAR driver_device[] = {'\\','D','e','v','i','c','e',
|
||||
'\\','W','i','n','e','T','e','s','t','D','r','i','v','e','r',0};
|
||||
const WCHAR driver_link[] = {'\\','D','o','s','D','e','v','i','c','e','s',
|
||||
'\\','W','i','n','e','T','e','s','t','D','r','i','v','e','r',0};
|
||||
|
||||
+static void *get_system_routine(const char *name)
|
||||
+{
|
||||
+ UNICODE_STRING name_u;
|
||||
+ ANSI_STRING name_a;
|
||||
+ NTSTATUS status;
|
||||
+ void *ret;
|
||||
+
|
||||
+ RtlInitAnsiString(&name_a, name);
|
||||
+ status = RtlAnsiStringToUnicodeString(&name_u, &name_a, TRUE);
|
||||
+ if (status) return NULL;
|
||||
+
|
||||
+ ret = MmGetSystemRoutineAddress(&name_u);
|
||||
+ RtlFreeUnicodeString(&name_u);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/* In each kernel testcase the following variables are available:
|
||||
*
|
||||
* device - DEVICE_OBJECT used for ioctl
|
||||
@@ -62,6 +80,21 @@ KERNEL_TESTCASE(PsGetCurrentThread)
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
+KERNEL_TESTCASE(NtBuildNumber)
|
||||
+{
|
||||
+ USHORT *pNtBuildNumber;
|
||||
+ ULONG build;
|
||||
+
|
||||
+ if (!(pNtBuildNumber = get_system_routine("NtBuildNumber")))
|
||||
+ {
|
||||
+ win_skip("Could not get pointer to NtBuildNumber\n");
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+
|
||||
+ PsGetVersion(NULL, NULL, &build, NULL);
|
||||
+ ok(*pNtBuildNumber == build, "Expected build number %u, got %u\n", build, *pNtBuildNumber);
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
|
||||
static NTSTATUS WINAPI driver_Create(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
@@ -100,6 +133,7 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
DECLARE_TEST(PsGetCurrentProcessId);
|
||||
DECLARE_TEST(PsGetCurrentThread);
|
||||
+ DECLARE_TEST(NtBuildNumber);
|
||||
|
||||
default:
|
||||
break;
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
index 1af2dcec249..c3440cb65c2 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#define WINE_IOCTL_PsGetCurrentProcessId WINE_TEST_IOCTL(0)
|
||||
#define WINE_IOCTL_PsGetCurrentThread WINE_TEST_IOCTL(1)
|
||||
+#define WINE_IOCTL_NtBuildNumber WINE_TEST_IOCTL(2)
|
||||
|
||||
struct test_PsGetCurrentProcessId
|
||||
{
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
index 6f020101b4c..c9799ec5a3c 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
@@ -202,6 +202,12 @@ static void test_PsGetCurrentThread(void)
|
||||
wine_run_kernel_test(device_path, WINE_IOCTL_PsGetCurrentThread, NULL);
|
||||
}
|
||||
|
||||
+static void test_NtBuildNumber(void)
|
||||
+{
|
||||
+ trace("Running tests for NtBuildNumber\n");
|
||||
+ wine_run_kernel_test(device_path, WINE_IOCTL_NtBuildNumber, NULL);
|
||||
+}
|
||||
+
|
||||
START_TEST(ntoskrnl)
|
||||
{
|
||||
char filename[MAX_PATH];
|
||||
@@ -215,6 +221,7 @@ START_TEST(ntoskrnl)
|
||||
|
||||
test_PsGetCurrentProcessId();
|
||||
test_PsGetCurrentThread();
|
||||
+ test_NtBuildNumber();
|
||||
|
||||
unload_driver(service, filename);
|
||||
}
|
||||
--
|
||||
2.13.1
|
||||
|
@@ -0,0 +1,137 @@
|
||||
From 0ab2d5154c93ef99861a19381037728a034f9afa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 6 Jun 2017 23:45:07 +0200
|
||||
Subject: ntoskrnl.exe/tests: Add tests for ExInitializeNPagedLookasideList.
|
||||
|
||||
---
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.c | 39 ++++++++++++++++++++++++++---
|
||||
dlls/ntoskrnl.exe/tests/driver.sys/driver.h | 7 +++---
|
||||
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 7 ++++++
|
||||
3 files changed, 47 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
index 28fbaf1747f..39c2fb2aa50 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
+#define NONAMELESSUNION
|
||||
+#define NONAMELESSSTRUCT
|
||||
+
|
||||
#include "ntstatus.h"
|
||||
#define WIN32_NO_STATUS
|
||||
#include "windef.h"
|
||||
@@ -96,9 +99,38 @@ KERNEL_TESTCASE(NtBuildNumber)
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
+KERNEL_TESTCASE(ExInitializeNPagedLookasideList)
|
||||
+{
|
||||
+ NPAGED_LOOKASIDE_LIST list;
|
||||
+ ULONG tag = 0x454e4957; /* WINE */
|
||||
+
|
||||
+ ExInitializeNPagedLookasideList(&list, NULL, NULL, POOL_NX_ALLOCATION, LOOKASIDE_MINIMUM_BLOCK_SIZE, tag, 0);
|
||||
+ ok(list.L.Depth == 4, "Expected 4 got %u\n", list.L.Depth);
|
||||
+ ok(list.L.MaximumDepth == 256, "Expected 256 got %u\n", list.L.MaximumDepth);
|
||||
+ ok(list.L.TotalAllocates == 0, "Expected 0 got %u\n", list.L.TotalAllocates);
|
||||
+ ok(list.L.u2.AllocateMisses == 0, "Expected 0 got %u\n", list.L.u2.AllocateMisses);
|
||||
+ ok(list.L.TotalFrees == 0, "Expected 0 got %u\n", list.L.TotalFrees);
|
||||
+ ok(list.L.u3.FreeMisses == 0, "Expected 0 got %u\n", list.L.u3.FreeMisses);
|
||||
+ ok(list.L.Type == (NonPagedPool|POOL_NX_ALLOCATION),
|
||||
+ "Expected NonPagedPool|POOL_NX_ALLOCATION got %u\n", list.L.Type);
|
||||
+ ok(list.L.Tag == tag, "Expected %x got %x\n", tag, list.L.Tag);
|
||||
+ ok(list.L.Size == LOOKASIDE_MINIMUM_BLOCK_SIZE,
|
||||
+ "Expected %u got %u\n", LOOKASIDE_MINIMUM_BLOCK_SIZE, list.L.Size);
|
||||
+ ok(list.L.LastTotalAllocates == 0,"Expected 0 got %u\n", list.L.LastTotalAllocates);
|
||||
+ ok(list.L.u6.LastAllocateMisses == 0,"Expected 0 got %u\n", list.L.u6.LastAllocateMisses);
|
||||
+ ExDeleteNPagedLookasideList(&list);
|
||||
+
|
||||
+ list.L.Depth = 0;
|
||||
+ ExInitializeNPagedLookasideList(&list, NULL, NULL, 0, LOOKASIDE_MINIMUM_BLOCK_SIZE, tag, 20);
|
||||
+ ok(list.L.Depth == 4, "Expected 4 got %u\n", list.L.Depth);
|
||||
+ ExDeleteNPagedLookasideList(&list);
|
||||
+
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
+
|
||||
static NTSTATUS WINAPI driver_Create(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
- irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
+ irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
IoCompleteRequest(irp, IO_NO_INCREMENT);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
@@ -134,6 +166,7 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp)
|
||||
DECLARE_TEST(PsGetCurrentProcessId);
|
||||
DECLARE_TEST(PsGetCurrentThread);
|
||||
DECLARE_TEST(NtBuildNumber);
|
||||
+ DECLARE_TEST(ExInitializeNPagedLookasideList);
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -145,7 +178,7 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp)
|
||||
if (status == STATUS_SUCCESS) information = sizeof(*state);
|
||||
|
||||
done:
|
||||
- irp->IoStatus.Status = status;
|
||||
+ irp->IoStatus.u.Status = status;
|
||||
irp->IoStatus.Information = information;
|
||||
IoCompleteRequest(irp, IO_NO_INCREMENT);
|
||||
return status;
|
||||
@@ -153,7 +186,7 @@ done:
|
||||
|
||||
static NTSTATUS WINAPI driver_Close(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
- irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
+ irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
IoCompleteRequest(irp, IO_NO_INCREMENT);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
index c3440cb65c2..b5b3ef4e027 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.h
|
||||
@@ -22,9 +22,10 @@
|
||||
|
||||
#include "test.h"
|
||||
|
||||
-#define WINE_IOCTL_PsGetCurrentProcessId WINE_TEST_IOCTL(0)
|
||||
-#define WINE_IOCTL_PsGetCurrentThread WINE_TEST_IOCTL(1)
|
||||
-#define WINE_IOCTL_NtBuildNumber WINE_TEST_IOCTL(2)
|
||||
+#define WINE_IOCTL_PsGetCurrentProcessId WINE_TEST_IOCTL(0)
|
||||
+#define WINE_IOCTL_PsGetCurrentThread WINE_TEST_IOCTL(1)
|
||||
+#define WINE_IOCTL_NtBuildNumber WINE_TEST_IOCTL(2)
|
||||
+#define WINE_IOCTL_ExInitializeNPagedLookasideList WINE_TEST_IOCTL(3)
|
||||
|
||||
struct test_PsGetCurrentProcessId
|
||||
{
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
index c9799ec5a3c..40e62053150 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
|
||||
@@ -208,6 +208,12 @@ static void test_NtBuildNumber(void)
|
||||
wine_run_kernel_test(device_path, WINE_IOCTL_NtBuildNumber, NULL);
|
||||
}
|
||||
|
||||
+static void test_ExInitializeNPagedLookasideList(void)
|
||||
+{
|
||||
+ trace("Running tests for ExInitializeNPagedLookasideList\n");
|
||||
+ wine_run_kernel_test(device_path, WINE_IOCTL_ExInitializeNPagedLookasideList, NULL);
|
||||
+}
|
||||
+
|
||||
START_TEST(ntoskrnl)
|
||||
{
|
||||
char filename[MAX_PATH];
|
||||
@@ -222,6 +228,7 @@ START_TEST(ntoskrnl)
|
||||
test_PsGetCurrentProcessId();
|
||||
test_PsGetCurrentThread();
|
||||
test_NtBuildNumber();
|
||||
+ test_ExInitializeNPagedLookasideList();
|
||||
|
||||
unload_driver(service, filename);
|
||||
}
|
||||
--
|
||||
2.13.1
|
||||
|
@@ -1 +1,2 @@
|
||||
Fixes: Implement ntoskrnl driver testing framework.
|
||||
Depends: ntoskrnl-Stubs
|
||||
|
Reference in New Issue
Block a user