替换正在使用的系统文件

自删除技术详解 要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。,但是还没有创建页面文件,在这个时间节点下,可以说话用户是还没有完全进入操作系统的,那么这时候就可以删除在正常情况下删除不了的文件,我的理解是在没有创建页面文件的时候,其实操作系统是还没有启动完全的,所以这时候可执行文件其实是没有完全加载好的。如果当前进程的任务是将程序注入到其他进程,在其他进程的地址空间中运行,然后关掉当前进程。... 阅读详情

首先从xfocus的bgate的文章《在Win2000/XP上安静地替换正在使用的系统文件》中获得启发。

他对替换正在使用的系统文件进行了研究,分析了微软的一个工具zap,这个工具可以替换系统文件。经过分析后,这个工具其实是先把正在使用的文件移动到一个临时目录中去,然后再把这个文件删除,但是标记为下次启动的时候删除。此时系统文件目录已经腾出了空间,这样再把新的文件移动过来就可以了。

实现部分代码示意如下:

if(szFileToDel[1] == ':'){   sprintf(cTempPathName, "%c://", szFileToDel[0]); } else{   GetModuleFileName(NULL, cFileName, 0x100);   sprintf(cTempPathName, "%c://", cFileName[0]); }

if(GetTempFileName(cTempPathName, "_@", 0, cTempFileName) == 0) return FALSE; if(MoveFileEx(szFileToDel, cTempFileName, MOVEFILE_REPLACE_EXISTING) == 0) return FALSE; if(MoveFileEx(cTempFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT) == 0) return FALSE; if(MoveFileEx(szSrcFile, cTempPathName) == 0) return FALSE;

其中 winbase.h:

#define MOVEFILE_REPLACE_EXISTING   0x00000001 #define MOVEFILE_COPY_ALLOWED   0x00000002 #define MOVEFILE_DELAY_UNTIL_REBOOT 0x00000004 #define MOVEFILE_WRITE_THROUGH   0x00000008

二、MoveFileEx分析

为了了解MoveFileEx()到底是如何在下次重新启动的时候进行的文件移动操作的,我查阅了操作系统源代码。 1、MoveFileEx()实际上是调用的MoveFileWithProgressW(),只不过NULL了两个回调参数。 2、MoveFileWithProgressW()中针对dwFlag=MOVEFILE_DELAY_UNTIL_REBOOT的,调用了BasepMoveFileDelayed()函数 3、BasepMoveFileDelayed()是通过修改注册表的方法,让操作系统重新启动时进行文件操作的。 它修改的键值是 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/PendingFileRenameOperations 这是一个REG_MULTI_SZ的键值。 格式是:

szDstFile szSrcFileszDstFile szSrcFile!szDstFile 有些文章中所说的源文件和目标文件中间是换行,这并不是最合理的,虽然也可以,中间是Unicode的,也就是 00 00

而且需要注意的是,如果指定了MOVEFILE_REPLACE_EXISTING属性的话,目标文件前会加注一个叹号。

这个键值我是在分析完源代码后,才发现原来MSDN中已经给出这个键值了。

后来我打开我的这个键值,发现里面有一堆,还没有来得及删除的文件,在等着我下一次重新启动的时候删除呢。

根据关于MOVEFILE_DELAY_UNTIL_REBOOT的解释,操作系统会在系统重新启动的时候,在Autochk检查完成后,并且在建立任何PageFile文件之前,立即进行指定的文件移动。而且要确保所要操作的文件能够被LocalSystem或者管理员组所操作。

我同时也注意到了另外一个我不熟悉的问题,就是为什么文件被移动了,但是应用程序还可以继续执行,而删除则不行。我没有细考虑这个问题,但是我感觉一定是有什么东西没有变化,比如某种链接。虽然位置变了,但是链接依旧能够跟踪到映像的位置,所以所有指向该链接的操作都是生效的。但是删除文件的时候,该链接就会被删除,从而会导致操作失败,为了避免这种失败,所以禁止删除正在被占用的文件。

三、操作系统启动过程中相关操作

关注了一下NT的启动过程,想了解系统在启动的时候是如何执行上面提到的移动或者删除行为的。

在初始化内核阶段,ntoskrnl.exe从NTLDR手中接管了控制权,在最后一步,Session Manager启动了Windows XP的高级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。

Session Manager实际上就是smss.exe,我们经常可以在内存进程中看到他的身影。反汇编的时候,在sub_48584D01中看到XP有考虑识别的CPU有:

0 x86 1 MIPS 2 ALPHA 3 PPC 4 IA64 5 ALPHA64 other UNKNOWN

