Skip to content

Commit

Permalink
[libromdata] exe_*_structs.h: Don't define certain enums or structs i…
Browse files Browse the repository at this point in the history
…f Windows headers have already been included.

I can't reproduce this issue locally, but I received a report about this
from a user who was using the Windows 11 SDK (10.0.22621.0) with
MSVC 2022.

See #413: Exports/Imports table in win32 shell ext page showing blank rows
Reported by @ksharperd.
  • Loading branch information
GerbilSoft committed Apr 16, 2024
1 parent 130a0e0 commit 9323430
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
12 changes: 11 additions & 1 deletion src/libromdata/Other/exe_mz_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* ROM Properties Page shell extension. (libromdata) *
* exe_mz_structs.h: DOS/Windows executable structures. (MZ) *
* *
* Copyright (c) 2017-2023 by David Korth. *
* Copyright (c) 2017-2024 by David Korth. *
* SPDX-License-Identifier: GPL-2.0-or-later *
***************************************************************************/

Expand All @@ -15,6 +15,8 @@
extern "C" {
#endif

#ifndef IMAGE_DOS_SIGNATURE

#define IMAGE_DOS_SIGNATURE 0x5A4D
#define IMAGE_OS2_SIGNATURE 0x454E
#define IMAGE_OS2_SIGNATURE_LE 0x454C
Expand Down Expand Up @@ -49,6 +51,14 @@ typedef struct _IMAGE_DOS_HEADER {
} IMAGE_DOS_HEADER;
ASSERT_STRUCT(IMAGE_DOS_HEADER, 64);

#else /* IMAGE_DOS_SIGNATURE */

// Windows headers are already included, and the various structs are defined.
// Don't re-define the structs, but ensure they have the correct sizes.
ASSERT_STRUCT(IMAGE_DOS_HEADER, 64);

#endif /* IMAGE_DOS_SIGNATURE */

#ifdef __cplusplus
}
#endif
26 changes: 25 additions & 1 deletion src/libromdata/Other/exe_pe_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* ROM Properties Page shell extension. (libromdata) *
* exe_pe_structs.h: DOS/Windows executable structures. (PE) *
* *
* Copyright (c) 2017-2023 by David Korth. *
* Copyright (c) 2017-2024 by David Korth. *
* SPDX-License-Identifier: GPL-2.0-or-later *
***************************************************************************/

Expand All @@ -24,6 +24,8 @@ extern "C" {
// - http://sandsprite.com/CodeStuff/Understanding_imports.html
// - https://docs.microsoft.com/en-us/windows/win32/debug/pe-format

#ifndef IMAGE_NT_SIGNATURE

#define IMAGE_NT_SIGNATURE 0x00004550
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
Expand Down Expand Up @@ -510,6 +512,28 @@ typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
} IMAGE_RESOURCE_DATA_ENTRY;
ASSERT_STRUCT(IMAGE_RESOURCE_DATA_ENTRY, 4*sizeof(uint32_t));

#else /* IMAGE_NT_SIGNATURE */

// Windows headers are already included, and the various structs are defined.
// Don't re-define the structs, but ensure they have the correct sizes.
ASSERT_STRUCT(IMAGE_FILE_HEADER, IMAGE_SIZEOF_FILE_HEADER);
ASSERT_STRUCT(IMAGE_DATA_DIRECTORY, 2*sizeof(uint32_t));
ASSERT_STRUCT(IMAGE_OPTIONAL_HEADER32, 224);
ASSERT_STRUCT(IMAGE_OPTIONAL_HEADER64, 240);
ASSERT_STRUCT(IMAGE_LOAD_CONFIG_CODE_INTEGRITY, 12);
ASSERT_STRUCT(IMAGE_LOAD_CONFIG_DIRECTORY32, 192);
ASSERT_STRUCT(IMAGE_LOAD_CONFIG_DIRECTORY64, 320);
ASSERT_STRUCT(IMAGE_NT_HEADERS32, 248);
ASSERT_STRUCT(IMAGE_NT_HEADERS64, 264);
ASSERT_STRUCT(IMAGE_SECTION_HEADER, IMAGE_SIZEOF_SECTION_HEADER);
ASSERT_STRUCT(IMAGE_EXPORT_DIRECTORY, 10*sizeof(uint32_t));
ASSERT_STRUCT(IMAGE_IMPORT_DIRECTORY, 5*sizeof(uint32_t));
ASSERT_STRUCT(IMAGE_RESOURCE_DIRECTORY, 16);
ASSERT_STRUCT(IMAGE_RESOURCE_DIRECTORY_ENTRY, 2*sizeof(uint32_t));
ASSERT_STRUCT(IMAGE_RESOURCE_DATA_ENTRY, 4*sizeof(uint32_t));

#endif /* IMAGE_NT_SIGNATURE */

// Manifest IDs
typedef enum {
CREATEPROCESS_MANIFEST_RESOURCE_ID = 1,
Expand Down
4 changes: 3 additions & 1 deletion src/libromdata/Other/exe_res_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* ROM Properties Page shell extension. (libromdata) *
* exe_res_structs.h: DOS/Windows executable structures. (resources) *
* *
* Copyright (c) 2017-2023 by David Korth. *
* Copyright (c) 2017-2024 by David Korth. *
* SPDX-License-Identifier: GPL-2.0-or-later *
***************************************************************************/

Expand All @@ -24,6 +24,7 @@ extern "C" {
// - http://sandsprite.com/CodeStuff/Understanding_imports.html
// - https://docs.microsoft.com/en-us/windows/win32/debug/pe-format

#ifndef _WINUSER_
// Resource types
typedef enum {
RT_CURSOR = 1,
Expand Down Expand Up @@ -52,6 +53,7 @@ typedef enum {
RT_DLGINIT = 240,
RT_TOOLBAR = 241,
} ResourceType;
#endif /* _WINUSER_ */

/** Version resource **/

Expand Down

0 comments on commit 9323430

Please sign in to comment.