強制解鎖因其他程序占用而無法刪除的檔案。
1.呼叫 zwquerysysteminformation 的 16 功能號來列舉系統裡的控制代碼
2.開啟擁有此控制代碼的程序並把此控制代碼複製到自己的程序
3.用 zwqueryobject 查詢控制代碼的型別和名稱
4.如果 發現此控制代碼的型別是檔案控制代碼, 名稱和被鎖定的檔案一致,就關閉此控制代碼
5.重複 2、3、4 步,直到遍歷完系統裡所有的控制代碼
第4步中因為是要解鎖其他程序占用的檔案所以有如下細節:
1.用 kestackattachprocess「依附」到目標程序
2.用 obsethandleattributes 設定控制代碼為「可以關閉」
3.用 zwclose 關閉控制代碼
4.用 keunstackdetachprocess 脫離「依附」目標程序
以下**適用於win7 x64,如果想支援全系統,請對應調教。
#include #define kprintf dbgprint
#define kmalloc(_s) exallocatepoolwithtag(nonpagedpool, _s, 'sysq')
#define kfree(_p) exfreepool(_p)
typedef struct _system_handle_table_entry_info system_handle_table_entry_info, *psystem_handle_table_entry_info;
typedef struct _system_handle_information system_handle_information, *psystem_handle_information;
ntsysapi
ntstatus
ntapi
zwqueryobject
(handle handle,
ulong objectinformationclass,
pvoid objectinformation,
ulong objectinformationlength,
pulong returnlength optional);
ntsysapi
ntstatus
ntapi
zwquerysysteminformation
(
ulong systeminformationclass,
pvoid systeminformation,
ulong systeminformationlength,
pulong returnlength);
ntsysapi
ntstatus
ntapi
zwduplicateobject
(handle sourceprocesshandle,
handle sourcehandle,
handle targetprocesshandle optional,
phandle targethandle optional,
access_mask desiredaccess,
ulong handleattributes,
ulong options);
ntsysapi
ntstatus
ntapi
zwopenprocess
(
phandle processhandle,
access_mask accessmask,
pobject_attributes objectattributes,
pclient_id clientid);
typedef enum _object_information_class object_information_class, *pobject_information_class;
typedef struct _object_basic_information object_basic_information, *pobject_basic_information;
/*typedef struct _object_name_information object_name_information, *pobject_name_information;*/
typedef struct _object_type_information object_type_information, *pobject_type_information;
typedef struct _kapc_state
kapc_state, *pkapc_state;
typedef struct _object_handle_flag_informationobject_handle_flag_information, *pobject_handle_flag_information;
ntkernelapi
ntstatus
obsethandleattributes (handle handle, pobject_handle_flag_information handleflags, kprocessor_mode previousmode);
ntkernelapi
void
kestackattachprocess(peprocess process, pkapc_state apcstate);
ntkernelapi
void
keunstackdetachprocess(pkapc_state apcstate);
ntkernelapi
ntstatus
pslookupprocessbyprocessid (in handle processid,out peprocess *process);
peprocess lookupprocess(handle pid)
void unicodestringtochararray(punicode_string dst, char *src)
void forceclosehandle(peprocess process, ulong64 handlevalue)
void closefilehandle(char *szfilename)
;buffer=kmalloc(buffersize);
memset(buffer,0,buffersize);
status = zwquerysysteminformation(16, buffer, buffersize, 0); //systemhandleinformation
while(status == 0xc0000004) //status_info_length_mismatch
if (!nt_success(status)) return;
qwhandlecount=((system_handle_information *)buffer)->numberofhandles;
p=(system_handle_table_entry_info *)((system_handle_information *)buffer)->handles;
//enum handle proc
for(i=0;iname),szfile);
exfreepool( pnameinfo );
zwclose(hdupobj);
zwclose(hprocess);
//if(!_stricmp(szfile,szfilename))
if(strstr(_strlwr(szfile),szfilename))
}}
執行結果:
之前:
啟動驅動之後可以成功刪除因為其他程序占用而導致的檔案無法刪除。
宋孖健,13
安裝環境 win64
1.安裝環境 win64 2.安裝 2.2 配置環境變數 將安裝目錄新增至path變數中 3.在解壓目錄中增加配置檔案 my.ini 3.1 在配置檔案中新增如下資訊 mysql 設定mysql客戶端預設字符集 default character set utf8 mysqld 設定3306埠 po...
win64位系統安裝numpy
1.進入windows的控制台,在控制台中輸入pip install wheel,安裝wheel這個包。2.進入根據自己python的版本號和作業系統位數選擇合適的安裝檔案。安裝完成 驗證一下 1.在cmd中執行python,在python shell中輸入from numpy import 引庫。...
win64安裝mongodb詳細過程
win64安裝mongodb詳細過程 第一步 進入mongodb官網 點選右上角的download,進入 介面根據作業系統選擇不同的版本,此處只講解如何在win7 64位作業系統安裝mongodb。mongodb win32 x86 64 2008plus ssl 3.4.4 signed 第二步 ...