}
+/* FIXME: We should comply with PDRIVER_DISPATCH prototype but unfortunately
+ * CAPTIVE_STDCALL prevents us to do so at least in RedHat gcc-3.2-4 (gcc bug?).
+ */
+#define MajorFunction_SHUTDOWN ((PDRIVER_DISPATCH)MajorFunction_SHUTDOWN_func)
+static NTSTATUS CAPTIVE_STDCALL MajorFunction_SHUTDOWN_func(IN DEVICE_OBJECT *DeviceObject,IN IRP *Irp)
+{
+IO_STACK_LOCATION *IrpStack;
+GIOStatus erriostatus;
+struct captive_DriverObject *captive_DriverObject;
+
+ g_return_val_if_fail(TRUE==validate_DeviceObject(DeviceObject),STATUS_INVALID_PARAMETER);
+ g_return_val_if_fail(Irp!=NULL,STATUS_INVALID_PARAMETER);
+
+ captive_DriverObject=(struct captive_DriverObject *)DeviceObject->DriverObject;
+
+ IrpStack=IoGetCurrentIrpStackLocation(Irp);
+ g_assert(IrpStack->MajorFunction==IRP_MJ_SHUTDOWN);
+ g_assert(IrpStack->MinorFunction==0);
+
+ /* libcaptive is not authorized to shutdown 'captive_image_channel'. */
+ erriostatus=g_io_channel_flush(
+ captive_image_iochannel, /* channel */
+ NULL); /* error */
+ g_assert(erriostatus==G_IO_STATUS_NORMAL);
+
+ Irp->IoStatus.Information=0;
+ Irp->IoStatus.Status=STATUS_SUCCESS;
+
+ return MajorFunction_Irp_finish(DeviceObject,Irp);
+}
+
+
/* similiar to drivers/storage/cdrom/cdrom.c/DriverEntry()->...
* ...->CdromClassCreateDeviceObject()->
* ->reactos/drivers/storage/class2/class2.c/ScsiClassCreateDeviceObject()
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=MajorFunction_DEVICE_CONTROL;
DriverObject->MajorFunction[IRP_MJ_READ ]=MajorFunction_READ_WRITE;
DriverObject->MajorFunction[IRP_MJ_WRITE ]=MajorFunction_READ_WRITE;
+ DriverObject->MajorFunction[IRP_MJ_SHUTDOWN ]=MajorFunction_SHUTDOWN;
return STATUS_SUCCESS;
}