[python-win32] Seven 64bits and system32/syswow64 paths

Tim Roberts timr at probo.com
Fri Mar 2 18:34:12 CET 2012


le dahut wrote:
> Using explorer I've found "nbtstat.exe" in C:\Windows\System32.
>
> In a MSDOS prompt :
>    dir C:\Windows\System32\nbtstat.exe
> finds the file.
>
> In a python prompt :
>    os.system('dir C:\\Windows\\System32\\nbtstat.exe')
> returns "File not found".
>
> It seems that :
> * in MSDOS prompt C:\Ẁindows\System32  and C:\Ẁindows\SysWOW64 are two 
> separate dirs with different content
> * in a python prompt C:\Ẁindows\System32 = C:\Ẁindows\SysWOW64 (same 
> content)

And you are exactly right.

 
> Any idea ?

This is a very confusing point, so even though it's not directly
Python-related, I think it's still valuable to discuss it again.

As you discovered, Windows is helping you.  For reasons that have never
been adequately explained to me (and believe me, I have asked people who
ought to know), on a 64-bit system, all of the 64-bit commands and DLLs
live in \Windows\System32.  All of the 32-bit commands and DLLs live in
\Windows\SysWOW64.  A 64-bit process gets to see both of those
directories as they really are.

But for a 32-bit process, the operating system "helpfully" rewrites your
paths.  When you refer to \Windows\System32, the system helpfully
rewrites that reference to \Windows\SysWOW64.  Microsoft calls it file
system redirection".  I call it "file system stupidity".

Most of the time, that's OK.  Most of the important commands are present
in both directories.  A few (like nbtstat) are not, and that's a problem.

There are two solutions.  One is to use 64-bit Python, which you have
said is a problem for you.  The other is to use an API with the
tongue-twisting name Wow64DisableWow64FsRedirection.  Here is my script:

    import ctypes
    k32 = ctypes.windll.kernel32
    wow64 = ctypes.c_long( 0 )
    k32.Wow64DisableWow64FsRedirection( ctypes.byref(wow64) )
    # ... do stuff with real files ...
    k32.Wow64RevertWow64FsRedirection( wow64 )

-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the python-win32 mailing list