我在一个Win2K8R2系统上运行,除了Windows CIFS客户端之外,它还安装了Microsoft的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;
}我还尝试按照doc中的建议填写NETRESOURCE lpProvider和/或dwType字段,但行为没有变化。
如果我向函数传递CIFS UNC路径,则它会成功。如果我向它传递一个NFS UNC路径,它将失败,并显示错误487“尝试访问无效地址”。我还尝试传递原生NFS路径形式的hostname:/export/file,但失败了,并显示错误67 "The network name but be found“。
我找到了下面的用于在NFS中使用WNetAddConnection2()的sample,但是这段代码也失败了,并显示错误50“该请求不受支持”。我可以使用"net use“命令或微软提供的特定于NFS的mount.exe工具成功挂载导出。
最后,WNetOpenEnum/WNetEnumResource不会为我返回任何NFS提供者信息,甚至不会显示我通过"net use“或mount.exe映射的任何连接的驱动器。
我的一般问题是,有没有人在WNet提供程序中使用NFS取得了更好的成功?具体地说,有没有什么机制可以用来确定远程路径的提供者?
发布于 2012-12-05 17:50:58
你构建的是x86还是x64?在WOW64下,对于来自x86进程的NFS共享,看起来WNet* API不能正常工作。您无需编写代码就可以看到这一点-如果您挂载了一个NFS共享,"C:\windows\system32\net use“将显示它,而"C:\windows\syswow64\net use”将不会显示它。文件系统访问在32位进程中似乎没问题,但所有API都不起作用。
即使构建为x64,使用空lpProvider对我来说也是不一致的。一半的时间它不工作,另一半的时间它等待大约5秒才能返回。
调用WNetGetResourceInformation两次,一次是使用lpProvider "NFS Network“,另一次是使用"Microsoft Windows Network”。
https://stackoverflow.com/questions/6219799
复制相似问题