首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniDumpWriteDump()进入命名管道,然后进入ReadFile()

MiniDumpWriteDump()进入命名管道,然后进入ReadFile()
EN

Stack Overflow用户
提问于 2020-09-16 18:07:54
回答 1查看 257关注 0票数 0

我想做的是使用MiniDumpWriteDump()对命名的管道进行写,然后自己读/写它。如果我将内容直接写入文件,我就能够成功地执行转储。但是,虽然对命名管道的写入已经成功,但是后续的读/写操作并不顺利。我可以从管道中读取所有数据,但是当它被写入时,DMP文件似乎被破坏了。

下面是ReadFile()逻辑:

代码语言:javascript
复制
while (ReadFile(hInboundPipe, &vecBuffer[dwOffset], vecBuffer.size() - dwOffset, &dwRead, NULL)) {
    dwOffset += dwRead;

    while (dwOffset >= vecBuffer.size()) {
        vecBuffer.resize(vecBuffer.size() + iBuffer * sizeof(char));
    }
}

下面是WriteFile()逻辑:

代码语言:javascript
复制
HANDLE hDumpFile = CreateFileW(L"C:\\test.dmp", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hDumpFile , &vecBuffer[0], dwOffset, &dwOutBytes, NULL);
CloseHandle(hDumpFile);

我不确定它是否适用于根本原因,但下面是命名管道设置:

代码语言:javascript
复制
    HANDLE hInboundPipe = CreateNamedPipe(
    szPipeName,
    PIPE_ACCESS_DUPLEX,
    PIPE_WAIT | PIPE_TYPE_BYTE,
    PIPE_UNLIMITED_INSTANCES,
    0,
    0,
    (DWORD)-1,
    &SecAttrib);

没有从GetLastError()返回的任何错误。我漏掉了什么明显的东西吗?

编辑:添加MiniDumpWriteDump()是如何响应评论的。

代码语言:javascript
复制
HANDLE hDump = CreateFile(szPipeName, GENERIC_ALL, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
MiniDumpWriteDump(hProcess, pid, hDump, mdValue, NULL, NULL, NULL);
CloseHandle(hDump);

更新:我有一种印象,那就是成批阅读在某种程度上降低了数据。为了测试这一点,我增加了命名管道的缓冲区,以适应整个转储,而不进行任何调整大小。我还增加了vecBuffer大小以匹配。现在,在执行ReadFile()操作时,我接收到整个转储,但仍然是关闭。我仍然在使用各种命名管道设置,试图找出需要做些什么才能让MiniDumpWriteDump()为命名管道提供有效的输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 23:22:41

看来这是不可能做到的。有关更多信息,请参见注释。无法从MiniDumpWriteDump()直接写入命名管道,因为传入的句柄必须具有查找的能力。命名管道没有该功能,因此必须使用合法的文件句柄。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63925663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档