HOWTO: Determine Whether a Drive Is a RAM Drive
ID: Q113418
|
The information in this article applies to:
-
Microsoft C for MS-DOS, versions 6.0, 6.0a, 6.0ax
-
Microsoft C/C++ for MS-DOS, version 7.0
-
Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5
-
Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 5.0, 6.0
SUMMARY
There are no C language functions or C run-time functions to determine
whether or not a drive is a RAM drive. The GetFileType() API may be called
by Win32 applications to obtain the type of a particular drive from the
operating system. More information may be found about GetFileType() in the
Win32 SDK Reference of the Visual C++ 32-bit Edition Books Online.
For MS-DOS and Win16 applications, although there are no definitive methods
available, several possible ways exist to determine that a given drive is
"probably" a RAM drive. The remainder of this article will briefly discuss
each of four methods to check for a RAM drive. Note that for all methods
each drive of the host system must be checked.
MORE INFORMATION
Method 1
Check the drive's volume label. This method is probably the most common.
The Microsoft RAMDRIVE.SYS uses a volume label of "MS-RAMDRIVE". However,
this is not guaranteed to be the volume label and will probably not be the
volume label on RAM drives from other companies. A user may also change
this by using the label command.
For additional information on finding the disk volume, please see the
following articles in the Microsoft Knowledge Base:
Q58800 Using _dos_findfirst() Function to Retrieve Disk Volume
Method 2
Call Interrupt 21h Function 44h subfunction 0Dh, which is a generic I/O
control function for block devices. Most devices support this function.
However, RAMDRIVE.SYS currently does not support it. This lack of support
can be used to identify a RAM drive. Load the CX register with 0860h to get
disk drive device parameters; if the function fails, leaving the carry flag
set, the drive is probably a RAM drive.
Method 3
Check how many FAT tables the drive has; if it has only 1, it is probably a
RAM drive. Because RAMDRIVE.SYS does not support the IOCTL functions, the
only way to determine the number of FAT tables is to use INT 25, Absolute
Disk Read. Make note of the warnings that this function has been superseded
and is not supported under Windows. For more information and a sample
showing how to use INT 25, please see the following articles in the
Microsoft Knowledge Base:
Q102870 SAMPLE: Reading the Boot Sector of a Drive
Method 4
Finally, call Interrupt 21h Function 44h subfunction 09h to check whether
the drive is remote. If the value returned in DX is 0x0800, having only bit
11 set, the drive is probably a RAM drive. This is known to be a RAM drive
by deduction. Because bits 6 and 7 are clear, it is known that this device
does not accept IOCTL functions, like most devices. Because bit 12 is
clear, this is not a network drive, and so on.
Because none of the above methods is guaranteed, it is best to use a
combination of these methods. First eliminate the obvious, such as network
drives, local hard drives, CD-ROM drives, and so forth. Then try to
determine whether or not the given drive is a RAM drive.
Additional query words:
detect find
Keywords : kbLangC kbVC100 kbVC150 kbVC200 kbVC210 kbVC400 kbVC500 kbVC600
Version : MS- DOS:6.0,6.00a,6.00ax,7.0;WIN3X:1.0,1.5;WINNT:1.0,2.0,2.1,4.0,5.0;
Platform : MS-DOS NT WINDOWS
Issue type : kbhowto
Last Reviewed: June 30, 1999