mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:02:59 +00:00
- Add device state information.
- Start implementing RamdiskPnp -- enough to fail requests until our device state is appropriate. - Implement RamdiskOpenClose. svn path=/trunk/; revision=34450
This commit is contained in:
parent
fbda572c17
commit
ac0787ec04
1 changed files with 157 additions and 5 deletions
|
@ -32,6 +32,14 @@ typedef enum _RAMDISK_DEVICE_TYPE
|
||||||
RamdiskPdo
|
RamdiskPdo
|
||||||
} RAMDISK_DEVICE_TYPE;
|
} RAMDISK_DEVICE_TYPE;
|
||||||
|
|
||||||
|
typedef enum _RAMDISK_DEVICE_STATE
|
||||||
|
{
|
||||||
|
RamdiskStateUninitialized,
|
||||||
|
RamdiskStateStarted,
|
||||||
|
RamdiskStateStopped,
|
||||||
|
RamdiskStateRemoved
|
||||||
|
} RAMDISK_DEVICE_STATE;
|
||||||
|
|
||||||
DEFINE_GUID(RamdiskBusInterface,
|
DEFINE_GUID(RamdiskBusInterface,
|
||||||
0x5DC52DF0,
|
0x5DC52DF0,
|
||||||
0x2F8A,
|
0x2F8A,
|
||||||
|
@ -41,6 +49,7 @@ DEFINE_GUID(RamdiskBusInterface,
|
||||||
typedef struct _RAMDISK_EXTENSION
|
typedef struct _RAMDISK_EXTENSION
|
||||||
{
|
{
|
||||||
RAMDISK_DEVICE_TYPE Type;
|
RAMDISK_DEVICE_TYPE Type;
|
||||||
|
RAMDISK_DEVICE_STATE State;
|
||||||
PDEVICE_OBJECT DeviceObject;
|
PDEVICE_OBJECT DeviceObject;
|
||||||
PDEVICE_OBJECT PhysicalDeviceObject;
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
||||||
PDEVICE_OBJECT AttachedDevice;
|
PDEVICE_OBJECT AttachedDevice;
|
||||||
|
@ -223,10 +232,14 @@ QueryParameters(IN PUNICODE_STRING RegistryPath)
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
RamdiskOpenClose(IN PDEVICE_OBJECT DeviceObject,
|
RamdiskOpenClose(IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
//
|
||||||
while (TRUE);
|
// Complete the IRP
|
||||||
|
//
|
||||||
|
Irp->IoStatus.Information = 1;
|
||||||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,9 +268,148 @@ NTAPI
|
||||||
RamdiskPnp(IN PDEVICE_OBJECT DeviceObject,
|
RamdiskPnp(IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
PIO_STACK_LOCATION IoStackLocation;
|
||||||
|
PRAMDISK_EXTENSION DeviceExtension;
|
||||||
|
NTSTATUS Status;
|
||||||
|
UCHAR Minor;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get the device extension and stack location
|
||||||
|
//
|
||||||
|
DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
Minor = IoStackLocation->MinorFunction;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if the device is initialized
|
||||||
|
//
|
||||||
|
if (DeviceExtension->State == RamdiskStateUninitialized)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Only remove-device and query-id are allowed
|
||||||
|
//
|
||||||
|
if ((Minor != IRP_MN_REMOVE_DEVICE) || (Minor != IRP_MN_QUERY_ID))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Fail anything else
|
||||||
|
//
|
||||||
|
Status = STATUS_NO_SUCH_DEVICE;
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Acquire the remove lock
|
||||||
|
//
|
||||||
|
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Fail the IRP
|
||||||
|
//
|
||||||
|
Irp->IoStatus.Information = 0;
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Query the IRP type
|
||||||
|
//
|
||||||
|
switch (Minor)
|
||||||
|
{
|
||||||
|
case IRP_MN_START_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_STOP_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_CANCEL_STOP_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_STOP_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_REMOVE_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_CANCEL_REMOVE_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_REMOVE_DEVICE:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_ID:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_BUS_INFORMATION:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_EJECT:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_DEVICE_TEXT:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_DEVICE_RELATIONS:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_CAPABILITIES:
|
||||||
|
|
||||||
|
DPRINT1("PnP IRP: %lx\n", Minor);
|
||||||
|
while (TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
DPRINT1("Illegal IRP: %lx\n", Minor);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Release the lock and return status
|
||||||
|
//
|
||||||
|
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
while (TRUE);
|
while (TRUE);
|
||||||
return STATUS_SUCCESS;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue