还是Ring3下的老代码,使用DuplicateHandle()获得文件句柄,复制到其他进程当中,在删除被保护文件时,会提示无法删除,在保护进程中打开。

Win XP下可以打开system进程,而这个进程PID是固定的数值4;但是Win 7下却无法打开system进程,提权后也无法打开,所以这里将句柄复制到winlogon.exe进行保护。

#include <windows.h>
#include <Psapi.h>
#include <stdio.h>
#pragma comment(lib,"Psapi.lib")
#pragma comment(lib, "Advapi32.lib") VOID EnablePriv()
{  HANDLE hToken;  if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))  {  TOKEN_PRIVILEGES tkp;  LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);     tkp.PrivilegeCount = 1;  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL);  printf("EnablePriv Ok\n");  return ;  }  printf("EnablePriv Error\n");
} DWORD GetProcessIdByName(CHAR *ProcessName)
{  DWORD   ProcessArray[1024], ArraySize, ReturnSize;  HANDLE  hProcess;  HMODULE hModule;  CHAR    NormalName[MAX_PATH] = {"UnknownProcess"};  if(!EnumProcesses(ProcessArray, sizeof(ProcessArray), &ArraySize))  {  return -1;    }  ReturnSize = ArraySize/sizeof(DWORD);  for(unsigned int i=0; i<ReturnSize; i++)  {  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessArray[i]);  if(hProcess)  {  if(EnumProcessModules(hProcess, &hModule, sizeof(hModule), &ArraySize))  {  GetModuleBaseName(hProcess, hModule, NormalName, sizeof(NormalName));  if(!strcmp(NormalName, ProcessName))    {  CloseHandle(hProcess);  return ProcessArray[i];  }  }  }  }  CloseHandle(hProcess);  return 0;
}  BOOL OccupyFile(CHAR * FileName, CHAR *ProcessName)
{BOOL bRet;EnablePriv();HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 4);    if (hProcess == NULL)   {printf("OpenProcess PID=4 Error\n");  hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, GetProcessIdByName(ProcessName));        if (hProcess == NULL){printf("OpenProcess PID=ProcessName Error\n");  return FALSE;}}HANDLE hFile;HANDLE hTargetHandle;hFile = CreateFile(FileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE){printf("CreateFile Error\n");  CloseHandle(hProcess);return FALSE;}bRet = DuplicateHandle(GetCurrentProcess(), hFile, hProcess, &hTargetHandle, 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);CloseHandle( hProcess );return bRet;
}int main()
{OccupyFile("c:\\t.txt", "winlogon.exe");return 0;
}

通过DuplicateHandle防止文件删除相关推荐

  1. linux 编辑文件删除不了怎么办,Linux中文件/文件夹无法删除的解决方案

    最近我们的 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以删除 rm -rf file.sh 如果无法删除,则尝试使用 root 用户删除,如果无法删除那么请看下面的说明. 需要了解的命令 ...

  2. Linux服务器生产环境中的文件删除与替换

    在Linux运维中经常遇到要替换Linux服务器系统程序或者业务应用程序文件的情况,很多人都会担心,直接替换会不会导致Linux系统程序崩溃或者应用程序崩溃,而需要关闭服务才敢替换,今天在freebu ...

  3. feifeicms 4.0 几处任意文件删除

    1.位置Lib/Lib/Action/Admin/DataAction.class.php,两处 未经处理的GET和POST参数直接拼接到路径后,造成文件删除.但实际本地测试发现_bak文件夹默认是不 ...

  4. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  5. SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等...

    添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变 ...

  6. Python编程基础:第三十五节 文件删除Delete a File

    第三十五节 文件删除Delete a File 前言 实践 前言 我们这一节来介绍如何删除一个文件,这里需要用到函数os.remove(path)用于删除指定路径下的文件,os.rmdir(path) ...

  7. 如何删除tmp计算机桌面,Win10系统中tmp文件删除不了应该如何解决?

    win10系统中tmp文件删除不了怎么办?有Win10系统用户反应,有后缀名为TMP的文件怎么也删除不了,当电脑开机重启之后又会出现,那么遇到这个问题应该如何解决呢?接下来就为大家分享win10系统删 ...

  8. java 删除文件失败_java 文件删除失败(被进程占用)

    解决方案:系统进行资源强制回收//System.gc();{不建议使用} 关闭流(未及时关闭会内存溢出) 问题--- 文件删除失败 (后来发现是被进程占用) 发现问题--第一次测试10个文件上传成功8 ...

  9. PHP-代码审计-文件删除

    概述 文件删除漏洞出现在文件管理功能的应用上比较多,这些应用一般也都有文件上传和读取的功能,删除原理漏洞原理跟文件读取漏洞差不多,利用的函数不一样而已 函数 常出现的函数是unlink() 挖掘经验 ...

最新文章

  1. 【目标检测系列】非极大值抑制(NMS)的各类变体汇总
  2. java -- 线程的生命周期
  3. Redis之压缩链表ziplist
  4. ABAP面向对象的开发
  5. hMailServer C#API
  6. OpenCV之邻域运算之最值滤波
  7. cannot create employee - HR check BP_BUPA_CHECK_HR_IS_ACTIVE
  8. 达瓦里氏,星星之火已经可以燎原
  9. 02_使用jq实现进入和离开动画
  10. B端评分卡在中小企业贷款中使用的三个阶段
  11. PowerDesigner一些小技巧
  12. 测度定义_测度论浅谈
  13. 计算机四级网络考试容易蒙吗,计算机四级网络工程师通过率有多少
  14. 前端程序员应该去哪个城市发展?
  15. 【认知计算】Deepfake/Anti-deepfake综述探究
  16. 1054:分数加减法
  17. 高端光刻机为什么那么难制造?
  18. 游戏物理中的碰撞测试(一) - 如何检测碰撞
  19. 微商利用淘宝评价怎么引流?如何利用淘宝买低价产品刷评价引流?
  20. 1t模式 和12t 模式_T +的完整形式是什么?

热门文章

  1. 解决浏览器下载文件的兼容问题
  2. 卸载npm和安装npm
  3. 第 43 章 SonicWALL
  4. Qt知识回顾(十一)——3D绘图
  5. 合泰HT32单片机使用PDMA和ADC采集多路模拟值并显示在OLED屏上
  6. Spire.Office.NET Crack,提供免费的高质量组件
  7. Dapper 的输出参数使用示范
  8. 担心鞋子开裂?3D打印能让材料自我修复了!| 技术前沿洞察
  9. JavaScript:你是否对DOM还不够了解呢?一篇2w字文章带你走进DOM的世界
  10. 袁峰:我的程序开发之路