在64位的Windows系统中,有个非常神秘的文件夹“Sysnative”,你无法通过Explorer去访问它,甚至你都无法找到它,但它却扮演了一个非常重要的角色。下面我们就来聊聊它。

32位和64位的Windows

在广泛使用X86架构的CPU时代,用的系统、应用都是32位的(可能32位还算高的),随着科技的发展,AMD X64 和 64位的Windows/应用逐渐出现在我们的生活中。64位Windows凭借其支持大内存的特性,迅速占领市场。

但早期几乎没什么64位的应用,如果在64位的操作系统上不兼容32位应用的话,可能会浪费了Windows生态近几十年的发展,所以在64位操作系统上兼容32位应用是必须要做的事。

那Windows是怎么来做的呢?

当你在64位的Windows上启动一个32位的应用的时候,一个32位的模拟器就会被叫起来执行这个32位的应用,这个模拟器会让这个应用认为自己运行在一个32位的Windows上,所有的功能都是可以正常使用的。看起来一切都可以正常的使用了,但是问题来了,如果这个应用要访问一些特殊文件夹呢?

在此之前,我们需要了解到Windows为了兼容32位应用做了一些特殊的文件夹:

这里需要提到的就是System32这个文件夹,别看他后面有个32,实质上它是用来放64位应用的。(据说是因为以前的程序很多都是对System32硬编码的,所以微软为了方便各大开发者将32位应用迁移到64位就直接保留了这个名称);SysWOW64其实是用来装32位应用的文件夹。WOW64的全程是:Windows on Windows64。

好,回到我们刚才的那个问题,如果这个32位应用想要访问真实的System32文件夹了该怎么办?(直接在32位应用中访问System32文件夹会被重定向到SysWOW64文件夹去)

答案自然是:SysNative。比如我想在32位应用中访问到64位的 SystemSettingsAdminFlows.exe ,那我实质上在代码里面要写的应该是:%windir%/sysnative/SystemSettingsAdminFlows.exe

Sysnative 有什么特殊的?

• 该文件夹其实是一个虚拟文件夹,不同于WOW64是一个真实存在的文件夹
• Sysnative 不可见,很大一部分原因是因为explorer.exe是64位的应用
• 因为有了 Sysnative ,也可以在32位应用的代码里面访问64位应用了
• 注册表中也有类似WOW64的结构
• 支持Windows Vista及其以上版本

参考链接:
1. https://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm
2. https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm

由“Sysnative”引发的思考的更多相关文章

  1. Spring之LoadTimeWeaver——一个需求引发的思考---转

    原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...

  2. 由SecureCRT引发的思考和学习

    由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...

  3. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  4. 【思考】由安装zabbix至排障php一系列引发的思考

    [思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...

  5. 由<a href = "#" > 引发的思考

    原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" >  的方式 绑定clic ...

  6. 曲演杂坛--一条DELETE引发的思考

    原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...

  7. class_copyIvarList方法获取实例变量问题引发的思考

    在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...

  8. 由一个emoji引发的思考

    由一个emoji引发的思考 从毕业以来,基本就一直在做移动端,但是一直就关于移动端的开发,各种适配问题的解决,在日常搬砖中处理了就过了,也没有把东西都沉淀下来,觉得甚是寒颜.现就一个小bug,让我们来 ...

  9. 一次composer错误使用引发的思考

    一次composer错误使用引发的思考 这个思考源自于一个事故.让我对版本依赖重新思考了一下. 事故现象 一个线上的管理后台,一个使用laravel搭建的管理后台,之前在线上跑的好好的,今天comop ...

随机推荐

  1. InteractiveHtmlBom 在手机上无法显示 BOM List 和装配图的问题

    InteractiveHtmlBom 在手机上无法显示 BOM List 和装配图的问题 InteractiveHtmlBom 插件是一款用于 KiCad BOM 装配图生成插件. 最近新生成的 文件 ...

  2. Vue.js 第4章 组件与路由

    组件 什么是组件:组件就是一些标签结构的封装,同时为这些结构添加需要的业务逻辑,设置你想要的样式 一个组件中一般可以设置:结构,功能和样式 为什么要使用组件: 使用方便 复用 组件的创建和使用 组件的 ...

  3. Spring IoC 使用详解

    在Spring中,依赖注入(DI)模式实现了控制反转(IoC)原理.让我们通过一个例子来帮助理解依赖注入.我们先看到java版的例子,然后在此基础上加上spring的功能.就例子而言,是相当地简单.Q ...

  4. Mac 安装homebrew,pkgutil --pkgs列出安装包

    Mac 安装homebrew Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 Linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的 ...

  5. php parse_url linux 解析问题

    耕毅 解析url函数parse_url() (PHP 4, PHP 5, PHP 7) parse_url — 解析 URL,返回其组成部分 mixed parse_url ( string $url ...

  6. phpstudy一直使用php5.6版本一直“”“报错应用程序无法正常启动0xc000007b”,亲测可行

    http://www.php.cn/xiazai/gongju/1351 vc9和vc11-vc14运行库 2018-01-26 来源/作者:php中文网 «» 下载次数:7808 工具简介: php ...

  7. oracle 识别’低效执行’的SQL语句

    用下列SQL工具找出低效SQL: SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_ ...

  8. Jieba分词原理与解析

    https://www.jianshu.com/p/dfdfeaa7d01f 1 HMM模型   image.png 马尔科夫过程:   image.png   image.png 以天气判断为例:引 ...

  9. 【DCN】Wireless Intranet Captive Portal

    Wireless Intranet Captive Portal 配置AAA服务Radius认证 radius-server key 0 radius radius-server authentica ...

  10. HTML静态网页---标签

    一. 创建HTML: (一) body的属性: bgcolor 页面背景色 background   背景壁纸.图片 text   文字颜色 topmargin   上边距 leftmargin    ...