Определите, находятся ли 2 пути UNC на одном и том же удаленном компьютере на одном и том же томе.

Я работаю над службой, которая имеет особые условия, если два указанных ей пути UNC находятся в одном и том же томе. Однако мне еще предстоит выяснить способ определения этого, поскольку класс C# DriveInfo не работает с путями UNC.

EX:

\\server\path_a находится на диске A

\\server\path_b находится на диске B

Есть ли способ сообщить, что \\server\path_a и \\server\path_b не находятся на одном и том же диске удаленно?

2 ответа

В C++ я использовал бы общий доступ netenum, чтобы получить удаленный физический путь, а затем проверить, находятся ли они на том же пути. Вы могли бы, вероятно, то же самое в C#

Конечно, вы можете, но вам нужно будет использовать PInvoke для вызова интерфейса WinAPI, расположенного в библиотеке NetAPI32. Например:

В зависимости от ваших потребностей вы можете получить структуру SHARE_INFO_2 для общих ресурсов, вызвав NetShareGetInfo, которая предоставит вам этот информационный объект для общего ресурса. Посмотрите на структуру здесь. Свойство shi2_path даст вам локальный путь, который содержит диск.

В документации MSDN говорится об этом свойстве:

shi2_path

Указатель на строку Unicode, указывающий локальный путь для общего ресурса. Для дисков shi2_path - это разделяемый путь.

Обратите внимание: для получения объекта SHARE_INFO_2 у вас должно быть достаточно учетных данных.

Затем, когда вы получаете оба пути, вы можете сделать что-то вроде (очень элементарно):

bool isDriveEqual = sharePath1[0] == sharePath2[0];
Другие вопросы по тегам