Issue with unmounting virtual volume

Hi Guys,
Sending this again assuming ntfsd may be appropriate forum.

I try to find some clues on this issue, but i could not get anything either
from forums or windows internals book.
My driver is a virtual volume driver which mounts RO volumes by sending an
IOCTL IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION to mountmanager and
responding to subsequent IOCTLs.
My source and vsnap volumes are on the same machine.
But I am seeing strange issue, if my source volume has mount point :
Here Mount operation creates duplicate of orginal mount point. But Dismount
operation corrupts the mount point name
space(I guess).
Original mount point is properly accessible from explorer. But utilities
like Mountvol and disk management(Right click on mount point partition)
complains with error “Device Attached to the system is not functioning”.
e.g :
Let’s say my source volume is D:\ which has mount point d:\mnt1
Let’s say my virtual volume is c:\vitual1 which has duplicate mountpoint
c:\virtual1\mnt1.
After Dismount, When i try to list original d:\mnt1 partition through
mountvol or diskmgmt.msc, throws above error.
As part of dismount operation, I properly cleanup Deviceextension and
delete device using IODeleteDevice(). Looks like unmounting virtual volume
also dereferences original mount point and throws above error.

Here are more details how my device object look after mount and dismount
operation…
After Mount :

0: kd> !devobj fffffa8002fdcb90
Device object (fffffa8002fdcb90) is for:
VVolume0{49be0592-8989-11e1-9b62-00188b8c168f} \Driver\virvol DriverObject
fffffa800264b290
Current Irp 00000000 RefCount 32 Type 00000007 Flags 00000050
Vpb fffffa80028ceea0 Dacl fffff9a100301740 DevExt fffffa8002fdcce0
DevObjExt fffffa8002fdce20 Dope fffffa80026f8260
ExtensionFlags (0xc0000800) DOE_BOTTOM_OF_FDO_STACK, DOE_DESIGNATED_FDO
Unknown flags 0x00000800
Device queue is not busy.
0: kd> !object fffffa8002fdcb90
Object: fffffa8002fdcb90 Type: (fffffa8000ccd080) Device
ObjectHeader: fffffa8002fdcb60 (new version)
HandleCount: 0 PointerCount: 5
Directory Object: fffff8a012db6bc0 Name:
VVolume0{49be0592-8989-11e1-9b62-00188b8c168f}

After Dismount :

0: kd> !devobj fffffa8002fdcb90
Device object (fffffa8002fdcb90) is for:
\Driver\virvol DriverObject fffffa800264b290
Current Irp 00000000 RefCount 0 Type 00000007 Flags 00000050
Dacl fffff9a100301740 DevExt fffffa8002fdcce0 DevObjExt fffffa8002fdce20
ExtensionFlags (0xc4000802) DOE_DELETE_PENDING, DOE_BOTTOM_OF_FDO_STACK,
DOE_DESIGNATED_FDO
Unknown flags 0x04000800
Device queue is not busy.
0: kd> !object fffffa8002fdcb90
Object: fffffa8002fdcb90 Type: (bad0b0b0)
ObjectHeader: fffffa8002fdcb60 (new version)
HandleCount: 0 PointerCount: 0
Directory Object: fffffa8002e0fca0 Name: (*** Name not accessible ***)

Please suggest some way to debug this?

Thanks,
Suresh


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer

Could you try to walk the list of mountpoints on your virtual volume (FindFirstVolumeMountPoint() and friends) and remove the mount points before you dismount and see if that makes a difference ?

Thanks,
Alex.

Thanks Alexandru, I have tried that works for RW vsnap.But it is failing
for RO vsnap as it does not allow even deleting mountpoint.

On Sat, May 5, 2012 at 2:04 AM, wrote:

> Could you try to walk the list of mountpoints on your virtual volume
> (FindFirstVolumeMountPoint() and friends) and remove the mount points
> before you dismount and see if that makes a difference ?
>
> Thanks,
> Alex.
>
> —
> NTFSD is sponsored by OSR
>
> For our schedule of debugging and file system seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at
> http://www.osronline.com/page.cfm?name=ListServer
>