2014年9月29日 星期一

QueryDosDevice( ) 取得MS-DOS 的硬體設備訊息

QueryDosDevice() 原型如下:

DWORD WINAPI QueryDosDevice(
  __in_opt  LPCTSTR lpDeviceName,
  __out     LPTSTR lpTargetPath,
  __in      DWORD ucchMax
);

該函數可以取得MS-DOS 下的設備訊息,

1、 lpDeviceName 是輸入參數,是MS-DOS的硬體代號。

2、 lpTargetPath 是輸出參數,用來存儲返回值。

3、 ucchMax 為第2個參數的buff 大小。

// 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;}