Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryConnect()

bool System.IO.Pipes.NamedPipeClientStream.TryConnect ( int timeout,
CancellationToken cancellationToken )
inlineprivate

Definition at line 224 of file NamedPipeClientStream.cs.

225 {
226 global::Interop.Kernel32.SECURITY_ATTRIBUTES secAttrs = PipeStream.GetSecAttrs(_inheritability);
227 int num = (int)(_pipeOptions & ~PipeOptions.CurrentUserOnly);
228 if (_impersonationLevel != 0)
229 {
230 num |= 0x100000;
231 num |= (int)(_impersonationLevel - 1) << 16;
232 }
233 int num2 = 0;
234 if ((PipeDirection.In & _direction) != 0)
235 {
236 num2 |= int.MinValue;
237 }
238 if ((PipeDirection.Out & _direction) != 0)
239 {
240 num2 |= 0x40000000;
241 }
242 SafePipeHandle safePipeHandle = global::Interop.Kernel32.CreateNamedPipeClient(_normalizedPipePath, num2, FileShare.None, ref secAttrs, FileMode.Open, num, IntPtr.Zero);
243 if (safePipeHandle.IsInvalid)
244 {
245 int lastPInvokeError = Marshal.GetLastPInvokeError();
246 if (lastPInvokeError != 231 && lastPInvokeError != 2)
247 {
248 throw System.IO.Win32Marshal.GetExceptionForWin32Error(lastPInvokeError);
249 }
250 if (!global::Interop.Kernel32.WaitNamedPipe(_normalizedPipePath, timeout))
251 {
252 lastPInvokeError = Marshal.GetLastPInvokeError();
253 if (lastPInvokeError == 2 || lastPInvokeError == 121)
254 {
255 return false;
256 }
257 throw System.IO.Win32Marshal.GetExceptionForWin32Error(lastPInvokeError);
258 }
259 safePipeHandle = global::Interop.Kernel32.CreateNamedPipeClient(_normalizedPipePath, num2, FileShare.None, ref secAttrs, FileMode.Open, num, IntPtr.Zero);
260 if (safePipeHandle.IsInvalid)
261 {
262 lastPInvokeError = Marshal.GetLastPInvokeError();
263 if (lastPInvokeError == 231)
264 {
265 return false;
266 }
267 throw System.IO.Win32Marshal.GetExceptionForWin32Error(lastPInvokeError);
268 }
269 }
270 InitializeHandle(safePipeHandle, isExposed: false, (_pipeOptions & PipeOptions.Asynchronous) != 0);
271 base.State = PipeState.Connected;
273 return true;
274 }
readonly TokenImpersonationLevel _impersonationLevel
readonly HandleInheritability _inheritability
PipeStream(PipeDirection direction, int bufferSize)
void InitializeHandle(SafePipeHandle? handle, bool isExposed, bool isAsync)
static Exception GetExceptionForWin32Error(int errorCode, string path="")

References System.IO.Pipes.NamedPipeClientStream._direction, System.IO.Pipes.NamedPipeClientStream._impersonationLevel, System.IO.Pipes.NamedPipeClientStream._inheritability, System.IO.Pipes.NamedPipeClientStream._normalizedPipePath, System.IO.Pipes.NamedPipeClientStream._pipeOptions, System.IO.Win32Marshal.GetExceptionForWin32Error(), System.Runtime.InteropServices.Marshal.GetLastPInvokeError(), System.IO.Pipes.PipeStream.GetSecAttrs(), System.IO.Pipes.PipeStream.InitializeHandle(), Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid.IsInvalid, System.timeout, System.IO.Pipes.NamedPipeClientStream.ValidateRemotePipeUser(), and System.IntPtr.Zero.

Referenced by System.IO.Pipes.NamedPipeClientStream.ConnectInternal().