@@ -76,14 +76,60 @@ bool EnumerateRemoteSectionsAndModulesRequest::Handle(MessageClient& client)
76
76
// ---------------------------------------------------------------------------
77
77
bool EnumerateProcessHandlesRequest::Handle (MessageClient& client)
78
78
{
79
+ enum class Platform
80
+ {
81
+ Unknown,
82
+ X86,
83
+ X64
84
+ };
85
+
86
+ const auto GetProcessPlatform = [](HANDLE process) -> Platform
87
+ {
88
+ static USHORT processorArchitecture = PROCESSOR_ARCHITECTURE_UNKNOWN;
89
+ if (processorArchitecture == PROCESSOR_ARCHITECTURE_UNKNOWN)
90
+ {
91
+ SYSTEM_INFO info = {};
92
+ GetNativeSystemInfo (&info);
93
+
94
+ processorArchitecture = info.wProcessorArchitecture ;
95
+ }
96
+
97
+ switch (processorArchitecture)
98
+ {
99
+ case PROCESSOR_ARCHITECTURE_INTEL:
100
+ return Platform::X86;
101
+ case PROCESSOR_ARCHITECTURE_AMD64:
102
+ BOOL isWow64 = FALSE ;
103
+ if (IsWow64Process (process, &isWow64))
104
+ {
105
+ return isWow64 ? Platform::X86 : Platform::X64;
106
+ }
107
+
108
+ #ifdef RECLASSNET64
109
+ return Platform::X64;
110
+ #else
111
+ return Platform::X86;
112
+ #endif
113
+ }
114
+ return Platform::Unknown;
115
+ };
116
+
79
117
auto handles = GetAvailableHandles (PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE);
80
118
81
119
for (auto handle : handles)
82
120
{
83
- WCHAR path[PATH_MAXIMUM_LENGTH];
84
- GetModuleFileNameExW (handle, nullptr , path, PATH_MAXIMUM_LENGTH);
85
-
86
- client.Send (EnumerateProcessHandlesResponse (handle, path));
121
+ auto platform = GetProcessPlatform (handle);
122
+ #ifdef RECLASSNET64
123
+ if (platform == Platform::X64)
124
+ #else
125
+ if (platform == Platform::X86)
126
+ #endif
127
+ {
128
+ WCHAR path[PATH_MAXIMUM_LENGTH];
129
+ GetModuleFileNameExW (handle, nullptr , path, PATH_MAXIMUM_LENGTH);
130
+
131
+ client.Send (EnumerateProcessHandlesResponse (handle, path));
132
+ }
87
133
}
88
134
89
135
client.Send (StatusResponse (nullptr , true ));
0 commit comments