Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Вниз

Префикс ?? в файловых путях   Найти похожие ветки 

 
Riply ©   (2007-10-24 14:44) [0]

Здравствуйте !
Объясните, пожалуйста, какую смысловую нагрузку несет этот префикс ?
Зачем его надо добавлять к путям для некоторых функций ?
Некузяво спросила, но как иначе не знаю.


 
Reindeer Moss Eater ©   (2007-10-24 14:46) [1]

Все наоборот.
есть приложения не понимающие UNC имен и требующие чтобы имя файла начиналось с имени диска.


 
Riply ©   (2007-10-24 14:51) [2]

> [1] Reindeer Moss Eater ©   (24.10.07 14:46)
> Все наоборот.
> есть приложения не понимающие UNC имен и требующие чтобы имя файла начиналось с имени диска.

Может быть. Но есть и такие, что подавай им \??\ и все тут.
Иначе отказываются работать. Тунеядцы какие-то :)
Вот мне и интересно, что они с ним внутри себя делают ?


 
Ins ©   (2007-10-24 14:54) [3]


> Вот мне и интересно, что они с ним внутри себя делают ?

Разве это не символьная ссылка? Т.е. внутри \??\C: преобразуется в \Device\HarddiskVolume1 - настоящий путь в пространстве имен объектов


 
umbra ©   (2007-10-24 14:55) [4]


> подавай им \??\ и все тут

это может быть устройство, а не файл. Точнее, это может быть точка входа для общения с каким-нибудь драйвером


 
Ins ©   (2007-10-24 14:57) [5]

Хотя нет, вроде не ссылка, а реальная директория, которая уже действительно содержит символьные ссылки.


 
Ins ©   (2007-10-24 14:58) [6]

Вообще - вот утилита вам в помощь:
http://www.microsoft.com/technet/sysinternals/SystemInformation/WinObj.mspx


 
Riply ©   (2007-10-24 15:10) [7]

Еще я в какой-то статье(не могу ее найти) видела примерно следующее:
там была функция, которая могла принимать на входе путь как с \??\ так и без него.
И автор говорил, что "как опытные люди, мы сами будем добавлять \??\".
Тогда меня это не заинтересовало. А сейчас хочу знать "а зачем" ? Что это меняет ?


 
Ins ©   (2007-10-24 15:16) [8]


> Riply ©   (24.10.07 15:10) [7]

Возможно некоторые функции и так знают, что если не указано иного, то нужно искать объект в DosDevices (DosDevices - это как раз символьная ссылка на ??\). Другим же это нужно явно указать.
Почитайте про пространство имен объектов, у меня сейчас к сожелению под рукой нет ничего, так что конкретно сказать не могу.


 
Leonid Troyanovsky ©   (2007-10-24 15:24) [9]


> Riply ©   (24.10.07 15:10) [7]

> Тогда меня это не заинтересовало. А сейчас хочу знать "а
> зачем" ? Что это меняет ?

http://msdn2.microsoft.com/en-us/library/aa365247.aspx

--
Regards, LVT.


 
Riply ©   (2007-10-24 15:45) [10]

> [9] Leonid Troyanovsky ©   (24.10.07 15:24)
> http://msdn2.microsoft.com/en-us/library/aa365247.aspx

Спасибо. Т.е. \??\, кроме всего прочего, еще и сообщает функции,
что мы с путем особо не выкрутасничали и его можно использовать
"as is" почти без преобразований ?


 
Leonid Troyanovsky ©   (2007-10-24 16:17) [11]


> Riply ©   (24.10.07 15:45) [10]

> Спасибо. Т.е. \??\, кроме всего прочего, еще и сообщает

Я только что заметил, что не \\?\, а \??\.
А что на самом деле имелось ввиду?

--
Regards, LVT.


 
Игорь Шевченко ©   (2007-10-24 16:28) [12]

Наверное это легко проверить, вызвав RtlDosPathNameToNtPathName с обоими вариантами (с префиксом и без него)


 
Ins ©   (2007-10-24 16:39) [13]


> Я только что заметил, что не \\?\, а \??\.

Префикс \\?\ насколько мне известно указывается для того, чтобы преодолеть лимит MAX_PATH, а \??\ имеет совсем другой смысл. Это явное задание пути к объекту-устройство, чей драйвер будет использован в операциях ввода-вывода.


 
Игорь Шевченко ©   (2007-10-24 16:49) [14]

Ins ©   (24.10.07 16:39) [13]


> \??\ имеет совсем другой смысл. Это явное задание пути к
> объекту-устройство, чей драйвер будет использован в операциях
> ввода-вывода.


