LoadIFilter()在所有PDF上都失败(但MS的filtdump.exe没有.)

Mic*_*eld 6 c# interop ifilter

我正在尝试编写一个C#实用程序,它模仿filtdump.exeWindows Search SDK 的行为(因为filtdump它本身似乎不是可再发行的.)我遇到了矛盾和/或不存在的文档和技术问题的组合我似乎无法追查.我希望有人可以帮助消除这些障碍中的一个或另一个......

根据MSDN,filtdump用于ILoadFilter::LoadIFilter加载它的IFilter.我认为MSDN撒谎,因为它声称ILoadFilter::LoadIFilter只存在于Windows 7上,但filtdump在earler OS上工作正常.进程监视器表明,它实际上是调用LoadIFilter()query.dll,所以这是我在做什么:

public static class NativeMethods
{
    // From Windows SDK v7.1, NTQuery.h
    [DllImport("query.dll", CharSet = CharSet.Unicode)]
    public static extern int LoadIFilter(
        string pwcsPath,
        [MarshalAs(UnmanagedType.IUnknown)] 
        ref object pUnkOuter,
        ref IFilter ppIUnk);
}

object iUnknown = null;
IFilter filter = null;
var result = NativeMethods.LoadIFilter(args[0], ref iUnknown, ref filter);
if (result != ResultCodes.S_OK)
{
  Console.WriteLine("Failed to load an IFilter for {0}: {1}", args[0], result);
  return;
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这个应用程序filtdump给我相同的结果 - 他们可以打开文本,从Word文档和Outlook电子邮件中提取和提取文本,并且两者都在没有IFilter的同一组其他文档上失败.但是,PDF正在给我一个问题.Filtdump设法打开并从我抛出的大部分PDF中提取文本,但是我用自己的应用程序尝试的每一个PDF都给出了HRESULT为0x80004005,E_FAIL.

这是同样的错误了这个问题,但我发现它在每一个 PDF,并且filtdump是没有,所以我知道的IFilter正在至少一些文件.有没有人之前做过这种事情的PDF可以看出我做错了什么?

cha*_*ase 3

您可能想查看这篇博文。简而言之,Adobe PDF 过滤器 v10 使用允许使用该过滤器的应用程序白名单,其中包括 Microsoft 的诊断工具,据称是filtdump.exe作为 \xe2\x80\x9c 安全措施\xe2\x80\x9d。

\n