/* * PROJECT: ReactOS Storport Driver * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Storport FDO code * COPYRIGHT: Copyright 2017 Eric Kohl (eric.kohl@reactos.org) */ /* INCLUDES *******************************************************************/ #include "precomp.h" #define NDEBUG #include /* FUNCTIONS ******************************************************************/ static NTSTATUS NTAPI PortFdoStartDevice( _In_ PFDO_DEVICE_EXTENSION DeviceExtension, _In_ PIRP Irp) { DPRINT1("PortFdoStartDevice(%p %p)\n", DeviceExtension, Irp); ASSERT(DeviceExtension->ExtensionType == FdoExtension); return STATUS_SUCCESS; } static NTSTATUS PortFdoQueryBusRelations( _In_ PFDO_DEVICE_EXTENSION DeviceExtension, _Out_ PULONG_PTR Information) { NTSTATUS Status = STATUS_SUCCESS;; DPRINT1("PortFdoQueryBusRelations(%p %p)\n", DeviceExtension, Information); *Information = 0; return Status; } NTSTATUS NTAPI PortFdoPnp( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp) { PFDO_DEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION Stack; ULONG_PTR Information = 0; NTSTATUS Status = STATUS_NOT_SUPPORTED; DPRINT1("PortFdoPnp(%p %p)\n", DeviceObject, Irp); DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; ASSERT(DeviceExtension); ASSERT(DeviceExtension->ExtensionType == FdoExtension); Stack = IoGetCurrentIrpStackLocation(Irp); switch (Stack->MinorFunction) { case IRP_MN_START_DEVICE: /* 0x00 */ DPRINT1("IRP_MJ_PNP / IRP_MN_START_DEVICE\n"); /* Call lower driver */ Status = ForwardIrpAndWait(DeviceExtension->LowerDevice, Irp); if (NT_SUCCESS(Status)) { Status = PortFdoStartDevice(DeviceExtension, Irp); } break; case IRP_MN_QUERY_REMOVE_DEVICE: /* 0x01 */ DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_REMOVE_DEVICE\n"); break; case IRP_MN_REMOVE_DEVICE: /* 0x02 */ DPRINT1("IRP_MJ_PNP / IRP_MN_REMOVE_DEVICE\n"); break; case IRP_MN_CANCEL_REMOVE_DEVICE: /* 0x03 */ DPRINT1("IRP_MJ_PNP / IRP_MN_CANCEL_REMOVE_DEVICE\n"); break; case IRP_MN_STOP_DEVICE: /* 0x04 */ DPRINT1("IRP_MJ_PNP / IRP_MN_STOP_DEVICE\n"); break; case IRP_MN_QUERY_STOP_DEVICE: /* 0x05 */ DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_STOP_DEVICE\n"); break; case IRP_MN_CANCEL_STOP_DEVICE: /* 0x06 */ DPRINT1("IRP_MJ_PNP / IRP_MN_CANCEL_STOP_DEVICE\n"); break; case IRP_MN_QUERY_DEVICE_RELATIONS: /* 0x07 */ DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS\n"); switch (Stack->Parameters.QueryDeviceRelations.Type) { case BusRelations: DPRINT1(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n"); Status = PortFdoQueryBusRelations(DeviceExtension, &Information); break; case RemovalRelations: DPRINT1(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n"); return ForwardIrpAndForget(DeviceExtension->LowerDevice, Irp); default: DPRINT1(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n", Stack->Parameters.QueryDeviceRelations.Type); return ForwardIrpAndForget(DeviceExtension->LowerDevice, Irp); } break; case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* 0x0d */ DPRINT1("IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n"); return ForwardIrpAndForget(DeviceExtension->LowerDevice, Irp); case IRP_MN_QUERY_PNP_DEVICE_STATE: /* 0x14 */ DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_PNP_DEVICE_STATE\n"); break; case IRP_MN_DEVICE_USAGE_NOTIFICATION: /* 0x16 */ DPRINT1("IRP_MJ_PNP / IRP_MN_DEVICE_USAGE_NOTIFICATION\n"); break; case IRP_MN_SURPRISE_REMOVAL: /* 0x17 */ DPRINT1("IRP_MJ_PNP / IRP_MN_SURPRISE_REMOVAL\n"); break; default: DPRINT1("IRP_MJ_PNP / Unknown IOCTL 0x%lx\n", Stack->MinorFunction); return ForwardIrpAndForget(DeviceExtension->LowerDevice, Irp); } Irp->IoStatus.Information = Information; Irp->IoStatus.Status = Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return Status; } /* EOF */