X-Git-Url: http://git.etherboot.org/people/sha0/winvblock.git/blobdiff_plain/fa9cf8dbb2066c8125d189d8d3884877b140f0c0..e3f1bb6b1d6d729696efbd5ef18433c15239439d:/src/winvblock/dummy.c diff --git a/src/winvblock/dummy.c b/src/winvblock/dummy.c index 0053420..caa694a 100644 --- a/src/winvblock/dummy.c +++ b/src/winvblock/dummy.c @@ -49,11 +49,20 @@ static NTSTATUS STDCALL WvDummyPnp( IN PIRP irp, IN UCHAR code ) { - if (code != IRP_MN_QUERY_ID) - return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED); + switch (code) { + case IRP_MN_QUERY_ID: + /* The WV_S_DEV_T extension points to the dummy IDs. */ + return WvDummyIds(irp, dev->ext); - /* The WV_S_DEV_T extension points to the dummy IDs. */ - return WvDummyIds(irp, dev->ext); + case IRP_MN_QUERY_REMOVE_DEVICE: + return WvlIrpComplete(irp, 0, STATUS_SUCCESS); + + case IRP_MN_REMOVE_DEVICE: + return WvlIrpComplete(irp, 0, WvlBusRemoveNode(&dev->BusNode)); + + default: + return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED); + } } typedef struct WV_ADD_DUMMY { @@ -216,6 +225,18 @@ WVL_M_LIB NTSTATUS STDCALL WvDummyAdd( return context.Status; } +/** + * Remove a dummy PDO node on the WinVBlock bus. + * + * @v Pdo The PDO to remove. + * @ret NTSTATUS The status of the operation. + * + * It might actually be better to handle a PnP remove IOCTL. + */ +WVL_M_LIB NTSTATUS STDCALL WvDummyRemove(IN PDEVICE_OBJECT Pdo) { + return WvlBusRemoveNode(&WvDevFromDevObj(Pdo)->BusNode); + } + /** * Handle a PnP ID query with a WV_S_DUMMY_IDS object. *