コード例 #1
0
        /// <summary>
        /// Does the client of "pipeStream" have the same identity and elevation as we do?
        /// </summary>
        private static bool ClientAndOurIdentitiesMatch(NamedPipeServerStream pipeStream)
        {
            if (PlatformInformation.IsWindows)
            {
                var serverIdentity = GetIdentity(impersonating: false);

                (string name, bool admin)clientIdentity = default;
                pipeStream.RunAsClient(() => { clientIdentity = GetIdentity(impersonating: true); });

                CompilerServerLogger.Log($"Server identity = '{serverIdentity.name}', server elevation='{serverIdentity.admin}'.");
                CompilerServerLogger.Log($"Client identity = '{clientIdentity.name}', client elevation='{serverIdentity.admin}'.");

                return
                    (StringComparer.OrdinalIgnoreCase.Equals(serverIdentity.name, clientIdentity.name) &&
                     serverIdentity.admin == clientIdentity.admin);
            }
            else
            {
                return(BuildServerConnection.CheckIdentityUnix(pipeStream));
            }
        }