将MiniDumpWriteDump放入命名管道,然后读取File

问题描述

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

这是ReadFile()逻辑:

while (ReadFile(hInboundPipe,&vecBuffer[dwOffset],vecBuffer.size() - dwOffset,&dwRead,NULL)) {
    dwOffset += dwRead;

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

这是WriteFile()逻辑:

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);

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

    HANDLE hInboundPipe = CreateNamedPipe(
    szPipeName,PIPE_ACCESS_DUPLEX,PIPE_WAIT | PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,(DWORD)-1,&SecAttrib);

没有从GetLastError()报告任何错误。我缺少明显的东西吗?

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

HANDLE hDump = CreateFile(szPipeName,GENERIC_ALL,NULL);
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
MiniDumpWriteDump(hProcess,pid,hDump,mdValue,NULL);
CloseHandle(hDump);

更新: 我给人的印象是,按块读取在某种程度上会丢失数据。为了测试这一点,我增加了命名管道的缓冲区,以容纳整个转储,而无需进行任何大小调整。我还增加vecBuffer的大小以进行匹配。现在,当执行ReadFile()操作时,我收到了整个转储文件,但它仍静止。我仍在使用各种命名管道设置,试图弄清楚需要做些什么才能使MiniDumpWriteDump()向命名管道提供有效的输出

解决方法

似乎无法完成。有关更多信息,请参见注释。无法完成从Selected = IF ( SELECTEDVALUE ( TableName[Value] ) = "$",1,0 ) 直接写入命名管道的操作,因为传入的句柄必须具有查找的能力。命名管道不具有该功能,因此您必须使用合法的文件句柄。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...