Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1236156934
Андрей (начинающий)
2009-03-04 11:55
2009.04.19
Обработка запроса к БД


2-1236069135
L-e-v-original
2009-03-03 11:32
2009.04.19
Гиперссылка в Static Text


2-1235676633
Pavel
2009-02-26 22:30
2009.04.19
Передача значений из функции


15-1234906202
Юрий
2009-02-18 00:30
2009.04.19
С днем рождения ! 18 февраля 2009 среда


15-1234855526
Andy BitOff
2009-02-17 10:25
2009.04.19
Покритикуйте =)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский