当前位置: 首页 > article >正文

Windows内核对象(3) -- DuplicateHandle实现文件占用

DuplicateHandle的用法参考:http://blog.csdn.net/china_jeffery/article/details/79171307

实现的原理大致就是,通过DuplicateHandle拷贝文件句柄给另外一个进程(一般是系统进程),因为系统进程不会被关闭,所以达到了占用某个文件,不让其他进程删除、读取、写入等。

因为需要拷贝文件句柄给系统进程,所以涉及到打开系统进程,可能需要提权操作,提权的实现请参考:Windows环境下提升进程的权限,一般授权给进程SE_DEBUG_NAME权限即可。

实现一个用于锁住文件的函数LockFile,将文件句柄复制给系统csrss.exe进程,函数实现如下:

bool LockFile(LPCTSTR lpFilePath) {if (lpFilePath == NULL)return false;// 查找进程csrss.exe//DWORD dwCsrssProcessID = 0;PROCESSENTRY32 pe;pe.dwSize = sizeof(PROCESSENTRY32);HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);while (Process32Next(hSnapShot, &pe)) {if (lstrcmpi(pe.szExeFile, TEXT("csrss.exe")) == 0) {dwCsrssProcessID = pe.th32ProcessID;break;}}CloseHandle(hSnapShot);// 未找到if (dwCsrssProcessID == 0) {return false;}HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwCsrssProcessID);// 打开失败,可能需要提权// See: http://blog.csdn.net/china_jeffery/article/details/79173417if (hProcess == NULL) {return false;}HANDLE hFile = CreateFile(lpFilePath,GENERIC_READ | GENERIC_EXECUTE | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {CloseHandle(hProcess);return false;}HANDLE hTargetHandle = INVALID_HANDLE_VALUE;BOOL bRet = DuplicateHandle(GetCurrentProcess(),hFile,hProcess,&hTargetHandle,0,FALSE,DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);CloseHandle(hProcess);return (bRet == TRUE);
}
http://www.lryc.cn/news/2419880.html

相关文章:

  • .NET(C#) 基础教程及进阶教程
  • jquery按钮置灰_点击提交按钮后按钮变灰色不可用状态的三种方法
  • 【转】数据脱敏、加密、假名化、去标识化与匿名化的区分
  • Windows7系统关闭端口
  • ajaxfileupload的使用实例
  • CSS之 border 属性
  • MFC EnableWindow() 启用和禁用控件(设置个控件或窗口可用/不可用),ShowWindow()使某个控件或窗口(显示/不显示)可见/不可见
  • 谷歌地图API
  • 【openstack】Nova(Folsom)虚拟化层Driver分析
  • [1166]CDH集群删除主机节点
  • 怎么利用tombstones墓碑文件分析崩溃问题
  • 最简单的视频网站(JavaEE+FFmpeg)
  • Linux——简介
  • JavaEE进阶(12)Spring事务和事务传播机制:事务回顾、Spring中事务的实现、@Transactional详解(用法、rollbackFor、事务隔离级别、事务传播机制)
  • W5100常见问题解答汇总(持续更新中)
  • Vue 点击进入下一页,下一页从顶部开始
  • 3D 建模中的法线贴图解释
  • Rational rose下载,安装,破解
  • http常见状态码汇总
  • 网页设计基础
  • 个人中心页面如何设计,一文教会你,有案例。
  • 计算机网络知识点总结
  • WinForm(一) WinForm入门与基本控件使用
  • 无线网络通信技术完全介绍
  • XXOO 传说90黑阔论坛
  • XFire完整入门教程
  • 什么是IDP,如何制定个人IDP​计划
  • oracle 四舍五入日期,Oracle时间运算(日期截取及四舍五入)
  • 浅谈synchronized、wait、notify和notifyAll
  • 快速傅里叶变换(蝶形算法c++源代码)