Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / IPC / Win32NamedPipes.cs / 1305376 / Win32NamedPipes.cs
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.Security;
using Microsoft.Win32.SafeHandles;
namespace System.Runtime.Remoting.Channels.Ipc
{
internal class PipeHandle : CriticalHandleMinusOneIsInvalid
{
internal PipeHandle() : base() { }
internal PipeHandle(IntPtr handle) : base()
{
SetHandle(handle);
}
public IntPtr Handle
{
get { return handle; }
}
protected override bool ReleaseHandle()
{
return NativePipe.CloseHandle(handle) != 0;
}
}
[StructLayout(LayoutKind.Sequential)]
internal class SECURITY_ATTRIBUTES {
internal int nLength = 0;
internal IntPtr lpSecurityDescriptor = IntPtr.Zero;
internal int bInheritHandle = 0;
}
[SuppressUnmanagedCodeSecurity]
internal static class NativePipe
{
private const String Kernel32 = "kernel32.dll";
private const String AdvApi32 = "advapi32.dll";
internal static readonly IntPtr NULL = IntPtr.Zero;
public const uint PIPE_ACCESS_OUTBOUND = 0x00000002;
public const uint PIPE_ACCESS_DUPLEX = 0x00000003;
public const uint PIPE_ACCESS_INBOUND = 0x00000001;
public const uint PIPE_WAIT = 0x00000000;
public const uint PIPE_NOWAIT = 0x00000001;
public const uint PIPE_READMODE_BYTE = 0x00000000;
public const uint PIPE_READMODE_MESSAGE = 0x00000002;
public const uint PIPE_TYPE_BYTE = 0x00000000;
public const uint PIPE_TYPE_MESSAGE = 0x00000004;
public const uint PIPE_CLIENT_END = 0x00000000;
public const uint PIPE_SERVER_END = 0x00000001;
public const uint FILE_FLAG_OVERLAPPED = 0x40000000;
public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const uint PIPE_UNLIMITED_INSTANCES = 255;
public const uint SECURITY_SQOS_PRESENT = 0x00100000;
public const uint SECURITY_ANONYMOUS = 0 << 16;
public const uint SECURITY_IDENTIFICATION = 1 << 16;
public const uint SECURITY_IMPERSONATION = 2 << 16;
public const uint SECURITY_DELEGATION = 3 << 16;
internal const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
internal const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
internal const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
public const uint NMPWAIT_WAIT_FOREVER = 0xffffffff;
public const uint NMPWAIT_NOWAIT = 0x00000001;
public const uint NMPWAIT_USE_DEFAULT_WAIT = 0x00000000;
public const uint GENERIC_READ = (0x80000000);
public const uint GENERIC_WRITE = (0x40000000);
public const uint GENERIC_EXECUTE = (0x20000000);
public const uint GENERIC_ALL = (0x10000000);
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;
public const uint FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
public const int INVALID_HANDLE_VALUE = -1;
public const long ERROR_BROKEN_PIPE = 109;
public const long ERROR_IO_PENDING = 997;
public const long ERROR_PIPE_BUSY = 231;
public const long ERROR_NO_DATA = 232;
public const long ERROR_PIPE_NOT_CONNECTED = 233;
public const long ERROR_PIPE_CONNECTED = 535;
public const long ERROR_PIPE_LISTENING = 536;
//CreatePipe
[DllImport(Kernel32, SetLastError=true)]
public static extern PipeHandle CreateNamedPipe(String lpName, // pipe name
uint dwOpenMode, // pipe open mode
uint dwPipeMode, // pipe-specific modes
uint nMaxInstances, // maximum number of instances
uint nOutBufferSize, // output buffer size
uint nInBufferSize, // input buffer size
uint nDefaultTimeOut, // time-out interval
SECURITY_ATTRIBUTES pipeSecurityDescriptor //SecurityAttributes attr // SD
);
[DllImport(Kernel32, SetLastError=true)]
public static extern bool ConnectNamedPipe(PipeHandle hNamedPipe, // handle to named pipe
Overlapped lpOverlapped // overlapped structure
);
[DllImport(AdvApi32, SetLastError=true)]
public static extern bool ImpersonateNamedPipeClient(PipeHandle hNamedPipe // handle to named pipe
);
[DllImport(AdvApi32)]
public static extern bool RevertToSelf();
[DllImport(Kernel32, SetLastError=true)]
public static extern PipeHandle CreateFile(String lpFileName, // file name
uint dwDesiredAccess, // access mode
uint dwShareMode, // share mode
IntPtr attr, // SecurityDescriptor
uint dwCreationDisposition, // how to create
uint dwFlagsAndAttributes, // file attributes
IntPtr hTemplateFile); // handle to template file
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool ReadFile(PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToRead, // number of bytes to read
ref int lpNumberOfBytesRead, // number of bytes read
IntPtr mustBeZero // this should be IntPtr.Zero
);
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool ReadFile(PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToRead, // number of bytes to read
IntPtr numBytesRead_mustBeZero, // number of bytes must be zero
NativeOverlapped* lpOverlapped // overlapped buffer
);
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool WriteFile(
PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToWrite, // number of bytes to write
ref int lpNumberOfBytesWritten, // number of bytes written
IntPtr lpOverlapped // overlapped buffer
);
[DllImport(Kernel32, SetLastError=true)]
public static extern bool WaitNamedPipe(String name,
int timeout);
[DllImport(Kernel32, SetLastError=true, CharSet=CharSet.Auto)]
internal static extern int FormatMessage(int dwFlags, IntPtr lpSource,
int dwMessageId, int dwLanguageId, StringBuilder lpBuffer,
int nSize, IntPtr va_list_arguments);
[DllImport(Kernel32, SetLastError=true)]
public static extern int CloseHandle(IntPtr hObject);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.Security;
using Microsoft.Win32.SafeHandles;
namespace System.Runtime.Remoting.Channels.Ipc
{
internal class PipeHandle : CriticalHandleMinusOneIsInvalid
{
internal PipeHandle() : base() { }
internal PipeHandle(IntPtr handle) : base()
{
SetHandle(handle);
}
public IntPtr Handle
{
get { return handle; }
}
protected override bool ReleaseHandle()
{
return NativePipe.CloseHandle(handle) != 0;
}
}
[StructLayout(LayoutKind.Sequential)]
internal class SECURITY_ATTRIBUTES {
internal int nLength = 0;
internal IntPtr lpSecurityDescriptor = IntPtr.Zero;
internal int bInheritHandle = 0;
}
[SuppressUnmanagedCodeSecurity]
internal static class NativePipe
{
private const String Kernel32 = "kernel32.dll";
private const String AdvApi32 = "advapi32.dll";
internal static readonly IntPtr NULL = IntPtr.Zero;
public const uint PIPE_ACCESS_OUTBOUND = 0x00000002;
public const uint PIPE_ACCESS_DUPLEX = 0x00000003;
public const uint PIPE_ACCESS_INBOUND = 0x00000001;
public const uint PIPE_WAIT = 0x00000000;
public const uint PIPE_NOWAIT = 0x00000001;
public const uint PIPE_READMODE_BYTE = 0x00000000;
public const uint PIPE_READMODE_MESSAGE = 0x00000002;
public const uint PIPE_TYPE_BYTE = 0x00000000;
public const uint PIPE_TYPE_MESSAGE = 0x00000004;
public const uint PIPE_CLIENT_END = 0x00000000;
public const uint PIPE_SERVER_END = 0x00000001;
public const uint FILE_FLAG_OVERLAPPED = 0x40000000;
public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const uint PIPE_UNLIMITED_INSTANCES = 255;
public const uint SECURITY_SQOS_PRESENT = 0x00100000;
public const uint SECURITY_ANONYMOUS = 0 << 16;
public const uint SECURITY_IDENTIFICATION = 1 << 16;
public const uint SECURITY_IMPERSONATION = 2 << 16;
public const uint SECURITY_DELEGATION = 3 << 16;
internal const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
internal const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
internal const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
public const uint NMPWAIT_WAIT_FOREVER = 0xffffffff;
public const uint NMPWAIT_NOWAIT = 0x00000001;
public const uint NMPWAIT_USE_DEFAULT_WAIT = 0x00000000;
public const uint GENERIC_READ = (0x80000000);
public const uint GENERIC_WRITE = (0x40000000);
public const uint GENERIC_EXECUTE = (0x20000000);
public const uint GENERIC_ALL = (0x10000000);
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;
public const uint FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
public const int INVALID_HANDLE_VALUE = -1;
public const long ERROR_BROKEN_PIPE = 109;
public const long ERROR_IO_PENDING = 997;
public const long ERROR_PIPE_BUSY = 231;
public const long ERROR_NO_DATA = 232;
public const long ERROR_PIPE_NOT_CONNECTED = 233;
public const long ERROR_PIPE_CONNECTED = 535;
public const long ERROR_PIPE_LISTENING = 536;
//CreatePipe
[DllImport(Kernel32, SetLastError=true)]
public static extern PipeHandle CreateNamedPipe(String lpName, // pipe name
uint dwOpenMode, // pipe open mode
uint dwPipeMode, // pipe-specific modes
uint nMaxInstances, // maximum number of instances
uint nOutBufferSize, // output buffer size
uint nInBufferSize, // input buffer size
uint nDefaultTimeOut, // time-out interval
SECURITY_ATTRIBUTES pipeSecurityDescriptor //SecurityAttributes attr // SD
);
[DllImport(Kernel32, SetLastError=true)]
public static extern bool ConnectNamedPipe(PipeHandle hNamedPipe, // handle to named pipe
Overlapped lpOverlapped // overlapped structure
);
[DllImport(AdvApi32, SetLastError=true)]
public static extern bool ImpersonateNamedPipeClient(PipeHandle hNamedPipe // handle to named pipe
);
[DllImport(AdvApi32)]
public static extern bool RevertToSelf();
[DllImport(Kernel32, SetLastError=true)]
public static extern PipeHandle CreateFile(String lpFileName, // file name
uint dwDesiredAccess, // access mode
uint dwShareMode, // share mode
IntPtr attr, // SecurityDescriptor
uint dwCreationDisposition, // how to create
uint dwFlagsAndAttributes, // file attributes
IntPtr hTemplateFile); // handle to template file
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool ReadFile(PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToRead, // number of bytes to read
ref int lpNumberOfBytesRead, // number of bytes read
IntPtr mustBeZero // this should be IntPtr.Zero
);
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool ReadFile(PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToRead, // number of bytes to read
IntPtr numBytesRead_mustBeZero, // number of bytes must be zero
NativeOverlapped* lpOverlapped // overlapped buffer
);
[DllImport(Kernel32, SetLastError=true)]
public static unsafe extern bool WriteFile(
PipeHandle hFile, // handle to file
byte* lpBuffer, // data buffer
int nNumberOfBytesToWrite, // number of bytes to write
ref int lpNumberOfBytesWritten, // number of bytes written
IntPtr lpOverlapped // overlapped buffer
);
[DllImport(Kernel32, SetLastError=true)]
public static extern bool WaitNamedPipe(String name,
int timeout);
[DllImport(Kernel32, SetLastError=true, CharSet=CharSet.Auto)]
internal static extern int FormatMessage(int dwFlags, IntPtr lpSource,
int dwMessageId, int dwLanguageId, StringBuilder lpBuffer,
int nSize, IntPtr va_list_arguments);
[DllImport(Kernel32, SetLastError=true)]
public static extern int CloseHandle(IntPtr hObject);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPermission.cs
- DayRenderEvent.cs
- CFGGrammar.cs
- TripleDES.cs
- DataControlFieldCollection.cs
- LinkedList.cs
- ServiceElementCollection.cs
- GlyphingCache.cs
- Int32CollectionConverter.cs
- SignatureDescription.cs
- _IPv6Address.cs
- TemplateParser.cs
- HexParser.cs
- _HeaderInfo.cs
- MarkupCompiler.cs
- ObjectTokenCategory.cs
- EntityUtil.cs
- RenderData.cs
- XmlSchemaSimpleTypeUnion.cs
- _ConnectionGroup.cs
- ChannelManagerHelpers.cs
- TriggerAction.cs
- BevelBitmapEffect.cs
- ToolBarButton.cs
- MonthChangedEventArgs.cs
- QuinticEase.cs
- FaultDesigner.cs
- PrefixHandle.cs
- FixedTextContainer.cs
- Int16KeyFrameCollection.cs
- FontStretch.cs
- ConfigXmlComment.cs
- TextLineResult.cs
- XmlNotation.cs
- XPathSelectionIterator.cs
- TraceUtility.cs
- HtmlAnchor.cs
- TouchesOverProperty.cs
- SinglePageViewer.cs
- WebPartHeaderCloseVerb.cs
- Permission.cs
- DesignTimeData.cs
- InfoCardBinaryReader.cs
- DynamicRendererThreadManager.cs
- SqlWebEventProvider.cs
- EditorResources.cs
- ViewSimplifier.cs
- QilXmlWriter.cs
- SafeFindHandle.cs
- Mutex.cs
- EnumBuilder.cs
- DesignerProperties.cs
- CallbackValidator.cs
- BufferedGraphics.cs
- InkCanvas.cs
- EditBehavior.cs
- SparseMemoryStream.cs
- BuildProviderCollection.cs
- DataProtection.cs
- ResourceType.cs
- SharedUtils.cs
- _IPv6Address.cs
- NetworkStream.cs
- UInt64Converter.cs
- NavigatingCancelEventArgs.cs
- StyleModeStack.cs
- WindowsGraphicsCacheManager.cs
- EnumConverter.cs
- XmlSchemaAll.cs
- SecureStringHasher.cs
- EventSinkHelperWriter.cs
- HtmlTableCellCollection.cs
- ValueProviderWrapper.cs
- ItemContainerPattern.cs
- ImageCodecInfoPrivate.cs
- cookiecontainer.cs
- FixedNode.cs
- DeploymentExceptionMapper.cs
- FileCodeGroup.cs
- SqlConnectionPoolProviderInfo.cs
- MergePropertyDescriptor.cs
- GraphicsState.cs
- MailAddressCollection.cs
- ToolBar.cs
- DataSourceBooleanViewSchemaConverter.cs
- MailSettingsSection.cs
- DataGridViewCellLinkedList.cs
- ModuleBuilderData.cs
- GPPOINT.cs
- StringDictionary.cs
- DbConnectionStringBuilder.cs
- AuthenticationModulesSection.cs
- ChangeConflicts.cs
- XmlSchemaProviderAttribute.cs
- HttpWrapper.cs
- DocumentPageView.cs
- ProfileModule.cs
- SinglePhaseEnlistment.cs
- DocumentReferenceCollection.cs
- ResXResourceWriter.cs