This project was born out of necessity. I have been using ImDisk Toolkit for years without any issues. I particularly liked the ability to preload content to the RAM-disk from a local directory and synchronize the RAM-disk back on shutdown. However, I started meeting issues when some newer software applications refused to work with my ImDisk-powered RAM-disk. One easy to reproduce case is if you install Chrome 86+ and then try to install any Chrome extension - you will get a popup window with an error message
ERR_CANT_FIND_TEMP_FOLDER
The underlying reason for the error is that ImDisk driver works in a special mode (Direct-IO) which bypasses Windows Volume Manager.
This leads to a problem with the Win32 API function GetFinalPathNameByHandle
- you can read the discussions at
- https://web.archive.org/web/20200805111419/http://reboot.pro/topic/22008-getfinalpathnamebyhandle-fails-with-error-invalid-function/
- https://web.archive.org/web/20200815180956/http://reboot.pro/topic/21152-possible-bug-or-incompatibility-in-imdisk/
The author of ImDisk drver created Arsenal driver which works in the normal SCSI miniport
mode and is visible to the Windows Volume Manager.
He provides a console utility to create/remove RAM-disk(s) but no Windows service
tool that will create a RAM-disk on boot - and certainly nothing similar to the ImDisk Toolkit that I was used to (and probably many other users).
The console utility is also dependent on the ImDisk CPL applet - which I did not quite like (from a developer's point of view).
So I decided to create a GUI for configuring the parameters of the RAM-disk, plus a Windows service
that will create the desired RAM-disk on boot and persist it on shutdown.
Of course, I did some research before deciding to start the development - there were other free and commercial RAM-disk tools working as SCSI miniport
drivers
but they either did not have the additional features of ImDisk Toolkit or they required a VHD image for preloading/persisting the RAM-disk contents
(and I preferred the usage of native filesystem instead of VHD image).
It took me about a week to extract the relevant code from the AIM (Arsenal Image Mounter) console utility and translate it from C++ to Objec Pascal. After a lot of debugging and trials/errors I succeeded - and successfully replaced ImDisk Toolkit with my tools. I have to admit that I was in a hurry and just needed a working solution - there were no attempts to make the code more robust or to implement complex features (like regex support in the list of folders excluded from synchronization at shutdown).
The code is provided "AS IS" in the hope that it will be useful to others. Testing was done only on Win7 x64 - most probably it will not work on XP.
The code requires Admin privileges and the Arsenal driver - which can be downloaded from its official repository.
Thanks to user lazychris2000
here is a short instruction how to install the Arsenal driver:
- download https://github.com/ArsenalRecon/Arsenal-Image-Mounter/raw/master/DriverSetup/DriverSetup.7z
- extract the archive into some folder, for example
c:\arsenal
- using an elevated Administrator command prompt, run the following commands:
c:
cd \arsenal\cli\x64
aim_ll.exe --install ..\..
- you should get something similar to the following
Detected Windows kernel version 10.0.19045.
Platform code: 'Win10'. Using port driver storport.sys.
Reading inf file...
Creating device object...
Installing driver for device...
Finished successfully.
- download https://github.com/ArsenalRecon/Arsenal-Image-Mounter/raw/master/DriverSetup/DriverFiles.zip
- extract the archive into some folder, for example
c:\arsenal
- using Windows Explorer, open the appropriate subfolder - e.g.
Win8
orWin8.1
orWin10
or perhapsWin7
- point your mouse over
phdskmnt.inf
file in the given subfolder and click the right mouse button to open the context menu - from this context menu, choose the item
Install
and the Arsenal driver will be installed. You should see it in the Device Manager asArsenal Image Mounter
under the groupStorage controllers
You will need Delphi 7 and TNT-Unicode in order to compile the source code of RamDiskUI - or you can simply download the binary release. All pull requests are welcome.
The RAM-disk UI (not the Arsenal driver) creates several registry values which are then picked up by the RAM-disk service (not in real-time unfortunately - only on start or restart of the service).
They are created under [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ArsenalRamDisk]
and are explained below:
DiskSize
is the size in bytesDriveLetter
is obviousLoadContent
is path to a folder whose contents will be pre-loaded in the RAM-disk at startupExcludeFolders
is StringList (lines delimited with CRLF) which specifies which folder names from the RAM-disk won't be saved on shutdown in the folder specified byLoadContent
. I usually create numeric folders in my RAM-disk for my daily projects - but I don't want them to be persisted on disk because I can pull them with Git every morning.UseTempFolder
whether to create TEMP folder on RAM-disk and point the OS to this temp folderSyncContent
whether to save RAM-disk content on shutdown to the folder specified byLoadContent
DeleteOld
whether to delete those files and folders fromLoadContent
which are not present on the RAM-disk on shutdown (meaningful only whenSyncContent
is TRUE)
Here is an example from my PC:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\ArsenalRamDisk]
"DiskSize"="17179869184"
"DriveLetter"="Z"
"LoadContent"="D:\\Setup\\RAM_disk"
"ExcludeFolders"="chrome
opera
phpstorm
stoplight
_
0
1
2
3
4
5
6
7
8
9"
"UseTempFolder"=dword:00000001
"SyncContent"=dword:00000001
"DeleteOld"=dword:00000001
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):44,00,3a,00,5c,00,53,00,4f,00,55,00,52,00,43,00,45,00,5c,00,\
44,00,45,00,4c,00,46,00,49,00,5c,00,52,00,41,00,4d,00,64,00,69,00,73,00,6b,\
00,5c,00,52,00,61,00,6d,00,53,00,65,00,72,00,76,00,69,00,63,00,65,00,2e,00,\
65,00,78,00,65,00,00,00
"DisplayName"="Arsenal RAM-disk"
"WOW64"=dword:00000001
"ObjectName"="LocalSystem"
"Description"="Arsenal RAM-disk"
As discussed in issue 13, RAM-disks created by the Arsenal Image Mounter are using the SCSI-subsystem rather than Direct-I/O (unlike e.g. ImDisk)
Since SCSI disks are recognized by the Volume Manager and this tool marks the RAM-disk as fixed
(rather than removable
/ external
)- Windows by default puts a hidden $RECYCLE.BIN folder on the RAM-disk
and deleted files are kept there rather than immediately deleted.
This can be changed through the RecycleBin icon on the desktop as shown on the screenshot

