From: Aric Stewart Subject: [PATCH v2] winebus.sys: Implement common IRP_MJ_POWER handling Message-Id: Date: Wed, 5 Oct 2016 08:01:38 -0500 v2: Suggestions from Sebastian Lackner Signed-off-by: Aric Stewart --- dlls/winebus.sys/bus.h | 1 + dlls/winebus.sys/bus_udev.c | 1 + dlls/winebus.sys/main.c | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/dlls/winebus.sys/bus.h b/dlls/winebus.sys/bus.h index 099558b..9afe429 100644 --- a/dlls/winebus.sys/bus.h +++ b/dlls/winebus.sys/bus.h @@ -29,6 +29,7 @@ void *get_platform_private(DEVICE_OBJECT *device) DECLSPEC_HIDDEN; /* HID Plug and Play Bus */ NTSTATUS WINAPI common_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDEN; +NTSTATUS WINAPI common_power_dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDEN; DEVICE_OBJECT *bus_create_hid_device(DRIVER_OBJECT *driver, const WCHAR *busidW, WORD vid, WORD pid, DWORD version, DWORD uid, const WCHAR *serialW, BOOL is_gamepad, const GUID *class, const platform_vtbl *vtbl, DWORD platform_data_size) DECLSPEC_HIDDEN; diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c index 93e56f3..841ef56 100644 --- a/dlls/winebus.sys/bus_udev.c +++ b/dlls/winebus.sys/bus_udev.c @@ -299,6 +299,7 @@ NTSTATUS WINAPI udev_driver_init(DRIVER_OBJECT *driver, UNICODE_STRING *registry udev_driver_obj = driver; driver->MajorFunction[IRP_MJ_PNP] = common_pnp_dispatch; + driver->MajorFunction[IRP_MJ_POWER] = common_power_dispatch; if (!(events[0] = CreateEventW(NULL, TRUE, FALSE, NULL))) goto error; diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c index 09a59d6..2325c97 100644 --- a/dlls/winebus.sys/main.c +++ b/dlls/winebus.sys/main.c @@ -346,6 +346,27 @@ NTSTATUS WINAPI common_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp) return status; } +NTSTATUS WINAPI common_power_dispatch(DEVICE_OBJECT *device, IRP *irp) +{ + NTSTATUS status = irp->IoStatus.u.Status; + IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation(irp); + + TRACE("(%p)\n", device); + + switch (irpsp->MinorFunction) + { + case IRP_MN_SET_POWER: + TRACE("IPR_MN_SET_POWER: Device entering power state %i\n", irpsp->Parameters.Power.State.DeviceState); + irp->IoStatus.u.Status = status = STATUS_SUCCESS; + break; + default: + FIXME("Unhandled Minor Function: %08x\n", irpsp->MinorFunction); + break; + } + IoCompleteRequest(irp, IO_NO_INCREMENT); + return status; +} + NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) { static const WCHAR udevW[] = {'\\','D','r','i','v','e','r','\\','U','D','E','V',0};