![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenFile
R4D][ © (2003-07-07 12:01:00)
Насколько я знаю, большинство OPEN функций используются для межпроцессной связи(пример: OpenMutex, OpenFileMapping etc). Но какой смысл функции OpenFile если в ее параметрах нет hProccess??? То есть в системе могут быть открыты 10 фаилов с одним и тем ж именем, поэтому по имени нельзя однозначно идентифицировать объект ядра. Я хочу спросить openfile имеет смысл только для "своего" процесса?
R4D][ (2003-07-09 18:24:00) [1]
DuplicateHandle - это, конечно, хорошо, но проблемы с OpenFile не решает. Из того, что ты сказал - OpenFile - не ОТКРЫВАЕТ(увеличивает счетчик и возвращает хэндл), а СОЗДАЕТ(создает новый объект ядра, увеличивает у него счетчик и возвращает хэндл) новый объект ядра. Мне не верится :) подтвердите кто-нибудь еще для верности.
Verg (2003-07-09 14:38:00) [2]
> Хорошо, возьмем пример - я открываю фаил(CreateFile), далее
> в своей программе использую OpenFile для "открытия" ранее
> открытого фаила(увеличивую счетчик у старого объекта ядра,
> созданного createfile"ом) - существует ли гарантия того,
Имя файла - это не имя объекта ядра. Поэтому применив OpenFile ты создаешь просто еще один объект ядра - хэндл файла. Поэтому никакого увеличения счетчика у "старого" не будет. Для этого, по-моему, надо применить DuplicateHandle к старому хэндлу. Точно не помню.
R4D][ (2003-07-09 13:28:00) [3]
Хорошо, возьмем пример - я открываю фаил(CreateFile), далее в своей программе использую OpenFile для "открытия" ранее открытого фаила(увеличивую счетчик у старого объекта ядра, созданного createfile"ом) - существует ли гарантия того, что я получу хэндл именно нужного мне фаила. Представим, что приложение "Блокнот" открыло этот же фаил между вызовами createfile и openfile(или до вызова createfile).
MBo (2003-07-08 13:43:00) [4]
Все равно, никакие Open-функции не требуют и не нуждаются ни в дескрипторах, ни в идентификаторах процесса, достаточно имени.
R4D][ (2003-07-08 13:35:00) [5]
Ну на самом деле я это и имел в виду, просто опечатался :)
MBo (2003-07-08 06:12:00) [6]
>hProcess - это индификатор процесса
Нет, ты путаешь ID процесса (уникальный) и его дескриптор, хэндл, который в каждом процессе разный
R4D][ (2003-07-07 18:30:00) [7]
hProcess - это индификатор процесса.
А то, что у OpenFileMapping нет hProcess - это значит, что в системе может быть только один объект ядра FileMapping и идентифицируется он по имени lpName, которое однозначно определяет объект. Загвоздка-то в том, что в системе может быть открыто, например, 10 фаилов с именем "C:\1.txt", поэтому имя фаила однозначно не идентифицирует объект.
Игорь Шевченко (2003-07-07 15:50:00) [8]
У OpenFileMapping тоже нет hProcess - и что ? :) Сдается мне, что ни у одной из Open-функций hProcess нету...
Cobalt (2003-07-07 15:45:00) [9]
>R4D][ (07.07.03 12:01)
В общем случае - Да, только для своего процесса.
Понимаешь ли, тут такая вещь - ведь имя-то у файла на самом деле вместе с путем к нему - то есть, в общем же случае - уникально.
>какой смысл функции OpenFile если в ее параметрах нет hProccess???
вот эту фразу поясни, плиз. что за "hProccess?!!!"
R4D][ (2003-07-07 13:29:00) [10]
А далее указана причина почему - "In particular, the OpenFile function cannot open a named pipe". Но фаилы-то она открывает...
MBo (2003-07-07 12:03:00) [11]
This function is provided for compatibility with 16-bit versions of Windows
Win32-based applications should use the CreateFile function.