#include <syslog.h>
#include "captive/macros.h"
#include "../storage/relastblock.h" /* for captive_storage_relastblock() */
+#include "../cc/sharedcachemap.h" /* for captive_shared_cache_map_flush_all() */
struct captive_options *captive_options;
static void dismount_volume(void)
{
IO_STATUS_BLOCK IoStatusBlock;
-PIO_STACK_LOCATION StackPtr;
+PEXTENDED_IO_STACK_LOCATION StackPtr;
PIRP Irp;
NTSTATUS Status;
DEVICE_OBJECT *DeviceObject=captive_DriverObject.DeviceObject;
GnomeVFSResult errvfsresult;
NTSTATUS err;
IO_STATUS_BLOCK dir_IoStatusBlock;
-#if 0
static const ULONG fsctls[2]={ FSCTL_LOCK_VOLUME,FSCTL_DISMOUNT_VOLUME };
int fsctlsi;
-#endif
WCHAR wzero;
errvfsresult=captive_ObjectAttributes_init("/!Captive!del",&dir_ObjectAttributes);
FileObject->FileName.MaximumLength=2;
FileObject->FileName.Buffer=&wzero;
-#if 0
- for (fsctlsi=0;fsctlsi<2;fsctlsi++)
-#endif
- {
+ for (fsctlsi=0;fsctlsi<2;fsctlsi++) {
Irp=IoAllocateIrp(DeviceObject->StackSize,TRUE);
g_return_if_fail(Irp!=NULL);
Irp->UserEvent=&FileObject->Event;
Irp->Tail.Overlay.Thread=PsGetCurrentThread();
- StackPtr=IoGetNextIrpStackLocation(Irp);
-#if 0
+ StackPtr=(EXTENDED_IO_STACK_LOCATION *)IoGetNextIrpStackLocation(Irp);
+#if 1
StackPtr->MajorFunction=IRP_MJ_FILE_SYSTEM_CONTROL;
StackPtr->MinorFunction=IRP_MN_USER_FS_REQUEST;
#else
StackPtr->FileObject=FileObject;
StackPtr->CompletionRoutine=NULL;
-#if 0
+#if 1
StackPtr->Parameters.FileSystemControl.OutputBufferLength=0;
StackPtr->Parameters.FileSystemControl.InputBufferLength=0;
StackPtr->Parameters.FileSystemControl.FsControlCode=fsctls[fsctlsi];
* replaced by IRP_MJ_FLUSH_BUFFERS.
*/
+#if 0
+ captive_shared_cache_map_flush_all();
+#endif
+
dismount_volume();
+#if 0
+ captive_shared_cache_map_flush_all();
+#endif
+
/* Invoke all pending idle functions just to not to forget for anything... */
while (g_main_context_iteration(
NULL, /* context; NULL means default one */