我正在尝试在 Ishellfolder 中挂钩函数 enumobjects 。我这样做是因为我想在资源管理器中显示用户不存在的文件。我成功挂钩 FindNextFile 和 FindFirstFile 但不幸的是,这个函数并不总是由资源管理器根据这个问题在 Windows 7 中由 explorer.exe 使用哪些 API 来列出文件?
现在我尝试挂钩 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!");
}
}
但如果有人知道为什么,它永远不会进入内部?