QueryDosDevice() 原型如下:
[C++] 纯文本查看 复制代码 DWORD WINAPI QueryDosDevice(
__in_opt LPCTSTR lpDeviceName,
__out LPTSTR lpTargetPath,
__in DWORD ucchMax
);
该函数可以获取 MS-DOS 设备名信息。
第 1 个参数 lpDeviceName 是输入参数,是 MS-DOS 设备名字符串。
第 2 个参数 lpTargetPath 是输出参数,用来存储返回结果的缓冲区。
第 3 个参数 ucchMax 是第 2 个参数所表示的缓冲区大小。
测试代码:
[C++] 纯文本查看 复制代码 // QueryDosDevice.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define BUFSIZE 256
typedef TCHAR *PTCHAR;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_ALL, "chs");
TCHAR szDevice[256] = {0}; // 存储磁盘根路径
TCHAR szDrive[3] = {0}; // 存储单个磁盘根路径
TCHAR szName[MAX_PATH]; // 存储 MS-DOS 设备信息
PTCHAR p = szDevice;
GetLogicalDriveStrings(BUFSIZE, szDevice);
_tprintf (TEXT("获取的 MS-DOS 设备名为:\n"));
do {
CopyMemory (szDrive, p, 2*sizeof(TCHAR)); // 将驱动器根路径拷贝到缓冲区,要去掉反斜杠
if ( !QueryDosDevice(szDrive, szName, BUFSIZE) ) {
_tprintf (TEXT("QueryDosDevice 获取失败 : %d\n"), GetLastError());
return (-1);
}
UINT uNameLen = _tcslen(szName); // 设备名长度
if (uNameLen < MAX_PATH) {
_tprintf (TEXT("%s %s\n"), szDrive, szName);
}
while (*p++); // 空循环,到下一个 NULL (C:\NULLD:\NULLE:\)
} while (*p); // 还有其它盘符
return 0;
}
运行输出:D:\WinAPI\QueryDosDevice\Debug>QueryDosDevice.exe
获取的 MS-DOS 设备名为:
B: \Device\RAMDriv
C: \Device\HarddiskVolume2
D: \Device\HarddiskVolume1
E: \Device\HarddiskVolume3
F: \Device\CdRom0
X: \Device\EncryptedDiskVolumeX |