Author: tfaber
Date: Tue Nov 4 20:55:16 2014
New Revision: 65256
URL:
http://svn.reactos.org/svn/reactos?rev=65256&view=rev
Log:
[KMTESTS]
- Move out definitions for user/kernel test utility functions into their own header (still
not pretty, but at least the one header won't get as huge
- Make KmtStartThread/KmtFinishThread available to all tests
Added:
trunk/rostests/kmtests/include/kmt_test_kernel.h
- copied, changed from r65197, trunk/rostests/kmtests/include/kmt_test.h
trunk/rostests/kmtests/include/kmt_test_user.h
- copied, changed from r65197, trunk/rostests/kmtests/include/kmt_test.h
Modified:
trunk/rostests/kmtests/include/kmt_test.h
trunk/rostests/kmtests/npfs/NpfsHelpers.c
trunk/rostests/kmtests/npfs/npfs.h
Modified: trunk/rostests/kmtests/include/kmt_test.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/include/kmt_test.…
==============================================================================
--- trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] (original)
+++ trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] Tue Nov 4 20:55:16 2014
@@ -132,6 +132,8 @@
BOOLEAN KmtAreInterruptsEnabled(VOID);
ULONG KmtGetPoolTag(PVOID Memory);
USHORT KmtGetPoolType(PVOID Memory);
+PKTHREAD KmtStartThread(IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext
OPTIONAL);
+VOID KmtFinishThread(IN PKTHREAD Thread OPTIONAL, IN PKEVENT Event OPTIONAL);
#elif defined KMT_USER_MODE
DWORD KmtRunKernelTest(IN PCSTR TestName);
@@ -242,143 +244,9 @@
#if defined KMT_DEFINE_TEST_FUNCTIONS
#if defined KMT_KERNEL_MODE
-BOOLEAN KmtIsCheckedBuild;
-BOOLEAN KmtIsMultiProcessorBuild;
-PCSTR KmtMajorFunctionNames[] =
-{
- "Create",
- "CreateNamedPipe",
- "Close",
- "Read",
- "Write",
- "QueryInformation",
- "SetInformation",
- "QueryEa",
- "SetEa",
- "FlushBuffers",
- "QueryVolumeInformation",
- "SetVolumeInformation",
- "DirectoryControl",
- "FileSystemControl",
- "DeviceControl",
- "InternalDeviceControl/Scsi",
- "Shutdown",
- "LockControl",
- "Cleanup",
- "CreateMailslot",
- "QuerySecurity",
- "SetSecurity",
- "Power",
- "SystemControl",
- "DeviceChange",
- "QueryQuota",
- "SetQuota",
- "Pnp/PnpPower"
-};
-
-VOID KmtSetIrql(IN KIRQL NewIrql)
-{
- KIRQL Irql = KeGetCurrentIrql();
- if (Irql > NewIrql)
- KeLowerIrql(NewIrql);
- else if (Irql < NewIrql)
- KeRaiseIrql(NewIrql, &Irql);
-}
-
-BOOLEAN KmtAreInterruptsEnabled(VOID)
-{
- return (__readeflags() & (1 << 9)) != 0;
-}
-
-typedef struct _POOL_HEADER
-{
- union
- {
- struct
- {
-#ifdef _M_AMD64
- USHORT PreviousSize:8;
- USHORT PoolIndex:8;
- USHORT BlockSize:8;
- USHORT PoolType:8;
-#else
- USHORT PreviousSize:9;
- USHORT PoolIndex:7;
- USHORT BlockSize:9;
- USHORT PoolType:7;
-#endif
- };
- ULONG Ulong1;
- };
-#ifdef _M_AMD64
- ULONG PoolTag;
-#endif
- union
- {
-#ifdef _M_AMD64
- PEPROCESS ProcessBilled;
-#else
- ULONG PoolTag;
-#endif
- struct
- {
- USHORT AllocatorBackTraceIndex;
- USHORT PoolTagHash;
- };
- };
-} POOL_HEADER, *PPOOL_HEADER;
-
-ULONG KmtGetPoolTag(PVOID Memory)
-{
- PPOOL_HEADER Header;
-
- /* it's not so easy for allocations of PAGE_SIZE */
- if (((ULONG_PTR)Memory & (PAGE_SIZE - 1)) == 0)
- return 'TooL';
-
- Header = Memory;
- Header--;
-
- return Header->PoolTag;
-}
-
-USHORT KmtGetPoolType(PVOID Memory)
-{
- PPOOL_HEADER Header;
-
- /* it's not so easy for allocations of PAGE_SIZE */
- if (((ULONG_PTR)Memory & (PAGE_SIZE - 1)) == 0)
- return 0;
-
- Header = Memory;
- Header--;
-
- return Header->PoolType;
-}
-
-INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list
Arguments) KMT_FORMAT(ms_printf, 3, 0);
+#include "kmt_test_kernel.h"
#elif defined KMT_USER_MODE
-static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
-{
- PKMT_RESULTBUFFER Buffer = HeapAlloc(GetProcessHeap(), 0, ResultBufferSize);
- if (!Buffer)
- return NULL;
-
- Buffer->Successes = 0;
- Buffer->Failures = 0;
- Buffer->Skipped = 0;
- Buffer->LogBufferLength = 0;
- Buffer->LogBufferMaxLength = (ULONG)ResultBufferSize -
FIELD_OFFSET(KMT_RESULTBUFFER, LogBuffer);
-
- return Buffer;
-}
-
-static VOID KmtFreeResultBuffer(PKMT_RESULTBUFFER Buffer)
-{
- HeapFree(GetProcessHeap(), 0, Buffer);
-}
-
-#define KmtVSNPrintF vsnprintf
+#include "kmt_test_user.h"
#endif /* defined KMT_USER_MODE */
PKMT_RESULTBUFFER ResultBuffer = NULL;
Copied: trunk/rostests/kmtests/include/kmt_test_kernel.h (from r65197,
trunk/rostests/kmtests/include/kmt_test.h)
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/include/kmt_test_…
==============================================================================
--- trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] (original)
+++ trunk/rostests/kmtests/include/kmt_test_kernel.h [iso-8859-1] Tue Nov 4 20:55:16
2014
@@ -1,247 +1,17 @@
/*
* PROJECT: ReactOS kernel-mode tests
- * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
* PURPOSE: Kernel-Mode Test Suite test framework declarations
* PROGRAMMER: Thomas Faber <thomas.faber(a)reactos.org>
*/
-/* Inspired by Wine C unit tests, Copyright (C) 2002 Alexandre Julliard
- * Inspired by ReactOS kernel-mode regression tests,
- * Copyright (C) Aleksey Bragin, Filip Navara
- */
+#ifndef _KMTEST_TEST_KERNEL_H_
+#define _KMTEST_TEST_KERNEL_H_
-#ifndef _KMTEST_TEST_H_
-#define _KMTEST_TEST_H_
+#if !defined _KMTEST_TEST_H_
+#error include kmt_test.h instead of including kmt_test_kernel.h
+#endif /* !defined _KMTEST_TEST_H_ */
-#include <kmt_platform.h>
-
-typedef VOID KMT_TESTFUNC(VOID);
-typedef KMT_TESTFUNC *PKMT_TESTFUNC;
-
-typedef struct
-{
- const char *TestName;
- KMT_TESTFUNC *TestFunction;
-} KMT_TEST, *PKMT_TEST;
-
-typedef const KMT_TEST CKMT_TEST, *PCKMT_TEST;
-
-extern const KMT_TEST TestList[];
-
-typedef struct
-{
- volatile LONG Successes;
- volatile LONG Failures;
- volatile LONG Skipped;
- volatile LONG LogBufferLength;
- LONG LogBufferMaxLength;
- CHAR LogBuffer[ANYSIZE_ARRAY];
-} KMT_RESULTBUFFER, *PKMT_RESULTBUFFER;
-
-#ifndef KMT_STANDALONE_DRIVER
-
-/* usermode call-back mechanism */
-
-/* list of supported operations */
-typedef enum _KMT_CALLBACK_INFORMATION_CLASS
-{
- QueryVirtualMemory
-} KMT_CALLBACK_INFORMATION_CLASS, *PKMT_CALLBACK_INFORMATION_CLASS;
-
-/* TODO: "response" is a little generic */
-typedef union _KMT_RESPONSE
-{
- MEMORY_BASIC_INFORMATION MemInfo;
-} KMT_RESPONSE, *PKMT_RESPONSE;
-
-/* this struct is sent from driver to usermode */
-typedef struct _KMT_CALLBACK_REQUEST_PACKET
-{
- ULONG RequestId;
- KMT_CALLBACK_INFORMATION_CLASS OperationClass;
- PVOID Parameters;
-} KMT_CALLBACK_REQUEST_PACKET, *PKMT_CALLBACK_REQUEST_PACKET;
-
-PKMT_RESPONSE KmtUserModeCallback(KMT_CALLBACK_INFORMATION_CLASS Operation, PVOID
Parameters);
-VOID KmtFreeCallbackResponse(PKMT_RESPONSE Response);
-
-//macro to simplify using the mechanism
-#define Test_NtQueryVirtualMemory(BaseAddress, Size, AllocationType, ProtectionType)
\
- do {
\
- PKMT_RESPONSE NtQueryTest = KmtUserModeCallback(QueryVirtualMemory, BaseAddress);
\
- if (NtQueryTest != NULL)
\
- {
\
- ok_eq_hex(NtQueryTest->MemInfo.Protect, ProtectionType);
\
- ok_eq_hex(NtQueryTest->MemInfo.State, AllocationType);
\
- ok_eq_size(NtQueryTest->MemInfo.RegionSize, Size);
\
- KmtFreeCallbackResponse(NtQueryTest);
\
- }
\
- } while (0)
\
-
-#endif
-
-#ifdef KMT_STANDALONE_DRIVER
-#define KMT_KERNEL_MODE
-
-typedef NTSTATUS (KMT_IRP_HANDLER)(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PIO_STACK_LOCATION IoStackLocation);
-typedef KMT_IRP_HANDLER *PKMT_IRP_HANDLER;
-
-NTSTATUS KmtRegisterIrpHandler(IN UCHAR MajorFunction, IN PDEVICE_OBJECT DeviceObject
OPTIONAL, IN PKMT_IRP_HANDLER IrpHandler);
-NTSTATUS KmtUnregisterIrpHandler(IN UCHAR MajorFunction, IN PDEVICE_OBJECT DeviceObject
OPTIONAL, IN PKMT_IRP_HANDLER IrpHandler);
-
-typedef NTSTATUS (KMT_MESSAGE_HANDLER)(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG ControlCode,
- IN PVOID Buffer OPTIONAL,
- IN SIZE_T InLength,
- IN OUT PSIZE_T OutLength);
-typedef KMT_MESSAGE_HANDLER *PKMT_MESSAGE_HANDLER;
-
-NTSTATUS KmtRegisterMessageHandler(IN ULONG ControlCode OPTIONAL, IN PDEVICE_OBJECT
DeviceObject OPTIONAL, IN PKMT_MESSAGE_HANDLER MessageHandler);
-NTSTATUS KmtUnregisterMessageHandler(IN ULONG ControlCode OPTIONAL, IN PDEVICE_OBJECT
DeviceObject OPTIONAL, IN PKMT_MESSAGE_HANDLER MessageHandler);
-
-typedef enum
-{
- TESTENTRY_NO_CREATE_DEVICE = 1,
- TESTENTRY_NO_REGISTER_DISPATCH = 2,
- TESTENTRY_NO_REGISTER_UNLOAD = 4,
- TESTENTRY_NO_EXCLUSIVE_DEVICE = 8,
-} KMT_TESTENTRY_FLAGS;
-
-NTSTATUS TestEntry(IN PDRIVER_OBJECT DriverObject, IN PCUNICODE_STRING RegistryPath, OUT
PCWSTR *DeviceName, IN OUT INT *Flags);
-VOID TestUnload(IN PDRIVER_OBJECT DriverObject);
-#endif /* defined KMT_STANDALONE_DRIVER */
-
-#ifdef KMT_KERNEL_MODE
-/* Device Extension layout */
-typedef struct
-{
- PKMT_RESULTBUFFER ResultBuffer;
- PMDL Mdl;
-} KMT_DEVICE_EXTENSION, *PKMT_DEVICE_EXTENSION;
-
-extern BOOLEAN KmtIsCheckedBuild;
-extern BOOLEAN KmtIsMultiProcessorBuild;
-extern PCSTR KmtMajorFunctionNames[];
-extern PDRIVER_OBJECT KmtDriverObject;
-
-VOID KmtSetIrql(IN KIRQL NewIrql);
-BOOLEAN KmtAreInterruptsEnabled(VOID);
-ULONG KmtGetPoolTag(PVOID Memory);
-USHORT KmtGetPoolType(PVOID Memory);
-#elif defined KMT_USER_MODE
-DWORD KmtRunKernelTest(IN PCSTR TestName);
-
-VOID KmtLoadDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning);
-VOID KmtUnloadDriver(VOID);
-VOID KmtOpenDriver(VOID);
-VOID KmtCloseDriver(VOID);
-
-DWORD KmtSendToDriver(IN DWORD ControlCode);
-DWORD KmtSendStringToDriver(IN DWORD ControlCode, IN PCSTR String);
-DWORD KmtSendWStringToDriver(IN DWORD ControlCode, IN PCWSTR String);
-DWORD KmtSendBufferToDriver(IN DWORD ControlCode, IN OUT PVOID Buffer OPTIONAL, IN DWORD
InLength, IN OUT PDWORD OutLength);
-#else /* if !defined KMT_KERNEL_MODE && !defined KMT_USER_MODE */
-#error either KMT_KERNEL_MODE or KMT_USER_MODE must be defined
-#endif /* !defined KMT_KERNEL_MODE && !defined KMT_USER_MODE */
-
-extern PKMT_RESULTBUFFER ResultBuffer;
-
-#ifdef __GNUC__
-/* TODO: GCC doesn't understand %wZ :( */
-#define KMT_FORMAT(type, fmt, first) /*__attribute__((__format__(type, fmt, first)))*/
-#elif !defined __GNUC__
-#define KMT_FORMAT(type, fmt, first)
-#endif /* !defined __GNUC__ */
-
-#define START_TEST(name) VOID Test_##name(VOID)
-
-#ifndef KMT_STRINGIZE
-#define KMT_STRINGIZE(x) #x
-#endif /* !defined KMT_STRINGIZE */
-#define ok(test, ...) ok_(test, __FILE__, __LINE__, __VA_ARGS__)
-#define trace(...) trace_( __FILE__, __LINE__, __VA_ARGS__)
-#define skip(test, ...) skip_(test, __FILE__, __LINE__, __VA_ARGS__)
-
-#define ok_(test, file, line, ...) KmtOk(test, file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-#define trace_(file, line, ...) KmtTrace( file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-#define skip_(test, file, line, ...) KmtSkip(test, file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-
-BOOLEAN KmtVOk(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 3, 0);
-BOOLEAN KmtOk(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 3, 4);
-VOID KmtVTrace(PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 2, 0);
-VOID KmtTrace(PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 2, 3);
-BOOLEAN KmtVSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 3, 0);
-BOOLEAN KmtSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 3, 4);
-PVOID KmtAllocateGuarded(SIZE_T SizeRequested);
-VOID KmtFreeGuarded(PVOID Pointer);
-
-#ifdef KMT_KERNEL_MODE
-#define ok_irql(irql) ok(KeGetCurrentIrql() == irql, "IRQL is
%d, expected %d\n", KeGetCurrentIrql(), irql)
-#endif /* defined KMT_KERNEL_MODE */
-#define ok_eq_print(value, expected, spec) ok((value) == (expected), #value " =
" spec ", expected " spec "\n", value, expected)
-#define ok_eq_pointer(value, expected) ok_eq_print(value, expected, "%p")
-#define ok_eq_int(value, expected) ok_eq_print(value, expected, "%d")
-#define ok_eq_uint(value, expected) ok_eq_print(value, expected, "%u")
-#define ok_eq_long(value, expected) ok_eq_print(value, expected,
"%ld")
-#define ok_eq_ulong(value, expected) ok_eq_print(value, expected,
"%lu")
-#define ok_eq_longlong(value, expected) ok_eq_print(value, expected,
"%I64d")
-#define ok_eq_ulonglong(value, expected) ok_eq_print(value, expected,
"%I64u")
-#define ok_eq_char(value, expected) ok_eq_print(value, expected, "%c")
-#define ok_eq_wchar(value, expected) ok_eq_print(value, expected, "%C")
-#ifndef _WIN64
-#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected),
"%lu")
-#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected),
"%ld")
-#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected),
"%lu")
-#elif defined _WIN64
-#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected),
"%I64u")
-#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected),
"%I64d")
-#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected),
"%I64u")
-#endif /* defined _WIN64 */
-#define ok_eq_hex(value, expected) ok_eq_print(value, expected,
"0x%08lx")
-#define ok_bool_true(value, desc) ok((value) == TRUE, desc " FALSE,
expected TRUE\n")
-#define ok_bool_false(value, desc) ok((value) == FALSE, desc " TRUE,
expected FALSE\n")
-#define ok_eq_bool(value, expected) ok((value) == (expected), #value " = %s,
expected %s\n", \
- (value) ? "TRUE" :
"FALSE", \
- (expected) ? "TRUE" :
"FALSE")
-#define ok_eq_str(value, expected) ok(!strcmp(value, expected), #value " =
\"%s\", expected \"%s\"\n", value, expected)
-#define ok_eq_wstr(value, expected) ok(!wcscmp(value, expected), #value " =
\"%ls\", expected \"%ls\"\n", value, expected)
-#define ok_eq_tag(value, expected) ok_eq_print(value, expected,
"0x%08lx")
-
-#define KMT_MAKE_CODE(ControlCode) CTL_CODE(FILE_DEVICE_UNKNOWN, \
- 0xC00 + (ControlCode), \
- METHOD_BUFFERED, \
- FILE_ANY_ACCESS)
-
-#define MICROSECOND 10
-#define MILLISECOND (1000 * MICROSECOND)
-#define SECOND (1000 * MILLISECOND)
-
-/* See apitests/include/apitest.h */
-#define KmtInvalidPointer ((PVOID)0x5555555555555555ULL)
-
-#define KmtStartSeh() \
-{ \
- NTSTATUS ExceptionStatus = STATUS_SUCCESS; \
- _SEH2_TRY \
- {
-
-#define KmtEndSeh(ExpectedStatus) \
- } \
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) \
- { \
- ExceptionStatus = _SEH2_GetExceptionCode(); \
- } \
- _SEH2_END; \
- ok_eq_hex(ExceptionStatus, (ExpectedStatus)); \
-}
-
-#if defined KMT_DEFINE_TEST_FUNCTIONS
-
-#if defined KMT_KERNEL_MODE
BOOLEAN KmtIsCheckedBuild;
BOOLEAN KmtIsMultiProcessorBuild;
PCSTR KmtMajorFunctionNames[] =
@@ -356,240 +126,59 @@
return Header->PoolType;
}
-INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list
Arguments) KMT_FORMAT(ms_printf, 3, 0);
-#elif defined KMT_USER_MODE
-static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
+PKTHREAD KmtStartThread(IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext OPTIONAL)
{
- PKMT_RESULTBUFFER Buffer = HeapAlloc(GetProcessHeap(), 0, ResultBufferSize);
- if (!Buffer)
- return NULL;
+ NTSTATUS Status;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ HANDLE ThreadHandle;
+ PVOID ThreadObject = NULL;
- Buffer->Successes = 0;
- Buffer->Failures = 0;
- Buffer->Skipped = 0;
- Buffer->LogBufferLength = 0;
- Buffer->LogBufferMaxLength = (ULONG)ResultBufferSize -
FIELD_OFFSET(KMT_RESULTBUFFER, LogBuffer);
-
- return Buffer;
+ InitializeObjectAttributes(&ObjectAttributes,
+ NULL,
+ OBJ_KERNEL_HANDLE,
+ NULL,
+ NULL);
+ ThreadHandle = INVALID_HANDLE_VALUE;
+ Status = PsCreateSystemThread(&ThreadHandle,
+ SYNCHRONIZE,
+ &ObjectAttributes,
+ NULL,
+ NULL,
+ StartRoutine,
+ StartContext);
+ ok_eq_hex(Status, STATUS_SUCCESS);
+ if (!skip(NT_SUCCESS(Status) && ThreadHandle != NULL && ThreadHandle
!= INVALID_HANDLE_VALUE, "No thread\n"))
+ {
+ Status = ObReferenceObjectByHandle(ThreadHandle,
+ SYNCHRONIZE,
+ *PsThreadType,
+ KernelMode,
+ &ThreadObject,
+ NULL);
+ ok_eq_hex(Status, STATUS_SUCCESS);
+ ObCloseHandle(ThreadHandle, KernelMode);
+ }
+ return ThreadObject;
}
-static VOID KmtFreeResultBuffer(PKMT_RESULTBUFFER Buffer)
+VOID KmtFinishThread(IN PKTHREAD Thread OPTIONAL, IN PKEVENT Event OPTIONAL)
{
- HeapFree(GetProcessHeap(), 0, Buffer);
+ NTSTATUS Status;
+
+ if (skip(Thread != NULL, "No thread\n"))
+ return;
+
+ if (Event)
+ KeSetEvent(Event, IO_NO_INCREMENT, TRUE);
+ Status = KeWaitForSingleObject(Thread,
+ Executive,
+ KernelMode,
+ FALSE,
+ NULL);
+ ok_eq_hex(Status, STATUS_SUCCESS);
+ ObDereferenceObject(Thread);
}
-#define KmtVSNPrintF vsnprintf
-#endif /* defined KMT_USER_MODE */
+INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list
Arguments) KMT_FORMAT(ms_printf, 3, 0);
-PKMT_RESULTBUFFER ResultBuffer = NULL;
-
-static VOID KmtAddToLogBuffer(PKMT_RESULTBUFFER Buffer, PCSTR String, SIZE_T Length)
-{
- LONG OldLength;
- LONG NewLength;
-
- if (!Buffer)
- return;
-
- do
- {
- OldLength = Buffer->LogBufferLength;
- NewLength = OldLength + (ULONG)Length;
- if (NewLength > Buffer->LogBufferMaxLength)
- return;
- } while (InterlockedCompareExchange(&Buffer->LogBufferLength, NewLength,
OldLength) != OldLength);
-
- memcpy(&Buffer->LogBuffer[OldLength], String, Length);
-}
-
-KMT_FORMAT(ms_printf, 5, 0)
-static SIZE_T KmtXVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR FileAndLine, PCSTR
Prepend, PCSTR Format, va_list Arguments)
-{
- SIZE_T BufferLength = 0;
- SIZE_T Length;
-
- if (FileAndLine)
- {
- PCSTR Slash;
- Slash = strrchr(FileAndLine, '\\');
- if (Slash)
- FileAndLine = Slash + 1;
- Slash = strrchr(FileAndLine, '/');
- if (Slash)
- FileAndLine = Slash + 1;
-
- Length = min(BufferMaxLength, strlen(FileAndLine));
- memcpy(Buffer, FileAndLine, Length);
- Buffer += Length;
- BufferLength += Length;
- BufferMaxLength -= Length;
- }
- if (Prepend)
- {
- Length = min(BufferMaxLength, strlen(Prepend));
- memcpy(Buffer, Prepend, Length);
- Buffer += Length;
- BufferLength += Length;
- BufferMaxLength -= Length;
- }
- if (Format)
- {
- Length = KmtVSNPrintF(Buffer, BufferMaxLength, Format, Arguments);
- /* vsnprintf can return more than maxLength, we don't want to do that */
- BufferLength += min(Length, BufferMaxLength);
- }
- return BufferLength;
-}
-
-KMT_FORMAT(ms_printf, 5, 6)
-static SIZE_T KmtXSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR FileAndLine, PCSTR
Prepend, PCSTR Format, ...)
-{
- SIZE_T BufferLength;
- va_list Arguments;
- va_start(Arguments, Format);
- BufferLength = KmtXVSNPrintF(Buffer, BufferMaxLength, FileAndLine, Prepend, Format,
Arguments);
- va_end(Arguments);
- return BufferLength;
-}
-
-VOID KmtFinishTest(PCSTR TestName)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return;
-
- MessageLength = KmtXSNPrintF(MessageBuffer, sizeof MessageBuffer, NULL, NULL,
- "%s: %ld tests executed (0 marked as todo, %ld
failures), %ld skipped.\n",
- TestName,
- ResultBuffer->Successes +
ResultBuffer->Failures,
- ResultBuffer->Failures,
- ResultBuffer->Skipped);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
-}
-
-BOOLEAN KmtVOk(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return Condition != 0;
-
- if (Condition)
- {
- InterlockedIncrement(&ResultBuffer->Successes);
-
- if (0/*KmtReportSuccess*/)
- {
- MessageLength = KmtXSNPrintF(MessageBuffer, sizeof MessageBuffer,
FileAndLine, ": Test succeeded\n", NULL);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
- }
- else
- {
- InterlockedIncrement(&ResultBuffer->Failures);
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": Test failed: ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
-
- return Condition != 0;
-}
-
-BOOLEAN KmtOk(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
-{
- BOOLEAN Ret;
- va_list Arguments;
- va_start(Arguments, Format);
- Ret = KmtVOk(Condition, FileAndLine, Format, Arguments);
- va_end(Arguments);
- return Ret;
-}
-
-VOID KmtVTrace(PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
-}
-
-VOID KmtTrace(PCSTR FileAndLine, PCSTR Format, ...)
-{
- va_list Arguments;
- va_start(Arguments, Format);
- KmtVTrace(FileAndLine, Format, Arguments);
- va_end(Arguments);
-}
-
-BOOLEAN KmtVSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return !Condition;
-
- if (!Condition)
- {
- InterlockedIncrement(&ResultBuffer->Skipped);
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": Tests skipped: ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
-
- return !Condition;
-}
-
-BOOLEAN KmtSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
-{
- BOOLEAN Ret;
- va_list Arguments;
- va_start(Arguments, Format);
- Ret = KmtVSkip(Condition, FileAndLine, Format, Arguments);
- va_end(Arguments);
- return Ret;
-}
-
-PVOID KmtAllocateGuarded(SIZE_T SizeRequested)
-{
- NTSTATUS Status;
- SIZE_T Size = PAGE_ROUND_UP(SizeRequested + PAGE_SIZE);
- PVOID VirtualMemory = NULL;
- PCHAR StartOfBuffer;
-
- Status = ZwAllocateVirtualMemory(ZwCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_RESERVE, PAGE_NOACCESS);
-
- if (!NT_SUCCESS(Status))
- return NULL;
-
- Size -= PAGE_SIZE;
- Status = ZwAllocateVirtualMemory(ZwCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_COMMIT, PAGE_READWRITE);
- if (!NT_SUCCESS(Status))
- {
- Size = 0;
- Status = ZwFreeVirtualMemory(ZwCurrentProcess(), &VirtualMemory, &Size,
MEM_RELEASE);
- ok_eq_hex(Status, STATUS_SUCCESS);
- return NULL;
- }
-
- StartOfBuffer = VirtualMemory;
- StartOfBuffer += Size - SizeRequested;
-
- return StartOfBuffer;
-}
-
-VOID KmtFreeGuarded(PVOID Pointer)
-{
- NTSTATUS Status;
- PVOID VirtualMemory = (PVOID)PAGE_ROUND_DOWN((SIZE_T)Pointer);
- SIZE_T Size = 0;
-
- Status = ZwFreeVirtualMemory(ZwCurrentProcess(), &VirtualMemory, &Size,
MEM_RELEASE);
- ok_eq_hex(Status, STATUS_SUCCESS);
-}
-
-#endif /* defined KMT_DEFINE_TEST_FUNCTIONS */
-
-#endif /* !defined _KMTEST_TEST_H_ */
+#endif /* !defined _KMTEST_TEST_KERNEL_H_ */
Copied: trunk/rostests/kmtests/include/kmt_test_user.h (from r65197,
trunk/rostests/kmtests/include/kmt_test.h)
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/include/kmt_test_…
==============================================================================
--- trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] (original)
+++ trunk/rostests/kmtests/include/kmt_test_user.h [iso-8859-1] Tue Nov 4 20:55:16 2014
@@ -1,363 +1,17 @@
/*
* PROJECT: ReactOS kernel-mode tests
- * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
* PURPOSE: Kernel-Mode Test Suite test framework declarations
* PROGRAMMER: Thomas Faber <thomas.faber(a)reactos.org>
*/
-/* Inspired by Wine C unit tests, Copyright (C) 2002 Alexandre Julliard
- * Inspired by ReactOS kernel-mode regression tests,
- * Copyright (C) Aleksey Bragin, Filip Navara
- */
+#ifndef _KMTEST_TEST_USER_H_
+#define _KMTEST_TEST_USER_H_
-#ifndef _KMTEST_TEST_H_
-#define _KMTEST_TEST_H_
+#if !defined _KMTEST_TEST_H_
+#error include kmt_test.h instead of including kmt_test_user.h
+#endif /* !defined _KMTEST_TEST_H_ */
-#include <kmt_platform.h>
-
-typedef VOID KMT_TESTFUNC(VOID);
-typedef KMT_TESTFUNC *PKMT_TESTFUNC;
-
-typedef struct
-{
- const char *TestName;
- KMT_TESTFUNC *TestFunction;
-} KMT_TEST, *PKMT_TEST;
-
-typedef const KMT_TEST CKMT_TEST, *PCKMT_TEST;
-
-extern const KMT_TEST TestList[];
-
-typedef struct
-{
- volatile LONG Successes;
- volatile LONG Failures;
- volatile LONG Skipped;
- volatile LONG LogBufferLength;
- LONG LogBufferMaxLength;
- CHAR LogBuffer[ANYSIZE_ARRAY];
-} KMT_RESULTBUFFER, *PKMT_RESULTBUFFER;
-
-#ifndef KMT_STANDALONE_DRIVER
-
-/* usermode call-back mechanism */
-
-/* list of supported operations */
-typedef enum _KMT_CALLBACK_INFORMATION_CLASS
-{
- QueryVirtualMemory
-} KMT_CALLBACK_INFORMATION_CLASS, *PKMT_CALLBACK_INFORMATION_CLASS;
-
-/* TODO: "response" is a little generic */
-typedef union _KMT_RESPONSE
-{
- MEMORY_BASIC_INFORMATION MemInfo;
-} KMT_RESPONSE, *PKMT_RESPONSE;
-
-/* this struct is sent from driver to usermode */
-typedef struct _KMT_CALLBACK_REQUEST_PACKET
-{
- ULONG RequestId;
- KMT_CALLBACK_INFORMATION_CLASS OperationClass;
- PVOID Parameters;
-} KMT_CALLBACK_REQUEST_PACKET, *PKMT_CALLBACK_REQUEST_PACKET;
-
-PKMT_RESPONSE KmtUserModeCallback(KMT_CALLBACK_INFORMATION_CLASS Operation, PVOID
Parameters);
-VOID KmtFreeCallbackResponse(PKMT_RESPONSE Response);
-
-//macro to simplify using the mechanism
-#define Test_NtQueryVirtualMemory(BaseAddress, Size, AllocationType, ProtectionType)
\
- do {
\
- PKMT_RESPONSE NtQueryTest = KmtUserModeCallback(QueryVirtualMemory, BaseAddress);
\
- if (NtQueryTest != NULL)
\
- {
\
- ok_eq_hex(NtQueryTest->MemInfo.Protect, ProtectionType);
\
- ok_eq_hex(NtQueryTest->MemInfo.State, AllocationType);
\
- ok_eq_size(NtQueryTest->MemInfo.RegionSize, Size);
\
- KmtFreeCallbackResponse(NtQueryTest);
\
- }
\
- } while (0)
\
-
-#endif
-
-#ifdef KMT_STANDALONE_DRIVER
-#define KMT_KERNEL_MODE
-
-typedef NTSTATUS (KMT_IRP_HANDLER)(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PIO_STACK_LOCATION IoStackLocation);
-typedef KMT_IRP_HANDLER *PKMT_IRP_HANDLER;
-
-NTSTATUS KmtRegisterIrpHandler(IN UCHAR MajorFunction, IN PDEVICE_OBJECT DeviceObject
OPTIONAL, IN PKMT_IRP_HANDLER IrpHandler);
-NTSTATUS KmtUnregisterIrpHandler(IN UCHAR MajorFunction, IN PDEVICE_OBJECT DeviceObject
OPTIONAL, IN PKMT_IRP_HANDLER IrpHandler);
-
-typedef NTSTATUS (KMT_MESSAGE_HANDLER)(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG ControlCode,
- IN PVOID Buffer OPTIONAL,
- IN SIZE_T InLength,
- IN OUT PSIZE_T OutLength);
-typedef KMT_MESSAGE_HANDLER *PKMT_MESSAGE_HANDLER;
-
-NTSTATUS KmtRegisterMessageHandler(IN ULONG ControlCode OPTIONAL, IN PDEVICE_OBJECT
DeviceObject OPTIONAL, IN PKMT_MESSAGE_HANDLER MessageHandler);
-NTSTATUS KmtUnregisterMessageHandler(IN ULONG ControlCode OPTIONAL, IN PDEVICE_OBJECT
DeviceObject OPTIONAL, IN PKMT_MESSAGE_HANDLER MessageHandler);
-
-typedef enum
-{
- TESTENTRY_NO_CREATE_DEVICE = 1,
- TESTENTRY_NO_REGISTER_DISPATCH = 2,
- TESTENTRY_NO_REGISTER_UNLOAD = 4,
- TESTENTRY_NO_EXCLUSIVE_DEVICE = 8,
-} KMT_TESTENTRY_FLAGS;
-
-NTSTATUS TestEntry(IN PDRIVER_OBJECT DriverObject, IN PCUNICODE_STRING RegistryPath, OUT
PCWSTR *DeviceName, IN OUT INT *Flags);
-VOID TestUnload(IN PDRIVER_OBJECT DriverObject);
-#endif /* defined KMT_STANDALONE_DRIVER */
-
-#ifdef KMT_KERNEL_MODE
-/* Device Extension layout */
-typedef struct
-{
- PKMT_RESULTBUFFER ResultBuffer;
- PMDL Mdl;
-} KMT_DEVICE_EXTENSION, *PKMT_DEVICE_EXTENSION;
-
-extern BOOLEAN KmtIsCheckedBuild;
-extern BOOLEAN KmtIsMultiProcessorBuild;
-extern PCSTR KmtMajorFunctionNames[];
-extern PDRIVER_OBJECT KmtDriverObject;
-
-VOID KmtSetIrql(IN KIRQL NewIrql);
-BOOLEAN KmtAreInterruptsEnabled(VOID);
-ULONG KmtGetPoolTag(PVOID Memory);
-USHORT KmtGetPoolType(PVOID Memory);
-#elif defined KMT_USER_MODE
-DWORD KmtRunKernelTest(IN PCSTR TestName);
-
-VOID KmtLoadDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning);
-VOID KmtUnloadDriver(VOID);
-VOID KmtOpenDriver(VOID);
-VOID KmtCloseDriver(VOID);
-
-DWORD KmtSendToDriver(IN DWORD ControlCode);
-DWORD KmtSendStringToDriver(IN DWORD ControlCode, IN PCSTR String);
-DWORD KmtSendWStringToDriver(IN DWORD ControlCode, IN PCWSTR String);
-DWORD KmtSendBufferToDriver(IN DWORD ControlCode, IN OUT PVOID Buffer OPTIONAL, IN DWORD
InLength, IN OUT PDWORD OutLength);
-#else /* if !defined KMT_KERNEL_MODE && !defined KMT_USER_MODE */
-#error either KMT_KERNEL_MODE or KMT_USER_MODE must be defined
-#endif /* !defined KMT_KERNEL_MODE && !defined KMT_USER_MODE */
-
-extern PKMT_RESULTBUFFER ResultBuffer;
-
-#ifdef __GNUC__
-/* TODO: GCC doesn't understand %wZ :( */
-#define KMT_FORMAT(type, fmt, first) /*__attribute__((__format__(type, fmt, first)))*/
-#elif !defined __GNUC__
-#define KMT_FORMAT(type, fmt, first)
-#endif /* !defined __GNUC__ */
-
-#define START_TEST(name) VOID Test_##name(VOID)
-
-#ifndef KMT_STRINGIZE
-#define KMT_STRINGIZE(x) #x
-#endif /* !defined KMT_STRINGIZE */
-#define ok(test, ...) ok_(test, __FILE__, __LINE__, __VA_ARGS__)
-#define trace(...) trace_( __FILE__, __LINE__, __VA_ARGS__)
-#define skip(test, ...) skip_(test, __FILE__, __LINE__, __VA_ARGS__)
-
-#define ok_(test, file, line, ...) KmtOk(test, file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-#define trace_(file, line, ...) KmtTrace( file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-#define skip_(test, file, line, ...) KmtSkip(test, file ":"
KMT_STRINGIZE(line), __VA_ARGS__)
-
-BOOLEAN KmtVOk(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 3, 0);
-BOOLEAN KmtOk(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 3, 4);
-VOID KmtVTrace(PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 2, 0);
-VOID KmtTrace(PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 2, 3);
-BOOLEAN KmtVSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
KMT_FORMAT(ms_printf, 3, 0);
-BOOLEAN KmtSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
KMT_FORMAT(ms_printf, 3, 4);
-PVOID KmtAllocateGuarded(SIZE_T SizeRequested);
-VOID KmtFreeGuarded(PVOID Pointer);
-
-#ifdef KMT_KERNEL_MODE
-#define ok_irql(irql) ok(KeGetCurrentIrql() == irql, "IRQL is
%d, expected %d\n", KeGetCurrentIrql(), irql)
-#endif /* defined KMT_KERNEL_MODE */
-#define ok_eq_print(value, expected, spec) ok((value) == (expected), #value " =
" spec ", expected " spec "\n", value, expected)
-#define ok_eq_pointer(value, expected) ok_eq_print(value, expected, "%p")
-#define ok_eq_int(value, expected) ok_eq_print(value, expected, "%d")
-#define ok_eq_uint(value, expected) ok_eq_print(value, expected, "%u")
-#define ok_eq_long(value, expected) ok_eq_print(value, expected,
"%ld")
-#define ok_eq_ulong(value, expected) ok_eq_print(value, expected,
"%lu")
-#define ok_eq_longlong(value, expected) ok_eq_print(value, expected,
"%I64d")
-#define ok_eq_ulonglong(value, expected) ok_eq_print(value, expected,
"%I64u")
-#define ok_eq_char(value, expected) ok_eq_print(value, expected, "%c")
-#define ok_eq_wchar(value, expected) ok_eq_print(value, expected, "%C")
-#ifndef _WIN64
-#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected),
"%lu")
-#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected),
"%ld")
-#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected),
"%lu")
-#elif defined _WIN64
-#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected),
"%I64u")
-#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected),
"%I64d")
-#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected),
"%I64u")
-#endif /* defined _WIN64 */
-#define ok_eq_hex(value, expected) ok_eq_print(value, expected,
"0x%08lx")
-#define ok_bool_true(value, desc) ok((value) == TRUE, desc " FALSE,
expected TRUE\n")
-#define ok_bool_false(value, desc) ok((value) == FALSE, desc " TRUE,
expected FALSE\n")
-#define ok_eq_bool(value, expected) ok((value) == (expected), #value " = %s,
expected %s\n", \
- (value) ? "TRUE" :
"FALSE", \
- (expected) ? "TRUE" :
"FALSE")
-#define ok_eq_str(value, expected) ok(!strcmp(value, expected), #value " =
\"%s\", expected \"%s\"\n", value, expected)
-#define ok_eq_wstr(value, expected) ok(!wcscmp(value, expected), #value " =
\"%ls\", expected \"%ls\"\n", value, expected)
-#define ok_eq_tag(value, expected) ok_eq_print(value, expected,
"0x%08lx")
-
-#define KMT_MAKE_CODE(ControlCode) CTL_CODE(FILE_DEVICE_UNKNOWN, \
- 0xC00 + (ControlCode), \
- METHOD_BUFFERED, \
- FILE_ANY_ACCESS)
-
-#define MICROSECOND 10
-#define MILLISECOND (1000 * MICROSECOND)
-#define SECOND (1000 * MILLISECOND)
-
-/* See apitests/include/apitest.h */
-#define KmtInvalidPointer ((PVOID)0x5555555555555555ULL)
-
-#define KmtStartSeh() \
-{ \
- NTSTATUS ExceptionStatus = STATUS_SUCCESS; \
- _SEH2_TRY \
- {
-
-#define KmtEndSeh(ExpectedStatus) \
- } \
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) \
- { \
- ExceptionStatus = _SEH2_GetExceptionCode(); \
- } \
- _SEH2_END; \
- ok_eq_hex(ExceptionStatus, (ExpectedStatus)); \
-}
-
-#if defined KMT_DEFINE_TEST_FUNCTIONS
-
-#if defined KMT_KERNEL_MODE
-BOOLEAN KmtIsCheckedBuild;
-BOOLEAN KmtIsMultiProcessorBuild;
-PCSTR KmtMajorFunctionNames[] =
-{
- "Create",
- "CreateNamedPipe",
- "Close",
- "Read",
- "Write",
- "QueryInformation",
- "SetInformation",
- "QueryEa",
- "SetEa",
- "FlushBuffers",
- "QueryVolumeInformation",
- "SetVolumeInformation",
- "DirectoryControl",
- "FileSystemControl",
- "DeviceControl",
- "InternalDeviceControl/Scsi",
- "Shutdown",
- "LockControl",
- "Cleanup",
- "CreateMailslot",
- "QuerySecurity",
- "SetSecurity",
- "Power",
- "SystemControl",
- "DeviceChange",
- "QueryQuota",
- "SetQuota",
- "Pnp/PnpPower"
-};
-
-VOID KmtSetIrql(IN KIRQL NewIrql)
-{
- KIRQL Irql = KeGetCurrentIrql();
- if (Irql > NewIrql)
- KeLowerIrql(NewIrql);
- else if (Irql < NewIrql)
- KeRaiseIrql(NewIrql, &Irql);
-}
-
-BOOLEAN KmtAreInterruptsEnabled(VOID)
-{
- return (__readeflags() & (1 << 9)) != 0;
-}
-
-typedef struct _POOL_HEADER
-{
- union
- {
- struct
- {
-#ifdef _M_AMD64
- USHORT PreviousSize:8;
- USHORT PoolIndex:8;
- USHORT BlockSize:8;
- USHORT PoolType:8;
-#else
- USHORT PreviousSize:9;
- USHORT PoolIndex:7;
- USHORT BlockSize:9;
- USHORT PoolType:7;
-#endif
- };
- ULONG Ulong1;
- };
-#ifdef _M_AMD64
- ULONG PoolTag;
-#endif
- union
- {
-#ifdef _M_AMD64
- PEPROCESS ProcessBilled;
-#else
- ULONG PoolTag;
-#endif
- struct
- {
- USHORT AllocatorBackTraceIndex;
- USHORT PoolTagHash;
- };
- };
-} POOL_HEADER, *PPOOL_HEADER;
-
-ULONG KmtGetPoolTag(PVOID Memory)
-{
- PPOOL_HEADER Header;
-
- /* it's not so easy for allocations of PAGE_SIZE */
- if (((ULONG_PTR)Memory & (PAGE_SIZE - 1)) == 0)
- return 'TooL';
-
- Header = Memory;
- Header--;
-
- return Header->PoolTag;
-}
-
-USHORT KmtGetPoolType(PVOID Memory)
-{
- PPOOL_HEADER Header;
-
- /* it's not so easy for allocations of PAGE_SIZE */
- if (((ULONG_PTR)Memory & (PAGE_SIZE - 1)) == 0)
- return 0;
-
- Header = Memory;
- Header--;
-
- return Header->PoolType;
-}
-
-INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list
Arguments) KMT_FORMAT(ms_printf, 3, 0);
-#elif defined KMT_USER_MODE
static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
{
PKMT_RESULTBUFFER Buffer = HeapAlloc(GetProcessHeap(), 0, ResultBufferSize);
@@ -379,217 +33,5 @@
}
#define KmtVSNPrintF vsnprintf
-#endif /* defined KMT_USER_MODE */
-PKMT_RESULTBUFFER ResultBuffer = NULL;
-
-static VOID KmtAddToLogBuffer(PKMT_RESULTBUFFER Buffer, PCSTR String, SIZE_T Length)
-{
- LONG OldLength;
- LONG NewLength;
-
- if (!Buffer)
- return;
-
- do
- {
- OldLength = Buffer->LogBufferLength;
- NewLength = OldLength + (ULONG)Length;
- if (NewLength > Buffer->LogBufferMaxLength)
- return;
- } while (InterlockedCompareExchange(&Buffer->LogBufferLength, NewLength,
OldLength) != OldLength);
-
- memcpy(&Buffer->LogBuffer[OldLength], String, Length);
-}
-
-KMT_FORMAT(ms_printf, 5, 0)
-static SIZE_T KmtXVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR FileAndLine, PCSTR
Prepend, PCSTR Format, va_list Arguments)
-{
- SIZE_T BufferLength = 0;
- SIZE_T Length;
-
- if (FileAndLine)
- {
- PCSTR Slash;
- Slash = strrchr(FileAndLine, '\\');
- if (Slash)
- FileAndLine = Slash + 1;
- Slash = strrchr(FileAndLine, '/');
- if (Slash)
- FileAndLine = Slash + 1;
-
- Length = min(BufferMaxLength, strlen(FileAndLine));
- memcpy(Buffer, FileAndLine, Length);
- Buffer += Length;
- BufferLength += Length;
- BufferMaxLength -= Length;
- }
- if (Prepend)
- {
- Length = min(BufferMaxLength, strlen(Prepend));
- memcpy(Buffer, Prepend, Length);
- Buffer += Length;
- BufferLength += Length;
- BufferMaxLength -= Length;
- }
- if (Format)
- {
- Length = KmtVSNPrintF(Buffer, BufferMaxLength, Format, Arguments);
- /* vsnprintf can return more than maxLength, we don't want to do that */
- BufferLength += min(Length, BufferMaxLength);
- }
- return BufferLength;
-}
-
-KMT_FORMAT(ms_printf, 5, 6)
-static SIZE_T KmtXSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR FileAndLine, PCSTR
Prepend, PCSTR Format, ...)
-{
- SIZE_T BufferLength;
- va_list Arguments;
- va_start(Arguments, Format);
- BufferLength = KmtXVSNPrintF(Buffer, BufferMaxLength, FileAndLine, Prepend, Format,
Arguments);
- va_end(Arguments);
- return BufferLength;
-}
-
-VOID KmtFinishTest(PCSTR TestName)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return;
-
- MessageLength = KmtXSNPrintF(MessageBuffer, sizeof MessageBuffer, NULL, NULL,
- "%s: %ld tests executed (0 marked as todo, %ld
failures), %ld skipped.\n",
- TestName,
- ResultBuffer->Successes +
ResultBuffer->Failures,
- ResultBuffer->Failures,
- ResultBuffer->Skipped);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
-}
-
-BOOLEAN KmtVOk(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return Condition != 0;
-
- if (Condition)
- {
- InterlockedIncrement(&ResultBuffer->Successes);
-
- if (0/*KmtReportSuccess*/)
- {
- MessageLength = KmtXSNPrintF(MessageBuffer, sizeof MessageBuffer,
FileAndLine, ": Test succeeded\n", NULL);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
- }
- else
- {
- InterlockedIncrement(&ResultBuffer->Failures);
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": Test failed: ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
-
- return Condition != 0;
-}
-
-BOOLEAN KmtOk(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
-{
- BOOLEAN Ret;
- va_list Arguments;
- va_start(Arguments, Format);
- Ret = KmtVOk(Condition, FileAndLine, Format, Arguments);
- va_end(Arguments);
- return Ret;
-}
-
-VOID KmtVTrace(PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
-}
-
-VOID KmtTrace(PCSTR FileAndLine, PCSTR Format, ...)
-{
- va_list Arguments;
- va_start(Arguments, Format);
- KmtVTrace(FileAndLine, Format, Arguments);
- va_end(Arguments);
-}
-
-BOOLEAN KmtVSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, va_list Arguments)
-{
- CHAR MessageBuffer[512];
- SIZE_T MessageLength;
-
- if (!ResultBuffer)
- return !Condition;
-
- if (!Condition)
- {
- InterlockedIncrement(&ResultBuffer->Skipped);
- MessageLength = KmtXVSNPrintF(MessageBuffer, sizeof MessageBuffer, FileAndLine,
": Tests skipped: ", Format, Arguments);
- KmtAddToLogBuffer(ResultBuffer, MessageBuffer, MessageLength);
- }
-
- return !Condition;
-}
-
-BOOLEAN KmtSkip(INT Condition, PCSTR FileAndLine, PCSTR Format, ...)
-{
- BOOLEAN Ret;
- va_list Arguments;
- va_start(Arguments, Format);
- Ret = KmtVSkip(Condition, FileAndLine, Format, Arguments);
- va_end(Arguments);
- return Ret;
-}
-
-PVOID KmtAllocateGuarded(SIZE_T SizeRequested)
-{
- NTSTATUS Status;
- SIZE_T Size = PAGE_ROUND_UP(SizeRequested + PAGE_SIZE);
- PVOID VirtualMemory = NULL;
- PCHAR StartOfBuffer;
-
- Status = ZwAllocateVirtualMemory(ZwCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_RESERVE, PAGE_NOACCESS);
-
- if (!NT_SUCCESS(Status))
- return NULL;
-
- Size -= PAGE_SIZE;
- Status = ZwAllocateVirtualMemory(ZwCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_COMMIT, PAGE_READWRITE);
- if (!NT_SUCCESS(Status))
- {
- Size = 0;
- Status = ZwFreeVirtualMemory(ZwCurrentProcess(), &VirtualMemory, &Size,
MEM_RELEASE);
- ok_eq_hex(Status, STATUS_SUCCESS);
- return NULL;
- }
-
- StartOfBuffer = VirtualMemory;
- StartOfBuffer += Size - SizeRequested;
-
- return StartOfBuffer;
-}
-
-VOID KmtFreeGuarded(PVOID Pointer)
-{
- NTSTATUS Status;
- PVOID VirtualMemory = (PVOID)PAGE_ROUND_DOWN((SIZE_T)Pointer);
- SIZE_T Size = 0;
-
- Status = ZwFreeVirtualMemory(ZwCurrentProcess(), &VirtualMemory, &Size,
MEM_RELEASE);
- ok_eq_hex(Status, STATUS_SUCCESS);
-}
-
-#endif /* defined KMT_DEFINE_TEST_FUNCTIONS */
-
-#endif /* !defined _KMTEST_TEST_H_ */
+#endif /* !defined _KMTEST_TEST_USER_H_ */
Modified: trunk/rostests/kmtests/npfs/NpfsHelpers.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/npfs/NpfsHelpers.…
==============================================================================
--- trunk/rostests/kmtests/npfs/NpfsHelpers.c [iso-8859-1] (original)
+++ trunk/rostests/kmtests/npfs/NpfsHelpers.c [iso-8859-1] Tue Nov 4 20:55:16 2014
@@ -713,62 +713,3 @@
KeSetEvent(&Context->StartWorkEvent, IO_NO_INCREMENT, TRUE);
return WaitForWork(Context, MilliSeconds);
}
-
-PKTHREAD
-KmtStartThread(
- IN PKSTART_ROUTINE StartRoutine,
- IN PVOID StartContext OPTIONAL)
-{
- NTSTATUS Status;
- OBJECT_ATTRIBUTES ObjectAttributes;
- HANDLE ThreadHandle;
- PVOID ThreadObject = NULL;
-
- InitializeObjectAttributes(&ObjectAttributes,
- NULL,
- OBJ_KERNEL_HANDLE,
- NULL,
- NULL);
- ThreadHandle = INVALID_HANDLE_VALUE;
- Status = PsCreateSystemThread(&ThreadHandle,
- SYNCHRONIZE,
- &ObjectAttributes,
- NULL,
- NULL,
- StartRoutine,
- StartContext);
- ok_eq_hex(Status, STATUS_SUCCESS);
- if (!skip(NT_SUCCESS(Status) && ThreadHandle != NULL && ThreadHandle
!= INVALID_HANDLE_VALUE, "No thread\n"))
- {
- Status = ObReferenceObjectByHandle(ThreadHandle,
- SYNCHRONIZE,
- *PsThreadType,
- KernelMode,
- &ThreadObject,
- NULL);
- ok_eq_hex(Status, STATUS_SUCCESS);
- ObCloseHandle(ThreadHandle, KernelMode);
- }
- return ThreadObject;
-}
-
-VOID
-KmtFinishThread(
- IN PKTHREAD Thread OPTIONAL,
- IN PKEVENT Event OPTIONAL)
-{
- NTSTATUS Status;
-
- if (skip(Thread != NULL, "No thread\n"))
- return;
-
- if (Event)
- KeSetEvent(Event, IO_NO_INCREMENT, TRUE);
- Status = KeWaitForSingleObject(Thread,
- Executive,
- KernelMode,
- FALSE,
- NULL);
- ok_eq_hex(Status, STATUS_SUCCESS);
- ObDereferenceObject(Thread);
-}
Modified: trunk/rostests/kmtests/npfs/npfs.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/npfs/npfs.h?rev=6…
==============================================================================
--- trunk/rostests/kmtests/npfs/npfs.h [iso-8859-1] (original)
+++ trunk/rostests/kmtests/npfs/npfs.h [iso-8859-1] Tue Nov 4 20:55:16 2014
@@ -211,15 +211,4 @@
IN PTHREAD_CONTEXT Context,
IN ULONG MilliSeconds);
-
-PKTHREAD
-KmtStartThread(
- IN PKSTART_ROUTINE StartRoutine,
- IN PVOID StartContext OPTIONAL);
-
-VOID
-KmtFinishThread(
- IN PKTHREAD Thread OPTIONAL,
- IN PKEVENT Event OPTIONAL);
-
#endif /* !defined _KMTEST_NPFS_H_ */