列出Win32设备命名空间的内容

List the content of the Win32 device namespace

本文关键字:命名空间 Win32 列出      更新时间:2023-10-16

来自微软doku:

"\."前缀将访问Win32设备命名空间,而不是Win32文件命名空间。这就是访问物理磁盘和卷是直接完成的,不需要经过文件系统,如果API支持这种类型的访问。您可以访问许多以这种方式(使用CreateFile和DefineDosDevice功能)。

例如,如果要打开系统的串行通信端口1,您可以在对CreateFile函数的调用中使用"COM1"。这是因为COM1–COM9是NT中保留名称的一部分命名空间,尽管使用"\."前缀也可以使用这些设备名称。

我的问题是,这个命名空间中有什么可用。有设备清单吗?在哪里可以买到?(我想我不理解这个话题。当我听到设备时,我会想到目录中的某种文件。)

编辑:

好的,我来回答我自己的问题。有一个叫WinObj的软件,人们可以用它来查看信息。

好的,我来回答我自己的问题。有一个叫WinObj的软件,人们可以用它来查看信息。

您可以使用QueryDosDevice Win32 API调用来获取所有Win32设备名称。

#include <windows.h>
#include <stdio.h>
#define DEVBUFSIZ (128 * 1024)      /* No recommended value - ~14K for me */
int main(int argc, char** argv)
{
    wchar_t devicenames[DEVBUFSIZ]  = L"";
    int     error                   = 0;
    int     wchar_count             = 0;
    wchar_count = QueryDosDeviceW(
            NULL,       /* lpDeviceName - NULL gives all */
            devicenames,
            DEVBUFSIZ);
    if (wchar_count == 0) {
        fprintf(stderr, "QueryDosDeviceW failed with error code %dn", error);
        return 1;
    }
    for (int i = 0; i < wchar_count; i++) {
        if (devicenames[i] == '')
            devicenames[i] = 'n';
    }
    wprintf(L"%s", devicenames);
    return 0;
}

顺便说一句,WinObj并不是主要列出Win32设备名称,而是列出Windows NT对象名称。尽管Win32设备名称可以在WinObj中的GLOBAL??节点下找到。

请参阅中的"更多信息"https://support.microsoft.com/en-us/kb/100027