[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