阻止删除文件(文件占坑)的VB代码(翻译自VC版)
呵呵
下面是关键代码的VC和VB的对照翻译
所有声明、结构、常量都有
提权代码就自己随便找一个吧……
使用方法DupFile “要阻止删除的文件路径”,进程ID
引用:
’VC版摘录自
http://forum.eviloctal.com/thread-32738-1-3.html ’VB版由兔子翻译,zhouweizhu@126.com
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function DuplicateHandle Lib "kernel32" (ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, ByVal hTargetProcessHandle As Long, lpTargetHandle As Long, ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwOptions As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Const WebSite As String = "http://www.imcode.cn"
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_WRITE = &H2
Private Const FILE_SHARE_READ = &H1
Private Const OPEN_ALWAYS = 4
Private Const FILE_ATTRIBUTE_NORMAL = &H80
’typedef struct _SECURITY_ATTRIBUTES {
’ DWORD nLength;
’ LPVOID lpSecurityDescriptor;
’ BOOL bInheritHandle;
’ } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
Private Const PROCESS_DUP_HANDLE As Long = &H40
Private Const INVALID_HANDLE_VALUE = -1
Private Const DUPLICATE_SAME_ACCESS = &H2
Private Const DUPLICATE_CLOSE_SOURCE = &H1
Dim xxNull As SECURITY_ATTRIBUTES
’BOOL DupFile( LPCTSTR lpFileName , int pid )
Public Function DupFile(lpFileName As String, pid As Long) As Boolean
’{
’ BOOL bRedup;
Dim bRedup As Boolean
’ HANDLE hFile,hProcess;
Dim hFile As Long, hProcess As Long
’ HANDLE hTargetHandle;
Dim hTargetHandle As Long
’
’ EnablePrivilege(SE_DEBUG_NAME,TRUE);
EnablePrivilege (SE_DEBUG) ’提升权限
’
’ if(ProcessList(pid)) printf("Process Name: %s\n",szProcessName);
’
’ hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, pid);
hProcess = OpenProcess(PROCESS_DUP_HANDLE, False, pid)
’ if ( hProcess == NULL )
If hProcess = 0 Then
’ {
’ printf("PROCESS_DUP_HANDLE Error\n");
MsgBox "PROCESS_DUP_HANDLE Error"
’ return FALSE;
DupFile = False
Exit Function
’ }
End If
’’ hFile = CreateFile( lpFileName,
’ GENERIC_READ,
’ 0,
’ NULL,
’ OPEN_ALWAYS,
’ FILE_ATTRIBUTE_NORMAL,
’ NULL);
’
hFile = CreateFile(lpFileName, GENERIC_READ, 0, xxNull, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
’ if ( hFile == INVALID_HANDLE_VALUE )
If (hFile = INVALID_HANDLE_VALUE) Then
’ {
’ printf("CreateFile Error\n");
MsgBox "CreateFile Error"
’ CloseHandle( hProcess );
CloseHandle hProcess
’ return FALSE;
DupFile = False
Exit Function
’ }
End If
’
’ bRedup = DuplicateHandle( GetCurrentProcess(),
’ hFile,
’ hProcess,
’ &hTargetHandle,
’ 0,
’ FALSE,
’ DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
’
bRedup = DuplicateHandle(GetCurrentProcess(), hFile, hProcess, VarPtr(hTargetHandle), 0, False, DUPLICATE_SAME_ACCESS Or DUPLICATE_CLOSE_SOURCE)
’ CloseHandle( hProcess );
CloseHandle hProcess
’ return bRedup;
DupFile = bRedup
’}
End Function