16,548
社区成员




BOOL CADlg::OccupyFile(LPCTSTR lpFileName)
{
// 提升自身权限
RaiseToDebugP();
BOOL bRet;
DWORD dwPid;
HANDLE hFile;
HANDLE hTargetHandle;
// 自己Debug测试时最好用全局DeskProcessPid()
// m_GetPid.GetProcessID(strName)返回strName进程名的pid值
char * strName="explorer.exe";
dwPid = m_GetPid.GetProcessID(strName);
HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE,dwPid);
if ( hProcess == NULL )
return FALSE;
//以独占模式打开目标文件
hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
CloseHandle( hProcess );
return FALSE;
}
// 把文件句柄复制到pid=4的进程中去,只要pid=4的进程不退出,
// 因为PID=4是system这个进程,这样谁也动不了你的目标文件
bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,
0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
CloseHandle( hProcess );
return bRet;
}