Сложно догадаться о проблеме. Одна возможность состоит в том, что file
, который вы передаете как имя файла, отформатирован не совсем правильно. Например, даже если файл находится в корневом общем каталоге, что-то вроде z:test.txt
не будет работать - для этого потребуется: z:\\test.txt
.
Обычный способ вызова WNetGetUniversalName включает следующую последовательность:
- Вызов с небольшим буфером для получения необходимого размера
- выделить буфер правильного размера
- вызовите снова с буфером правильного размера
Однако, в отличие от многих сетевых функций Windows, этот, по-видимому, сначала проверяет, что вы отправили ненулевой указатель с положительным размером, а затем проверяет, достаточно ли большой буфер для того, что он хочет вернуть, последовательность выглядит примерно так:
REMOTE_NAME_INFO temp;
REMOTE_NAME_INFO *info = &temp;
DWORD size = sizeof(temp);
// call with buffer that's valid but too small.
WNetGetUniversalNameA("z:\\test.txt", REMOTE_NAME_INFO_LEVEL, info, &size);
// allocate large enough buffer:
info = static_cast<REMOTE_NAME_INFO *>(::operator new(size));
// call again with large enough buffer:
WNetGetUniversalNameA("z:\\test.txt", REMOTE_NAME_INFO_LEVEL, info, &size);
// Show result:
std::cout << info->lpUniversalName;