Я работаю в системе Win2K8R2, в которой установлен клиент Microsoft NFS в дополнение к клиенту Windows CIFS.
Учитывая 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 «Сетевое имя не найдено».
Я нашел следующий пример для использования WNetAddConnection2 () с NFS, но этот код также не работает для меня с ошибкой 50 «Запрос не поддерживается». Я могу успешно смонтировать экспорт с помощью команды «net use» или специального средства NFS mount.exe, предоставленного Microsoft.
Наконец, WNetOpenEnum / WNetEnumResource не возвращает мне никакой информации о провайдере NFS и даже не показывает подключенные диски, которые я подключил с помощью «net use» или mount.exe.
Мой общий вопрос: кто-нибудь добился большего успеха, используя API-интерфейсы WNet с поставщиком NFS? В частности, есть ли какой-нибудь механизм, который я могу использовать для определения поставщика для удаленного пути?