Как запросить, является ли конкретная папка общей или перечислить папки с локальной машины на osx в C / C ++ или Objective C - PullRequest
0 голосов
/ 10 октября 2018

В настоящее время я работаю на MacOS High Sierra (не Windows) с использованием Qt.Просто используя обычный macOS, а не macOS сервер.Я рад написать код только для Mac вне пузыря Qt, чтобы исправить эту проблему, очевидно.

Я ищу способ программно проверить в C / C ++ или Objective-C, является ли конкретная локальная папкаобщедоступен в локальной сети.В качестве альтернативы я хотел бы получить список всех общих папок.Мне бы хотелось, чтобы этот метод работал на достаточно большом диапазоне версий MacOS, например, с 10,9 до 10,14.

Мне нужно сделать это для того, чтобы переписать пути к локальным файлам в виде путей UNC, чтобы они были доступны с клиентского компьютера Windows в той же сети через общий доступ к SMB с подходящими учетными данными.Предполагается, что общие папки уже настроены, но если этого не произойдет, пользователь получит сообщение об ошибке и предложит поделиться соответствующими папками.

Я могу поделиться / отменить общий доступ и увидеть состояние общего доступа к папкеиспользуя диалоговое окно «Получение информации» в Finder, но я ищу что-то, что можно использовать в приложении.

Вещи, которые я пытался безуспешно:

  • Поиск других экземпляровпроблема
  • Класс NSURL - не документирует имя ресурса для запроса его статуса общего доступа.
  • smbutil, похоже, не выводит список общих ресурсов с компьютера, на котором он работает.
  • У smbd, похоже, нет параметров командной строки для запроса общих папок.
  • Различные файлы конфигурации, упомянутые в справочных страницах smbutil и smbd.conf, не содержат список общих папок
  • mdls не содержит каких-либо соответствующих метаданных в выходных данных для папок, которыеshared.
  • ls -l @ не отображает никакой дополнительной информации для общих папок
  • Предоставляет общий доступ к папке с необычным именем и ищет на жестком диске имя папки, включая двоичные файлы, чтобы проверить, есть ли эта информациясохраняется где-то.Предположительно, он каким-то образом сохраняется, потому что папка становится общей после перезагрузки, но я нигде не могу найти ни одной записи с именем папки.
  • Сервисы OpenDirectory, похоже, содержат много ссылок на SMB в заголовках, но я не могусм. способ использования OpenDirectory для получения списка общих папок с локального компьютера.
  • Совместное использование корневой папки, чтобы перезапись была тривиальной.Это работает, но довольно нежелательно предоставлять общий доступ к корневой папке.
  • Возможно, есть лучший способ сделать доступ, который позволит избежать необходимости иметь и запрашивать общие ресурсы SMB ...?
...