以独占方式打开一个文件,然后将文件的句柄复制到另一个进程,比如复制到System进程,然后自己的进程就可以退出。

在Ring3下只要句柄没有关闭,别人就删除不了文件。

#include <windows.h>
#include <stdio.h>

void SetPrivilege()
{
 HANDLE hToken;
 LUID destLuid;
 TOKEN_PRIVILEGES TokenPrivileges;
 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); //获得进程访问令牌的句柄
 LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &destLuid);   //操作的类型为SE_DEBUG_NAME       
 TokenPrivileges.PrivilegeCount = 1;
 TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 TokenPrivileges.Privileges[0].Luid = destLuid;
 AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL); //提升权限
 CloseHandle(hToken);   //关闭句柄
}

BOOL ProtectFile(
     IN LPCTSTR pszFilePath,
     IN DWORD dwProcessId,
     IN BOOL bFileCanBeRead
     )
{
 HANDLE hFile;
 HANDLE hProcess;
 
 // get the file handle
 
 hFile = CreateFile(
  pszFilePath,
  GENERIC_READ,
  (bFileCanBeRead ? FILE_SHARE_READ : 0),
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL
  );
 if (hFile == INVALID_HANDLE_VALUE)
 {
  return FALSE;
 }
 
 // open the process handle
 
 hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwProcessId);
 if (!hProcess)
 {
  printf("OpenProcess error/n");
  CloseHandle(hFile);
  return FALSE;
 }
 
 // call duplicatehandle
 
 BOOL fOk = DuplicateHandle(
  GetCurrentProcess(),              // source process handle
  hFile,                                     // source handle
  hProcess,                              // target process handle
  NULL,                                    // target handle, we don't care it
  0,
  FALSE,                                  
  DUPLICATE_SAME_ACCESS
  );
 
 CloseHandle(hFile);
 CloseHandle(hProcess);
 return fOk;
}

void main()
{
 SetPrivilege();   //提升进程权限
 ProtectFile("C://1.txt",4,false);
}

DuplicateHandle复制句柄保护文件相关推荐

  1. 如何复制服务器数据库文件大小,如何复制服务器数据库文件夹

    如何复制服务器数据库文件夹 内容精选 换一换 您可以通过mongoexport的方式将数据库备份到弹性云服务器上,但不建议将弹性云服务器作为数据库备份空间使用.强烈推荐使用文档数据库实例的备份功能,将 ...

  2. 复制粘贴Excel文件后,显示“安全警告 宏已被禁用”,复制后得到的文件看不到内容

    问题 系统:Win10 Excel版本:2016 我将一个原本正常的Excel文件复制到另一个文件夹后,打开就提示安全警告 宏已被禁用(复制操作时电脑莫名会变卡),而且原来文件里的数据也看不到了. 复 ...

  3. 第七章 将文件内容复制到另外文件

    文章目录 第七章 将文件内容复制到另外文件 示例 第七章 将文件内容复制到另外文件 示例 本例显示了一个使用本文前面介绍的几个%Library.File方法的样例类. 在示例类Demo.FileDem ...

  4. linux cp 目录不存在自动创建,关于linux:Linux技巧cp命令自动创建不存在的目录和只复制修改的文件...

    复制时主动创立不存在的子目录 在 Linux 中,能够应用 cp 命令的 --path 选项指定在复制的时候主动创立不存在的子目录. 例如执行上面的命令: $ cp --path java/com/s ...

  5. linux cp sync,通过SSH使用Rsync传输文件,复制和同步文件及目录

    在本文中,我们将解释如何通过SSH使用rsync复制文件.当涉及在网络上的系统之间传输文件时,Linux和Unix用户可以使用许多工具,最流行的数据传输协议是SSH和FTP,虽然FTP很受欢迎,但总是 ...

  6. Linux之复制、移动文件及目录命令

    Linux之复制.移动文件及目录命令 1. 复制.移动文件及目录命令的使用 命令 说明 cp 拷贝文件.拷贝目录 mv 移动文件.移动目录.重命名 cp命令效果图: 说明: 拷贝目录需要加上-r选项, ...

  7. Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数、复制到Excel文件、复制到文本文件(默认是tsv格式)、复制到文本文件(设置逗号分隔符)

    Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数.复制到Excel文件.复制到文本文件(默认是tsv格式).复制到文本文件(设置逗号分隔符) ...

  8. c语言实现将两个文件复制到一个文件里_Python中复制文件的9种方法

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/91277888 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Python 中有 ...

  9. C++学习之:复制和粘贴文件/文件夹

    从剪贴板上获得要复制/剪贴的文件路径之后,如何完成文件/文件夹的粘贴呢.下面列出了两个函数用来完成这些功能 //复制的粘贴 DWORD VrvCopyFile( LPCWSTR lpSrc, LPCW ...

最新文章

  1. HDLBits 系列(40)如何写 TestBench 文件?
  2. Oracle 导出CSV、导出大数据
  3. 华视电子读卡器web开发_业界动态:华视电子官方微信公众号电子书架正式上线...
  4. Spring MVC DispatcherServlet介绍(2)
  5. andrioid 桌面
  6. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
  7. eureka注册中心HA集群搭建
  8. @param注解的用法解析_SpringBoot 配置类解析
  9. linux下c语言编程实例
  10. Linux 音频编程 -- 如何使用ALSE库播放wav文件
  11. Spring源码之启动过程(四)—— Bean的实例化详解
  12. SpaceShooter打飞机教程笔记(一)
  13. RGB和CIELAB颜色空间转换及偏色检测
  14. opencv--轮廓拟合函数 boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()
  15. 【计算机网络】因特网通信
  16. c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  17. windows7更换系统时间服务器,Windows7系统更改时间同步服务器
  18. 【Aegisub相关】Lua程序设计 第4版(中文翻译)
  19. Wordpress企业网站建设SEO完整解决方案是什么?
  20. 商业模式的逻辑--清华大学X-lab沈拓学习笔记

热门文章

  1. spring boot入门,看这篇文章就够了
  2. node.js学习笔记14—微型社交网站
  3. java与c++的区别-转
  4. 分析easyVM 未完成)
  5. 滚动条颜色样式设置 说明
  6. [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)
  7. C# 系统应用之获取Windows最近使用记录
  8. 【数据结构与算法】之深入解析“合并区间”的求解思路与算法示例
  9. iOS之Socket的使用-AsyncSocket
  10. 2019\National _C_C++_C\试题 B: 递增序列