Re: FileMapping (q)
- From
- Alex Fedotov ()
- To
- Yury Haron
- Date
- 2002-04-22T03:38:42Z
- Area
- SU.WINDOWS.NT.PROG
From: "Alex Fedotov" <me@alexfedotov.com>
Yury Haron wrote:
> AF> Мое скpомное мнение: попpобyй, как любая из веpсий ведет себя на
> AF> самом деле (я ставлю на то, что она сделает все запpошенное). Также
> AF> бyдет вести себя и любая дpyгая.
>
> И из чего это следyет?
Из моего понимания работы системы, ты же это просил?
> Так что ваpианта ответа pовно два - кyсок официальной _докyментации_
> (не "следyет из", а пpямо сказано и, кpайне желательно, не в msdn library
> :),
Есть более официальная документация, чем MSDN library?
> или анализ кода. А, посколькy, я занимался ядpом NT'ветки достаточно мало,
> то и спpосил здесь - вдpyг кто-то знает.
Так и я о том же: варианта может быть два: "сказано в MSDN" или "я сказал".
Я вот, например, сказал то, что я сказал (кстати, неправильно). Какими
атрибутами мне надо было обставить свою фразу, чтобы она стала авторитетной
для тебя? Извини, это меня на лирику потянуло, видимо, погода меняется.
По делу: из проведенных мной экспериментов следует, что VirtualProtect с
PAGE_WRITE на read-only memory mapped файл не проходит. PAGE_WRITECOPY -
можно.
Насколько я понял твой первый вопрос, он был про когерентность
представления, и оно-то как раз гарантируется для локальных файлов на NT
всегда, несмотря на то, что MSDN утверждает что:
"Mapped file and a file accessed by means of the input and output (I/O)
functions (ReadFile and WriteFile) are not necessarily coherent".
Это, конечно, скорее всего так для Windows 9x, но в Inside Windows 2000
написано буквально следующее (прошу прощения за длинную англоязычную
цитату):
One important function of a cache manager is to ensure that any process
accessing cached data will get the most recent version of that data. A
problem can arise when one process opens a file (and hence the file is
cached) while another process maps the file into its address space directly
(using the Win32 MapViewOfFile function). This potential problem doesn't
occur under Windows 2000 because both the cache manager and the user
applications that map files into their address spaces use the same memory
management file mapping services. Because the memory manager guarantees that
it has only one representation of each unique mapped file (regardless of the
number of section objects or mapped views), it maps all views of a file
(even if they overlap) to a single set of pages in physical memory, as shown
in Figure 11-1.
То есть, если бы ты смог изменить страницу, принадлежащую файлу, то с
когерентностью бы вопрос не стоял (даже без FlushViewOfFile). Но ты не
можешь, и такой вопрос не стоит :)
Oпять лирика: всякий раз, когда у меня возникает подобный вопрос (напомню:
"Гарантируется ли, что..."), я отвечаю на него "нет" и продолжаю работать
дальше. Вот ты написал, что интересует линейка от 4.0 до XP, а .NET Server
уже не интересует? Я не говорю уже про Longhorn, Blackcomb и иже с ними. По
мне лучше пару лишних дней попотеть, но остаться в ясно документированном
поле (что, признаю, не всегда возможно), чем обнаружить, что программа не
работает с новой версией системы.
-- Alex Fedotov
P.S. Попробуй задать свой вопрос в NTDEV@osr.com, если тебя интересуют
действительно авторитетные мнения на этот счет.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)