From be359827c589f8a37a7c62a9ff4aba17a014affa Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 10 May 2014 17:19:53 +0000 Subject: [PATCH] [KMTEST] Add a temp hack that allows to compile kmtest_drv with either the current incompatible object type data imports or with the fixed ones svn path=/trunk/; revision=63222 --- rostests/kmtests/npfs/NpfsHelpers.c | 4 +++ rostests/kmtests/ntos_ex/ExFastMutex.c | 10 ++++-- rostests/kmtests/ntos_ex/ExResource.c | 9 ++++- rostests/kmtests/ntos_io/IoCreateFile.c | 35 +++++++++++++++++++ rostests/kmtests/ntos_ke/KeEvent.c | 8 ++++- rostests/kmtests/ntos_ke/KeGuardedMutex.c | 8 ++++- rostests/kmtests/ntos_mm/MmSection.c | 16 +++++++-- .../kmtests/ntos_mm/ZwAllocateVirtualMemory.c | 16 +++++++-- rostests/kmtests/ntos_mm/ZwCreateSection.c | 8 ++++- rostests/kmtests/ntos_mm/ZwMapViewOfSection.c | 16 +++++++-- rostests/kmtests/ntos_ob/ObTypes.c | 34 ++++++++++++++++++ 11 files changed, 152 insertions(+), 12 deletions(-) diff --git a/rostests/kmtests/npfs/NpfsHelpers.c b/rostests/kmtests/npfs/NpfsHelpers.c index f81c61a6309..a06aec7f527 100644 --- a/rostests/kmtests/npfs/NpfsHelpers.c +++ b/rostests/kmtests/npfs/NpfsHelpers.c @@ -742,7 +742,11 @@ KmtStartThread( { Status = ObReferenceObjectByHandle(ThreadHandle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else PsThreadType, +#endif KernelMode, &ThreadObject, NULL); diff --git a/rostests/kmtests/ntos_ex/ExFastMutex.c b/rostests/kmtests/ntos_ex/ExFastMutex.c index 25065ddaa6c..6ac87b68cc8 100644 --- a/rostests/kmtests/ntos_ex/ExFastMutex.c +++ b/rostests/kmtests/ntos_ex/ExFastMutex.c @@ -90,7 +90,7 @@ TestFastMutex( KmtSetIrql(OriginalIrql); CheckMutex(Mutex, 1L, NULL, 0LU, PASSIVE_LEVEL, OriginalIrql); } - + if (!KmtIsCheckedBuild) { /* release without acquire */ @@ -196,7 +196,13 @@ StartThread( InitializeObjectAttributes(&Attributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); Status = PsCreateSystemThread(&ThreadData->Handle, GENERIC_ALL, &Attributes, NULL, NULL, AcquireMutexThread, ThreadData); ok_eq_hex(Status, STATUS_SUCCESS); - Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, PsThreadType, KernelMode, (PVOID *)&ThreadData->Thread, NULL); + Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, (PVOID *)&ThreadData->Thread, NULL); ok_eq_hex(Status, STATUS_SUCCESS); return KeWaitForSingleObject(&ThreadData->OutEvent, Executive, KernelMode, FALSE, Timeout); diff --git a/rostests/kmtests/ntos_ex/ExResource.c b/rostests/kmtests/ntos_ex/ExResource.c index f87f5b389f3..2463c3c9ee5 100644 --- a/rostests/kmtests/ntos_ex/ExResource.c +++ b/rostests/kmtests/ntos_ex/ExResource.c @@ -268,7 +268,14 @@ StartThread( InitializeObjectAttributes(&Attributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); Status = PsCreateSystemThread(&ThreadData->Handle, GENERIC_ALL, &Attributes, NULL, NULL, AcquireResourceThread, ThreadData); ok_eq_hex(Status, STATUS_SUCCESS); - Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, PsThreadType, KernelMode, (PVOID *)&ThreadData->Thread, NULL); + Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + + KernelMode, (PVOID *)&ThreadData->Thread, NULL); ok_eq_hex(Status, STATUS_SUCCESS); return KeWaitForSingleObject(&ThreadData->OutEvent, Executive, KernelMode, FALSE, Timeout); diff --git a/rostests/kmtests/ntos_io/IoCreateFile.c b/rostests/kmtests/ntos_io/IoCreateFile.c index 17ec02a053e..f970e4d7738 100644 --- a/rostests/kmtests/ntos_io/IoCreateFile.c +++ b/rostests/kmtests/ntos_io/IoCreateFile.c @@ -57,7 +57,11 @@ KernelModeTest(IN PVOID Context) { Status = ObReferenceObjectByHandle(TargetHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif KernelMode, (PVOID *)&TargetFileObject, NULL); @@ -103,7 +107,11 @@ KernelModeTest(IN PVOID Context) { Status = ObReferenceObjectByHandle(ParentHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif KernelMode, (PVOID *)&ParentFileObject, NULL); @@ -173,7 +181,11 @@ KernelModeTest(IN PVOID Context) { Status = ObReferenceObjectByHandle(ParentHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif KernelMode, (PVOID *)&ParentFileObject, NULL); @@ -187,7 +199,11 @@ KernelModeTest(IN PVOID Context) ok_eq_long(RtlCompareUnicodeString(&ParentFileObject->FileName, &TargetFileObject->FileName, FALSE), 0); Status = ObReferenceObjectByHandle(SystemRootHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif KernelMode, (PVOID *)&SystemRootFileObject, NULL); @@ -240,7 +256,12 @@ KernelModeTest(IN PVOID Context) { Status = ObReferenceObjectByHandle(ParentHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif + KernelMode, (PVOID *)&ParentFileObject, NULL); @@ -302,7 +323,12 @@ KernelModeTest(IN PVOID Context) { Status = ObReferenceObjectByHandle(ParentHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif + KernelMode, (PVOID *)&ParentFileObject, NULL); @@ -316,7 +342,12 @@ KernelModeTest(IN PVOID Context) ok_eq_long(RtlCompareUnicodeString(&ParentFileObject->FileName, &TargetFileObject->FileName, FALSE), 0); Status = ObReferenceObjectByHandle(SystemRootHandle, FILE_READ_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else IoFileObjectType, +#endif + KernelMode, (PVOID *)&SystemRootFileObject, NULL); @@ -534,7 +565,11 @@ START_TEST(IoCreateFile) /* Then, just wait on our thread to finish */ Status = ObReferenceObjectByHandle(ThreadHandle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else PsThreadType, +#endif KernelMode, &ThreadObject, NULL); diff --git a/rostests/kmtests/ntos_ke/KeEvent.c b/rostests/kmtests/ntos_ke/KeEvent.c index af95c461f18..95feb125ace 100644 --- a/rostests/kmtests/ntos_ke/KeEvent.c +++ b/rostests/kmtests/ntos_ke/KeEvent.c @@ -169,7 +169,13 @@ TestEventConcurrent( Threads[i].Signal = FALSE; Status = PsCreateSystemThread(&Threads[i].Handle, GENERIC_ALL, NULL, NULL, NULL, WaitForEventThread, &Threads[i]); ok_eq_hex(Status, STATUS_SUCCESS); - Status = ObReferenceObjectByHandle(Threads[i].Handle, SYNCHRONIZE, PsThreadType, KernelMode, (PVOID *)&Threads[i].Thread, NULL); + Status = ObReferenceObjectByHandle(Threads[i].Handle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, (PVOID *)&Threads[i].Thread, NULL); ok_eq_hex(Status, STATUS_SUCCESS); ThreadObjects[i] = Threads[i].Thread; Priority = KeQueryPriorityThread(Threads[i].Thread); diff --git a/rostests/kmtests/ntos_ke/KeGuardedMutex.c b/rostests/kmtests/ntos_ke/KeGuardedMutex.c index ef8f3c1b1d0..3acbec1a312 100644 --- a/rostests/kmtests/ntos_ke/KeGuardedMutex.c +++ b/rostests/kmtests/ntos_ke/KeGuardedMutex.c @@ -204,7 +204,13 @@ StartThread( InitializeObjectAttributes(&Attributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); Status = PsCreateSystemThread(&ThreadData->Handle, GENERIC_ALL, &Attributes, NULL, NULL, AcquireMutexThread, ThreadData); ok_eq_hex(Status, STATUS_SUCCESS); - Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, PsThreadType, KernelMode, (PVOID *)&ThreadData->Thread, NULL); + Status = ObReferenceObjectByHandle(ThreadData->Handle, SYNCHRONIZE, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, (PVOID *)&ThreadData->Thread, NULL); ok_eq_hex(Status, STATUS_SUCCESS); return KeWaitForSingleObject(&ThreadData->OutEvent, Executive, KernelMode, FALSE, Timeout); diff --git a/rostests/kmtests/ntos_mm/MmSection.c b/rostests/kmtests/ntos_mm/MmSection.c index 7fdc12cc821..e465721d0b7 100644 --- a/rostests/kmtests/ntos_mm/MmSection.c +++ b/rostests/kmtests/ntos_mm/MmSection.c @@ -428,7 +428,13 @@ START_TEST(MmSection) if (!skip(Status == STATUS_SUCCESS && FileHandle1 != NULL, "Failed to open file 1\n")) { - Status = ObReferenceObjectByHandle(FileHandle1, FILE_READ_DATA | FILE_WRITE_DATA, IoFileObjectType, KernelMode, (PVOID *)&FileObject1, NULL); + Status = ObReferenceObjectByHandle(FileHandle1, FILE_READ_DATA | FILE_WRITE_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else + IoFileObjectType, +#endif + KernelMode, (PVOID *)&FileObject1, NULL); ok_eq_hex(Status, STATUS_SUCCESS); ok(FileObject1 != NULL, "FileObject1 is NULL\n"); CheckObject(FileHandle1, 3L, 1L); @@ -436,7 +442,13 @@ START_TEST(MmSection) if (!skip(Status == STATUS_SUCCESS && FileHandle2 != NULL, "Failed to open file 2\n")) { - Status = ObReferenceObjectByHandle(FileHandle2, FILE_READ_DATA | FILE_WRITE_DATA, IoFileObjectType, KernelMode, (PVOID *)&FileObject2, NULL); + Status = ObReferenceObjectByHandle(FileHandle2, FILE_READ_DATA | FILE_WRITE_DATA, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else + IoFileObjectType, +#endif + KernelMode, (PVOID *)&FileObject2, NULL); ok_eq_hex(Status, STATUS_SUCCESS); ok(FileObject2 != NULL, "FileObject2 is NULL\n"); } diff --git a/rostests/kmtests/ntos_mm/ZwAllocateVirtualMemory.c b/rostests/kmtests/ntos_mm/ZwAllocateVirtualMemory.c index 67a8ec249fa..2d7b7b74824 100644 --- a/rostests/kmtests/ntos_mm/ZwAllocateVirtualMemory.c +++ b/rostests/kmtests/ntos_mm/ZwAllocateVirtualMemory.c @@ -437,7 +437,13 @@ SystemProcessTest(VOID) goto cleanup; } - Status = ObReferenceObjectByHandle(Thread1, THREAD_ALL_ACCESS, PsThreadType, KernelMode, &ThreadObjects[0], NULL); + Status = ObReferenceObjectByHandle(Thread1, THREAD_ALL_ACCESS, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, &ThreadObjects[0], NULL); if (!NT_SUCCESS(Status)) { trace("error referencing thread1\n"); @@ -451,7 +457,13 @@ SystemProcessTest(VOID) goto cleanup; } - Status = ObReferenceObjectByHandle(Thread2, THREAD_ALL_ACCESS, PsThreadType, KernelMode, &ThreadObjects[1], NULL); + Status = ObReferenceObjectByHandle(Thread2, THREAD_ALL_ACCESS, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, &ThreadObjects[1], NULL); if (!NT_SUCCESS(Status)) { trace("error referencing thread2\n"); diff --git a/rostests/kmtests/ntos_mm/ZwCreateSection.c b/rostests/kmtests/ntos_mm/ZwCreateSection.c index 0a4ba5993dd..55720dab999 100644 --- a/rostests/kmtests/ntos_mm/ZwCreateSection.c +++ b/rostests/kmtests/ntos_mm/ZwCreateSection.c @@ -464,7 +464,13 @@ BasicBehaviorChecks(HANDLE FileHandle) /* FIXME: Null pointer dereference. See ROSTESTS-108 */ #ifdef ROSTESTS_108_FIXED //mimic lack of section support for a particular file as well. - Status = ObReferenceObjectByHandle(FileHandle, STANDARD_RIGHTS_ALL, IoFileObjectType, KernelMode, (PVOID *)&FileObject, NULL); + Status = ObReferenceObjectByHandle(FileHandle, STANDARD_RIGHTS_ALL, +#ifdef _PROPER_NT_EXPORTS + *IoFileObjectType, +#else + IoFileObjectType, +#endif + KernelMode, (PVOID *)&FileObject, NULL); if (!skip(NT_SUCCESS(Status), "Cannot reference object by handle\n")) { PSECTION_OBJECT_POINTERS Pointers = FileObject->SectionObjectPointer; diff --git a/rostests/kmtests/ntos_mm/ZwMapViewOfSection.c b/rostests/kmtests/ntos_mm/ZwMapViewOfSection.c index cd7f4e45a7c..3a4bcad2336 100644 --- a/rostests/kmtests/ntos_mm/ZwMapViewOfSection.c +++ b/rostests/kmtests/ntos_mm/ZwMapViewOfSection.c @@ -390,7 +390,13 @@ BehaviorChecks(HANDLE FileHandleReadOnly, HANDLE FileHandleWriteOnly) Status = PsCreateSystemThread(&SysThreadHandle, STANDARD_RIGHTS_ALL, &ObjectAttributes, NULL, NULL, SystemProcessWorker, NULL); if (!skip(NT_SUCCESS(Status), "Error creating System thread. Error = %p\n", Status)) { - Status = ObReferenceObjectByHandle(SysThreadHandle, THREAD_ALL_ACCESS, PsThreadType, KernelMode, &ThreadObject, NULL); + Status = ObReferenceObjectByHandle(SysThreadHandle, THREAD_ALL_ACCESS, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, &ThreadObject, NULL); if (!skip(NT_SUCCESS(Status), "Error getting reference to System thread when testing file-backed section\n")) { //wait until the system thread actually terminates @@ -515,7 +521,13 @@ PageFileBehaviorChecks() if (!skip(NT_SUCCESS(Status), "Error creating System thread. Error = %p\n", Status)) { - Status = ObReferenceObjectByHandle(SysThreadHandle, THREAD_ALL_ACCESS, PsThreadType, KernelMode, &ThreadObject, NULL); + Status = ObReferenceObjectByHandle(SysThreadHandle, THREAD_ALL_ACCESS, +#ifdef _PROPER_NT_EXPORTS + *PsThreadType, +#else + PsThreadType, +#endif + KernelMode, &ThreadObject, NULL); if (!skip(NT_SUCCESS(Status), "Error getting reference to System thread when testing pagefile-backed section\n")) { //wait until the system thread actually terminates diff --git a/rostests/kmtests/ntos_ob/ObTypes.c b/rostests/kmtests/ntos_ob/ObTypes.c index 00784549f2d..5f2e14fc3b1 100644 --- a/rostests/kmtests/ntos_ob/ObTypes.c +++ b/rostests/kmtests/ntos_ob/ObTypes.c @@ -164,6 +164,40 @@ TestObjectTypes(VOID) SeDefaultObjectMethod = ObpTypeObjectType->TypeInfo.SecurityProcedure; ok(SeDefaultObjectMethod != NULL, "No SeDefaultObjectMethod\n"); +#ifdef _PROPER_NT_EXPORTS +#define ExSemaphoreObjectType *ExSemaphoreObjectType +#define SeTokenObjectType *SeTokenObjectType +#define PsProcessType *PsProcessType +#define PsThreadType *PsThreadType +#define ExEventObjectType *ExEventObjectType +#define IoFileObjectType *IoFileObjectType +#endif +#ifdef _PROPER_NT_NDK_EXPORTS +#define ObpTypeObjectType *ObpTypeObjectType +#define ObpDirectoryObjectType *ObpDirectoryObjectType +#define ObpSymbolicLinkObjectType *ObpSymbolicLinkObjectType +#define PsJobType *PsJobType +#define DbgkDebugObjectType *DbgkDebugObjectType +#define ExEventPairObjectType *ExEventPairObjectType +#define ExMutantObjectType *ExMutantObjectType +#define ExCallbackObjectType *ExCallbackObjectType +#define ExTimerObjectType *ExTimerObjectType +#define ExProfileObjectType *ExProfileObjectType +#define ExpKeyedEventObjectType *ExpKeyedEventObjectType +#define ExWindowStationObjectType *ExWindowStationObjectType +#define ExDesktopObjectType *ExDesktopObjectType +#define MmSectionObjectType *MmSectionObjectType +#define CmpKeyObjectType *CmpKeyObjectType +#define LpcPortObjectType *LpcPortObjectType +#define LpcWaitablePortObjectType *LpcWaitablePortObjectType +#define IoAdapterObjectType *IoAdapterObjectType +#define IoControllerObjectType *IoControllerObjectType +#define IoDeviceObjectType *IoDeviceObjectType +#define IoDriverObjectType *IoDriverObjectType +#define IoCompletionObjectType *IoCompletionObjectType +#define WmipGuidObjectType *WmipGuidObjectType +#endif + Index = 1; CheckObjectType(Type, ObpTypeObjectType, OBT_MAINTAIN_TYPE_LIST | OBT_CUSTOM_KEY, 0x100, 0x020000, 0x020000, 0x020000, 0x0f0001, 0x1f0001); ok_eq_hex(ObpTypeObjectType->Key, TAG('ObjT')); -- 2.17.1