模拟锁定文件

模拟锁定文件的Rring 3下的程序代码,代码来自于看雪中的HWL发表的一份代码中,我仅仅是看了下代码:


#include <stdio.h>

#include <Windows.h>







void GetAllProcessA(int pids[],int *procount)

{

	int i=0,c=0;

	HANDLE hProcess=0;

	for(i=8;i<19996;i+=4)

	{

		hProcess=OpenProcess(0x10,0,i);

		if (hProcess!=0)

		{

			pids[c]=i;

			CloseHandle(hProcess);

			c++;

		}

	}

	*procount=c;

}



int main()

{

	#define SE_DEBUG_PRIVILEGE 0x14 //DEBUG 权限



	//源码中没有__stdcall,所以一直报checkesp.c  line 14的错误

	typedef long (__stdcall *RTLADJUSTPRIVILEGE)(int, bool, bool, int*);

	typedef long (__stdcall *NTDUPLICATEOBJECT)(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,BOOLEAN,ULONG);



	int nEn = 0;

	int pids[4*260];

	int procsnum=0;

	char pFile[260];

	//得到函数的地址

	RTLADJUSTPRIVILEGE getdbg=(RTLADJUSTPRIVILEGE)GetProcAddress(GetModuleHandleW(L"ntdll.dll"),"RtlAdjustPrivilege");

	NTDUPLICATEOBJECT NtDuplicateObject=(NTDUPLICATEOBJECT)GetProcAddress(GetModuleHandleW(L"ntdll.dll"),"NtDuplicateObject");

	//提升进程权限

	getdbg(SE_DEBUG_PRIVILEGE , TRUE, FALSE,&nEn);//SE_DEBUG_PRIVILEGE =20

	//getdbg(20,1,0,&bRet);

	memset(pids,0,4*260);

	memset(pFile,0,260);

	printf("Input the file name you want to protect: ");

	scanf("%s",pFile);





	//新建文件

	//#define GENERIC_READ                     (0x80000000L)

	//HANDLE hsFile = CreateFileA(pFile, 0x80000000, 0, 0, 3, 0, 0);

	HANDLE hsFile = CreateFileA(pFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	//SetHandleInformation(hsFile,0,2);

	SetHandleInformation(hsFile, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE); //#define HANDLE_FLAG_PROTECT_FROM_CLOSE  0x00000002

	

	//得到当前存活的进程id列表和进程数目,

	GetAllProcessA(pids,&procsnum);

	//遍历当前存活的进程

	for(int i=0;i<procsnum;i++)

	{

		HANDLE htFile=0;

		//HANDLE hProcess = OpenProcess(0x1F0FFF, 0, pids[i]);

		//#define STANDARD_RIGHTS_REQUIRED         (0x000F0000L)

		//#define PROCESS_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \

		0xFFFF)

		//#define SYNCHRONIZE                      (0x00100000L)

		//不知道原作者为什么要用这些魔幻数,而不用PROCESS_ALL_ACCESS

		HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pids[i]);

		if (hProcess!=0)

		{

			//NtDuplicateObject((HANDLE)-1, hsFile, hProcess, &htFile, 0, 0, 4);

			NtDuplicateObject((HANDLE)-1, hsFile, hProcess, &htFile, 0, 0, 4); //DUPLICATE_SAME_ATTRIBUTES = 4

			CloseHandle(hProcess);

		}

	}

	getchar();

	printf("OK!\n");

	getchar();

	return 0;

}

代码分析:

遍历当前进程,将文件句柄拷贝到每一个进程中,从而实际锁定文件

时间: 2024-11-03 22:22:51

模拟锁定文件的相关文章

[网络课摘抄]8.1模拟控制文件丢失后的数据库恢复(完全恢复)

1.环境准备 1.1确认数据库版本 1.2确认数据库归档 1.3备份数据库文件 2模拟控制文件丢失后的数据库恢复(完全恢复). 2.1查看控制文件位置 2.2执行操作后删除控制文件 2.3启动数据库 启动数据库的时候发现数据库发生了报错,提示无法确认控制文件,检查告警文件,我们现在检查一下告警文件里的信息: 2.4重建控制文件 对于日志和数据文件都完整的情况下,如果只是控制文件丢失,那么重建控制文件是最好的一种解决方式,一般重建控制文件能够解决99%的问题,现在我们就重建控制文件. 2.5尝试打

VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法

