Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить унифицированное имя файла?


Страницы:   1 2

тимохов ©   (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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо