【问题标题】:Determine protocol of a network drive确定网络驱动器的协议
【发布时间】:2012-06-03 18:19:09
【问题描述】:

有没有办法确定用于在 Windows 上安装的网络驱动器的协议名称(SMB/CIFS、NFS)和版本? (在 C# 中)

编辑

使用 Rusted 的回答中的信息,我从网络上的 Windows 7 计算机获得了以下信息。

NETRESOURCE res = WinApiWNETwrapper.GetResourceInfo("\\Test-PC");

res.dwDisplayType = SERVER
res.dwScope       = 0
res.dwType        = ANY
res.dwUsage       = CONTAINER
res.lpComment     = ""
res.lpLocalName   = null
res.lpProvider    = "Microsoft Windows Network"
res.lpLocalName   = "\\Test-PC"

NETINFOSTRUCT netinfo = WinApiWNETwrapper.GetNetworkInfo("\\Test-PC");

netinfo.cbStructureSize   = 32
netinfo.dwCharacteristics = 0
netinfo.dwDrives          = -1
netinfo.dwHandle          = 1880621056
netinfo.dwPrinters        = -1
netinfo.dwProviderVersion = 1024
netinfo.dwStatus          = Running
netinfo.wNetType          = LANMAN

SERVER_TRANSPORT_INFO_1[] transports = WinApiNETwrapper.ServerTransportEnum_1("\\Test-PC");

transports[0].svti1_domain                 = "WORKGROUP"
transports[0].svti1_networkaddress         = "TEST-PC"
transports[0].svti1_numberofvcs            = 0
transports[0].svti1_transportaddress       = 73107336
transports[0].svti1_transportaddresslength = ...
transports[0].TransportAddress             = "TEST-PC"

transports[0].svti1_transportname          = "\\Device\\NetbiosSmb"
transports[1].svti1_transportname          = "\\Device\\NetBT_Tcpip_{F4C75115-...}"
transports[2].svti1_transportname          = "\\Device\\NetBT_Tcpip_{70BD9048-...}"

重要的部分似乎是:

transports[0].svti1_transportname          = "\\Device\\NetbiosSmb"

但我无法在任何地方找到 SMB 协议的版本号。有什么想法吗?

【问题讨论】:

    标签: c# windows network-protocols


    【解决方案1】:

    我想您需要 Windows Networking (WNet) API,这是 NETINFOSTRUCT 中 NetType 字段的值,由 WNetGetNetworkInformation 函数返回。

    Here 是 C# 中的开源项目,请检查 WnetApi 文件夹中的文件以获取 Wnet API 的 .NET 包装器。

    要获取映射驱动器的 UNC 路径,请使用来自 this 项目的 PathToUNC 方法。

    【讨论】:

    • 这帮了大忙!查看提到的 c# 项目的源代码,我设法获得了一些关于网络计算机的信息。但是我仍然没有协议版本。我相应地更新了问题。
    • 我认为您的结果中的 netinfo.wNetType = LANMAN 表示 SMB 协议,因为 C# 包装器中的枚举名称取自旧版本的 Winnettwk.h。我检查了 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\wnnc.h - 它包含一个具有相同值的新名称:#define WNNC_NET_SMB 0x00020000
    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 2011-04-06
    • 2021-06-21
    • 2013-12-14
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多