or disabled globally as explained in https://superuser.com/questions/1212033/how-can-i-disable-recycle-bin-globally-in-windows-8-1
The procedure is as follows:
- Press and hold the WIN key on your keyboard, then press "R" key
- When the
Run
dialog appears - typenet stop ArsenalRamDisk
and press ENTER key. The service will unmount the RAM-disk and then stop itself. - Extract the ZIP file with the new version of
RamdiskUI.exe
andRamService.exe
- Copy the new files onto the old ones (overwrite)
- Press and hold the WIN key on your keyboard, then press "R" key
- When the
Run
dialog appears - typenet start ArsenalRamDisk
and press ENTER key. The service will auto-mount the RAM-disk after starting.
You can check for new versions of the driver on its Github page The procedure is as follows:
- Important! Make sure there are no open files on the RAM-disk and that no application has its current working directory pointing to any folder on the RAM-disk
- Press and hold the WIN key on your keyboard, then press "R" key
- When the
Run
dialog appears - typenet stop ArsenalRamDisk
and press ENTER key. The service will unmount the RAM-disk and then stop itself. - Open Windows Device Manager, go to "Storage Controllers" node in the device tree and uninstall the "Arsenal Image Mounter" device
- Download and extract the latest version of the Arsenal driver
- Enter the subfolder which matches the version of your OS (e.g.
Win7
) - Right-click onto
phdskmnt.inf
and choose "Install" from the context menu - Press and hold the WIN key on your keyboard, then press "R" key
- When the
Run
dialog appears - typenet start ArsenalRamDisk
and press ENTER key. The service will auto-mount the RAM-disk after starting.
MIT License
Copyright (c) 2021 tmcdos
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.