如何查詢檔案的IFilter

2021-09-06 05:40:51 字數 2505 閱讀 1169

ifilter介面定義了windows平台掃瞄檔案文字的操作,不同的ifilter實現儲存在登錄檔中。通過以下三個步驟獲取:

1、登錄檔hkey_local_machine\software\classes\\persistenthandler\下儲存了副檔名持久化處理器,獲取它的classname。以.docx為例:

hkey_local_machine\software\classes\.docx\persistenthandler

預設值為

2、沒有persistenthandler項的情況下需要查詢文件型別。登錄檔hkey_local_machine\software\classes\\下的預設值儲存了文件型別。在找到文件型別的情況下根據hkey_local_machine\software\classes\\clsid\儲存的classname前往hkey_local_machine\software\classes\clsid\\persistenthandler\獲取classname。

3、查詢文件型別失敗的情況下訪問hkey_local_machine\software\classes\\的content type值,在windows平台mime會儲存對應content type的extension。訪問hkey_local_machine\software\classes\mime\database\content type\\的extension值並重複第

一、第二步。以.sln為例:

hkey_local_machine\software\classes\.sln\persistenthandler\項不存在

hkey_local_machine\software\classes\.sln\的預設值為visualstudio.launcher.sln

hkey_local_machine\software\classes\visualstudio.launcher.sln\clsid的值為

hkey_local_machine\software\classes\clsid\\persistenthandler項不存在

hkey_local_machine\software\classes\.sln\的content type值為text/plain

hkey_local_machine\software\classes\mime\database\content type\text/plain\的extension值為.txt

hkey_local_machine\software\classes\.txt\persistenthandler\的預設值為

4、找到persistenthandler的classname後前往hkey_local_machine\software\classes\clsid\\persistentaddinsregistered\\獲取預設值,這個值得存放了持久化的classname。以.txt為例:

hkey_local_machine\software\classes\clsid\\persistentaddinsregistered\\預設值為。

5、根據這個持久化classname獲取hkey_local_machine\software\classes\clsid\\inprocserver32\的預設值,它存放了對應的dll路徑。

以.txt為例:

hkey_local_machine\software\classes\clsid\\inprocserver32\預設值為%systemroot%\system32\query.dll。

6、根據對應的dll路徑,可以通過loadlibrary函式載入該模組。使用getprocaddress獲取dllgetclassobject函式指標,呼叫dllgetclassobject獲取iclassfactory介面,由它的createinstance函式建立ifilter介面例項,簡單示例如下:

1

#include 「stdafx.h」

2 #include 3 #include 4 #include 5 #include 6 #include 7

8using

namespace

atl;

910 tchar szfilename =_t(「c:\\windows\\system32\\query.dll」);

11 tchar szclsid = _t(「」);

1213 hmodule hmodule =loadlibrary(szfilename);

1415 typedef hresult (*dllgetclassobjectfunc)(__in refclsid rclsid, __in refiid riid, __deref_out lpvoid far*ppv);

1617 dllgetclassobjectfunc dllgetclassobjectptr =reinterpret_cast(getprocaddress(hmodule, 「dllgetclassobject」));

1819 ccomptrpclassfactory;

2021

if(dllgetclassobjectptr)

ununtu如何查詢檔案

1.whereis 檔名特點 快速,但是是模糊查詢,例如 找 whereis mysql 它會把mysql,mysql.ini,mysql.所在的目錄都找出來.我一般的成都用這條命令.2.find name 檔名 特點 準確,但速度慢,消耗資源大,例如我想找到php.ini的準確位置,就需要用 fi...

Linux如何模糊查詢檔案

1.查詢指定檔案find name test.txt 2.模糊查詢檔案find name txt find 指定目錄 name i 檔名關鍵字 加上 為忽略大小寫 根據檔名和檔案內容模糊查詢檔案 find 指定目錄 name 檔名關鍵字 xargs grep i 內容關鍵字 例子 find name...

Linux中如何查詢檔案的內容

linux查詢檔案內容的常用命令方法。從檔案內容查詢匹配指定字串的行 grep 被查詢的字串 檔名 例子 在當前目錄裡第一級資料夾中尋找包含指定字串的.in檔案 grep thermcontact in 從檔案內容查詢與正規表示式匹配的行 grep e 正規表示式 檔名 查詢時不區分大小寫 grep...