![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить унифицированное имя файла?
тимохов © (2008-04-14 19:02:00)Здравствуйте.
СИТУАЦИЯ
Допустим, есть 2 полных пути к файлам "E:\abc.pas" и "\\mainserver\dev\abc.pas", которые указывают на один и тот же файл (здесь диск E: подключен к ресурсу "\\mainserver\dev").
ЗАДАЧА
Я хочу, имея 2 строки, которые представляют полные имена файлов, иметь возможность определить, указывают ли они на один и тот же файл или нет, вне зависимостиот того, какой формат представления имени файла используется - UNC или с буквой диска.
ВОПРОС
Можно ли как-то выполнить мою задачу легко и красиво?
Заранее спасибо.
ЗЫ. В принципе я умею с помощью WNetOpenEnum получать ассоциативный массив: <имя диска> - <удаленный путь>. Потом по идее могу попытаться преобразовать полные имена файлов к единому формату. Вопрос в том, если ли что-то готовое в WinAPI на этот счет?
Игорь Шевченко (2008-04-18 00:08:00) [1]
> чей SID не знаю, ибо не знаю как это проверять.
LookupAccountSid если из программы, у Руссиновича программка была опять же.
Тимохов (2008-04-17 02:47:00) [2]чей SID не знаю, ибо не знаю как это проверять.
вообще тема осталась для меня не до конца понятной.
переложу аднака это на плечи админа, настраивающего продукт: а нечего сетевые диски использовать для хранения данных сервиса :)
Игорь Шевченко (2008-04-15 22:39:00) [3]
> 1. Это не HKEY_USERS\.DEFAULT, а HKEY_USERS\S-1-5-21-2052111302-
> 1060284298-1417001333-1113\Network
А это чей SID ?
тимохов (2008-04-15 17:49:00) [4]
> а ты посмотри, что написано в реестре на предмет 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 17:45:00) [5]
> Он только в SCM есть.
его и там нету :)
NT AUTHORITY\SYSTEM - он так называется. LocalSystem - это алиас.
> Какие-то МОИ сетевые диски сервис видит, какие-то - не видит.
>
> Какая причинно следственная связь, понять не могу.
а ты посмотри, что написано в реестре на предмет HKEY_USERS\.DEFAULT - System оттуда берет информацию
тимохов (2008-04-15 17:42:00) [6]
> Игорь Шевченко © (15.04.08 17:39) [18]
> > NT AUTHORITY\SYSTEM
> system же, а не LocalSystem
Ну и что? У меня все сервисы так запущены. LocalSystem нет такого эккаунта. Он только в SCM есть.
Вывод то какой? :)
Игорь Шевченко (2008-04-15 17:39:00) [7]
> NT AUTHORITY\SYSTEM
system же, а не LocalSystem
тимохов (2008-04-15 17:19:00) [8]
> Anatoly Podgoretsky © (15.04.08 16:57) [16]
> > тимохов (15.04.2008 16:49:15) [15]
>
> Так ты запустил диспетчер или нет, если запустил то сообщи
> оттуда информацию.
Я не очень понимаю как поможет дисп. задач - он у меня не показывает эккаунт, под которым запущено. Поэтому я посмотрел в ProcessExplorer. Он показывает, что user: NT AUTHORITY\SYSTEM.
Вообще не могу ничего понять :)
Какие-то МОИ сетевые диски сервис видит, какие-то - не видит.
Какая причинно следственная связь, понять не могу.
Поговорив с нашим админом я выяснил, что сервис видит те диски, которые автоматически прописываются всем в login-скрипте. Тогда я понять не могу - разве LocalSystem заходит в сеть? Разве для него выполняется login-скрипт?
Путаница какая-то...
Anatoly Podgoretsky (2008-04-15 16:57:00) [9]> тимохов (15.04.2008 16:49:15) [15]
Так ты запустил диспетчер или нет, если запустил то сообщи оттуда информацию.
тимохов (2008-04-15 16:49:00) [10]
> Anatoly Podgoretsky © (15.04.08 16:42) [13]
> > 3. Сервис запускается из под LocalSystem.
> Запусти диспетчер задач.
Что ты этим хочешь сказать? Ну что как клещами нужно вытягивать. Я должен о чем-то догадаться? :) Ну да по SYSTEM он работает, т.к. LocalSystem это специальный "predefined local account used by the service control manager..."
Вопрос все же интересный - как сервис "видит" буквы дисков на сетевые ресурсы?
тимохов (2008-04-15 16:43:00) [11]
> 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
Anatoly Podgoretsky (2008-04-15 16:42:00) [12]
> 3. Сервис запускается из под LocalSystem.
Запусти диспетчер задач.
Anatoly Podgoretsky (2008-04-15 16:41:00) [13]> тимохов (15.04.2008 16:34:10) [10]
Думаю в справке рядовая опечатка.
тимохов (2008-04-15 16:40:00) [14]Вообще как такое может быть, что мой сервис-таки видит подмапиный диск и может на него писать?
Т.е. R:соответствует \\soft2k\exchange. Сервис пишет на R:и все работает?
Откуда в LocalSystem берется информация о \\soft2k\exchange?
Я так понял, что сервис обращается к HKEY_USERS, где в HKEY_USERS\S-1-5-21-2052111302-1060284298-1417001333-1113\Network
Так что-ли?
тимохов (2008-04-15 16:34:00) [15]
> 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...
Anatoly Podgoretsky (2008-04-15 16:32:00) [16]> тимохов (15.04.2008 16:16:06) [6]
Кроме того нет такой учетной записи, есть System, Local Servce, Network Service
У меня из под учетной записи System
Anatoly Podgoretsky (2008-04-15 16:30:00) [17]> тимохов (15.04.2008 16:16:06) [6]
MSSQL не работает по сети, по сети работают клиенты/агенты.
Кроме того есть имперсонация.
LocalSystem
тимохов (2008-04-15 16:18:00) [18]Ну вообще понятно почему не работает. Никто же под localsystem не делал
net use r: \\server\resource
потому к r: ничего и не подмепино.
тимохов (2008-04-15 16:16:00) [19]
> Leonid Troyanovsky © (15.04.08 15:56) [5]
> GetLastError, WNetGetLastError
Функция GetLastError говорит ERROR_NOT_CONNECTED
> Local System не расчитан на работу с сетью, см. Network
> Service
Эээ, это как?
А как же все серверные приложения? Например, MSSQL - они же из под LocalSystem работают и по сети работают?
Или я что-то не так понимаю?
Leonid Troyanovsky (2008-04-15 15:56:00) [20]
> тимохов (15.04.08 15:16) [4]
> ВОПРОС
> В чем может быть причина?
GetLastError, WNetGetLastError
> 3. Сервис запускается из под LocalSystem.
Local System не расчитан на работу с сетью, см. Network Service
--
Regards, LVT.