From b77e8f5145ccb264fc9ec74ad4a6b532b5a580a8 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 9 Jul 2006 21:39:49 +0000 Subject: [PATCH] Add two simple tests for IoRegisterDeviceInterface() explaining which fields IoRegisterDeviceInterface() checks for mandatory presence (WDK is not clear about this) svn path=/trunk/; revision=22980 --- reactos/drivers/test/kmtest/deviface_test.c | 56 ++++++++++++++++++--- reactos/drivers/test/kmtest/kmtest.c | 4 +- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/test/kmtest/deviface_test.c b/reactos/drivers/test/kmtest/deviface_test.c index 727fb74a5aa..7e34258af4c 100644 --- a/reactos/drivers/test/kmtest/deviface_test.c +++ b/reactos/drivers/test/kmtest/deviface_test.c @@ -23,6 +23,7 @@ /* INCLUDES *******************************************************************/ #include +#include #include "kmtest.h" //#define NDEBUG @@ -101,12 +102,53 @@ VOID FASTCALL DeviceInterfaceTest_Func() ExFreePool(SymbolicLinkList); } -VOID FASTCALL DeviceInterfaceTest() +VOID RegisterDI_Test() { - DPRINT("Calling DeviceInterfaceTest_Func with native functions\n"); - IoGetDeviceInterfaces_Func = IoGetDeviceInterfaces; - DeviceInterfaceTest_Func(); - DPRINT("Calling DeviceInterfaceTest_Func with ReactOS functions\n"); - IoGetDeviceInterfaces_Func = ReactOS_IoGetDeviceInterfaces; - DeviceInterfaceTest_Func(); + GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}}; + DEVICE_OBJECT DeviceObject; + EXTENDED_DEVOBJ_EXTENSION DeviceObjectExtension; + DEVICE_NODE DeviceNode; + UNICODE_STRING SymbolicLinkName; + NTSTATUS Status; + + RtlInitUnicodeString(&SymbolicLinkName, L""); + + // Prepare our surrogate of a Device Object + DeviceObject.DeviceObjectExtension = (PDEVOBJ_EXTENSION)&DeviceObjectExtension; + + // 1. DeviceNode = NULL + DeviceObjectExtension.DeviceNode = NULL; + Status = IoRegisterDeviceInterface(&DeviceObject, &Guid, NULL, + &SymbolicLinkName); + + ok(Status == STATUS_INVALID_DEVICE_REQUEST, + "IoRegisterDeviceInterface returned 0x%08lX\n", Status); + + // 2. DeviceNode->InstancePath is of a null length + DeviceObjectExtension.DeviceNode = &DeviceNode; + DeviceNode.InstancePath.Length = 0; + Status = IoRegisterDeviceInterface(&DeviceObject, &Guid, NULL, + &SymbolicLinkName); + + ok(Status == STATUS_INVALID_DEVICE_REQUEST, + "IoRegisterDeviceInterface returned 0x%08lX\n", Status); +} + +VOID FASTCALL NtoskrnlIoDeviceInterface() +{ + StartTest(); + + // Test IoRegisterDeviceInterface() failures now + RegisterDI_Test(); + +/* + DPRINT("Calling DeviceInterfaceTest_Func with native functions\n"); + IoGetDeviceInterfaces_Func = IoGetDeviceInterfaces; + DeviceInterfaceTest_Func(); + DPRINT("Calling DeviceInterfaceTest_Func with ReactOS functions\n"); + IoGetDeviceInterfaces_Func = ReactOS_IoGetDeviceInterfaces; + DeviceInterfaceTest_Func(); +*/ + + FinishTest("NTOSKRNL Io Device Interface Test"); } diff --git a/reactos/drivers/test/kmtest/kmtest.c b/reactos/drivers/test/kmtest/kmtest.c index 83da9c1e6e2..a5d61ab88d9 100644 --- a/reactos/drivers/test/kmtest/kmtest.c +++ b/reactos/drivers/test/kmtest/kmtest.c @@ -103,8 +103,8 @@ int kmtest_ok(int condition, const char *msg, ... ) /* * Test Declarations */ -VOID FASTCALL DeviceInterfaceTest(); VOID FASTCALL NtoskrnlIoMdlTest(); +VOID FASTCALL NtoskrnlIoDeviceInterface(); VOID FASTCALL NtoskrnlObTest(); /* @@ -116,7 +116,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { DbgPrint("\n===============================================\nKernel Mode Regression Test driver starting...\n"); - //DeviceInterfaceTest(); + NtoskrnlIoDeviceInterface(); NtoskrnlIoMdlTest(); NtoskrnlObTest();