首页 > 代码库 > 解除文件的独占锁定
解除文件的独占锁定
今天看到一段代码:
HANDLE hFile = ::CreateFile( L"NUL", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
刚开始还以为是作者写错了文件名,把“NULL”写成了"NUL"。可是经过查询才知道原来这段代码的作用是代开系统中的所有文件的句柄。然后往下继续所有资料,发现同过这种方式可以解除文件独占的锁定。具体方法:
BOOL GetVolumeNameByHandle(HANDLE hFile, LPTSTR szVolumeName, UINT cchMax) { BOOL bResult = FALSE; TCHAR szBuf[500] = { 0 }; TCHAR * pIter = szBuf; int i =0; BY_HANDLE_FILE_INFORMATION stFileInfo = { 0 }; do { if(FALSE == GetFileInformationByHandle(hFile, &stFileInfo)) { break; } if(0== GetLogicalDriveStrings(_countof(szBuf), szBuf)) { break; } for(; pIter; pIter+=4) { DWORD dwVolumeSerialNumber =0; if(GetVolumeInformation(pIter, NULL, 0, &dwVolumeSerialNumber, NULL, NULL, NULL, 0)) { if(dwVolumeSerialNumber == stFileInfo.dwVolumeSerialNumber) { lstrcpyn(szVolumeName, pIter, cchMax); bResult = TRUE; break; } } } } while (FALSE); return bResult; }
BOOL GetFilePathFromHandleW(HANDLE hFile, LPTSTR lpszPath, UINT cchMax) { BOOL bResult = FALSE; TCHAR szValue[MAX_PATH] = { 0 }; IO_STATUS_BLOCK isb = { 0 }; FILE_NAME_INFORMATION fni = { 0 }; HANDLE hNtDll = NULL; PFN_ZwQueryInformationFile pfn_ZwQueryInformationFile = NULL; do { if (INVALID_HANDLE_VALUE=http://www.mamicode.com/=hFile || NULL==lpszPath ||0==cchMax) {>
BOOL DeleteLockedFile(DWORD dwProcessID, HANDLE hFile) { TCHAR szTargetName[MAX_PATH] = { 0 }; HANDLE hTargeFile = INVALID_HANDLE_VALUE; HANDLE hProcess = NULL; BOOL bResult = FALSE; do { hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID); if (NULL == hProcess) { break; } if (FALSE == DuplicateHandle(hProcess, hFile, GetCurrentProcess(), &hTargeFile, 0, FALSE, DUPLICATE_SAME_ACCESS)) { break; } if (INVALID_HANDLE_VALUE=http://www.mamicode.com/=hTargeFile || NULL==hTargeFile) {>1.任何运行中的程序或DLL都可以被删除,包括FileKill360本身
系统文件也可以删除,不过系统的文件检查会将其自动恢复,若关闭自动恢复或将dllcache中文件一起删除,也可以删除之
2.被独占打开的文件,被独占(拒绝读写共享)的文件,也可以删除
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。