解除檔案的獨佔鎖定

2021-06-22 22:55:50 字數 2704 閱讀 2348

今天看到一段**:

handle hfile = ::createfile( l"nul", generic_read, 0, null, open_existing, 0, 0);
剛開始還以為是作者寫錯了檔名,把「null」寫成了"nul"。可是經過查詢才知道原來這段**的作用是代開系統中的所有檔案的控制代碼。然後往下繼續所有資料,發現同過這種方式可以解除檔案獨佔的鎖定。具體方法:

bool getvolumenamebyhandle(handle hfile, lptstr szvolumename, uint cchmax)

; tchar * piter = szbuf;

int i =0;

by_handle_file_information stfileinfo = ;

do if(0== getlogicaldrivestrings(_countof(szbuf), szbuf))

for(; piter; piter+=4)

}} } while (false);

return bresult;

}

bool getfilepathfromhandlew(handle hfile, lptstr lpszpath, uint cchmax)

; io_status_block isb = ;

file_name_information fni = ;

handle hntdll = null;

pfn_zwqueryinformationfile pfn_zwqueryinformationfile = null;

do hntdll = getmodulehandle(text("ntdll.dll"));

if (null == hntdll)

pfn_zwqueryinformationfile = (pfn_zwqueryinformationfile)

getprocaddress(hntdll, text("zwqueryinformationfile"));

if (null == pfn_zwqueryinformationfile)

// 9 == filenameinformation

if (0!= pfn_zwqueryinformationfile(hfile, &isb, &fni, sizeof(fni), 9))

if (false == getvolumenamebyhandle(hfile, szvalue, _countof(szvalue)))

lstrcpyn(lpszpath, szvalue, cchmax);

bresult = true;

} while (false);

return bresult;

}

bool deletelockedfile(dword dwprocessid, handle hfile)

; handle htargefile = invalid_handle_value;

handle hprocess = null;

bool bresult = false;

do if (false == duplicatehandle(hprocess, hfile,

getcurrentprocess(), &htargefile,

0, false, duplicate_same_access))

if (invalid_handle_value==htargefile || null==htargefile)

if (false == getfilepathfromhandle(htargefile,

sztargetname, _countof(sztargetname)))

closehandle(htargefile);

htargefile = invalid_handle_value;

if (0 == lstrlen(sztargetname))

if (false == duplicatehandle(hprocess, hfile,

getcurrentprocess(), &htargefile,

0, false,

duplicate_same_access|duplicate_close_source))

if (invalid_handle_value==htargefile || null==htargefile)

closehandle(htargefile);

htargefile = invalid_handle_value;

bresult = deletefile(sztargetname);

} while (false);

if (invalid_handle_value != htargefile && null != htargefile)

if (hprocess)

return bresult;

}

1.任何執行中的程式或dll都可以被刪除,包括filekill360本身

系統檔案也可以刪除,不過系統的檔案檢查會將其自動恢復,若關閉自動恢復或將dllcache中檔案一起刪除,也可以刪除之

2.被獨佔開啟的檔案,被獨佔(拒絕讀寫共享)的檔案,也可以刪除

TFS2008解除獨佔式鎖定檔案命令

使用場景 如果專案團隊成員a對專案某個檔案以獨佔式方式簽出,恰好那天該成員a沒有來上班而成員需要對此檔案進入修改並check in,這時需要先把a對該檔案的鎖定解除。沒有ide可以使用,只能使用下面的命令來解決。成員a的使用者名為 usera tfs伺服器ip為 192.168.1.100,埠為 8...

C 解除檔案鎖定

public static void streamsfile string fi 執行引數 p.startinfo.useshellexecute false 不使用系統外殼程式啟動程序 p.startinfo.createnowindow true 不顯示dos程式視窗 p.startinfo.r...

TFS強制解除被獨佔簽出的檔案

1.強制解除被獨佔簽出的檔案必須使用命令工具tf.exe 該檔案在c program files microsoft visual studio 10.0 common7 ide目錄下,如果是64位系統則在c program files 86 microsoft visual studio 10.0...