OpenEvent_internal() private method

private OpenEvent_internal ( string name, EventWaitHandleRights rights, MonoIOError &error ) : IntPtr
name string
rights EventWaitHandleRights
error MonoIOError
return System.IntPtr
コード例 #1
0
        public static EventWaitHandle OpenExisting(string name, EventWaitHandleRights rights)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if ((name.Length == 0) ||
                (name.Length > 260))
            {
                throw new ArgumentException("name", Locale.GetText("Invalid length [1-260]."));
            }

            MonoIOError error;
            IntPtr      handle = NativeEventCalls.OpenEvent_internal(name, rights, out error);

            if (handle == (IntPtr)null)
            {
                if (error == MonoIOError.ERROR_FILE_NOT_FOUND)
                {
                    throw new WaitHandleCannotBeOpenedException(Locale.GetText("Named Event handle does not exist: ") + name);
                }
                else if (error == MonoIOError.ERROR_ACCESS_DENIED)
                {
                    throw new UnauthorizedAccessException();
                }
                else
                {
                    throw new IOException(Locale.GetText("Win32 IO error: ") + error.ToString());
                }
            }

            return(new EventWaitHandle(handle));
        }
コード例 #2
0
        private static OpenExistingResult OpenExistingWorker(string name, EventWaitHandleRights rights, out EventWaitHandle result)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name", Environment.GetResourceString("ArgumentNull_WithParamName"));
            }

            if (name.Length == 0)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), "name");
            }

            if (null != name && System.IO.Path.MAX_PATH < name.Length)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", name));
            }

            Contract.EndContractBlock();

            result = null;

#if MOBILE
            throw new NotSupportedException();
#else
#if MONO
            int errorCode;
            var myHandle = new SafeWaitHandle(NativeEventCalls.OpenEvent_internal(name, rights, out errorCode), true);
#else
#if FEATURE_MACL
            SafeWaitHandle myHandle = Win32Native.OpenEvent((int)rights, false, name);
#else
            SafeWaitHandle myHandle = Win32Native.OpenEvent(Win32Native.EVENT_MODIFY_STATE | Win32Native.SYNCHRONIZE, false, name);
#endif
#endif

            if (myHandle.IsInvalid)
            {
#if !MONO
                int errorCode = Marshal.GetLastWin32Error();
#endif

                if (Win32Native.ERROR_FILE_NOT_FOUND == errorCode || Win32Native.ERROR_INVALID_NAME == errorCode)
                {
                    return(OpenExistingResult.NameNotFound);
                }
                if (Win32Native.ERROR_PATH_NOT_FOUND == errorCode)
                {
                    return(OpenExistingResult.PathNotFound);
                }
                if (null != name && 0 != name.Length && Win32Native.ERROR_INVALID_HANDLE == errorCode)
                {
                    return(OpenExistingResult.NameInvalid);
                }
                //this is for passed through Win32Native Errors
                __Error.WinIOError(errorCode, "");
            }
            result = new EventWaitHandle(myHandle);
            return(OpenExistingResult.Success);
#endif
        }
コード例 #3
0
        public static bool TryOpenExisting(string name, EventWaitHandleRights rights,
                                           out EventWaitHandle result)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if ((name.Length == 0) || (name.Length > 260))
            {
                throw new ArgumentException("name", Locale.GetText("Invalid length [1-260]."));
            }

            MonoIOError error;
            IntPtr      handle = NativeEventCalls.OpenEvent_internal(name, rights, out error);

            if (handle == (IntPtr)null)
            {
                result = null;
                return(false);
            }

            result = new EventWaitHandle(handle);
            return(true);
        }