DuplicateHandle复制句柄保护文件
以独占方式打开一个文件,然后将文件的句柄复制到另一个进程,比如复制到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复制句柄保护文件相关推荐
- 如何复制服务器数据库文件大小,如何复制服务器数据库文件夹
如何复制服务器数据库文件夹 内容精选 换一换 您可以通过mongoexport的方式将数据库备份到弹性云服务器上,但不建议将弹性云服务器作为数据库备份空间使用.强烈推荐使用文档数据库实例的备份功能,将 ...
- 复制粘贴Excel文件后,显示“安全警告 宏已被禁用”,复制后得到的文件看不到内容
问题 系统:Win10 Excel版本:2016 我将一个原本正常的Excel文件复制到另一个文件夹后,打开就提示安全警告 宏已被禁用(复制操作时电脑莫名会变卡),而且原来文件里的数据也看不到了. 复 ...
- 第七章 将文件内容复制到另外文件
文章目录 第七章 将文件内容复制到另外文件 示例 第七章 将文件内容复制到另外文件 示例 本例显示了一个使用本文前面介绍的几个%Library.File方法的样例类. 在示例类Demo.FileDem ...
- linux cp 目录不存在自动创建,关于linux:Linux技巧cp命令自动创建不存在的目录和只复制修改的文件...
复制时主动创立不存在的子目录 在 Linux 中,能够应用 cp 命令的 --path 选项指定在复制的时候主动创立不存在的子目录. 例如执行上面的命令: $ cp --path java/com/s ...
- linux cp sync,通过SSH使用Rsync传输文件,复制和同步文件及目录
在本文中,我们将解释如何通过SSH使用rsync复制文件.当涉及在网络上的系统之间传输文件时,Linux和Unix用户可以使用许多工具,最流行的数据传输协议是SSH和FTP,虽然FTP很受欢迎,但总是 ...
- Linux之复制、移动文件及目录命令
Linux之复制.移动文件及目录命令 1. 复制.移动文件及目录命令的使用 命令 说明 cp 拷贝文件.拷贝目录 mv 移动文件.移动目录.重命名 cp命令效果图: 说明: 拷贝目录需要加上-r选项, ...
- Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数、复制到Excel文件、复制到文本文件(默认是tsv格式)、复制到文本文件(设置逗号分隔符)
Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数.复制到Excel文件.复制到文本文件(默认是tsv格式).复制到文本文件(设置逗号分隔符) ...
- c语言实现将两个文件复制到一个文件里_Python中复制文件的9种方法
作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/91277888 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Python 中有 ...
- C++学习之:复制和粘贴文件/文件夹
从剪贴板上获得要复制/剪贴的文件路径之后,如何完成文件/文件夹的粘贴呢.下面列出了两个函数用来完成这些功能 //复制的粘贴 DWORD VrvCopyFile( LPCWSTR lpSrc, LPCW ...
最新文章
- HDLBits 系列(40)如何写 TestBench 文件?
- Oracle 导出CSV、导出大数据
- 华视电子读卡器web开发_业界动态:华视电子官方微信公众号电子书架正式上线...
- Spring MVC DispatcherServlet介绍(2)
- andrioid 桌面
- matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
- eureka注册中心HA集群搭建
- @param注解的用法解析_SpringBoot 配置类解析
- linux下c语言编程实例
- Linux 音频编程 -- 如何使用ALSE库播放wav文件
- Spring源码之启动过程(四)—— Bean的实例化详解
- SpaceShooter打飞机教程笔记(一)
- RGB和CIELAB颜色空间转换及偏色检测
- opencv--轮廓拟合函数 boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()
- 【计算机网络】因特网通信
- c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- windows7更换系统时间服务器,Windows7系统更改时间同步服务器
- 【Aegisub相关】Lua程序设计 第4版(中文翻译)
- Wordpress企业网站建设SEO完整解决方案是什么?
- 商业模式的逻辑--清华大学X-lab沈拓学习笔记
热门文章
- spring boot入门,看这篇文章就够了
- node.js学习笔记14—微型社交网站
- java与c++的区别-转
- 分析easyVM 未完成)
- 滚动条颜色样式设置 说明
- [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)
- C# 系统应用之获取Windows最近使用记录
- 【数据结构与算法】之深入解析“合并区间”的求解思路与算法示例
- iOS之Socket的使用-AsyncSocket
- 2019\National _C_C++_C\试题 B: 递增序列