我在除Windows CIFS客戶端之外還安裝了Microsoft NFS客戶端的Win2K8R2系統上運行。Win32 WNet API和NFS路徑問題
鑑於UNC路徑(NFS客戶端支持警告),我需要能夠判斷路徑上的操作是否由CIFS或NFS客戶端處理。 WNetGetResourceInformation()似乎提供了這一點,但是當UNC路徑指向NFS服務器時,我無法使其工作。
示例代碼:
int GetResourceInformation(TCHAR* path, void* buffer, DWORD* size)
{
TCHAR* p = NULL;
NETRESOURCE nr;
memset(&nr, 0, sizeof(nr));
nr.lpRemoteName = path;
DWORD dwRetVal = WNetGetResourceInformation(&nr, buffer, size, &p);
if(dwRetVal == NO_ERROR)
{
NETRESOURCE* tmp = (NETRESOURCE*)buffer;
wprintf(L"%s provider=%s system=%s\n", path, tmp->lpProvider, (p == NULL) ? L"<null>" : p);
}
else
{
wprintf(L"WNetGetResourceInformation failed for %s with error: %u\n", path, dwRetVal);
}
return dwRetVal;
}
我也試圖在NETRESOURCE lpProvider和/或dwType領域填充作爲doc但在行爲上無修改建議。
如果我通過函數CIFS UNC路徑它會成功。如果我將它傳遞給NFS UNC路徑,它會失敗,並顯示錯誤487「嘗試訪問無效地址」。我也嘗試傳遞本地NFS路徑樣式主機名:/ export/file,但是失敗,錯誤67「無法找到網絡名稱。」
我發現以下sample與NFS使用WNetAddConnection2(),但此代碼也失敗,我錯誤50「請求不支持」。我可以使用「net use」命令或Microsoft提供的NFS特定的mount.exe工具成功安裝導出。
最後,WNetOpenEnum/WNetEnumResource不會爲我返回任何NFS提供程序信息,甚至不會顯示通過「net use」或mount.exe映射的任何連接的驅動器。
我的一般問題是,有沒有人使用NFS提供商的WNet APIs有更好的成功?具體來說,是否有一些機制可以用來確定遠程路徑的提供者?