windows下文件系统重定向机制

2024-06-21 05:04

本文主要是介绍windows下文件系统重定向机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件系统重定向是 Windows 操作系统中的一种机制,用于确保较旧的 32 位应用程序在 64 位 Windows 系统上运行时能够正确访问所需的系统文件和资源。让我们具体聊一下这个机制的细节:

什么是文件系统重定向

在 Windows 操作系统上,存在两种类型的系统目录:

  1. C:\Windows\System32:用于存放 64 位系统文件。
  2. C:\Windows\SysWOW64:用于存放 32 位系统文件(Windows 32-bit on Windows 64-bit)。这是 32 位应用程序在 64 位系统上的 "System32" 目录。

当 32 位应用程序试图访问 C:\Windows\System32 目录时,Windows 会自动将这些访问请求重定向到 C:\Windows\SysWOW64 目录。这称为文件系统重定向。

为什么需要文件系统重定向

文件系统重定向的目的是确保 32 位应用程序在 64 位操作系统上运行时,不会因为访问不到合适的系统资源而崩溃。例如,某个应用程序可能会寻找一个 32 位版本的 DLL 文件,如果没有文件系统重定向,该应用程序可能会因找不到文件而出错。

关键目录解释

  1. System32

    • C:\Windows\System32:这是 64 位系统的实际系统文件目录。
    • 对 64 位应用程序来说,这个目录就是 System32
    • 对 32 位应用程序来说,访问这个目录会自动重定向到 C:\Windows\SysWOW64
  2. SysWOW64

    • C:\Windows\SysWOW64:实际存放 32 位系统文件。
    • 对 32 位应用程序来说,这是它们实际访问到的目录,通过 C:\Windows\System32 重定向而来。
  3. Sysnative

    • C:\Windows\Sysnative:这是 64 位系统中特殊的虚拟目录,返回 64 位系统文件。
    • 对 32 位应用程序,访问这个目录不会触发重定向,可以直接访问 C:\Windows\System32 中的 64 位文件。
    • 这是为了给 32 位应用程序提供一种直接访问 64 位文件的途径。

举个例子

  • 你有一个 64 位的 DLL 文件放在 C:\Windows\System32\example.dll,同时有一个 32 位的 DLL 文件放在 C:\Windows\SysWOW64\example.dll
  • 当一个 32 位应用程序尝试 LoadLibrary 去加载 C:\Windows\System32\example.dll,实际上它会加载 C:\Windows\SysWOW64\example.dll,因为系统的重定向机制将请求指向了 SysWOW64
  • 如果你想让这个 32 位应用程序加载 C:\Windows\System32 中的 64 位 DLL,则需要通过 C:\Windows\Sysnative\example.dll 访问。

如何检测和禁用重定向

对于开发者,可以在 32 位应用程序中使用 Windows API 来检测和暂时禁用重定向(例如,通过 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection)。以下是示例代码:

#include <Windows.h>
#include <QDebug>void DoSomethingWithWow64Redirection() {PVOID OldValue;if (Wow64DisableWow64FsRedirection(&OldValue)) {// Now access C:\Windows\System32\qwinsta.exeif (QFile::exists("C:\\Windows\\System32\\qwinsta.exe")) {qDebug() << "File exists without redirection in System32.";} else {qCritical() << "File not found even with redirection disabled.";}Wow64RevertWow64FsRedirection(OldValue);} else {qCritical() << "Failed to disable WOW64 file system redirection.";}
}int main() {DoSomethingWithWow64Redirection();return 0;
}

注意,这些函数在 64 位系统上对运行在 Wow64 (Windows 32-bit on Windows 64-bit) 模式的 32 位应用有用。

应用程序实践

了解文件系统重定向是确保跨平台应用程序稳定运行的关键。通过正确使用 Sysnative、编译为合适的目标平台,以及在必要时使用 API 禁用重定向,开发者可以更好地控制应用程序对系统文件的访问。

这篇关于windows下文件系统重定向机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080277

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

【Tools】大模型中的注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 在大模型中,注意力机制是一种重要的技术,它被广泛应用于自然语言处理领域,特别是在机器翻译和语言模型中。 注意力机制的基本思想是通过计算输入序列中各个位置的权重,以确

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的