September 13th Thursday (九月 十三日 木曜日)

  DWORD GetLogicalDrives(VOID);

MSDN Description: If the function succeeds, the return value is a bitmask representing the currently available disk drives. Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on.

DWORD GetLogicalDriveStrings( DWORD nBufferLength, // size of buffer
                              LPTSTR lpBuffer // pointer to buffer for drive strings );
Parameters

nBufferLength
    Specifies the maximum size, in characters, of the buffer pointed to by lpBuffer. This size does not include the terminating null character.
lpBuffer
    Pointer to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, that end with a second null character. The following example shows the buffer contents with <null> representing the terminating null character.

    c:/<null>d:/<null><null>

Return Values

If the function succeeds, the return value is the length, in characters, of the strings copied to the buffer, not including the terminating null character. Note that an ANSI-ASCII null character uses one byte, but a Unicode null character uses two bytes.

If the buffer is not large enough, the return value is greater than nBufferLength. It is the size of the buffer required to hold the drive strings.

If the function fails, the return value is zero.

UINT GetDriveType( LPCTSTR lpRootPathName // pointer to root path );
The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.
Parameters

lpRootPathName
    Pointer to a null-terminated string that specifies the root directory of the disk to return information about. If lpRootPathName is NULL, the function uses the root of the current directory.

Return Values

The return value specifies the type of drive. It can be one of the following values:
Value Meaning
DRIVE_UNKNOWN The drive type cannot be determined.
DRIVE_NO_ROOT_DIR The root directory does not exist.
DRIVE_REMOVABLE The disk can be removed from the drive.
DRIVE_FIXED The disk cannot be removed from the drive.
DRIVE_REMOTE The drive is a remote (network) drive.
DRIVE_CDROM The drive is a CD-ROM drive.
DRIVE_RAMDISK The drive is a RAM disk.


/* GetDriveInfo1.c */
#include <stdio.h>
#include <windows.h>

int main()
{
    DWORD dwRtn = GetLogicalDrives();
    char c = 'A';
    char drive[4];
    char output[64];

    while ( dwRtn )
    {
        if ( dwRtn & 1  )
        {
            sprintf(drive, "%c://",  c);
            switch ( GetDriveType(drive) )
            {
            case DRIVE_FIXED:
                sprintf(output, "%c: -- Drive Fixed/n", c);
                break;
            case DRIVE_REMOVABLE:
                sprintf(output, "%c: -- Drive Removable/n", c);
                break;
            case DRIVE_REMOTE:
                sprintf(output, "%c: -- Drive Remote/n", c);
                break;
            case DRIVE_CDROM:
                sprintf(output, "%c: -- CD-Rom/n", c);
                break;
            case DRIVE_RAMDISK:
                sprintf(output, "%c: -- Ram Disk/n", c);
                break;
            default:
                sprintf(output, "%c: -- Unknown drive/n", c);
                break;
            }
            printf("%s", output);
        }
        c++;
        dwRtn >>= 1;
    }
    return 0;
}

/* GetDriveInfo2.c */

#include <stdio.h>
#include <windows.h>

int main()
{
  
    char Buf[256];
    char TmpDrive[4];
    int i, j = 0;
    char strType[32];
    UINT uType;
    DWORD dwRtn ;
  
    memset(Buf, 0, 256);
    dwRtn = GetLogicalDriveStrings(256, Buf);
  
    for ( i=0; i < (int)dwRtn; i++ )
    {
        if ( Buf[i] == 0  )
        {
            if ( Buf[i+1] != 0 || (Buf[i+1] == 0 && Buf[i+2] == 0 ))
            {
                TmpDrive[j] = Buf[i];
                j = 0;
                uType = GetDriveType(TmpDrive);
                switch(uType)
                {
                case DRIVE_REMOVABLE:
                    sprintf(strType, "Removable");
                    break;
                case DRIVE_FIXED:
                    sprintf(strType, "Fixed Drive");
                    break;
                case DRIVE_REMOTE:
                    sprintf(strType, "Remote Drive");
                    break;
                case DRIVE_CDROM:
                    sprintf(strType, "CD-Rom");
                    break;
                case DRIVE_RAMDISK:
                    sprintf(strType, "Ram disk");
                    break;
                default:
                    sprintf(strType, "Unknow type");
                    break;
                }
                printf("%s - %s/n", TmpDrive, strType);
            }
        }
        if ( Buf[i])
            TmpDrive[j++] = Buf[i];

        if ( Buf[i] == 0 && Buf[i+1] == 0 && Buf[i+2] == 0)
            return 0;
    }
  
    return 0;
}

 
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