(1)今天做实验电脑垃圾用到虚拟机Ubuntu 卡出了翔, 无奈只能强制关机,重开机 但是开机之后就出错了: 找了好久 ,这是因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果突然系统崩溃了,虚拟机就来不急把已经锁定的文件解锁,所以你在启动的时候,就会提示无法锁定文件.解决方法如下: 在你的虚拟机的安装目录下,搜索  [.lck] 删除这三个搜索到的文件 即可! ok! 又回来了!哈哈!

android studio 使用SVN 锁定文件,防止别人修改(基于Android studio 1.4 )

首先假设开发 A , 和 开发 B , 在使用 SVN 进行项目管理.那么A如何才能 某个锁定文件,防止B修改. 1.第一步,给这个文件加锁    完成这一步,则这个文件就别锁定了. 2.第二步,假如B去把这个文件修改了几行代码,然后 commit  开发B  commit 失败,因为A已经锁定了文件 3.第三步,开发A 解除文件锁定 4.第四步,A把文件解锁后,这个开发 B 就可以正常的commit 了

解决VMware Workstation错误:未能锁定文件

如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提示:锁定文件失败,打不开磁盘或快照所依赖的磁盘,这是因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果突然系统崩溃了,虚拟机就来不急把已经锁定的文件解锁,所以你在启动的时候,就会提示无法锁定文件,如下图: 问题出现的原因:      虚拟磁盘(.vmdk)本身有一个磁盘保护机制,为了防止多台虚拟机同时访问同一个虚拟磁盘(.vmdk)带来的数据丢失和性能削减方面的隐患,每次启动虚拟机的时候虚拟机会使用扩展名为.lc

Vmware无法获取快照信息 锁定文件失败

今天早上起来发现虚拟机崩了: 造成原因: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动, 会提示:锁定文件失败,打不开磁盘或快照所依赖的磁盘: 这是因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果突然系统崩溃了,虚拟机就来不急把已经锁定的文件解锁,所以你在启动的时候,就会提示无法锁定文件,如下图: 解决办法:打开你存放虚拟机系统文件的文件夹,注意,是系统文件,不是虚拟机的安装目录,也就是你建立虚拟机的时候下图设置的位置: 然后以下面关键字搜索这个文件夹:*.l

VMware:锁定文件失败,未定启动虚拟机

如果VMware提示: 锁定文件失败 ------ 开启模块DiskEarly的操作失败. 未能启动虚拟机. 试了好多办法都不行,最终还得在虚拟机文件中找方法-- 在你的虚拟机磁盘存放的目录下搜索:*.lck 不出意外的话会有3个文件,都以字母M开头,将它们统统删掉即可.(M后面的数字你我均不相同,所以我就不贴图了) 版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人.

PHP关于文件与文件夹(1) 写入文件 文件权限 三、锁定文件

一.文件权限 总之中的一个切都是为了保证文件夹的安全,保证文件夹的安全比保证文件的安全更重要. 二.写入文件 file_put_contents($file,$data);  //假设没有的话会创建.有的话覆盖原文件: file_put_contents($file,$data,FILE_APPEND); //没的话会创建,有的话追加在后面: file_put_contents($file,$data.PHP_EOL,FILE_APPEND);//有换行 [样例]: <!DOCTYPE html

VMware报错“原因: 未能锁定文件”,打开失败

原文:http://jingyan.baidu.com/article/425e69e6bf64dbbe15fc16fe.html VMware打开复制的虚拟机,报错"原因: 未能锁定文件",打开失败,可能的原因是复制虚拟机时,被复制的虚拟机未关机或未挂起或未正常关闭,磁盘锁文件未自动删除,下次启动虚拟机时就会弹出上面的那个错误. Vmware为了防止有多虚拟机共用一个虚拟磁盘造成数据的丢失和性能的削弱,每次启动Vmware时会给虚拟磁盘加一个磁盘锁(后缀为.lck的那个文件),对虚拟

虚拟机锁定文件失败,开启模块snapshot失败解决办法

今天由于没有正常关闭虚拟机,导致出现打开虚拟机提示:锁定文件失败 虚拟机开启模块snapshot失败,后来从网上找打了资料解决了.解决办法:一:打开你存放虚拟机系统文件的文件夹,注意,是系统文件,不是虚拟机的安装目录,也就是你建立虚拟机的时候下图设置的位置 二:用下面关键字搜索这个文件夹:*.lck 如图: 找到这三个文件删除即可 四:问题解决了