Skip to content

Commit d3d3926

Browse files
committed
Added EnumerateProcessData.Name.
1 parent d6d2dc6 commit d3d3926

File tree

6 files changed

+38
-10
lines changed

6 files changed

+38
-10
lines changed

Core/CoreFunctionsManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void EnumerateProcesses(Action<ProcessInfo> callbackProcess)
9292
{
9393
var c = callbackProcess == null ? null : (EnumerateProcessCallback)delegate (ref EnumerateProcessData data)
9494
{
95-
callbackProcess(new ProcessInfo(data.Id, data.Path));
95+
callbackProcess(new ProcessInfo(data.Id, data.Name, data.Path));
9696
};
9797

9898
currentFunctions.EnumerateProcesses(c);

Core/DataExchange.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public struct EnumerateProcessData
2323
{
2424
public IntPtr Id;
2525

26+
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
27+
public string Name;
28+
2629
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
2730
public string Path;
2831
};

Memory/ProcessInfo.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ public class ProcessInfo
99
public string Name { get; }
1010
public string Path { get; }
1111

12-
public ProcessInfo(IntPtr id, string path)
12+
public ProcessInfo(IntPtr id, string name, string path)
1313
{
14+
Contract.Requires(name != null);
1415
Contract.Requires(path != null);
1516

1617
Id = id;
17-
Name = System.IO.Path.GetFileName(path);
18+
Name = name;
1819
Path = path;
1920
}
2021
}

NativeCore/ReClassNET_Plugin.hpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ enum class HardwareBreakpointSize
115115
struct EnumerateProcessData
116116
{
117117
RC_Size Id;
118-
RC_UnicodeChar ModulePath[PATH_MAXIMUM_LENGTH];
118+
RC_UnicodeChar Name[PATH_MAXIMUM_LENGTH];
119+
RC_UnicodeChar Path[PATH_MAXIMUM_LENGTH];
119120
};
120121

121122
struct InstructionData
@@ -262,3 +263,20 @@ inline void MultiByteToUnicode(const char* src, RC_UnicodeChar* dst, int size)
262263

263264
std::memcpy(dst, temp.c_str(), std::min<int>(static_cast<int>(temp.length()), size) * sizeof(char16_t));
264265
}
266+
267+
inline char16_t* str16cpy(char16_t* destination, const char16_t* source, size_t n)
268+
{
269+
char16_t* temp = destination;
270+
while (n > 0 && *source != 0)
271+
{
272+
*temp++ = *source++;
273+
--n;
274+
}
275+
while (n > 0)
276+
{
277+
*temp++ = 0;
278+
--n;
279+
}
280+
while ((*temp++ = *source++) != 0);
281+
return destination;
282+
}

NativeCore/Unix/EnumerateProcesses.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ extern "C" void EnumerateProcesses(EnumerateProcessCallback callbackProcess)
122122
{
123123
EnumerateProcessData data = {};
124124
data.Id = parse_type<size_t>(name);
125-
MultiByteToUnicode(linkPath.c_str(), data.ModulePath, PATH_MAXIMUM_LENGTH);
125+
MultiByteToUnicode(linkPath.c_str(), data.Path, PATH_MAXIMUM_LENGTH);
126+
const auto name = fs::path(data.Path).filename().u16string();
127+
str16cpy(data.Name, name.c_str(), std::min<int>(name.length(), PATH_MAXIMUM_LENGTH));
126128

127129
callbackProcess(&data);
128130
}

NativeCore/Windows/EnumerateProcesses.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <windows.h>
22
#include <tlhelp32.h>
3-
#include <Psapi.h>
3+
#include <psapi.h>
4+
#include <experimental/filesystem>
5+
namespace fs = std::experimental::filesystem;
46

57
#include "NativeCore.hpp"
68

@@ -49,7 +51,7 @@ void __stdcall EnumerateProcesses(EnumerateProcessCallback callbackProcess)
4951
return;
5052
}
5153

52-
auto handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
54+
const auto handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
5355
if (handle != INVALID_HANDLE_VALUE)
5456
{
5557
PROCESSENTRY32W pe32 = {};
@@ -58,10 +60,10 @@ void __stdcall EnumerateProcesses(EnumerateProcessCallback callbackProcess)
5860
{
5961
do
6062
{
61-
auto process = OpenRemoteProcess(reinterpret_cast<RC_Pointer>(pe32.th32ProcessID), ProcessAccess::Read);
63+
const auto process = OpenRemoteProcess(reinterpret_cast<RC_Pointer>(pe32.th32ProcessID), ProcessAccess::Read);
6264
if (IsProcessValid(process))
6365
{
64-
auto platform = GetProcessPlatform(process);
66+
const auto platform = GetProcessPlatform(process);
6567
#ifdef RECLASSNET64
6668
if (platform == Platform::X64)
6769
#else
@@ -70,7 +72,9 @@ void __stdcall EnumerateProcesses(EnumerateProcessCallback callbackProcess)
7072
{
7173
EnumerateProcessData data;
7274
data.Id = pe32.th32ProcessID;
73-
GetModuleFileNameExW(process, nullptr, reinterpret_cast<LPWSTR>(data.ModulePath), PATH_MAXIMUM_LENGTH);
75+
GetModuleFileNameExW(process, nullptr, reinterpret_cast<LPWSTR>(data.Path), PATH_MAXIMUM_LENGTH);
76+
const auto name = fs::path(data.Path).filename().u16string();
77+
str16cpy(data.Name, name.c_str(), std::min<int>(name.length(), PATH_MAXIMUM_LENGTH));
7478

7579
callbackProcess(&data);
7680
}

0 commit comments

Comments
 (0)