Win64 驅動核心程式設計 29 強制解鎖檔案

2021-07-29 23:44:08 字數 3962 閱讀 7478

強制解鎖因其他程序占用而無法刪除的檔案。

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 第二步 ...