[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:
Thomas Faber 2014-03-23 17:24:10 +00:00
parent bc4526e022
commit a42481108c
3 changed files with 78 additions and 1 deletions

View file

@ -22,6 +22,7 @@ list(APPEND COMMON_SOURCE
# kmtest_drv.sys driver
#
list(APPEND KMTEST_DRV_SOURCE
kmtest_drv/guid.c
kmtest_drv/kmtest_drv.c
kmtest_drv/testlist.c

View 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 */

View file

@ -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 */
#include <kmt_test.h>
#include <poclass.h>
#define NDEBUG
#include <debug.h>
@ -85,7 +86,9 @@ static VOID DeviceInterfaceTest_Func()
ExFreePool(SymbolicLinkList);
}
START_TEST(IoDeviceInterface)
static
VOID
Test_IoRegisterDeviceInterface(VOID)
{
GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}};
DEVICE_OBJECT DeviceObject;
@ -118,3 +121,69 @@ START_TEST(IoDeviceInterface)
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();
}