簡體   English   中英

列出Win32設備名稱空間的內容

[英]List the content of the Win32 device namespace

從microsoft-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 %d\n", error);
        return 1;
    }
    for (int i = 0; i < wchar_count; i++) {
        if (devicenames[i] == '\0')
            devicenames[i] = '\n';
    }
    wprintf(L"%s", devicenames);
    return 0;
}

順便說一句,WinObj並不主要列出Win32設備名稱,而是列出Windows NT對象名稱。 盡管可以在GLOBAL??下找到Win32設備名稱GLOBAL?? WinObj中的節點。

請參閱https://support.microsoft.com/zh-cn/kb/100027中的 “更多信息”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM