関数 enumobjects を Ishellfolder にフックしようとしています。ユーザーの存在しないファイルをエクスプローラーで表示したいのでやっています。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!");
}
}
しかし、誰かが理由を知っているなら、それは決してその中に入りませんか?