我在除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有更好的成功?具体来说,是否有一些机制可以用来确定远程路径的提供者?