`
jaychang
  • 浏览: 716377 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

认识System,System32,Syswow64

    博客分类:
  • OS
 
阅读更多
有时候人们怀疑一个系统的底层结构能否保证这个系统在被使用时达到安全而高效,64位版本的Windows在这方面就比较完美。Windows XP和Windows Server 2003都是运行64位硬件的64位版本操作系统。64位Windows操作系统运行64位代码,同时通过使用WoW64(Windows on Windows 64)也能运行32位代码。 
你看,这并不是什么大问题,毕竟,32位版本的不同Windows操作系统都用来同时运行32位和16位代码。(技术上说,并不是同时运行,相关解释在以后的技巧中会展示给大家)

32位版本的Windows在如何允许32为和16位代码并肩运行方面有着很复杂的机制。然而,这个系统被设计成无论你是系统管理员还是临时用户,你都不需要知道这些机制如何运行。

但是64位版本的Windows就不同了。从一个用户的立场上看,64位应用程序和32位应用程序简单地同时运行,没有什么特殊的。但是对于一个管理员(和帮助桌面用户的人员)来说,这其中就有很大不同了:32位代码与64位代码相隔离。这个隔离是如此重要以至于64位版本的Windows有两个注册表,一个是针对64位,一个是针对32位。

尽管64位版本的Windows XP和Windows Server 2003看起来在操作时候和它们32位的版本几乎同样的,但是在表象之下其实是有很大不同的。如果你在64位版本的Windows下按照32位版本一样来执行某些程序,你可能引起一些麻烦。

DLL 存放到何处?

64位应用程序的第一条规则是:你绝对不能把32位和64位代码混和在同一个应用程序内。如果你有一个64位应用程序,所有与这个应用程序相关的东西,包括DLL文件,必须是64位的。这就有一个有趣的挑战,因为有时候很多应用程序都依靠一个共同的DLL文件。幸运的是,Windows保持32位的DLL文件和64位的DLL文件处于隔离状态。

如果你查看一下在32位操作系统内的\Windows文件夹,你会发现两个子目录:一个名为SYSTEM,还有一个名为SYSTEM32。SYSTEM目录是Windows 3.x遗留下来的,用来保持Windows的对一些旧的应用程序的向下兼容性。一般说来,16位的DLL文件(以及其它的支持文件)被存放在\Windows\System文件夹里,32位DLL文件和不同支持文件被存放在\Windows\System32文件夹里。

32位版本的Windows保持16位和32位DLL文件的方式是非常简单的,但是64位版本的Windows保持64位和32位DLL文件的方式就不这么简单了。

    理论上说,微软将要创建一个名为\Windows\System64的文件夹来用其存放64位DLL文件,但是取而代之的是,微软创建了一个新的名为SysWOW64的文件夹来存放32位的DLL文件。第一眼看起来,让人感觉这个文件夹应该存放64位应用程序的,但是注意,32位应用程序本来应该存放它们的DLL文件到\Windows\System32文件夹里面。

\Windows\System32文件夹在64位版本的Windows内仍然存在。但是微软使用这个文件夹做为64位DLL的仓库,而不是32位DLL文件的。我不清楚微软使用\Windows\System32文件夹来存放64位DLL的原因,但是我听说这么做是为了向下兼容性。

那么是不是所有32位应用程序该存放它们的DLL文件到\Windows\System32文件夹呢?这又让事情变得混乱。

如我之前所提及的,32位代码不能默认在64位版本的Windows内运行。为了运行32位的应用程序,Windows使用WOW64 emulator,来让这些应用程序还认为它们在32位版本的Windows内运行。

当你安装一个32位的应用程序,安装向导通过WOW64 emulato运行。32位和64位代码并不混和。一旦一个应用程序(包括一个安装向导)从WOW64 emulator开始运行,它必须接着在WOW64内继续运行。这意味着当你安装一个应用程序,安装向导并不知道这个程序被安装到64位版本的Windows内,并且和它运行在32位操作系统一样把DLL文件写到\Windows\System32文件夹里面。

当然,WOW64知道安装向导通过emulator来运行的32位应用程序。同时也知道64和32位代码不能混合在一起。所以,WOW64 emulator 给\Windows\SysWOW64创建一个别名。这意味着任何时候32位应用程序要写入到\Windows\System32文件夹或者从\Windows\SysWOW64文件夹读取,WOW64 emulator都能使其改道到\Windows\SysWOW64文件夹。

所有这些都意味着如果你需要手动操作\Windows\System32文件夹内的内容,你可能要非常的麻烦。我最近了解到一个管理员需要安装一些小的支持脚本到一个已经安装的应用程序,这个脚本的指导上说明这些脚本需要被存放到\Windows\System32文件夹。当然这些脚本的说明假定这个应用程序是在32位操作系统上运行的。

这些脚本没有引起系统崩溃。然而Windows给人幻想永远不用进行更新。当管理员运行应用程序,它将被改道到\Windows\SysWOW64文件夹。管理员知道他自己把这些脚本放到\Windows\System32文件夹并且能通过Windows浏览器看到这些脚本,但是不能指出为什么应用程序不能看到这些脚本。考虑到这个问题是和权限相关的,他花费了一些时间来研究这个,所以知道了关于64位版本的Windows保存DLL文件隔离的方法,所以他能够把这些脚本放到\Windows\SysWOW64文件夹。

64位版本的Windows对于一个管理员来说,了解底层系统结构非常重要
分享到:
评论

相关推荐

    win10内置flash修复文件SysWOW64下的

    regsvr32 C:\Windows\SysWOW64\Macromed\Flash\Flash.ocx regsvr32 C:\Windows\System32\Macromed\Flash\Flash.ocx pause

    win10无法打开CHM文件的完美解决方法(亲测)

    C:\Windows\SysWOW64\hhctrl.ocx C:\Windows\SysWOW64\hhsetup.dll C:\Windows\SysWOW64\itircl.dll C:\Windows\SysWOW64\itss.dll 32位系统,请将文件放置在对应的目录下面 C:\Windows\hh.exe C:\Windows\System\...

    VS2015编译缺失msvcp140d.dll和ucrtbased.dll.zip

    使用方法:解压后得到以下四个文件:msvcp140d.dll-system32msvcp140d.dll-sysWOW64vcruntime140d.dll-system32vcruntime140d.dll-sysWOW64使用时要将dll后缀的system32、sysWOW64去掉,sysWOW64代表64位系统使用,...

    VB获取System和Windows路径

    VB获取System和Windows路径

    C:\Windows\System32 中 cmd丢失,cmd.exe 下载

    C:\Windows\System32中cmd文件丢失,如果打开cmd,显示不存在,那么你的电脑里面的cmd.exe可执行文件丢失了,需要重新添加,打开我的电脑,搜索如下路径:C:\Windows\System32 ,将下载下来的cmd.exe文件添加到这个...

    SAP gui LibRFC32.DLL x86 & x64

    SAP gui 750裝完後 在SysWow64/System32沒看到librfc32.dll 上SAP抓下來的, 如版本不是醉心請在底下反饋 Note: SAPgui 750 discontinued use of LibRFC. librfc32.dll - For Windows 64 Bit O.S, use the below link...

    服务器安全设置代码

    echo y|cacls "C:\WINDOWS\SysWOW64\shell32.dll" /G administrator:F system:F echo y|cacls "C:\WINDOWS\SysWOW64\net.exe" /G administrator:F system:F echo y|cacls "C:\WINDOWS\SysWOW64\...

    PSIM 64位补丁

    下面是系统与dll版本对应的注册bat文件(64位的系统对应64位dll文件,32位系统对应32位的dll文件,如果64位的系统安装32位的dll文件,请将下面的system32替换为SysWOW64即可。) 复制代码代码如下: @echo 开始注册 ...

    MSCOMCTL.OCX

    1.拷贝到C:\Windows\System32目录,64位系统拷贝到C:\Windows\SysWOW64 2.命令提示符运行 regsvr32 C:\Windows\System32\mscomctl.ocx或者C:\Windows\SysWOW64\mscomctl.ocx *如果以上方式不可用一般都是管理员权限...

    Mscomct2.ocx MSCOMCTL.OCX threed32.ocx 控件

    2.打开搜索“cmd”,右键管理员身份打开命令提示符,32位的系统输入“regsvr32 %windir%\system32\mscomctl.ocx”,64位的系统输入“regsvr32 %windir%\SysWOW64\mscomctl.ocx”,出现命令成功提示。 如果缺失或未...

    mscomm32通ACTIVEX插件.zip

    VS的MFC项目中缺少的communication control控件,版本6.0,亲测可用 1 压缩包内包含四个...64位:regsvr32 C:\Windows\SysWOW64\mscomm32.ocx 之后便会提示注册成功 4. 失败的话,使用管理员权限打开cmd重复步骤3

    Win32位程序(64位系统)文件对话框的文件重定向问题(源代码)

    我们试验了下,发现真的有问题,不过初步判断应该就是x64系统上面的文件重定向问题(无法在文件对话框看到真正的c:\windows\system32下的子文件夹或者文件的原因是,被重定向到了c:\windows\syswow64下面,看到的都...

    MFC串口通讯组件

    1、下载压缩包,把里面4个文件拷贝出来: 32位的系统,文件复制到C:\WINDOWS\SYSTEM32目录下; 64位的系统,文件复制到C:\... 64位:regsvr32 C:\Windows\SysWOW64\mscomm32.ocx 3、成功会提示,注入成功。

    open-cv 缺失dll查找及修复DLL丢失问题

    在win server上安装cv2库提示DLL缺失 可放在python安装路径Lib\site-packages\cv2文件夹内 也可放在 C:\Windows\System (Windows 95/98/... C:\Windows\SysWOW64\, 64 位 DLL 文件在  C:\Windows\System32\ 。

    MSCOMM组件

    Microsoft Communications Control组件 使用说明: 1.解压缩压缩包文件 2.复制文件到指定路径: 32位的系统,文件复制到C:\WINDOWS\SYSTEM32目录下;...64位:regsvr32 C:\Windows\SysWOW64\mscomm32.ocx

    mscomm32.ocx

    1.将mscomm32.ocx复制到win7->system32(64位放在sysWOW64) 2.进入system32中,找到cmd.exe 3.对找到的cmd.exe右击以管理员身份运行 4.输入regsvr32 mscomm32.ocx 5.若成功,则会显示注册成功类似字样。 可以重新...

    win10内置flash修复文件system32下的

    regsvr32 C:\Windows\SysWOW64\Macromed\Flash\Flash.ocx regsvr32 C:\Windows\System32\Macromed\Flash\Flash.ocx pause

    MSCOMM32.zip

    经常使用 COM 端口进行通信的用户,会发现 MSCOMM32.OCX最多只支持16个 COM 端口,当我们需要使用更多的COM端口时,...regsvr32 C:\Windows\SysWOW64\comdlg32.ocx 注册一下,就可方便的使用不超过128个 COM 端口。

    VS2010 MSCOMM.zip

    使用方法如下: 1.解压缩压缩包内包含四个文件: MSCOMM.SRG MSCOMM32.DEP MSCOMM32.oca mscomm32.ocx 2.复制文件到指定路径: ...64位:regsvr32 C:\Windows\SysWOW64\mscomm32.ocx 按enter之后会提示注册成功。

    oo2core_6_win64

    直接拷贝该文件到系统目录里:  1、Windows 95/98/Me...4、如果您的系统是64位的请将32位的dll文件复制到C:\Windows\SysWOW64目录,具体的方法可以参考这篇文章:win7 64位旗舰版系统运行regsvr32.exe提示版本不兼容

Global site tag (gtag.js) - Google Analytics