2012-05-29 120 views
2

有沒有方法可以確定在Windows上用於裝入網絡驅動器的協議名稱(SMB/CIFS,NFS)和版本? (在C#)確定網絡驅動器的協議

編輯

從生鏽的答案使用的信息,我接到了一個窗口網絡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協議的版本號。有任何想法嗎?

回答

2

我想你已經需要Windows Networking (WNet) API,來自NetType字段的值NETINFOSTRUCT返回的WNetGetNetworkInformation函數。

Here是C#中的開源項目,檢查用於Wnet API .NET封裝器的WnetApi文件夾中的文件。

要獲取映射驅動器的UNC路徑,請使用this項目中的PathToUNC方法。

+0

這是很大的幫助!看着提到的C#項目的來源,我設法得到關於網絡計算機的一些信息。但我仍然沒有協議版本。我相應地更新了這個問題。 – Dennis

+0

我認爲你的結果中的netinfo.wNetType = LANMAN意味着SMB協議,因爲C#包裝中的枚舉名是從舊版本的Winnettwk.h中獲取的。我檢查了C:\ Program Files文件(x86)\ Microsoft SDK \ Windows \ v7.0A \ Include \ wnnc.h - 它包含一個具有相同值的新名稱:#define WNNC_NET_SMB 0x00020000 – Rusted