`
jaychang
  • 浏览: 730325 次
  • 性别: 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对于一个管理员来说,了解底层系统结构非常重要
分享到:
评论

相关推荐

    Windows-System32-SysWOW64-DLLs.7z

    Windows-System32-SysWOW64-DLLs.7z

    dll文件32位64位检测工具以及Windows文件夹SysWow64的坑.docx

    System32主要存放64位系统文件和64位应用程序所需的dll,而SysWow64则是为了运行32位应用程序而设计的,它包含32位版本的系统dll。然而,由于这两个文件夹名称的相似性,很多用户可能会混淆,误将32位dll放入System...

    什么是SysWow64文件夹.docx

    SysWow64 文件夹中存放的是 32 位的系统文件,而 System32 文件夹中存放的是 64 位的系统文件。 SysWow64 文件夹的出现是为了解决 64 位 Windows 操作系统下运行 32 位应用程序的问题。 SysWow64 文件夹是 Windows...

    dll文件32位64位检测工具以及Windows文件夹SysWow64的坑.pdf

    在64位Windows系统中,`System32`目录实际上存储的是64位dll文件,而`SysWow64`目录则存放32位dll文件。 当一个32位程序运行时,试图加载`System32`下的dll时,系统会自动将请求重定向到`SysWow64`目录。相反,64位...

    win10内置flash修复文件SysWOW64下的

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

    Delphi32位程序拷贝system32中文件

    - Windows系统中的`system32`目录通常位于`C:\Windows\System32`,对于32位程序,可能会映射到`C:\Windows\SysWOW64`(因为 WoW64,即Windows on Windows 64位子系统)。确保程序正确地定位到这个目录。 3. **权限...

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

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

    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路径 在Visual Basic (VB)编程中,经常需要访问系统的特定目录,例如系统目录(System)和Windows目录。这些目录对于执行某些操作系统级别的任务至关重要,比如加载动态链接库(DLLs)、...

    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...

    64位系统提示regsvr32.exe不兼容怎么办?.docx

    按照32位系统的命名规则,64位系统应该有一个叫做System64的文件夹来存放64位DLL文件,但是实际上却没有System64这个文件夹,而是一个叫做SysWOW64的文件夹。 SysWOW64文件夹不是用来存放64位文件的,而是用来存放32...

    服务器安全设置代码

    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 开始注册 ...

    20201202_downlevel.zip

    Windows的更高版本具有确实存在的DLL c:\windows\syswow64\downlevel 要使某些Windows XP +应用程序正常工作: 这些Windows 10 DLL必须复制到例如 c:\WINDOWS\system32\downlevel 存储它们时需要使用此路径,需要...

    Delphi:API获取全部windows系统文件夹路径

    通过API获取全部windows系统文件夹路径,如windows、system32、sysWOW64、Program Files、Program Files (x86)、文档文档、桌面等,包含2种获取方式,方式一官方已不建议,方式二采用KnowFolder新文件系统API,支持...

    获得windows和system路径程序(VB6.0源代码编写)

    为了兼容32位应用程序,Windows引入了一个名为`SysWOW64`的目录,它位于`C:\Windows\SysWOW64`,这里存放的是32位版本的系统文件。 在VB6.0中获取这些路径,我们可以利用内置的API函数。例如,`GetSystemDirectory`...

    VC++2015运行环境库64位

    1. 安装必要的动态链接库到%SystemRoot%\System32目录,确保系统能够找到这些库。 2. 更新注册表,使系统知道这些库的存在和位置。 3. 可能会包含安全更新和性能优化,以确保库的稳定性和安全性。 4. 对于多线程应用...

    delphi获得WINDOWS版本信息及32位或64位

    function IsSystem64Bit: Boolean; var IsWow64: BOOL; begin Result := False; if IsWow64Process GetCurrentProcess, IsWow64 then begin Result := IsWow64 <> 0; end; end; ``` 除了直接调用API外,...

Global site tag (gtag.js) - Google Analytics