How to determine whether a drive is a RAM drive (113418)
The information in this article applies to:
- Microsoft Visual C++ 1.0
- Microsoft Visual C++ 1.5
- Microsoft Visual C++ 2.0
- Microsoft Visual C++ 2.1
- Microsoft Visual C++ 4.0
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ .NET (2002)
- Microsoft Visual C++ .NET (2003)
This article was previously published under Q113418 SUMMARY There are no C language functions or C run-time functions
to determine whether or not a drive is a RAM drive. The GetDriveType() 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 GetDriveType() 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 INFORMATIONMethod 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. 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, click the following article number to view
the article in the Microsoft Knowledge Base: 102870
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.
Modification Type: | Minor | Last Reviewed: | 4/24/2006 |
---|
Keywords: | kbHOWTOmaster kbLangC KB113418 kbAudDeveloper |
---|
|