如何实现 Unlocker 这个软件的解锁功能?
我用下面的代码使得一个文件被一个进程所占用,但是我现在想实现一个像 Unlocker 软件一样的解锁功能,怎么才能实现让这个被占用的文件再次能被运行呢?
BOOL hFileCope( LPCTSTR lpFileName,const DWORD dwRemoteProcessId)
{
BOOL bRet;
//提升自身权限
if(EnableDebugPriv(SE_DEBUG_NAME))
{
printf("add privilege error");
return FALSE;
}
//打开一个pid的进程,只要是存在的进程
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId); //
if ( hProcess == NULL )
{
return FALSE;
}
HANDLE hFile;
HANDLE hTargetHandle;
//以独占模式打开目标文件
hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
CloseHandle( hProcess );
return FALSE;
}
//把文件句柄复制到pid的进程中去,这样,只要pid的进程不退出,谁也动不了目标文件
bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,
0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
CloseHandle( hProcess );
return bRet;
}