01
#include<windows.h>
02
#include<stdio.h>
03
BOOL
OccupyFile(
LPCTSTR
lpFileName );
04
BOOL
ReleaseFile(
LPCTSTR
lpFileName);
05
HANDLE
hTargetHandle;
06
int
main()
07
{
08
OccupyFile(
"c:\\111.txt"
);
09
printf
(
"此时文件不能被删除、移动、重命名等\n"
);
10
system
(
"pause"
);
11
ReleaseFile(
"c:\\111.txt"
);
12
printf
(
"此时文件可以被删除、移动、重命名等\n"
);
13
return
0;
14
}
15
void
RaiseToDebugP()
16
{
17
HANDLE
hToken;
18
HANDLE
hProcess = GetCurrentProcess();
19
if
( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )
20
{
21
TOKEN_PRIVILEGES tkp;
22
if
( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )
23
{
24
tkp.PrivilegeCount = 1;
25
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
26
BOOL
bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ;
27
}
28
CloseHandle(hToken);
29
}
30
}
31
BOOL
OccupyFile(
LPCTSTR
lpFileName )
32
{
33
BOOL
bRet;
34
RaiseToDebugP();
35
HANDLE
hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);
36
if
( hProcess == NULL )
37
{
38
hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8);
39
if
( hProcess == NULL )
40
return
FALSE;
41
}
42
HANDLE
hFile;
43
hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
44
if
( hFile == INVALID_HANDLE_VALUE )
45
{
46
CloseHandle( hProcess );
47
return
FALSE;
48
}
49
bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,
50
0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
51
CloseHandle( hProcess );
52
return
bRet;
53
}
54
BOOL
ReleaseFile(
LPCTSTR
lpFileName)
55
{
56
BOOL
bRet;
57
RaiseToDebugP();
58
HANDLE
hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);
59
if
( hProcess == NULL )
60
{
61
hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8);
62
if
( hProcess == NULL )
63
return
FALSE;
64
}
65
bRet=DuplicateHandle(hProcess,hTargetHandle,GetCurrentProcess(),NULL,0
,FALSE,DUPLICATE_CLOSE_SOURCE);
66
CloseHandle(hProcess);
67
return
bRet;
68
}
- 怎样让文件不被移动,删除,复制
- 想让你的某个文件不被删除不被移动不被重命名吗?很简单,see it!!!
- 文件创建、复制、移动、删除
- VC 移动,复制,删除文件
- VC 移动,复制,删除文件
- 文件创建、复制、移动、删除
- SDK复制删除移动文件
- 文件移动、复制、粘贴、删除
- 文件创建、复制、移动、删除
- java复制文件删除文件 移动文件 复制文件夹等
- [API学习]删除、复制、重命名、移动文件
- VC 移动,复制,删除文件(SHFileOperation)
- 复制、删除和移动文件和文件夹
- VC 复制移动删除重命名文件文件夹
- VC 移动,复制,删除文件(SHFileOperation)
- java 文件新建、移动、复制、删除
- VC 复制移动删除重命名文件文件夹 .
- VC 移动,复制,删除文件(SHFileOperation)
- qt5.0.2连接mysql
- SQL Server 限制IP登陆
- ADSGouraud.vp
- ADSGouraud.fp
- ecmall 挂件显示方法
- 怎样让文件不被移动,删除,复制
- 野指针
- mybatis控制台显示SQL语句
- C++ 引用 赋值or复制?
- .NET委托(在多线程编程中的应用):一个C#睡前故事
- 常用数值计算库
- HDU4035 Maze
- JQuery操作Select
- 面试项目<二>_银行业务调度系统