2013-08-21 88 views
1

我想掛鉤在Ishellfolder中的函數enumobjects。 我這樣做是因爲我想在資源管理器中顯示用戶不存在的文件。 我的成功掛鉤FindNextFile並用FindFirstFile但不幸的是這個功能可以根據這個問題Which APIs are used by explorer.exe in Windows 7 to list files?Hook ishellfolder enumobjects

現在我試着鉤的IShellFolder :: EnumObjects因此通過資源管理器並不總是叫我勾

MyCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv) 

而這個函數內我有以下代碼:

if (IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder)) || 
    IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder2)) || 
    IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellDesktop) || 
    IsEqualCLSID(rclsid, (REFGUID) IID_IShellFolder)) 
{ 

    PDEBUG(L"IID_IShellFolder.2"); 
    IShellFolderCast *shellFolder = (IShellFolderCast *) *ppv; 

    orig_EnumObjects = (type_EnumObjects) GetInterfaceMethod(shellFolder->lpVtbl, 4); 
    if (!Mhook_SetHook((void **) &orig_EnumObjects, MyEnumObjects)) 
    { 
     PDEBUG(L". CoCreateInstance. Failed to set EnumObjects!"); 
    }else 
    { 
     PDEBUG(L". CoCreateInstance. success to set EnumObjects!"); 
    } 
} 

但它從來沒有進去,如果 人知道爲什麼嗎?

回答

0

只是改變

if (IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellFSFolder)) 

,現在,它的工作原理

0

下面列出了Windows API如何枚舉目錄中的文件。看看here

[編輯] 錯過了我的第一個條目你的問題的意圖。您想知道如何在訪問iShellFolder時捕捉事件?您可能已經有Looked Here?它有一些示例代碼,並討論了我認爲可能有用的主題。

+0

我的是,我已經勾用FindFirstFile(FindFirstFileEx)寫入/ FindNextFile/FindClose。我不想用它們!我用魔杖鉤住他們。並在Windows 7的Windows資源管理器中不要再使用它們在每個瀏覽到特定的目錄 – Beno

+0

我不想陷入事件。我想要替換由enumObjects返回的值 – Beno