2012-08-01 124 views
1

我正在使用以下函数来读取包含用户定义流的.dmp文件。现在我的问题是,在我的转储中,存在具有相同流类型的多个流。MiniDumpReadDumpStream和多个相同类型的流

BOOL WINAPI MiniDumpReadDumpStream(
    __in PVOID BaseOfDump, 
    __in ULONG StreamNumber, 
    __out PMINIDUMP_DIRECTORY *Dir, 
    __out PVOID *StreamPointer, 
    __out ULONG *StreamSize 
); 

至于我在我的测试中看到,上面的功能将只返回给我这样流的非常首次出现,忽略所有其他的,因为它通过其类型检索流,而不是指数次数。 如果我使用dumpchk.exe实用程序分析我的转储文件,它会正确显示所有其他存在的流​​。此外,我能够用我自己的阅读器代码正确地读出流,这很丑陋,所以我不想使用它。

所以只是为了澄清。这是MiniDumpReadDumpStream函数的问题吗?还是有一条规则可以使用相同类型来记录多个流?我无法在文档(msdn)中找到这样的说明... 或者有没有办法让函数返回其他流?

期待您的答案......

最好的问候, 费边

回答

0

由于事实上,在MINIDUMP_STREAM_TYPE列举的流类型是唯一的,这些类型出现0或1次在同一倾倒。自定义数据流(MINIDUMP_USER_STREAM)可以在同一个转储中存在0次或多次。无法使用MiniDumpReadDumpStream为自定义流编制索引。由于自定义流的大小是众所周知的 - 由您,将这些以编程方式放入转储的人员 - 您可以通过将光标移动到内存中来解决所有这些问题,一旦您使用MiniDumpReadDumpStream检索到第一个自定义流。

+0

谢谢你很好,先生。这当然有帮助。 – 2012-08-03 12:04:50

+0

@FabianCordes:不客气!实际上,您可以完全忽略MiniDumpReadDumpStream API并转到RAW结构访问。由于所有结构都有文档记录且不会更改,因此可以遍历(并索引)转储文件的内容。我做到了,工作得很好。 – mox 2012-08-03 13:29:39

相关问题