You are visitor number ????? since 21 June 2006.
Go to Howard Kaikow's home page


Date: 16 July 2006(Modification of 28 June 2006 document)
From: Howard Kaikow <kaikow@standards.com>
Subject: Failure to access files on Ghost 10 mounted volumes


The Problem

It was my expectation that a sub using the usual recursive FindFirstFile/FindNextFile would be able to walk the directory tree on any logical volume.

I have had no problems using the program with logical volumes that are on hard, floppy, optical, or ZIP drives; or with logical volumes that have been mounted by Acronis True Image 9.

In order to mount a volume from a backup program, the backup program has to supply a driver that interfaces with the native file system. Apparently, there are some differences in the way those drivers work for various products.

Some volumes mounted from Ghost 10 have not worked, i.e., the program hangs up trying to build a list of filenames for those volumes, and it is necessary to do a hard reboot. For one volume, the problem is reproducible well over 90 per cent of the time. I've had occasions in which the program will work for several consecutive runs on the same volume, and then fail on the next run.

If I do a reboot, mount particlar Ghost volumes, then run the code, the code will hang most of the time.

To make matters more interesting, I converted the VB 6 code to VB .NET.

  1. I've only run the VB .NET code three times. The first two times worked, but the third failed, so the problem does appear to be independent of whether VB 6 or VB .NET (2003) is used.
  2. One time, I first ran the VB .NET code, then ran the VB 6 code, the VB6 code did not hang. Yet I immediately rebooted, and ran the VB 6 code, and the VB 6 code hung.

There's nothing in the VB 6 or VB .NET code that could be expected to behave differently depending on how a volume was mounted.

Note that the volumes mounted have approximately the same number of files and the depth of the directory hierarchy is identical.

I am using Windows 2000.

I was wondering whether the problem was in Ghost or I made some programming error. I have posted the VB 6 and VB .NET code, and, for those not having either VB 6 or VB .NET, the executable from the VB 6 code. The code is really simple, and about two pages long. The question is whether the code is correct, not whether the code runs correctly on a system, as it may be difficult to reproduce the problem.

I may know how to reproduce the problem on other systems, but such details obscure the real issue, i.e., do other programmers find any problems in the code?

If it is determined that the code is correct, the only factor left seems to be the Ghost 10 driver. Before I decide whether I want to (Ugh!) deal with Symantec "support", I'd like others to validate the code.

How to run the test

To assure that Windows has not cached some file structures, it is necessary to reboot before running the test.

  1. Reboot.
  2. Run Ghost 10. Selecting Recovery and then use Explore to mount all the volumes. Close Ghost.
  3. Run the test program on each volume.
  4. For each volume, the program will try to access all files on the volume, and increment a counter as it progresses.

    If the problem I have described occurs for a particular drive, it is expected that the system will hang and you will have to do a hard reboot by powering down the computer. So you should not run other programs, that cannot be interrupted, while running this test.

  5. If you do have to do a hard reboot, when the system restarts, go to your system's temporary files directory and delete all the files with names that start with PQICACHE. The files may, or may not, be in a directory named V2ibrowserTemp. There will be 1 such file for each drive you mounted from Ghost 10.
  6. If none of the drives have failed, it is still necessary to reboot, and repeat the above sequence, to determine whether the problem will occur. I've had to repeat the sequence 2 or 3 times to detect the problem

Download the Visual Basic 6 project

Download the Visual Basic 6 executable

Download the Visual Basic .NET (2003) solution