还是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. Python到底有多强大?只需 15 行代码即可进行人脸检测
  2. mysql bypass_Bypass MySQL Safedog
  3. 成功解决 keras\callbacks.py:999: UserWarning: `epsilon` argument is deprecated and will be removed, use
  4. JZOJ 4161. 于神之怒
  5. 【数字图像处理】 二.MFC单文档分割窗口显示图片
  6. 【qduoj】奇数阶幻方 (构造)
  7. 5.Underfitting and Overfitting
  8. Java语言程序设计(基础篇) 第二章
  9. ajax提交数据被截断的问题
  10. 定义一个dto对象_java里面Dto对象跟VO的区别
  11. 从零开始,教初学者如何征战全球最大机器学习竞赛社区Kaggle竞赛
  12. Hadoop系列之DistributedCache用法
  13. 编译器优化对齐(字节对齐)
  14. shell oracle 多进程,Shell多进程实现
  15. liunx 的 crontab
  16. Linux和Solaris系统上添加默认路由和静态路由方法
  17. 如何下载陕西省卫星地图高清版大图
  18. 编程开发常用词汇(持续更新)
  19. Matlab是常见的高级语,高级语言具有哪些特点 试述低级语言与高级语言的特点...
  20. 错误代码105是什么意思

热门文章

  1. python统计小写字母出现次数_Python函数计算字母字符数,跟踪“e”出现的次数...
  2. 【求助:PowerShell激活win10失败】程序“slmgr.vbs”无法运行:找不到应用程序所在位置设置报错0xC004F074
  3. C++游戏开发实战视频教程
  4. 计算机主板上有独显怎么删除,笔记本电脑独显驱动出现问题怎么办?独显烧坏了怎么禁用?...
  5. CAS SSO用户认证原理分析
  6. advisor2002安装教程(MATLAB2014a及以下最好)
  7. EA免费开放的智能交易
  8. 微信小程序九宫格抽奖活动制作
  9. tcpdump抓包ftp协议_tcpdump抓包使用方法详解
  10. 星起航跨境:跨境卖家可以这样获得好评,稳步提升销量