98 lines
1.4 KiB
C
98 lines
1.4 KiB
C
/*++
|
||
|
||
Copyright (c) 1993 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
dump.c
|
||
|
||
Abstract:
|
||
|
||
Dumps a block of memory to file
|
||
|
||
Author:
|
||
|
||
Stephane Plante (splante)
|
||
|
||
Environment:
|
||
|
||
User Mode
|
||
|
||
--*/
|
||
|
||
#include "pch.h"
|
||
|
||
VOID
|
||
dumpMemory(
|
||
IN ULONG_PTR Address,
|
||
IN ULONG Length,
|
||
IN PUCHAR Name
|
||
)
|
||
{
|
||
BOOL b;
|
||
HANDLE file;
|
||
PUCHAR buffer;
|
||
ULONG readLength;
|
||
|
||
//
|
||
// Open the file
|
||
//
|
||
file = CreateFile(
|
||
Name,
|
||
GENERIC_READ | GENERIC_WRITE,
|
||
0,
|
||
NULL,
|
||
OPEN_ALWAYS,
|
||
0,
|
||
NULL
|
||
);
|
||
if (file == INVALID_HANDLE_VALUE) {
|
||
|
||
dprintf("dm: could not open '%s'\n",Name);
|
||
return;
|
||
|
||
}
|
||
|
||
//
|
||
// Read the bytes from memory
|
||
//
|
||
buffer = LocalAlloc( LPTR, Length );
|
||
if (buffer == NULL) {
|
||
|
||
dprintf("dm: could not allocate '0x%x' bytes\n", Length );
|
||
CloseHandle( file );
|
||
return;
|
||
|
||
}
|
||
b = ReadMemory(
|
||
Address,
|
||
buffer,
|
||
Length,
|
||
&readLength
|
||
);
|
||
if (!b) {
|
||
|
||
dprintf(
|
||
"dm: could not read '0x%x' bytes from '0x%p'\n",
|
||
Length,
|
||
Address
|
||
);
|
||
LocalFree ( buffer );
|
||
CloseHandle( file );
|
||
return;
|
||
|
||
}
|
||
|
||
//
|
||
// Write the contents of memory to the file
|
||
//
|
||
WriteFile( file, buffer, readLength, &readLength, NULL );
|
||
|
||
//
|
||
// Done
|
||
//
|
||
CloseHandle( file );
|
||
LocalFree( buffer );
|
||
|
||
}
|