11 HANDLE file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
12 if(file == INVALID_HANDLE_VALUE) {
16 HANDLE mapping = CreateFileMapping(file, 0, PAGE_READONLY, 0, 0, 0);
18 LOG_ERROR(
"Could not create file mapping.");
22 BYTE *dllRawData = (BYTE*) MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
29 size_t r_size = GetFileSize(file, 0);
30 if (r_size == INVALID_FILE_SIZE) {
32 UnmapViewOfFile(dllRawData);
37 if (read_size != 0 && read_size <= r_size) {
42 UnmapViewOfFile(dllRawData);
48 if (localCopyAddress !=
nullptr) {
49 memcpy(localCopyAddress, dllRawData, r_size);
53 LOG_ERROR(
"Could not allocate memory in the current process.");
55 UnmapViewOfFile(dllRawData);
58 return localCopyAddress;
64 HANDLE file = CreateFile(in_path, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
65 if (file == INVALID_HANDLE_VALUE) {
66 LOG_ERROR(
"Cannot open the file for reading.");
69 DWORD r_size = GetFileSize(file, 0);
70 if (r_size == INVALID_FILE_SIZE) {
75 if (read_size != 0 && read_size <= r_size) {
85 if (!ReadFile(file, buffer, r_size, &out_size,
nullptr)) {
100 if (!out_path || !dump_data || !dump_size)
return false;
102 HANDLE file = CreateFile(out_path, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
103 if (file == INVALID_HANDLE_VALUE) {
104 LOG_ERROR(
"Cannot open the file for writing.");
108 LOG_WARNING(
"Dump size exceeds DWORD range and will be truncated.");
110 DWORD written_size = 0;
111 bool is_dumped =
false;
112 if (WriteFile(file, dump_data, (DWORD) dump_size, &written_size,
nullptr)) {
116 LOG_ERROR(
"Failed to write to the file.");