FileCRC
A utility for tracking changes to executables in your hard drive

By David Pochron

CLICK HERE TO DOWNLOAD FILECRC141.ZIP


History:
I needed this program back in 1997 because I was having problems with corrupted files on an Intel TC430HX motherboard. I was seeing random crashes in Windows 95 in programs like Explorer as soon as the desktop came up. I suspected file corruption so I took Mark Adler's excellent CRC32 calculation routines and wrote this program to track changes to the executables on the drive. Indeed, this program showed executables were failing their CRC checks randomly on rare occasions. It turned out it was a flaky IDE controller on the motherboard.

Features:
I expanded the features over the years, adding additional executable file types (and some configuration filetypes) and also adding the ability for it to check CRC's on all files. I wanted to release it years ago however I was too lazy to create a web page for it. :-) This program is somewhat redundant since Windows system file checker that was released with Windows 98 also scans for changed system files and is also included in Windows XP. (SFC.EXE) However, I still use my program instead of the Microsoft version because it doesn't stop and ask for the Windows CD every time it finds a problem. Nowadays, I use it whenever I perform a Windows Update or install a major piece of software to see which system files (if any) get changed.

Installation
There is no installation program. Locate FileCRC.exe in the .zip file and put it in a directory that is in your system command path. (The C:\WINDOWS folder will work fine.)

Usage:
This is a simple command-line driven program. When you want to create a snapshot of the state of files in a directory or volume, you specify the path to where you want the scan to start. For example to scan the entire C drive, simply run the program like this:

FileCRC C:

It will recurse through most of the subfolders looking for executable files to calculate a CRC value for and store those values and other information about the files in a file it creates named CRC.log located in the current directory when you ran the program. This may take a while, so it will show the count of files it has scanned as it runs.

You can example the CRC.log file yourself in a text editor, however most of the information will be somewhat arcane. The purpose of the CRC.log file is so the program can do another scan at a later date so you can see if any files have changed since the last scan.

NOTE: When creating a snapshot of just executables, FileCRC skips certain files and folders. It ignores folders named TEMP, DLLCACHE, REINSTALLBACKUPS, LASTGOOD, and any folder that starts with the characters "$NT". These folders are folders that contain duplicates or backups of older Windows updates. It also skips all files in the Recycle Bin.

To do a checking scan without creating a new snapshot, change the current directory to the one where the CRC.log file is located and run the program from the command line without any arguments like so:

FileCRC

If it finds any discrepancies, it will display this information as it scans. If the executable has version info in it, it will also display whether the current version is newer or older than the version of the file that was in the snapshot with the two version numbers. For example, here's an excerpt of some output of the program:

C:\WINDOWS\SYSTEM32\A3D.DLL - MISMATCH, !!OLDER!! 81.0.0.3 > 80.0.0.3
C:\WINDOWS\SYSTEM32\ACLUI.DLL - MISMATCH, NEWER: 5.1.2600.2179 < 5.1.2600.2180

In this example, it looks like an installation program overwrote A3D.DLL with an older version of the file! (ouch!) For A3D.DLL, now I'll have to find the program that originally installed the newer version in order to get it back (FileCRC doesn't create backups of the files, it only notes whether they have changed.) Also, in this example something updated ACLUI.DLL to a newer version, which is usually an okay circumstance.

FileCRC supports a few command line options. When creating snapshots, you can specify the -a option which will force the program to look at all files, not just executables. (It still skips certain files and folders, like the virtual memory swapfile, for instance.)

When scanning for changes, you can specify the following options:
-v   Displays results (OK/Mismatch) for all files, not just the ones that mismatch.
-V  Same as above, but also displays version info for all files that have version info.

Finally, you can specify -? as an option to get a brief help message on how to use the program.

Source code
The source code is included with this release. Free free to modify it and use it for your own purposes. If you plan to release your modified version to the public, some credit would be appreciated! :-) If you look through the source code, you'll notice that there is a block of code that is only compiled if you define LOGINFO. With this enabled when you recompile the program, instead of checking for changed files it creates a log with the last access, last modification, and creation times of all the files it encounters, plus each file's attributes.

Version history
1.40 Initial public release
1.41 Fixed incompatibility with Win95 (and possibly other Win9x systems) since it was possible for GetVersionInfo() to corrupt the version info buffer even when it was allocated to the proper size.


Return to the EnigmaticSoftware main web page