Подключение буквы подключенного диска в службе Windows

Я пишу службу Windows (Delphi XE2), которая вызывает функции из сторонней COM библиотеки. Ядро библиотеки COM довольно старое и требует, чтобы буква диска была сопоставлена ​​с расположением его файлов данных. Совершенно не работает с UNC путями. В моей службе я подключаю букву диска, когда служба запускается, чтобы убедиться, что она доступна. Я использую вызов WNetAddConnection2 API и проверяю возвращаемое значение. Диск подключается успешно, если буква диска уже не используется (ERROR_ALREADY_ASSIGNED), но в любом случае функции COM работают нормально. Проблемы, которые у меня возникают, возникают при остановке службы. Если я отключу диск, когда служба остановится (WNetCancelConnection2) и другие приложения / службы на сервере будут использовать букву диска, это повлияет на них и потеряет соединение. Однако, если я не отключу диск, когда служба остановится, диск будет «потерян» и недоступен для подключения другими службами.

Я уверен, что все это связано с тем, как сопоставления дисков «принадлежат» сеансу / сервису, который их создает, но я не уверен, какое решение является правильным. В настоящее время я запускаю службу в разделе "Локальная система". Я знаю, что Microsoft всегда рекомендовала, чтобы службы не использовали подключенные диски, но у меня просто нет выбора. Кто-нибудь сталкивался с этой проблемой раньше и есть какие-то рекомендации?


person Jonathan Wareham    schedule 23.01.2013    source источник


Ответы (3)


В настоящее время я запускаю службу в разделе "Локальная система"

Попробуйте другую учетную запись пользователя.

По соображениям безопасности в Windows Local System остается Local - IOW запрещен доступ к сети.

person Arioch 'The    schedule 23.01.2013

Пытаться:

  1. Выделите учетную запись пользователя для подключения *;
  2. Передайте этого пользователя в WNetAddConnection2;

Дополнительную информацию можно найти здесь.

* В рабочей группе эта учетная запись должна быть отражена на конечном компьютере + модель безопасности на целевом ПК должна быть установлена ​​на" Classic "с помощью GPEdit

person iPath ツ    schedule 23.01.2013

Буквы драйверов назначаются для каждого пользователя. Назначение букв для дисков вашей службы может повлиять на другие приложения / службы только в том случае, если все они работают в одной учетной записи. Приложения не запускаются в учетной записи LocalSystem, если они не запускаются службами, работающими как LocalSystem (но тогда они не будут видны пользователю). Поэтому, если вы хотите, чтобы присвоенные вашей службе буквы дисков были изолированы только для вашей службы, создайте специальную учетную запись пользователя для своей службы, в которой она будет работать. Это также дает вам возможность настраивать разрешения этой учетной записи, чтобы у нее был доступ к сети. без необходимости полного доступа к системе, если он на самом деле не нужен.

person Remy Lebeau    schedule 23.01.2013