Это вообще-то название бывшего каталога объектов DosDevices. То есть, все, что доступно через \??\ (с включенным терминальным доступом через \GLOBAL??\ доступно и через обычные вызовы функций.


 
Ins ©   (2007-10-24 16:55) [15]


> Это вообще-то название бывшего каталога объектов DosDevices.
>  То есть, все, что доступно через \??\ (с включенным терминальным
> доступом через \GLOBAL??\ доступно и через обычные вызовы
> функций.

Ну да, я как раз на протяжении предыдущих постов [3],[5],[6],[8] пытался вспомнить что там к чему и связать это все воедино. Глубоко с этим дела не имел, спасибо за разъяснение.


 
Игорь Шевченко ©   (2007-10-24 17:32) [16]

Ins ©   (24.10.07 16:55) [15]

Я к чему - когда мне надо явно было открыть файл, которого при всем желании нету в каталоге объектов \??, использовал исключительно NtCreateFile, которая воспринимает истинные имена объектов.
Собственно, пример этого открытия - в приложении к статье
http://www.delphimaster.ru/articles/named_pipes/index.html


 
Ins ©   (2007-10-24 17:54) [17]


> которого при всем желании нету в каталоге объектов \??

А это каких? Как я понял \Device\MailSlot и \Device\NamedPipe? Так они есть. Точнее ссылки на них. MAILSLOT и PIPE соответственно.


 
Игорь Шевченко ©   (2007-10-24 18:00) [18]


> А это каких? Как я понял \Device\MailSlot и \Device\NamedPipe?
>  Так они есть. Точнее ссылки на них. MAILSLOT и PIPE соответственно.
>


А может, где-то не было ? Оно ж давно писалось


 
Ins ©   (2007-10-24 19:02) [19]

Ну вот, добрался до дома, до Руссиновича, Delphi, MSDN, WinObj и подальше от злобного взгляда начальства :) Теперь можно и пообсуждать.

> А может, где-то не было ? Оно ж давно писалось

Даже если бы не было, имхо, можно было бы воспользоваться таким видом имени: "\\.\pipe\..." Оно было бы оттранслировано в настоящее. Правда, у Руссиновича сказано, что \\.\ транслируется в тот самый \??\, в котором символьная ссылка на объект-устройство создается при создании того самого объекта-устройства. Так что видимо было. Рискну предположить, что вы не нашли его потому что искали по имени NamedPipe, по крайней мере я именно из-за этого нашел не сразу.

А вообще спасибо что внесли некоторую ясность, не вредно было послушать, заглянуть в книги и исходники. Есть подозрение, что в ближайшем будущем мне может это понадобится.


 
Ins ©   (2007-10-25 00:31) [20]


> Игорь Шевченко ©

В общем, возможно вы будете смеяться, но этот код похоже что работает :)
procedure PipeList(List: TStrings);
var
 SearchRec: TSearchRec;
begin
 List.Clear;
 if FindFirst("\\.\pipe\*",faAnyFile,SearchRec) = 0 then begin
   try
     repeat
       List.Add(SearchRec.Name);
     until FindNext(SearchRec) <> 0;
   finally
     FindClose(SearchRec);
   end;
 end;
end;


 
Riply ©   (2007-10-25 07:13) [21]

> [12] Игорь Шевченко © (24.10.07 16:28)
> Наверное это легко проверить, вызвав RtlDosPathNameToNtPathName с обоими
> вариантами (с префиксом и без него)

Попробовала и совсем запуталась.
Берем путь "E:\TestDir", смотрим его "тип"
(RtlDetermineDosPathNameType_U), получаем - RtlPathTypeDriveAbsolute.
RtlDosPathNameToNtPathName преобразует его в "\??\E:\TestDir" и тип становиться RtlPathTypeRooted.
Вроде все нормально, но если еще раз вызвать RtlDosPathNameToNtPathName с полученным значением,
то она выдаст "\??\E:\??\E:\TestDir".
Какая то "неправильная" функция.
Может я с ней не умею работать ?
Поясните, пожалуйста, с чем едят ее последние два параметра ?

И раз уж такое дело, еще вопрос:
По Rtl функции работающей со строками, трудно интутивно понять,
надо ли после ее использования "освобождать память" или нет.
Я для этого либо лезу в ReactOS, либо варварски пробую освободить,
смотрю есть ли исключение и делаю выводы :).
Может есть другие способы определения необходимости освобождать память
(кроме как среди ее параметров есть один определяющий выделять память или нет)?.
Как можно контролировать подобные "утечки" ?
ReportMemoryLeaksOnShutDown - не помошник, что и не удивительно :)  

> [20] Ins © (25.10.07 00:31)
> В общем, возможно вы будете смеяться, но этот код похоже что работает :)
А почему "смеяться" ? Я так давно Pipe`ы перебираю. Это не правильно ?

> [19] Ins © (24.10.07 19:02)
> Ну вот, добрался до дома, до Руссиновича, Delphi, MSDN, WinObj и подальше от злобного взгляда начальства :)
> Теперь можно и пообсуждать.

:) А вот некоторым (не будем тыкать пальцем ) этого удовольствия не понять,
  ибо они сами начальство и всегда могут заниматься тем, что им интересно :)


 
Игорь Шевченко ©   (2007-10-25 09:51) [22]

Ins ©   (24.10.07 19:02) [19]


> Рискну предположить, что вы не нашли его потому что искали
> по имени NamedPipe, по крайней мере я именно из-за этого
> нашел не сразу


Я могу открыть страшную тайну - я даже не искал по имени, я посмотрел, как сделано у Руссиновича - pipelist с исходниками был :)


 
Ins ©   (2007-10-25 10:39) [23]


> По Rtl функции работающей со строками, трудно интутивно
> понять,
> надо ли после ее использования "освобождать память" или
> нет.

Если не ошибаюсь, Rtl-функции работают в user-mode, мне когда-то тоже нужно было убедиться, что память действительно выделяется, для этого поставил Break Point, нажал Ctrl+Alt+C, прогнал по строкам пока не наткнулся на вызов RtlAllocateHeap



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.043 c
2-1193582414
AlexanderMS
2007-10-28 17:40
2007.11.18
Что это такое - "the instance handle of the application"?


2-1193295581
Странник81
2007-10-25 10:59
2007.11.18
Можно ли..


2-1193041648
alll_23
2007-10-22 12:27
2007.11.18
TTreeView


15-1192008332
terc
2007-10-10 13:25
2007.11.18
Пожалуйста нуна помощ по HTML


15-1191913519
Ega23
2007-10-09 11:05
2007.11.18
В чём прикол class function?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский