| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- //
- // System.Runtime.Remoting.Channels.Ipc.Win32.NamedPipeHelper.cs
- //
- // Author: Robert Jordan ([email protected])
- //
- // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- #if NET_2_0
- using System;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace System.Runtime.Remoting.Channels.Ipc.Win32
- {
- /// <summary>
- /// Named Pipe P/Invoke declarations.
- /// </summary>
- internal sealed class NamedPipeHelper
- {
- NamedPipeHelper()
- {
- }
- /// <summary>
- /// Returns a properly formatted local pipe name.
- /// </summary>
- /// <param name="pipeName"></param>
- /// <returns></returns>
- public static string FormatPipeName(string pipeName)
- {
- return String.Format(@"\\.\pipe\{0}", pipeName);
- }
- #region P/Invoke
- // Named pipe acces flags
- public const uint PIPE_ACCESS_INBOUND = 1;
- public const uint PIPE_ACCESS_OUTBOUND = 2;
- public const uint PIPE_ACCESS_DUPLEX = 3;
- // Named pipe wait states
- public const uint PIPE_WAIT = 0;
- public const uint PIPE_NOWAIT = 1;
- // Named pipe message types
- public const uint PIPE_TYPE_BYTE = 0;
- public const uint PIPE_TYPE_MESSAGE = 4;
- // Named pipe message read modes
- public const uint PIPE_READMODE_BYTE = 0;
- public const uint PIPE_READMODE_MESSAGE = 2;
- // Named pipe endpoints
- public const uint PIPE_CLIENT_END = 0;
- public const uint PIPE_SERVER_END = 1;
- // Named pipe misc flags
- public const uint PIPE_UNLIMITED_INSTANCES = 255;
- // Named pipe wait flags
- public const uint NMPWAIT_USE_DEFAULT_WAIT = 0;
- public const uint NMPWAIT_NOWAIT = 1;
- public const uint NMPWAIT_WAIT_FOREVER = 0xffffffff;
- // Create flags
- public const uint CREATE_NEW = 1;
- public const uint CREATE_ALWAYS = 2;
- public const uint OPEN_EXISTING = 3;
- public const uint OPEN_ALWAYS = 4;
- public const uint TRUNCATE_EXISTING = 5;
-
- // Access flags
- public const uint GENERIC_READ = 0x80000000;
- public const uint GENERIC_WRITE = 0x40000000;
- public const uint GENERIC_EXECUTE = 0x20000000;
- public const uint GENERIC_ALL = 0x10000000;
- // Error results
- public const int ERROR_FILE_NOT_FOUND = 2;
- public const int ERROR_PIPE_BUSY = 231;
- public const int ERROR_NO_DATA = 232;
- public const int ERROR_PIPE_NOT_CONNECTED = 233;
- public const int ERROR_PIPE_CONNECTED = 535;
- public const int ERROR_PIPE_LISTENING = 536;
- public const int INVALID_HANDLE_VALUE = -1;
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern IntPtr CreateNamedPipe(
- string lpName,
- uint dwOpenMode,
- uint dwPipeMode,
- uint nMaxInstances,
- uint nOutBufferSize,
- uint nInBufferSize,
- uint nDefaultTimeOut,
- IntPtr pipeSecurityDescriptor
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool ConnectNamedPipe(
- IntPtr hPipe,
- IntPtr lpOverlapped
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern IntPtr CreateFile(
- String lpFileName,
- uint dwDesiredAccess,
- uint dwShareMode,
- IntPtr attr,
- uint dwCreationDisposition,
- uint dwFlagsAndAttributes,
- IntPtr hTemplateFile);
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool ReadFile(
- IntPtr hHandle,
- IntPtr lpBuffer,
- uint nNumberOfBytesToRead,
- out uint lpNumberOfBytesRead,
- IntPtr lpOverlapped
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool WriteFile(
- IntPtr hHandle,
- IntPtr lpBuffer,
- uint nNumberOfBytesToWrite,
- out uint lpNumberOfBytesWritten,
- IntPtr lpOverlapped
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool GetNamedPipeHandleState(
- IntPtr hPipe,
- out int lpState,
- out int lpCurInstances,
- out int lpMaxCollectionCount,
- out int lpCollectDataTimeout,
- StringBuilder lpUserName,
- int nMaxUserNameSize
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool SetNamedPipeHandleState(
- IntPtr hPipe,
- ref uint lpMode,
- ref uint lpMaxCollectionCount,
- ref uint lpCollectDataTimeout
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool GetNamedPipeInfo(
- IntPtr hPipe,
- out int lpFlags,
- out int lpOutBufferSize,
- out int lpInBufferSize,
- out int lpMaxInstances
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool PeekNamedPipe(
- IntPtr hPipe,
- IntPtr lpBuffer,
- uint nBufferSize,
- out uint lpBytesRead,
- out uint lpTotalBytesAvail,
- out uint lpBytesLeftThisMessage
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool WaitNamedPipe(
- string name,
- int timeout
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool DisconnectNamedPipe(
- IntPtr hPipe
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool FlushFileBuffers(
- IntPtr hFile
- );
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool CloseHandle(
- IntPtr hHandle
- );
- [DllImport("advapi32.dll", SetLastError = true)]
- public static extern bool ImpersonateNamedPipeClient(
- IntPtr hPipe
- );
- [DllImport("advapi32.dll", SetLastError = true)]
- public static extern bool RevertToSelf();
- #endregion
- }
- }
- #endif
|