Форум: "WinAPI";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизКак получить унифицированное имя файла? Найти похожие ветки
← →
тимохов (2008-04-14 19:02) [0]Здравствуйте.
СИТУАЦИЯ
Допустим, есть 2 полных пути к файлам "E:\abc.pas" и "\\mainserver\dev\abc.pas", которые указывают на один и тот же файл (здесь диск E: подключен к ресурсу "\\mainserver\dev").
ЗАДАЧА
Я хочу, имея 2 строки, которые представляют полные имена файлов, иметь возможность определить, указывают ли они на один и тот же файл или нет, вне зависимости от того, какой формат представления имени файла используется - UNC или с буквой диска.
ВОПРОС
Можно ли как-то выполнить мою задачу легко и красиво?
Заранее спасибо.
ЗЫ. В принципе я умею с помощью WNetOpenEnum получать ассоциативный массив: <имя диска> - <удаленный путь>. Потом по идее могу попытаться преобразовать полные имена файлов к единому формату. Вопрос в том, если ли что-то готовое в WinAPI на этот счет?
← →
Leonid Troyanovsky © (2008-04-14 19:23) [1]
> тимохов (14.04.08 19:02)
> Вопрос в том, если ли что-то готовое в WinAPI на этот счет?
WNetGetUniversalName ?
--
Regards, LVT.
← →
тимохов (2008-04-14 19:55) [2]
> Leonid Troyanovsky © (14.04.08 19:23) [1]
да, видимо, это оно.
спасибо.
← →
тимохов (2008-04-14 20:03) [3]Вот еще какая функция есть в sysutils ExpandUNCFileName.
Она, собсно, и использует указанную фуницию WNetGetUniversalName в конечном итоге.
← →
тимохов (2008-04-15 15:16) [4]Вопрос возник.
СИТУАЦИЯ
Когда я выполняю функцию ExpandUNCFileName из обычного приложения, то все работает - drive-based имя переводится в формат UNC.
Если же запускаю из под сервиса, то как было drive-based имя, так оно и осталось.
ВОПРОС
В чем может быть причина?
ТТХ
1. Win2000.
2. Сервис писан на основе дельфового TService.
3. Сервис запускается из под LocalSystem.
← →
Leonid Troyanovsky © (2008-04-15 15:56) [5]
> тимохов (15.04.08 15:16) [4]
> ВОПРОС
> В чем может быть причина?
GetLastError, WNetGetLastError
> 3. Сервис запускается из под LocalSystem.
Local System не расчитан на работу с сетью, см. Network Service
--
Regards, LVT.
← →
тимохов (2008-04-15 16:16) [6]
> Leonid Troyanovsky © (15.04.08 15:56) [5]
> GetLastError, WNetGetLastError
Функция GetLastError говорит ERROR_NOT_CONNECTED
> Local System не расчитан на работу с сетью, см. Network
> Service
Эээ, это как?
А как же все серверные приложения? Например, MSSQL - они же из под LocalSystem работают и по сети работают?
Или я что-то не так понимаю?
← →
тимохов (2008-04-15 16:18) [7]Ну вообще понятно почему не работает. Никто же под localsystem не делал
net use r: \\server\resource
потому к r: ничего и не подмепино.
← →
Anatoly Podgoretsky © (2008-04-15 16:30) [8]> тимохов (15.04.2008 16:16:06) [6]
MSSQL не работает по сети, по сети работают клиенты/агенты.
Кроме того есть имперсонация.
Local System
← →
Anatoly Podgoretsky © (2008-04-15 16:32) [9]> тимохов (15.04.2008 16:16:06) [6]
Кроме того нет такой учетной записи, есть System, Local Servce, Network Service
У меня из под учетной записи System
← →
тимохов (2008-04-15 16:34) [10]
> Anatoly Podgoretsky © (15.04.08 16:30) [8]
Где вообще написано, что LocalSystem не может работать по сети?
Почему все же нет LocalSystem?
Вот выдержка из MSDN
LocalSystem Account
The LocalSystem account is a predefined local account used by the service control manager...
← →
тимохов (2008-04-15 16:40) [11]Вообще как такое может быть, что мой сервис-таки видит подмапиный диск и может на него писать?
Т.е. R: соответствует \\soft2k\exchange. Сервис пишет на R: и все работает?
Откуда в LocalSystem берется информация о \\soft2k\exchange?
Я так понял, что сервис обращается к HKEY_USERS, где в HKEY_USERS\S-1-5-21-2052111302-1060284298-1417001333-1113\Network
Так что-ли?
← →
Anatoly Podgoretsky © (2008-04-15 16:41) [12]> тимохов (15.04.2008 16:34:10) [10]
Думаю в справке рядовая опечатка.
← →
Anatoly Podgoretsky © (2008-04-15 16:42) [13]
> 3. Сервис запускается из под LocalSystem.
Запусти диспетчер задач.
← →
тимохов (2008-04-15 16:43) [14]
> Anatoly Podgoretsky © (15.04.08 16:41) [12]
> > тимохов (15.04.2008 16:34:10) [10]
>
> Думаю в справке рядовая опечатка.
Вы не издеваетесь, случаем, Анатолий?
http://msdn2.microsoft.com/en-us/library/ms684188(VS.85).aspx
← →
тимохов (2008-04-15 16:49) [15]
> Anatoly Podgoretsky © (15.04.08 16:42) [13]
> > 3. Сервис запускается из под LocalSystem.
> Запусти диспетчер задач.
Что ты этим хочешь сказать? Ну что как клещами нужно вытягивать. Я должен о чем-то догадаться? :) Ну да по SYSTEM он работает, т.к. LocalSystem это специальный "predefined local account used by the service control manager..."
Вопрос все же интересный - как сервис "видит" буквы дисков на сетевые ресурсы?
← →
Anatoly Podgoretsky © (2008-04-15 16:57) [16]> тимохов (15.04.2008 16:49:15) [15]
Так ты запустил диспетчер или нет, если запустил то сообщи оттуда информацию.
← →
тимохов (2008-04-15 17:19) [17]
> Anatoly Podgoretsky © (15.04.08 16:57) [16]
> > тимохов (15.04.2008 16:49:15) [15]
>
> Так ты запустил диспетчер или нет, если запустил то сообщи
> оттуда информацию.
Я не очень понимаю как поможет дисп. задач - он у меня не показывает эккаунт, под которым запущено. Поэтому я посмотрел в ProcessExplorer. Он показывает, что user: NT AUTHORITY\SYSTEM.
Вообще не могу ничего понять :)
Какие-то МОИ сетевые диски сервис видит, какие-то - не видит.
Какая причинно следственная связь, понять не могу.
Поговорив с нашим админом я выяснил, что сервис видит те диски, которые автоматически прописываются всем в login-скрипте. Тогда я понять не могу - разве LocalSystem заходит в сеть? Разве для него выполняется login-скрипт?
Путаница какая-то...
← →
Игорь Шевченко © (2008-04-15 17:39) [18]
> NT AUTHORITY\SYSTEM
system же, а не LocalSystem
← →
тимохов (2008-04-15 17:42) [19]
> Игорь Шевченко © (15.04.08 17:39) [18]
> > NT AUTHORITY\SYSTEM
> system же, а не LocalSystem
Ну и что? У меня все сервисы так запущены. LocalSystem нет такого эккаунта. Он только в SCM есть.
Вывод то какой? :)
← →
Игорь Шевченко © (2008-04-15 17:45) [20]
> Он только в SCM есть.
его и там нету :)
NT AUTHORITY\SYSTEM - он так называется. LocalSystem - это алиас.
> Какие-то МОИ сетевые диски сервис видит, какие-то - не видит.
>
> Какая причинно следственная связь, понять не могу.
а ты посмотри, что написано в реестре на предмет HKEY_USERS\.DEFAULT - System оттуда берет информацию
← →
тимохов (2008-04-15 17:49) [21]
> а ты посмотри, что написано в реестре на предмет HKEY_USERS\.
> DEFAULT - System оттуда берет информацию
Я понял, что здесь как-то замешан HKEY_USERS.
Но:
1. Это не HKEY_USERS\.DEFAULT, а HKEY_USERS\S-1-5-21-2052111302-1060284298-1417001333-1113\Network
2. В списке есть диски: R, N, M, но вот сервис работает только с R, т.к. именно он прописан в login-скрипте.
---------
В общем - пусть сами админы разбираются :) Я в EventLog кидаю все сообщения об ошибках. Небось разберется что к чему :)
← →
Игорь Шевченко © (2008-04-15 22:39) [22]
> 1. Это не HKEY_USERS\.DEFAULT, а HKEY_USERS\S-1-5-21-2052111302-
> 1060284298-1417001333-1113\Network
А это чей SID ?
← →
Тимохов (2008-04-17 02:47) [23]чей SID не знаю, ибо не знаю как это проверять.
вообще тема осталась для меня не до конца понятной.
переложу аднака это на плечи админа, настраивающего продукт: а нечего сетевые диски использовать для хранения данных сервиса :)
← →
Игорь Шевченко © (2008-04-18 00:08) [24]
> чей SID не знаю, ибо не знаю как это проверять.
LookupAccountSid если из программы, у Руссиновича программка была опять же.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.059 c