如何实现 Unlocker 这个软件的解锁功能?

allanpk716 2009-06-12 12:08:56
我用下面的代码使得一个文件被一个进程所占用,但是我现在想实现一个像 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;
}




...全文
134 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuquanxian 2012-10-10
  • 打赏
  • 举报
回复
顶,我也想知道

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