我在smss.exe里面找到了PendingFileRenameOperations,可见应该是此文件负责了在引导的时候执行其中的文件移动操作。只可惜,我没有找到何处调用了PendingFileRenameOperations,反汇编功底不佳啊。

从sysinternals.com中看到一段关于Session Manager调用PendingFileRenameOperations的话

[http://www.sysinternals.com/ntw2k/info/regboot.shtml]

After you pass the point in the log where boot and system driver initialization is complete you'll begin to see records created by the smss.exe process, which is called the Session Manager. Session Manager is the first user-mode process launched during a boot. You'll see it immediately check to see if there are any rename operations it should perform. before the system is up and running by looking at the value HKLM/System/CurrentControlSet/Control/Session Manager/PendingFileRenameOperations. Next you'll see it determine what DOS device mappings it should create (e.g. COM1, LPT1), what environment variables are defined, what DLL's it "knows about" (standard DLLs in the system32 directory), and which protected subsystems it should start (e.g. OS/2, POSIX).

Session Manager typically launches Chkdsk (autocheck.exe), which is specified in the Session Manager's BootExecute value along with direction to run other boot-time native applications. After Autocheck finishes Session Manager starts Winlogon and the Win32 subsystem (CSRSS.EXE). Both of these generate interleaved Registry accesses as they start up concurrently. Winlogon can be seen querying the .Default key's display settings, including colors and mouse settings under HKU/.Default/Control Panel. The .Default key's contents are user preferences that are active when no one is logged in, and Winlogon uses them for the screen on which it displays the logon dialog box.

不过这个和微软所说的先Autochk,然后再PendingFileRenameOperations,不同。

从另一份文档中(http://freehost02.websamba.com/brittanyfoo/BootProcess.html),提到了初始化进程问题:

Smss 的主线程进行以下的初始化步骤:

1、创建 LPC 端口对象( /SmApiPort )和两个等待客户请求的线程。客户请求包括装载一个新的子系统或者创建一个会话等。

2、为 MS-DOS 设备名,如 COM1 和 LPT1 定义符号链接。

3、如果安装了终端服务(Terminal Services),在对象管理器的名字空间创建 /Sessions 目录。

4、运行 HKLM/SYSTEM/CurrentControlSet/ Control/Session Manager/BootExecute 定义的程序,典型的是运行 Autochk (Chkdsk在引导其间的版本)。

5、按照 HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/PendingFileRenameOperations 的指令,进行延迟文件改名操作。挂起文件删除在 PendingFileRenameOperations2 。

6、打开已知的 DLL 。

7、创建另外的分页文件。

8、初始化注册表。配置管理器刷新注册表, 为HKLM/SAM, HKLM/SECURITY, 和 HKLM/SOFTWARE 关键字装载注册文件。HKLM/SYSTEM/ CurrentControlSet/Control/hivelist 在硬盘上搜索注册表文件,配置管理器在 /Winnt/System32/Config 寻找。

9、创建系统环境变量。

10、装载Win32子系统内核模式部分(Win32k.sys)。Smss 在 HKLM/SYSTEM/CurrentControlSet/Control/Session Manager 下寻找 Win32k.sys 和其它要装载组件的路径,确定它们的位置。Win32k.sys 中的初始化代码使用视频驱动程序,屏幕的分辨率转换到缺省概貌文件定义的值。因此,屏幕从引导视频驱动程序使用的VGA模式转到系统选择的缺省的分辨率。

11、启动子系统进程,包括 Csrss 。

12、启动登陆进程 (Winlogon) 。

13、为调试事件信息创建LPC口(DbgSsApiPort 和 DbgUiApiPort),并创建监听这些口的线程。

这个算是描述最清楚的了。

四、总结

至此,对替换正在使用中的文件有了初步的理解。

既MoveFileExW -> MoveFileWithProgressW -> BasepMoveFileDelayed -> HKLM/System/CurrentControlSet/Control/Session Manager/PendingFileRenameOperations

然后,ntldr引导,ntoskrnl.exe结果引导权,启动smss.exe(Session Manager),在Autochk之后,检查PendingFileRenameOperations,然后执行其中的文件替换操作。最后smss启动Winlogon进程,允许用户登录。

因此此种方法可以替换几乎所有的系统文件,因为smss是系统的第一个UserMode的进程,此时被使用的文件极少,不可能有人在它之前占用文件。

如果是替换系统文件的话,比如smss.exe,就使用微软的办法,先把smss.exe移动到临时文件夹去,然后把新的smss.exe放到正确的目录中。把临时文件家里的smss.exe移动到NULL,并且是MOVEFILE_DELAY_UNTIL_REBOOT。这样如果系统重新启动的话,自然使用的是新的smss.exe,然后它再把临时文件夹里的垃圾清除掉即可。其实此时不清除,等起来之后再清除也是可以的了,因为已经没有东西在占用那个临时文件夹里的垃圾了。

如果是替换普通应用程序的话,只需要重新启动应用程序即可,因为此时应用程序目录里的东西已经为新的文件了。重新启动只不过是为了删除那个临时文件夹里的垃圾而已。

TIA Portal V16安装总报错?别急着重装系统,先试试这几步(解决PendingFileRenameOperations重启问题) 本文详细解析了TIA Portal V16安装过程中常见的PendingFileRenameOperations重启问题,提供了一套从注册表清理到系统服务调整的全链路排查方案。通过深度解析注册表机制、系统级预处理和实时监控策略,帮助用户高效解决安装报错,避免不必要的系统重装。特别适用于西门子博途V16用户遇到的安装难题。 阅读详情

相关推荐

TIA portal西门子博途安装时一直提示重启怎么办?

TIA portal西门子博途安装时一直提示重启怎么办? 在安装西门子的某些软件的时候,经常提示要重启,而且重启之后依然提示重启,让人比较烦恼,这个问题是由以下原因引起的: 一般系统文件无法删除时,比如其他程序正在占用等等,系统会把这些文件保存在注册表该减值下面,以便下次重启后直接删除,有时候有一些未知的原因导致这些文件在重启后无法删除,这些文件记录还在,西门子的软件安装时检测到后就会提示重启电脑,所以这个时候,我们手动删除这个键值基本就能解决这个问题。 方法一:在windows系统下,按下组合键:WIN+

Robot_PLC_HMI_Automation 5万+

Windows注册表基础知识

Windows注册表基础知识1、注册表简介注册表主键HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_CURRENT_CONFIG2、注册表危险项[^1]Windows LoadWindows Run特殊的16位可执行文件类型Windows ShellPending File Rename Operations3、优化注册表清理多余的DLL文件安装卸载应用程序的垃圾信息系统安装时产生的无用信息4、总结 1、注册表简介 注册表

weixin_45817476的博客 3853

利用CiteSpace实现知网专利文献的高效计量与可视化分析

本文详细介绍了如何利用CiteSpace软件对中国知网(CNKI)的专利文献进行高效的文献计量与可视化分析。文章提供了从数据获取、格式转换、参数设置到图谱解读的完整工作流,旨在帮助研究者快速掌握该工具,从而洞察技术领域的研究热点、核心机构、学者合作网络及发展趋势,提升专利情报分析效率。

weixin_28520495的博客 293

在Win2000/XP上安静地替换正在使用的系统文件

 总是索而不敷总有些过意不去.另外在安焦上灌了两年水竟然安焦文档还找不到一个我的名字. 灌不出篇精华帖子还回复不到别人灌的精华贴. 也算得上是个奇迹了.   要安静地替换正在使用的系统文件要解决两个问题:   1. 替换正在使用的文件.   2. 在替换系统文件时不显示插CD的对话框.   微软有两个工具可以替换正在使用的文件,zap和inuse. 不过都没有源代码, 只好逆向分析了. inuse

萝卜青菜 2341

affymatrix探针转换 | GPL5175探针对应的基因转换

一般情况下,有一些比较成熟的对应平台的注释数据集的R包。但是这个注释平台,我在Bioconductor上找了一圈都没有找到。只能通过最原始也最可靠的方法,从GEO数据集上去下载这部分的注释文件。以下展示全过程。 我要检查的数据平台是:GPL5157。 数据集的注释集链接为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL5175 这个注释数据集比较难弄的地方在于,它的基因集注释的不太好。没有比较直接的可供提取的genesample的信息;在ge.

weixin_40640700的博客 7124

阿里云大模型ACP认证模拟考试(二)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 2077

在Win2000-XP上安静地替换正在使用的系统文件

在Win2000-XP上安静地替换正在使用的系统文件     总是索而不敷总有些过意不去.另外在安焦上灌了两年水竟然安焦文档还找不到一个我的名字. 灌不出篇精华帖子还回复不到别人灌的精华贴. 也算得上是个奇迹了.   要安静地替换正在使用的系统文件要解决两个问题:   1. 替换正在使用的文件.   2. 在替换系统文件时不显示插CD的对话框.   微软有两个工具可以替换正在使用的文件,zap和i

老裴 1297

matlab kwave模拟超声换能器学习笔记

kwave模拟超声换能器的学习笔记,从零开始造车轮

SolvingMaster的博客 3198

[Visual C++]在Win2000/XP上安静地替换正在使用的系统文件【转载/收藏】

创建时间:2004-02-29文章属性:原创文章提交:bgate (bgate_at_163.com) 作者:bgate邮件:t2di4u@hotmail.com (要找个没被用过的id真不是件容易的事):    总是索而不敷总有些过意不去.另外在安焦上灌了两年水竟然安焦文档还找不到一个我的名字. 灌不出篇精华帖子还回复不到别人灌的精华贴. 也算得上是个奇迹了.    要安静地替换正在使用的系统

shines77 的博客 2724

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3706

【OD统一考试(B卷)】比赛的冠亚季军,Python 解答

比赛的规则是 0 号和 1 号比赛,2 号和 3 号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮,实力值大的获胜,实力值相等的情况,id 小的情况下获胜,轮空的直接进入下一轮。第一轮比赛,id 为 0 实力值为 2 的运动员和 id 为 1 实力值为 3 的运动员比赛, 1 号胜出进入下一轮争夺冠亚军,id 为 2 的运动员和 id 为 3 的运动员比赛,3 号胜出进入下一轮争夺冠亚军;2 号与 0 号,比赛进行季军的争夺,2 号实力值为 4,0 号实力值 2,故 2 号胜出,得季军。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

WININIT.INI文件与Windows病毒(注:如果替换正在使用系统文件)

WININIT.INI文件与Windows病毒 周志方★用过Windows 9X的人都见过如下的提示信息:Please wait while Setup updates your configuration files.This may take a few minutes...在安装完某个软件或者硬件的驱动程序,应安装程序的要求重新启动Windows时,常常看到上述信息。

yypp的专栏 3237

复旦微FMSH_Procise安装全流程详解:从环境配置到实战避坑指南

通过本文的全流程解析+实战技巧,开发者可快速掌握Procise在复旦微芯片开发中的核心应用。未来随着AKConv轻量级架构(参考往期文章)等创新技术的融入,国产芯片开发生态将更加完善。立即关注本专栏,获取最新多镜像切换指南与Linux SDK实战教程!扩展阅读复旦微在线升级BOOT.BIN全解析H7-TOOL实现复旦微脱机烧录(注:本文实验环境为Windows 10 x64 + FMQL45T-CORE开发板,部分操作可能因版本更新调整)立即行动下载本文配套配置文件:[GitHub链接]加入技术交流群。

QQ_778132974的博客 3239

Windows XP的一个无敌命令-替换正在使用中的文件

XP有一个很无敌的命令,用来替换文件的replace,连正在使用的文件也能替换,非常无敌。 比如:在C:下建一个目录c:\abc ,然后复制一首mp3到c:\abc并命名为aaaa.mp3 ,然后再复制另一首歌到C:\a.mp3 ,然后用media player 播放aaaa.mp3 ,在命令提示符下输入:replace c:\a.mp3 c:\abc,过一会,是不是播放的歌...

weixin_34268169的博客 289

199、影像技术 roadmap 规划:未来移动影像的技术趋势与芯片算力展望

本文探讨了未来移动影像技术的发展趋势与芯片算力规划。作者从实际案例出发,指出影像技术演进需平衡传感器、ISP、算力和功耗。文章分为三部分:1)传感器将从堆像素转向提升信息密度,重点关注双层晶体管结构、混合快门和多光谱技术;2)ISP架构将向可编程计算单元转型,强调神经网络加速、硬件化多帧融合和语义处理;3)芯片算力瓶颈在于数据搬运,需优化存算一体架构、专用DMA和统一内存。最后给出五点建议:避免盲目追高像素、重视持续功耗、平衡ISP灵活性、预留算力余量、加强传感器与ISP协同设计。作者强调,影像技术的突破在

sundong_81的博客 60

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Windows XP一个很无敌的命令replace--系统运行中也可以替换系统文件

XP有一个很无敌的命令!!!用来替换文件的replace,连正在使用的文件也能替换。非常无敌。 比如:在C:/下建一个目录,c:/aaa 然后复制一首mp3到c:/aaa并命名为c:/aaa/a.mp3 然后再复制另一首歌到C:/a.mp3 然后用media player 播放c:/aaa/a.mp3 在命令提示符下输入:replace c:/a.mp3 c:/aaa 过一会,是不是播放的歌已

Netken[网知] 的 优快云 软件开发技术交流 Blog 3395

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一个强大的命令

我今天发现一个使用电脑的又一个小窍门,不知道大家知不知道,XP有一个很无敌的命令,用来替换文件的replace,连正在使用的文件也能替换。 比如:在C:下建一个目录,c:mmm ,然后复制一个录音电话文件,电话录音到c:mmm并命名为c:mmmm.wav,然后再复制另一首歌到C:m.wav ,然后用media player 播放c:mmmm.wav...

weixin_30477293的博客 87

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: Ruining the Rustock.C rumors and myths and Kaspersky Lab role
下一篇: 第一只感染flash的病毒源代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值