mirror of
https://github.com/reactos/reactos.git
synced 2025-06-29 02:19:42 +00:00
[KMTEST:IO]
- Disable IoRegisterDeviceInterface test, since it crashes on Windows - Add test showing that IoRegisterPlugPlayNotification's callback receives the full path to the symbolic link (this was fixed in r62249) svn path=/trunk/; revision=62553
This commit is contained in:
parent
bc4526e022
commit
a42481108c
3 changed files with 78 additions and 1 deletions
|
@ -22,6 +22,7 @@ list(APPEND COMMON_SOURCE
|
||||||
# kmtest_drv.sys driver
|
# kmtest_drv.sys driver
|
||||||
#
|
#
|
||||||
list(APPEND KMTEST_DRV_SOURCE
|
list(APPEND KMTEST_DRV_SOURCE
|
||||||
|
kmtest_drv/guid.c
|
||||||
kmtest_drv/kmtest_drv.c
|
kmtest_drv/kmtest_drv.c
|
||||||
kmtest_drv/testlist.c
|
kmtest_drv/testlist.c
|
||||||
|
|
||||||
|
|
7
rostests/kmtests/kmtest_drv/guid.c
Normal file
7
rostests/kmtests/kmtest_drv/guid.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
|
||||||
|
|
||||||
|
#include <wdm.h>
|
||||||
|
#include <initguid.h>
|
||||||
|
#include <poclass.h>
|
||||||
|
|
||||||
|
/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
|
|
@ -8,6 +8,7 @@
|
||||||
/* TODO: what's with the prototypes at the top, what's with the if-ed out part? Doesn't process most results */
|
/* TODO: what's with the prototypes at the top, what's with the if-ed out part? Doesn't process most results */
|
||||||
|
|
||||||
#include <kmt_test.h>
|
#include <kmt_test.h>
|
||||||
|
#include <poclass.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
@ -85,7 +86,9 @@ static VOID DeviceInterfaceTest_Func()
|
||||||
ExFreePool(SymbolicLinkList);
|
ExFreePool(SymbolicLinkList);
|
||||||
}
|
}
|
||||||
|
|
||||||
START_TEST(IoDeviceInterface)
|
static
|
||||||
|
VOID
|
||||||
|
Test_IoRegisterDeviceInterface(VOID)
|
||||||
{
|
{
|
||||||
GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}};
|
GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}};
|
||||||
DEVICE_OBJECT DeviceObject;
|
DEVICE_OBJECT DeviceObject;
|
||||||
|
@ -118,3 +121,69 @@ START_TEST(IoDeviceInterface)
|
||||||
|
|
||||||
DeviceInterfaceTest_Func();
|
DeviceInterfaceTest_Func();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static UCHAR NotificationContext;
|
||||||
|
|
||||||
|
static DRIVER_NOTIFICATION_CALLBACK_ROUTINE NotificationCallback;
|
||||||
|
static
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
NotificationCallback(
|
||||||
|
_In_ PVOID NotificationStructure,
|
||||||
|
_Inout_opt_ PVOID Context)
|
||||||
|
{
|
||||||
|
PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification = NotificationStructure;
|
||||||
|
NTSTATUS Status;
|
||||||
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
|
HANDLE Handle;
|
||||||
|
|
||||||
|
ok_irql(PASSIVE_LEVEL);
|
||||||
|
ok_eq_pointer(Context, &NotificationContext);
|
||||||
|
ok_eq_uint(Notification->Version, 1);
|
||||||
|
ok_eq_uint(Notification->Size, sizeof(*Notification));
|
||||||
|
|
||||||
|
/* symbolic link must exist */
|
||||||
|
trace("Interface change: %wZ\n", Notification->SymbolicLinkName);
|
||||||
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
|
Notification->SymbolicLinkName,
|
||||||
|
OBJ_KERNEL_HANDLE,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
Status = ZwOpenSymbolicLinkObject(&Handle, GENERIC_READ, &ObjectAttributes);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
if (!skip(NT_SUCCESS(Status), "No symbolic link\n"))
|
||||||
|
{
|
||||||
|
Status = ObCloseHandle(Handle, KernelMode);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
Test_IoRegisterPlugPlayNotification(VOID)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PVOID NotificationEntry;
|
||||||
|
|
||||||
|
Status = IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange,
|
||||||
|
PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES,
|
||||||
|
(PVOID)&GUID_DEVICE_SYS_BUTTON,
|
||||||
|
KmtDriverObject,
|
||||||
|
NotificationCallback,
|
||||||
|
&NotificationContext,
|
||||||
|
&NotificationEntry);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
if (!skip(NT_SUCCESS(Status), "PlugPlayNotification not registered\n"))
|
||||||
|
{
|
||||||
|
Status = IoUnregisterPlugPlayNotification(NotificationEntry);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(IoDeviceInterface)
|
||||||
|
{
|
||||||
|
// FIXME: This test crashes in Windows
|
||||||
|
(void)Test_IoRegisterDeviceInterface;
|
||||||
|
Test_IoRegisterPlugPlayNotification();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue