windows-nt/Source/XPSP1/NT/sdktools/debuggers/dumpconv/exe/dumpconv.cpp

123 lines
2.7 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//-----------------------------------------------------------------------
// @doc
//
// @module convert crash dump to triage dump for crash dump utilities
//
// Copyright 1999 Microsoft Corporation. All Rights Reserved
//
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <tchar.h>
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <dbgeng.h>
BOOL
DoConversion(
LPSTR szInputDumpFile, // full or kernel dump
HANDLE OutputDumpFile // triage dump file
);
void Usage()
{
fprintf(stderr, "dmpconv -i input_dump_file -o output_dump_file\n");
fprintf(stderr, "\tinput dump file is full or kernel crash dump.\n");
fprintf(stderr, "\toutput is triage crash dump.\n");
}
int
WINAPIV
main(
int argc,
PTSTR argv[ ],
PTSTR envp[]
)
{
IDebugClient *DebugClient;
PDEBUG_CONTROL DebugControl;
HRESULT Hr;
char *szInputDumpFile = NULL;
char *szOutputTriageDumpFile = NULL;
int iarg;
for(iarg = 1; iarg < argc; iarg++)
{
if (argv[iarg][0] == '/' ||
argv[iarg][0] == '-')
{
if (_tcslen(argv[iarg]) < 2)
{
Usage();
exit(-1);
}
switch(argv[iarg][1])
{
default:
Usage();
exit(-1);
case 'i':
case 'I':
szInputDumpFile = argv[++iarg];
break;
case 'o':
case 'O':
szOutputTriageDumpFile = argv[++iarg];
break;
}
}
else
{
Usage();
exit(-1);
}
}
if (szInputDumpFile == NULL ||
szOutputTriageDumpFile == NULL)
{
Usage();
exit(-1);
}
if ((Hr = DebugCreate(__uuidof(IDebugClient),
(void **)&DebugClient)) != S_OK)
{
return Hr;
}
if (DebugClient->QueryInterface(__uuidof(IDebugControl),
(void **)&DebugControl) == S_OK)
{
if (DebugClient->OpenDumpFile(szInputDumpFile) == S_OK)
{
// Optional. Conversion does not require symbols
//if (DebugSymbols->SetSymbolPath("C:\\") == S_OK)
DebugControl->WaitForEvent(DEBUG_WAIT_DEFAULT, INFINITE);
if (DebugClient->WriteDumpFile(szOutputTriageDumpFile,
DEBUG_DUMP_SMALL) == S_OK)
{
Hr = S_OK;
}
}
DebugControl->Release();
}
DebugClient->Release();
return 0;
}