lpExistingFileName: PChar; // 来源文件名,指向一个以零结尾的字符串的指针。
lpNewFileName: PChar; // 目标文件名,指向一个以零结尾的字符串的指针。
dwFlags: DWORD // 移动标记,见定义
): BOOL; stdcall; // 返回执行结果,成果或失败
MOVEFILE_DELAY_UNTIL_REBOOT = $00000004;
// 在系统重新启动前,不执行移动操作,直到系统启动后,磁盘检测完毕后,创建页面文件之前,执行移动操作。
因此,这个参数可以删除系统之前启用的页面文件。
该参数只能被拥有 管理员权限 或 LocalSystem权限 的程序使用。该参数不能和 MOVEFILE_COPY_ALLOWED 一起使用。
MoveFileWithProgress 功能与 MoveFileEx是相同的,只不过 MoveFileWithProgress 允许你提供一个接收移动进度消息的回调函数。
当dwFlags参数被设置为MOVEFILE_DELAY_UNTIL_REBOOT时,MoveFileEx把重启后移动的文件和要移到的文件的位置存在下面的多字符注册表值(REG_MULTI_SZ)里:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session\Manager\PendingFileRenameOperations。
我们可以将一个程序运行后,就将它移动到一个不易发现的目录下(在我的下面的程序里是移动到回收站目录里),然后利用MoveFileEx,设置dwFlags为MOVEFILE_DELAY_UNTIL_REBOOT,使文件重启后移动到一个可以启动的目录下(对于中文的Windows XP操作系统,启动目录为
“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”)。这样文件运行后便立即不在它运行时的目录了,实现了“自删除”功能。下次重启后,系统还没有被登陆,便已经将文件移动到了启动目录里。当用户登陆时,程序启动,随即被移到其他目录中,此时在启动文件夹里也已经没有了它的踪迹,所以通过正常的检查是看不出来文件到底在那里被启动的。整个过程只是调用了一个系统API,没有直接的写注册表。现在的主动防御和杀毒软件不会将这视为可疑操作。
引用通告地址 (0):
http://www.cnng.net/blog/trackback.asp?tbID=83
http://www.cnng.net/blog/trackback.asp?tbID=83&CP=GBK
http://www.cnng.net/blog/trackback.asp?tbID=83
http://www.cnng.net/blog/trackback.asp?tbID=83&CP=GBK