InitializeListHead(&rollback);
- acquire_tree_lock(Vcb, TRUE);
+ ExAcquireResourceExclusiveLite(&Vcb->tree_lock, TRUE);
- if (Vcb->write_trees > 0)
+ if (Vcb->need_write)
do_write(Vcb, &rollback);
clear_rollback(&rollback);
- release_tree_lock(Vcb, TRUE);
+ ExReleaseResourceLite(&Vcb->tree_lock);
Status = STATUS_SUCCESS;
end:
}
if (DeviceObject->Vpb->Flags & VPB_MOUNTED) {
+ Status = FsRtlNotifyVolumeEvent(Vcb->root_file, FSRTL_VOLUME_DISMOUNT);
+ if (!NT_SUCCESS(Status)) {
+ WARN("FsRtlNotifyVolumeEvent returned %08x\n", Status);
+ }
+
uninit(Vcb, FALSE);
- DeviceObject->Vpb->Flags &= ~VPB_MOUNTED;
+ Vcb->Vpb->Flags &= ~VPB_MOUNTED;
}
return STATUS_SUCCESS;
top_level = is_top_level(Irp);
+ if (Vcb && Vcb->type == VCB_TYPE_PARTITION0) {
+ Status = part0_passthrough(DeviceObject, Irp);
+ goto end;
+ }
+
Status = STATUS_NOT_IMPLEMENTED;
switch (IrpSp->MinorFunction) {