fehlerNP

Wenn man mit dem Microsoft .net Framework 2.0 in C# mit der folgenden Zeile eine Liste der Named Pipes des Systems ermitteln will, kann es zu einer Fehlermeldung kommen:

string[] strPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");

Ursache dafür ist, dass es eine Named Pipe mit einem Namen gibt, der kein gültiger Dateiname ist. Mit dem folgenden Code (C#) gelingt das Auslesen aller Named Pipes:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct WIN32_FIND_DATA
{
	public uint dwFileAttributes;
	public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
	public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
	public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
	public uint nFileSizeHigh;
	public uint nFileSizeLow;
	public uint dwReserved0;
	public uint dwReserved1;
	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
	public string cFileName;
	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
	public string cAlternateFileName;
}

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);


[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATA
	 lpFindFileData);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool FindClose(IntPtr hFindFile);

private List<string> getNamedPipes()
{
	List<string> liNamedPipes = new List<string>();
	WIN32_FIND_DATA lpFindFileData;

	var ptr = FindFirstFile(@"\\.\pipe\*", out lpFindFileData);
	liNamedPipes.Add(lpFindFileData.cFileName);
	while (FindNextFile(ptr, out lpFindFileData))
	{
		liNamedPipes.Add(lpFindFileData.cFileName.ToLower());
	}
	FindClose(ptr);

	liNamedPipes.Sort();

	return liNamedPipes;
}

Übrigens kann man mit dem Tool PipeList der Microsoft Sysinternals  per Kommandozeile eine Liste aller Named Pipes ausgeben lassen.

We use cookies
Diese Website verwendet Cookies.
Nähere Informationen dazu und zu Ihren Rechten als Benutzer, finden Sie in unserer Datenschutzerklärung.
Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren.