Skip to content

Commit

Permalink
ensure that StartInfo survives JSON roundtrip
Browse files Browse the repository at this point in the history
  • Loading branch information
lostmsu committed Dec 13, 2023
1 parent b1ad627 commit 66af3be
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/StartInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,23 @@

using System.Collections.ObjectModel;
using System.Diagnostics;

using System.Text.Json.Serialization;
using static PInvoke.Kernel32;

partial class ProcessDetour {
public sealed class StartInfo {
public string Executable { get; }
public Collection<string> InjectDlls { get; } = new();
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public Collection<string> InjectDlls { get; init; } = new();
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string? WorkingDirectory { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string? CommandLine { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public IDictionary<string, string>? Environment { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public CreateProcessFlags Flags { get; set; } = CreateProcessFlags.None;
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public ProcessWindowStyle WindowStyle { get; set; }

public StartInfo(string executable) {
Expand Down
19 changes: 19 additions & 0 deletions test/AsUser.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace NDetours;

using System.Text.Json;
using static NDetours.ProcessDetour;

public class AsUser {
[Fact]
public void StartInfoRoundtrip() {
var original = new StartInfo(@"C:\test.exe") {
InjectDlls = { "a.dll", "b.dll" },
WorkingDirectory = @"C:\",
};
string json = JsonSerializer.Serialize(original);
var startInfo = JsonSerializer.Deserialize<StartInfo>(json)!;
Assert.Equal(original.Executable, startInfo.Executable);
Assert.Equal(original.WorkingDirectory, startInfo.WorkingDirectory);
Assert.Equal(original.InjectDlls, startInfo.InjectDlls);
}
}

0 comments on commit 66af3be

Please sign in to comment.