为什么我不能从命令行从 C:\SysWOW64 复制 DLL?
Why can't I copy a DLL from C:\SysWOW64 from the command line?
I know what I'm doing is weird, please don't worry about that. What is happening, however, is absolutely insane.
如果我尝试在 Windows 7 64 位上使用 copy
从命令行从 C:\SysWOW32\
复制 DLL 文件,实际上我最终得到的文件是 C:\System32\
。为什么会这样?
OK - dumpbin 能够区分 DLL 文件
C:\Users\user\Desktop>dumpbin /headers C:\Windows\System32\opengl32.dll | grep machine
8664 machine (x64)
C:\Users\user\Desktop>dumpbin /headers C:\Windows\SysWOW64\opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
不正常 - 其他命令,如 md5sum(来自 GOW)得到错误的字节!
C:\Users\user\Desktop>md5sum C:\Windows\system32\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\system32\opengl32.dll
C:\Users\user\Desktop>md5sum C:\Windows\SysWow64\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\SysWow64\opengl32.dll
不正常 - 使用命令行复制 64 位 DLL
C:\Users\user\Desktop>copy C:\Windows\System32\opengl32.dll .
1 file(s) copied.
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
错了!为什么32位DLL被复制了??
确定 - 使用命令行复制 32 位 DLL
C:\Users\user\Desktop>copy C:\Windows\SysWOW64\opengl32.dll .
Overwrite .\opengl32.dll? (Yes/No/All): yes
1 file(s) copied.
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum C:\Windows\System32\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\System32\opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
确定 - 使用资源管理器复制 64 位 DLL
<control-drag System32\opengl32.dll to desktop>
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:41 PM 1,039,872 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
585fed4cdb8034b8b58aeb8008255817 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
8664 machine (x64)
确定 - 使用资源管理器复制 32 位 DLL
<control-drag SysWow64\opengl32.dll to desktop>
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
谁能解释一下这里发生了什么?
您看到的行为是由 SysWOW64 File System Redirection
引起的
md5sum.exe
是一个 32 位二进制文件,所以当它请求 C:\Windows\System32\opengl32.dll
时,文件系统 returns C:\Windows\SysWOW64\opengl32.dll
.
同样,如果你启动一个32位提示符(C:\Windows\SysWOW64\cmd.exe
),执行一个copy
操作并输入参数C:\Windows\System32\opengl32.dll
,C:\Windows\SysWOW64\opengl32.dll
被复制
I know what I'm doing is weird, please don't worry about that. What is happening, however, is absolutely insane.
如果我尝试在 Windows 7 64 位上使用 copy
从命令行从 C:\SysWOW32\
复制 DLL 文件,实际上我最终得到的文件是 C:\System32\
。为什么会这样?
OK - dumpbin 能够区分 DLL 文件
C:\Users\user\Desktop>dumpbin /headers C:\Windows\System32\opengl32.dll | grep machine
8664 machine (x64)
C:\Users\user\Desktop>dumpbin /headers C:\Windows\SysWOW64\opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
不正常 - 其他命令,如 md5sum(来自 GOW)得到错误的字节!
C:\Users\user\Desktop>md5sum C:\Windows\system32\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\system32\opengl32.dll
C:\Users\user\Desktop>md5sum C:\Windows\SysWow64\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\SysWow64\opengl32.dll
不正常 - 使用命令行复制 64 位 DLL
C:\Users\user\Desktop>copy C:\Windows\System32\opengl32.dll .
1 file(s) copied.
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
错了!为什么32位DLL被复制了??
确定 - 使用命令行复制 32 位 DLL
C:\Users\user\Desktop>copy C:\Windows\SysWOW64\opengl32.dll .
Overwrite .\opengl32.dll? (Yes/No/All): yes
1 file(s) copied.
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum C:\Windows\System32\opengl32.dll
\d1bbe227367ed791d5fcf08e132d2956 *C:\Windows\System32\opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
确定 - 使用资源管理器复制 64 位 DLL
<control-drag System32\opengl32.dll to desktop>
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:41 PM 1,039,872 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
585fed4cdb8034b8b58aeb8008255817 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
8664 machine (x64)
确定 - 使用资源管理器复制 32 位 DLL
<control-drag SysWow64\opengl32.dll to desktop>
C:\Users\user\Desktop>dir opengl32.dll
07/13/2009 06:16 PM 791,552 opengl32.dll
C:\Users\user\Desktop>md5sum opengl32.dll
d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll
C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine
14C machine (x86)
32 bit word machine
谁能解释一下这里发生了什么?
您看到的行为是由 SysWOW64 File System Redirection
引起的md5sum.exe
是一个 32 位二进制文件,所以当它请求 C:\Windows\System32\opengl32.dll
时,文件系统 returns C:\Windows\SysWOW64\opengl32.dll
.
同样,如果你启动一个32位提示符(C:\Windows\SysWOW64\cmd.exe
),执行一个copy
操作并输入参数C:\Windows\System32\opengl32.dll
,C:\Windows\SysWOW64\opengl32.dll
被复制