Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

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

 
тимохов   (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 вся ветка

Текущий архив: 2009.04.19;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
15-1234857582
Анна
2009-02-17 10:59
2009.04.19
Уравнение для 8 класса


1-1211299976
nicestep
2008-05-20 20:12
2009.04.19
Параллельный порт. Асинхронная запись/чтение


2-1235826463
Nazarius
2009-02-28 16:07
2009.04.19
как в memo написать в определенную строчку


3-1219341003
frippy
2008-08-21 21:50
2009.04.19
По умолчанию Рекурсивный запрос к БД - не могу сообразить как


15-1235035785
Kerk
2009-02-19 12:29
2009.04.19
Нижегородцы!