2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Device Interface functions test
5 * PROGRAMMER: Filip Navara <xnavara@volny.cz>
8 /* TODO: what's with the prototypes at the top, what's with the if-ed out part? Doesn't process most results */
17 (NTAPI
*IoGetDeviceInterfaces_Func
)(
18 IN CONST GUID
*InterfaceClassGuid
,
19 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
21 OUT PWSTR
*SymbolicLinkList
);
24 ReactOS_IoGetDeviceInterfaces(
25 IN CONST GUID
*InterfaceClassGuid
,
26 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
28 OUT PWSTR
*SymbolicLinkList
);
31 static VOID
DeviceInterfaceTest_Func()
34 PWSTR SymbolicLinkList
;
35 PWSTR SymbolicLinkListPtr
;
36 GUID Guid
= {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}};
38 Status
= IoGetDeviceInterfaces(
44 ok(NT_SUCCESS(Status
),
45 "IoGetDeviceInterfaces failed with status 0x%X\n",
46 (unsigned int)Status
);
47 if (!NT_SUCCESS(Status
))
52 DPRINT("IoGetDeviceInterfaces results:\n");
53 for (SymbolicLinkListPtr
= SymbolicLinkList
;
54 SymbolicLinkListPtr
[0] != 0 && SymbolicLinkListPtr
[1] != 0;
55 SymbolicLinkListPtr
+= wcslen(SymbolicLinkListPtr
) + 1)
57 DPRINT1("Symbolic Link: %S\n", SymbolicLinkListPtr
);
61 DPRINT("[PnP Test] Trying to get aliases\n");
63 for (SymbolicLinkListPtr
= SymbolicLinkList
;
64 SymbolicLinkListPtr
[0] != 0 && SymbolicLinkListPtr
[1] != 0;
65 SymbolicLinkListPtr
+= wcslen(SymbolicLinkListPtr
) + 1)
67 UNICODE_STRING SymbolicLink
;
68 UNICODE_STRING AliasSymbolicLink
;
70 SymbolicLink
.Buffer
= SymbolicLinkListPtr
;
71 SymbolicLink
.Length
= SymbolicLink
.MaximumLength
= wcslen(SymbolicLinkListPtr
);
72 RtlInitUnicodeString(&AliasSymbolicLink
, NULL
);
73 IoGetDeviceInterfaceAlias(
77 if (AliasSymbolicLink
.Buffer
!= NULL
)
79 DPRINT("[PnP Test] Original: %S\n", SymbolicLinkListPtr
);
80 DPRINT("[PnP Test] Alias: %S\n", AliasSymbolicLink
.Buffer
);
85 ExFreePool(SymbolicLinkList
);
88 START_TEST(IoDeviceInterface
)
90 GUID Guid
= {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}};
91 DEVICE_OBJECT DeviceObject
;
92 EXTENDED_DEVOBJ_EXTENSION DeviceObjectExtension
;
93 DEVICE_NODE DeviceNode
;
94 UNICODE_STRING SymbolicLinkName
;
97 RtlInitUnicodeString(&SymbolicLinkName
, L
"");
99 // Prepare our surrogate of a Device Object
100 DeviceObject
.DeviceObjectExtension
= (PDEVOBJ_EXTENSION
)&DeviceObjectExtension
;
102 // 1. DeviceNode = NULL
103 DeviceObjectExtension
.DeviceNode
= NULL
;
104 Status
= IoRegisterDeviceInterface(&DeviceObject
, &Guid
, NULL
,
107 ok(Status
== STATUS_INVALID_DEVICE_REQUEST
,
108 "IoRegisterDeviceInterface returned 0x%08lX\n", Status
);
110 // 2. DeviceNode->InstancePath is of a null length
111 DeviceObjectExtension
.DeviceNode
= &DeviceNode
;
112 DeviceNode
.InstancePath
.Length
= 0;
113 Status
= IoRegisterDeviceInterface(&DeviceObject
, &Guid
, NULL
,
116 ok(Status
== STATUS_INVALID_DEVICE_REQUEST
,
117 "IoRegisterDeviceInterface returned 0x%08lX\n", Status
);
119 DeviceInterfaceTest_Func();