[Python-Dev] Python 2.5.1

Alexey Borzenkov snaury at gmail.com
Tue May 1 15:21:17 CEST 2007


On 5/1/07, "Martin v. Löwis" <martin at v.loewis.de> wrote:
> That code only tests it for pagefile.sys. My question was about open
> handles in general. Both Calvin Spealman and I found that you cannot
> reproduce the problem when you, in Python 2.5.0, open a file, and then
> try to os.stat() it - even though, in Python 2.5.0, os.stat() will
> perform GetFileAttributesEx. So even though we opened the file with
> not passing any sharing flags, we could still do GetFileAttributesEx
> on it.
>
> I now studied the CRT sources, and it seems that if you use a regular
> open() call, the CRT will pass FILE_SHARE_READ | FILE_SHARE_WRITE to
> CreateFile. You would have to use _sopen in the CRT to create any
> kind of sharing conflict, and that isn't exposed in Python.

Wow, I'm very sorry, I didn't realize how much special pagefile.sys
and hiberfil.sys are. As it turns out, even if you create a file with
no sharing allowed, you can still open it with backup semantics in
other processes, and thus can use GetFileAttributesEx, GetFileTime,
etc. The file pagefile.sys seems almost magical then, I don't
understand how it's opened to behave like that. The difference is also
immediately visible if you try to open Properties of pagefile.sys, you
won't even see Security tab there (even when I create file
something.txt and then remove all ACLs, including SYSTEM, I can't
access the file, but I can see Security tab and can grant myself
permissions back), it looks like all kinds of opening that file are
denied. Maybe this is a special security feature, so that no process
could access swapped pages (otherwise it could be possible with backup
semantics). Thus you can't access the file itself, you can only access
containing directory.

> So I guess we need continue using pagefile.sys as a test case.

Seems to be true, it's just maybe it shouldn't be hardcoded to C:\
There's REG_MULTI_SZ PagingFiles in
"HKLM\System\CurrentControlSet\Control\Session Manager\Memory
Management", btw. The format seems to be "filename minmbsize
maxmbsize" for every line.

Best regards,
Alexey.


More information about the Python-Dev mailing list