ImDisk Virtual Disk Driver
Latest version 1.5.7 built 30 July 2012
ImDisk is a virtual disk driver for Windows NT/2000/XP/2003/Vista/2008. It can create virtual hard disk, floppy or CD/DVD drives using image files or system memory. The install package installs a console-mode control program called imdisk.exe and a Control Panel applet. After install is finished, typeimdisk without parameters for syntax help or double click the ImDisk icon in the Control Panel. It also adds a menu item in Windows Explorer so that you can right-click on a file to mount it as a virtual disk drive. Users of mdconfig in FreeBSD will probably be familiar with the command line syntax ofimdisk.exe. The driver, service and control program can be uninstalled using the Add/Remove programs applet in the Control Panel. No reboot is required for installing or uninstalling.
An additional driver, awealloc, in this install package supports memory allocation beyond 4 GB limit on 32 bit Windows through address window extension, AWE.
The ImDisk driver supports forwarding I/O requests to third-party image file format handlers or to services on other computers on the network. This makes it possible to boot a machine with NTFS partitions with a Live-CD and use the included devio tool to let ImDisk on another computer running Windows on the network mount the NTFS partition on the machine with a faulty NTFS partition. This way you can recover information and even run chkdsk on drives on machines where Windows does not boot. There are also instructions about how to use devio under Windows on Claus Valca's blog.
- Download screenshot - 43.5 KB
- Download ImDisk install package - 313.5 KB, works on both 32-bit and 64-bit versions of Windows.
- Download devio tool for FreeBSD - 79.8 KB.
- Download devio tool for Windows - 21.5 KB.
About the install package
The install package is created using 7-zip sfx stubs and includes an .inf install script. No reboot is required after installing or uninstalling. The install package works on Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 and Windows 7 and on both 32-bit and 64-bit versions.
The install package now automatically starts the driver at end of setup
This means that no additional actions should be required before using ImDisk, even on Windows Vista, Windows Server 2008 and Windows 7 with UAC turned on.
64 bit compatibility
64-bit versions share source code with the 32-bit version. All features and most limitations are the same in the 64-bit and 32-bit versions. One notable difference however is that the 64-bit versions do not have any practical size limits for RAM disks.
64 bit drivers are now digitally signed with a certificate trusted by Microsoft.
This means that ImDisk now works Windows Vista, Windows Server 2008 and Windows 7 even without running it testsigning mode.
Special note for Windows NT 3.51
The .inf file used in the install process is not compatible with Windows NT 3.51. To install on NT 3.51 you can extract the files in the packages using 7-zip and then manually create the driver keys in the registry or using a SCM control tool like sc.exe in the Windows NT Resource Kit. On later versions of Windows you just run the package and it will install everything automatically.
Source code
Source code for all of ImDisk, including a server-part for *nix like systems and .NET/COM API library, is available as a 7-zip compressed file here (163.6 KB). The Windows driver, command line tool and Control Panel applet parts of the source code can be built in the Windows 2000 build environment in the latest WDK and the *nix parts can be built with for example gcc. .NET components are built in Visual Studio 2010, you can use Visual Basic Express 2010 if you want to view and modify the source code in a free version of Visual Studio.
API
API functions are available for C/C++, COM and .NET clients. If you want to call functions for creating/removing/querying virtual disks from your own program you can #include the file inc\imdisk.h in your C/C++ source files and link the cpl\i386\imdisk.lib library. Read inc\imdisk.h in source archive for documentation about C/C++ usage. If you would like information about how to write compatible server-end software in C/C++ you can take a look at the I/O packet structures in inc\imdproxy.h.
A class library DLL for COM and .NET developers is available as a separate wrapper DLL. You can download that DLL here or an archive including the actual DLL along with import libraries and registry files for COM usage here. Look here for on-line documentation about .NET API. There are also, as usual, xml files with method/parameter descriptions available to each assembly file.
License
I have received some e-mails with questions whether or not it is okay to include this driver in a commercial product. The answer is yes, just like all other tools I publish here. However, note that a few lines of code are under the GNU GPL license, this is basically the parts related to floppy emulation. Some of the driver code is also ported to Windows NT from the FreeBSD 'md' driver.
Frequently asked questions
Answers to frequently asked questions are collected here.
Questions?
There is a sub-forum at Reboot.pro for discussions about ImDisk Virtual Disk Driver and other tools published here.
Known bugs and problems
There have been some reports about filesystem problems and possible loss of data with ImDisk memory backed virtual disks that are very large, about 1 GB or larger. Hopefully these problems are solved now with a few bugfixes included in 1.4.1 version.
Zero and Random device driver - updated 30 July 2012
The Zero and Random device driver creates two device objects, \Device\Zero and \Device\Random and a symbolic link to each of these under\DosDevices so that they are reachable from Win32 applications using the syntax \\.\zero and \\.\random. The devices work like /dev/zero and /dev/random in *nix like environments. Zero produces zero characters and Random produces random characters in the read buffers. When written to both of the device objects act like a Null device, that is just accepting and ignoring the data in the write buffer. The drivers can e.g. be used with the classic dd tool or with my rawcopy tool to fill files, devices etc with zero or random characters, e.g. to wipe out the contents of a hard drive.
The install package installs the driver and loads it into the kernel and setup for automatic load when Windows starts up. The driver can be uninstalled using Add/Remove programs applet in the Control Panel.
- Download the install package - 104.8 KB. Works on both 32-bit and 64-bit versions of Windows.
About the install package
The install package is created using 7-zip sfx stubs and includes an .inf install script. No reboot is required after installing or uninstalling. The install package works on Windows NT 3.51/NT 4.0/2000/XP/Server 2003/Vista/Server 2008, both 32-bit and 64-bit versions.
64 bit drivers are now digitally signed with a certificate trusted by Microsoft.
This means that this driver now works Windows Vista, Windows Server 2008 and Windows 7 even without running it testsigning mode.
Special note for Windows NT 3.51
The .inf file used in the install process is not compatible with Windows NT 3.51. To install on NT 3.51 you can extract the files in the packages using 7-zip and then manually create the driver keys in the registry or using a SCM control tool like sc.exe in the Windows NT Resource Kit. On later versions of Windows you just run the package and it will install everything automatically.
Source code
Source code for this driver is available as a 7-zip compressed file here (3.0 KB). The source code can be built in the Windows 2000 build environment in the latest WDK.
Small command line utilities
Works on Windows NT/95/98/ME/2000/XP/2003 unless the description says something else. Some of them also run on Windows 3.x with Win32s but then without displaying anything because Win32s on Windows 3.x has no console support.
These binaries are compiled with the free version of Microsoft Visual C++. They are not linked with the standard C or C++ libraries that comes with this compiler, instead they are linked with a dynamic library I call minwcrt (Minimal Windows C Run-Time Library) linking them to crtdll.dll instead of msvcrt.dll. This makes them run in all versions of Win32 without additional dll files. This is also the reason why the exe files are very small. Source for this library is available as part of the source archive mentioned in the top of this document.
- bzip2.zip - 29.5 KB - compiled 2007-02-27 - The very space efficient bzip2 compression utility with huffman/deflate algorithms. This port is from the XMILL project. The binary here is optimized for Pentium 4 processors but will run on other x86 processors as well and is linked with the minwcrt library so the exe file is smaller and does not require msvcrt.dll like many other Win32 ports of the GNU version does.
- calldll.zip - 2.4 KB 32-bit / calldll64.zip - 4.0 KB 64-bit - compiled 2012-02-14 - Calls a function in a dll file. The function must use the stdcall calling convention and accept only one single parameter, a pointer to a character string as or a NULL pointer. If you e.g. want to connect to a network printer from a batch file you can write: "calldll winspool.drv AddPrinterConnectionA \\server\printerq". The ZIP file also contains calldllw.exe which is exactly the same except that it passes a unicode string instead of ansi. That version can only be used in Windows NT/2000/XP/2003.
- chsize32.zip - 2.7 KB - compiled 2011-06-18 - Changes file size of existing file or creates a new file with specified size.
- copyacls.zip - 1.8 KB - compiled 2009-12-07 - Copies access lists (permissions and ownership) from one file or directory to a list of others.
- cut.zip - 6.0 KB - compiled 2007-02-27 - My Win32 port of the BSD cut utility. This version is a much smaller exe file than e.g. K M Syring's Win32 port of the GNU cut utility. Additionally, because this version does not require msvcrt.dll it will run without additional files even on very old versions of Windows NT.
- devioctl.zip - 4.5 KB - compiled 2012-09-22 - Command line interface to the basic disk device functions of DeviceIoControl() API. Used to unmount a filesystem, load or eject e.g. a CD. Requires Windows NT/2000/XP/2003.
- dosdev.zip - 2.8 KB - compiled 2009-12-07 - Command line interface to the DefineDosDevice() and QueryDosDevice() API functions. Defines, redefines and prints information about the emulated DOS devices in Windows NT. Very useful if you want to use any object in Windows NT object namespace from ordinary Win32 applications. (In Windows 95/98/ME this utility is equivalent to the SUBST command.)
- enumproto.zip - 2.4 KB - compiled 2007-03-19 - Utility to display and optionally remove installed Winsock LSP modules Layered Service Providers. Today many spyware/adware/malware install LSP modules to capture network traffic and send statistics to some company. After removing such spyware Winsock APIs may fail for all applications because there are registry references to LSP modules that no longer exists. In Windows XP SP2 you can reset LSP chain using the command netsh winsock reset but with earlier versions it was almost impossible without reinstalling the TCP/IP protocol, as described in KB892350 or KB817571. The enumproto simplifies the procedure of removing LSP modules from the chain and can run on Windows 95 (with Winsock 2.x), 98, ME, NT 4.0, 2000, XP and Server 2003.
- enumps.zip - 2.9 KB 32-bit / enumps64.zip - 5.0 KB 64-bit - compiled 2012-02-14 - Utility to display names of running processes, which dll modules are loaded into different processes and numbers and owner processes of running threads. Requires Windows 95/98/ME/2000/XP/2003. It does not work on Windows NT 4.0 or earlier, use psmod instead to enumerate loaded dll files or the pslist tool by SysInternals to enumerate running processes.
- exelist.zip - 5.2 KB 32-bit / exelist64.zip - 6.4 KB 64-bit - compiled 2012-02-14 - Displays information about exe files (and dll and other executable formats loadable in Windows). The utility reads the version resource linked into the exe files and also displays which executable format the image is.
- fdf.zip - 9.8 KB 32-bit / fdf64.zip - 10.5 KB 64-bit - compiled 2012-02-14 - Utility to search for duplicate files and optionally delete or hard link them to save disk space.
- fileinfo.zip - 2.8 KB - compiled 2010-04-13 - Displays information about file attributes, creation, modification and last access time, index serials (posix i-node number and sequence number) and number of hard links.
- finger.zip - 2.2 KB - compiled 2007-03-19 - Finger service client. The source also compiles fine on most *nix like systems.
- getcp.zip - 1.2 KB - compiled 2007-02-27 - Includes getacp.exe and getoemcp.exe. Returns the ANSI codepage number or the OEM codepage number respectively. Useful in batch files where you want to use chcp command to set the codepage to one of the system default.
- geteltorito.zip - 2.2 KB - compiled 2009-12-07 - Utility to extract an El Torito default boot image from an ISO CD/DVD image. Useful if you for example want to create a bootable Windows installation CD with an integrated Service Pack and you want it to boot with the El Torito image from the original CD.
- gethost.zip - 1.4 KB - compiled 2009-12-07 - Displays host name and IP address for the local host or specified host name or IP address. This utility uses the gethost*() functions so it displays exactly what response other applications get when they ask e.g. for the IP address of a given host name.
- getkey.zip - 1021 bytes - compiled 2007-02-27 - Waits for a keystroke, converts it to upper case and returns the ascii value for that key. Useful in batch files where you want the user to press a key to select something.
- joindomain.zip - 1.4 KB - compiled 2009-12-07 - Join a computer to a domain from the command line. Requires Windows 2000/XP/2003.
- junc.zip - 2.7 KB - compiled 2009-12-07 - Creates/displays/deletes junctions of empty NTFS directories to another NTFS directory given a native path, possibly on another volume. Works on Windows 2000/XP/2003.
- killwin.zip - 5.9 KB - compiled 2009-12-07 - The kill.exe, enumwin.exe and showwin.exe utilities used to find, manipulate, close or destroy windows on the current desktop. Useful to kill hung applications by giving window title. kill.exe can also force application to terminate within a given number of seconds by first trying to close the application's window and then if it has not terminated within the given time it terminates the process.
- movent.zip - 2.2 KB - compiled 2009-12-07 - Command line interface to the MoveFileEx() API function. Moves files, possibly delay the actual move until next reboot if you want. Can be used to rename or remove files not movable while the system is running. Reduced functionality when run in Windows 95/98/ME, does not run under Win32s in Windows 3.x.
- popdump.zip - 4.8 KB - compiled 2011-06-18 - Retrieves all e-mail messages from a POP3 mailbox and dumps them as eml files. The eml files can be opened in e.g. Outlook Express.
- popman.zip - 5.1 KB - compiled 2011-06-18 - Useful to list messages in a POP mailbox and delete a message you don't want to receive directly on the server. Useful e.g. if you have a low bandwidth connection and can't receive the e-mail you want just because there is a really big e-mail first at the server...
- psmod.zip - 2.7 KB 32-bit / psmod64.zip - 3.2 KB 64-bit - compiled 2012-02-14 - Utility to display which dll modules are loaded into different processes. Requires Windows NT 4.0 or 2000/XP/2003. On Windows NT 4.0 the psapi package is required, if you don't have it, i.e. the program complains about psapi.dll, you can get it here. For Windows 95/98/ME platforms, use the enumps tool instead.
- rawcopy.zip - 7.9 KB 32-bit / rawcopy64.zip - 8.1 KB 64-bit - compiled 2012-02-14 - Reads and writes files and devices. (Cannot read/write disk devices in Windows 95/98/ME or Win32s.) For example useful to write a floppy image file on a hard disk to a physical floppy in Windows NT. (This can also be done by using various Win32 ports of the *nix dd program. But unlike my rawcopy, they usually do not unmount/lock physical devices or partitions during the read/write which makes them quite dangerous to use if anything else is using the device meanwhile...) From version 1.2.1 it can also create sparse output files with a new -s command line switch. Version 1.3.0 supports differential copying.
- reptxt32.zip - 4.4 KB - compiled 2010-11-09 - Replaces a text string in any file. Can e.g. be used to change a text string in binary files or make the same text string change in a number of files at a time.
- setprio.zip - 3.3 KB - compiled 2009-12-07 - Displays information about and optionally changes the priority class for a given process id. (Same function as the priority change option in Task Manager, but this is a command line tool that works in Windows 95/98/ME too.) This program does nothing when run in Win32s on Windows 3.x (because there is no process and thread scheduler in Windows 3.x).
- shortren.zip - 2.0 KB 32-bit / shortren64.zip - 2.2 KB 64-bit - compiled 2012-02-14 - Changes the short filename (MS-DOS compatible 8.3) alias of a file or directory with a long name or a name with characters not allowed in MS-DOS filenames. Requires Windows XP, Server 2003 or later.
- sizdir32.zip - 7.7 KB - compiled 2010-02-16 - Lists all files in a given size interval in current directory and all subdirectories and then displays how much disk space the files use and how much they would use if the allocation block size where changed.
- strarc.zip - 25.2 KB 32-bit / strarc64.zip - 26.9 KB 64-bit - compiled 2012-02-14 - A console backup/archive tool for Windows NT/2000/XP/2003/Vista/2008/7. It uses the same backup methods as the ntbackup or robocopy programs and thus backs up all information and meta data on an NTFS volume. The main difference is that strarc is free and open source and produces stream archives you can store on tapes, disks or anywhere else or it can create the archive stream to stdout so that it can be compressed easily using stream compression tools like gzipor bzip2. The command line switches and parameters are quite similar to the *nix tar utility and it can easily be used to clone an entire NTFS volume including everything, files, directories, their time stamps, attributes and security information, compression attribute, alternate data streams, junctions, hard links etc. With this new 0.1.3 release it is even possible to backup the registry database files of a running Windows system. An information file called strarc.txt describing usage and including how-to:s and other documentation is included in this zip file. The documentation is also available here.
- swapadd.zip - 2.4 KB 32-bit / swapadd64.zip - 2.4 KB 64-bit - compiled 2012-02-14 - Adds a swap file on a running Windows system or displays usage of current swap files.
- tickcount.zip - 1.6 KB - compiled 2009-12-07 - Displays information about how long time the system has been up. (Weeks, days, hours, minutes, seconds and milliseconds.)
- txtcnv32.zip - 2.9 KB - compiled 2012-02-15 - Converts text files or text streams from ANSI codepage to OEM codepage or vice versa. It is also possible to specify codepages to convert from and to, or to convert from or to 16-bit Unicode (UTF16) from or to a specific codepage.
- w32ver.zip - 2.1 KB - compiled 2007-02-27 - Displays the current version number, build number and service pack level for the current Win32 environment. w32verc.exe displays the information in the console window and w32ver.exe displays it in a dialog box making it compatible with Win32s on Windows 3.x.
- whois.zip - 14.9 KB - compiled 2011-06-18 - My Win32 port of the GNU whois client. Automatically directs the query to the right whois server by using tables and following redirections. Now updated to support the new .eu domains.
- xcopynt.zip - 3.7 KB - compiled 2009-12-07 - Copies a complete directory tree to another location. This tools copies files, directories (even empty ones), all attributes, extended attributes, time stamps, security information including access permissions (except in some cases owner and auditing information). Requires Windows NT 4.0, Windows 2000, XP or Server 2003. The Windows NT 4.0 version of xcopy.exe did not have all this functionality. Note! The development of this tool has now come to an end. It has several limitations, especially under newer Windows versions (it lacks correct support for hard links, compression attribute, junction points, etc) and it does not work at all under Windows NT version prior to 4.0. I recommend all users of this tool to use the new strarc instead. If you previously typed xcopynt d:\dir\ you may now use strarc and type strarc -c | strarc -x -d:d:\dir\ instead.
Small utilities with graphical user interface (or with no user interface at all)
Works on all versions of Win32 unless the description says something else. This includes at moment Windows 95/98/ME/NT/2000/XP/2003 and Windows 3.x with Win32s installed.
These binaries are compiled with the free version of Microsoft Visual C++. They are not linked with the standard C or C++ libraries that comes with this compiler, instead they are linked with a dynamic library I call minwcrt (Minimal Windows C Run-Time Library) linking them to crtdll.dll instead of msvcrt.dll. This makes them run in all versions of Win32.
- enumwinw.zip - 10.4 KB - compiled 2007-05-13 - Like the utilities in killwin.zip above, but this one is a graphical interface tool to view information about windows and other graphical objects on the current desktop and possibly show, hide, minimize or close them if you want. This tool requires Windows NT 4.0 Service Pack 3 or later or Windows 95 or later. It is written in Visual Basic 6 so if it does not work you probably don't have the VB run-time environment installed. You can get it here.
- fsplitw.zip - 6.8 KB - compiled 2007-03-19 - Splits a big file into smaller part files of specified size. Useful to split a large file to many floppies or CD:s. The file parts can be restored to the large file again using the copy /b command at the command line, like copy /b part1+part2+part3 bigfile.
- gethostw.zip - 1.6 KB - compiled 2009-12-07 - Like gethost.zip above, but displays the information in a dialog box instead, making it compatible with Win32s on Windows 3.x (or good if you don't like the console anyway...).
- logonwrap.zip - 1.5 KB - compiled 2009-12-07 - Runs the application specified on command line and waits for it to terminate and then logs out the user session. Particularly useful on Terminal Servers in cases where you want only one single application to run when user logs on and make sure the session is closed properly when that application is terminated.
- logout.zip - 1.9 KB - compiled 2009-12-07 - Command line interface for the ExitWindowsEx() API function. Useful to log out the current user or shutdown or restart the system in the way you want.
- regrepl.zip - 6.8 KB 32-bit / regrepl64.zip - 9.2 KB 64-bit - compiled 2012-01-14 - Registry Replace Tool. This program is useful if you have missed a "replace all"-function in the Registry Editor. The new version also supports remote operation on other computers on the network and selecting subkey where the search and replace should start. It supports replacing Ansi and Unicode texts in REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ and REG_BINARY type registry values. Download screenshot here (9.4 KB).
- synctime.zip - 2.8 KB - compiled 2009-12-07 - Synchronizes the local computer's time with the nist.gov time servers.
- tickcntw.zip - 1.4 KB - compiled 2009-12-07 - Displays a dialog box with information about how long the system has been up. (Weeks, days, hours, minutes, seconds and milliseconds.)
- w32ver.zip - 2.1 KB - compiled 2007-02-27 - Displays the current version number, build number and service pack level for the current Win32 environment. w32verc.exe displays the information in the console window and w32ver.exe displays it in a dialog box making it compatible with Win32s on Windows 3.x.
- winlogoncfg.zip - 18.7 KB 32-bit / winlogoncfg64.zip - 19.5 KB 64-bit - compiled 2012-01-14 - A small utility to view and change settings for the Winlogon process. This includes settings up auto logon feature, logon dialog options and settings for Windows File Protection. Operates on local and remote computers. Requires Windows NT, 2000, XP or Server 2003. A help file with some how-to instructions is included. Download screenshot here (21.3 KB).
These applications have recently been rebuilt in Visual Basic 2010. They run in Windows 98/ME/2000/XP/2003/Vista and they require .NET Framework 2.0 or later to be installed first. If they don't work and you have not installed .NET Framework 2.0 or later you can download and install it from Microsoft's website.
- checksum.zip - 7.2 KB - compiled 2012-08-27 - A small utility to calculate MD5, SHA1 and RIPEMD160 checksums for file contents. Output is formatted in a way compatible with the GNU md5sum and sha1sum tools.
- coordtool.zip - 11.8 KB - compiled 2012-01-15 - Utility to convert between various coordinate systems and calculate distances between points etc.
- netcheck.zip - 11.2 KB - compiled 2012-02-15 - Displays assembly references (direct dependencies) for .NET assemblies. Includes netcheck20.exe for .NET 2.0/3.0/3.5 assemblies and netcheck40.exe for .NET 4.0 assemblies.
.NET tools with graphical user interface
These applications have recently been rebuilt in Visual Basic 2010. They run in Windows 98/ME/2000/XP/2003/Vista and they require .NET Framework 2.0 or later to be installed first. If they don't work and you have not installed .NET Framework 2.0 or later you can download and install it from Microsoft's website.
- GraphViewer - published 2011-04-30 - A math application to view graphs of functions. It can also calculate and draw derivative and anti-derivative graphs. The graphs can also be saved to a file or printed on paper. Download screenshot here (22.6 KB). This is an updated version that uses .NET compiler instead of ScriptControl object which should gain performance.
- ODBC Dataviewer - published 2007-03-25 - A small utility to make ODBC connections and send SQL queries. It shows the returned data in an updateable DataGridView so it can be used to edit data through any ODBC-compatible database connection.
0 件のコメント:
コメントを投稿