认识System,System32,Syswow64
有时候人们怀疑一个系统的底层结构能否保证这个系统在被使用时达到安全而高效,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对于一个管理员来说,了解底层系统结构非常重要

认识System,System32,Syswow64相关推荐

  1. system system32 syswow64

    System System存储可运行16位代码DLL文件 System32 32位的Windows操作系统存储可运行32位代码的DLL文件 64位的Windows操作系统存储可运行64位代码的DLL文 ...

  2. WOW64 IsWow64Process GetNativeSystemInfoWindows System32 SysWOW64

    最近开发有遇到这方面的一些知识点,在此记录下. 首先,什么是WOW64?在知道这个之前我觉得需要了解一下,C:\\Windows\\System32和C:\\Winodws\\SysWOW64这两个文 ...

  3. “由于找不到msvcr100d.dll...”和“由于找不到msvcp100d.dll...”的解决方法与相关知识

    0. 前言 前阵子把系统搞崩了,被迫重装了系统.配完需要用到的库之后,我满心欢喜的打开项目,结果在debug的时候提示找不到msvcr100d.dll和msvcp100d.dll,由于自己是非科班出身 ...

  4. matlab的mcr问题,使用matlab时遇到的一些异常

    [本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 .第0节.引例        本文以Fisher的I ...

  5. CSS设置首行空两个格

    文章目录[隐藏] CSS 设置首行空两个格方法 CSS 设置首行空两个格例子 CSS 设置首行空两个格方法 关键词: text-indent text-indent 定义 text-indent 属性 ...

  6. IME输入法编程心得

     原文链接: IME输入法编程心得 posted @ 2012-11-30 00:42 from [FreedomShe] 自然语言处理的输入法作业成品没有做出来,但不想再在蛋疼的Win32上面耗 ...

  7. 通联支付php7,通联支付接口疑难问题处理开发者文档.pdf

    1 如何接入网关测试环境 A :技术人员在本地开发环境,加载压缩包中的程序代码: B: 找到程序代码中的 post.html,修改 merchantId.key.pickupUrl.receiveUr ...

  8. FFT变换的C语言实现

    FFT变换的C语言实现 1.安装FFTW3库文件 FFTW是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用 ...

  9. 如何发布ActiveX 控件

    转自:http://blog.csdn.net/zougangx/archive/2008/07/30/2738147.aspx [背景] 做过ActiveX控件的朋友都知道,要想把自己做的Activ ...

  10. 关于维金病毒和几个维金病毒防治的辅助工具

    恶性病毒变种!维金"(Worm.Viking.m)病毒专题及解决方案 本病毒疑为前期穿透还原的恶性病毒变种!请大家提高警惕!已经可以再windows全部环境下传播!但是似乎目前这个版本没有能 ...

最新文章

  1. 数据结构--KMP算法总结
  2. Vue 里 几个重要的指令
  3. mysql时间复杂度o的n次方_MySQL性能测试调优
  4. .net core连接MongoDB
  5. 新的JMetro JavaFX 11兼容版本
  6. JSF请求处理过程(二)请求处理过程总览(FacesServlet#service)
  7. 普通话转粤语_语音转文字评测:几款语音转文字app,你了解多少?
  8. 使用UrlRewriter进行Url重写的完整解决方案[转]
  9. 【报告分享】2020年抖音美妆直播报告.pdf(附下载链接)
  10. 合并excel文件 C语言,多个Excel文件中的多个Sheet合并到一个Excel文件中两个函数...
  11. html页面分页显示问题,HTML分页,显示分页页面内容
  12. mysql 创建函数报错_MySQL 创建函数时报错'ERROR 1336 (0A000): Dynamic SQL'
  13. crc原理及c代码实现
  14. python tensorflow 智能家居_用 TensorFlow 让你的机器人唱首原创给你听
  15. PID调谐方法:根据开环响应特性调谐(一)
  16. numpy 归一化 与 标准化
  17. 用微信开发者工具--打开微信小程序weui组件示例
  18. 微信公众号开发 - token获取(保证同一时间段内只请求一次)
  19. 用金属铂做电极的高压电容
  20. SVN导入项目转变为Maven项目时pom.xml报错

热门文章

  1. 如何避免自己发出的邮件被误判为垃圾邮件
  2. python中%代表什么意思?
  3. 核心交换机的链路聚合、冗余、堆叠、热备份如何理解与配置
  4. 能够证明“3=0”吗?
  5. n个元素的全排列(递归+去重)
  6. Android.mk入门教程
  7. 职高高一计算机知识点,职高高一上半学期所有数学公式
  8. [ 数通面试 ] 奇安信技术支持工程师 面试分享
  9. C1-01基础任务和知识拓展
  10. 筑基期第一式:SpringMVC源码解析