Skip to content

Commit

Permalink
Merge pull request #218 from gerardog/Fix.Windows7
Browse files Browse the repository at this point in the history
Fixed `Windows 7` issue enumerating named pipes
  • Loading branch information
gerardog authored Feb 20, 2023
2 parents 1f4c272 + 7fe26a0 commit 95719dd
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,9 +305,9 @@ How to use, very briefly:

No. `gsudo` reminds of the original sudo regarding user expectations. Many `sudo` features are `*nix` specific and could never have a `Windows` counterpart. Other features (such as `sudoers`) could potentially be implemented but are not at this point.

- Does it work in Windows 7/8?
- What are the requirements? Does it work in Windows 7/8?

Yes, it works from Win7 SP1 onwards, except the credentials cache.
It works on Win7 SP1 onwards. Some features may only work in Windows 10/11, like elevating as TrustedInstaller.

- How do I return to the previous security level after using gsudo?

Expand Down
34 changes: 18 additions & 16 deletions src/gsudo/Rpc/NamedPipeUtils.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;

using System.Linq;

namespace gsudo.Rpc
{
static class NamedPipeUtils
Expand Down Expand Up @@ -31,24 +32,25 @@ public static List<string> ListNamedPipes()

public static bool ExistsNamedPipe(string name)
{
var namedPipes = new List<string>();
Native.FileApi.WIN32_FIND_DATA lpFindFileData;

var ptr = Native.FileApi.FindFirstFile($@"\\.\pipe\{GetRootFolder(name)}*", out lpFindFileData);
do
{
if (lpFindFileData.cFileName.EndsWith(name, StringComparison.Ordinal))
{
Native.FileApi.FindClose(ptr);
Logger.Instance.Log($"Found Named Pipe \"{name}\".", LogLevel.Debug);
return true;
}
//Logger.Instance.Log($"Searching for {name}", LogLevel.Debug);
try
{
return System.IO.Directory.GetFiles("\\\\.\\\\pipe\\", name).Any();
}
catch
{
// Windows 7 workaround
foreach (var pipe in System.IO.Directory.GetFiles("\\\\.\\\\pipe\\"))
{
if (pipe.EndsWith(name, StringComparison.Ordinal))
{
//Logger.Instance.Log($"Found Named Pipe {name}", LogLevel.Debug);
return true;
}
}
}
while (Native.FileApi.FindNextFile(ptr, out lpFindFileData));

Native.FileApi.FindClose(ptr);
return false;

}

static string GetRootFolder(string path)
Expand Down

0 comments on commit 95719dd

Please sign in to comment.