From d3894032155371402b5c5abd55c2ddd0d0cbbb4a Mon Sep 17 00:00:00 2001 From: xtqqczze Date: Sat, 30 May 2020 22:48:09 +0100 Subject: [PATCH] Add empty line between single-line declarations [RCS0012](https://github.com/JosefPihrt/Roslynator/blob/master/docs/analyzers/RCS0012.md) --- .../CimAsyncOperation.cs | 1 + .../CimCommandBase.cs | 8 + .../CimIndicationWatcher.cs | 7 + .../CimResultObserver.cs | 4 + .../CimSessionProxy.cs | 2 + .../GetCimAssociatedInstanceCommand.cs | 3 + .../GetCimClassCommand.cs | 1 + .../GetCimInstanceCommand.cs | 12 + .../GetCimSessionCommand.cs | 3 + .../InvokeCimMethodCommand.cs | 10 + .../NewCimInstanceCommand.cs | 8 + .../NewCimSessionCommand.cs | 3 + .../NewCimSessionOptionCommand.cs | 29 ++ .../RegisterCimIndicationCommand.cs | 4 + .../RemoveCimInstanceCommand.cs | 6 + .../RemoveCimSessionCommand.cs | 4 + .../SetCimInstanceCommand.cs | 7 + .../Utils.cs | 14 + .../HelpWindow/HelpParagraphBuilder.cs | 2 + .../ManagementList/Common/BooleanBoxes.cs | 1 + .../ManagementList/Common/KeyboardHelp.cs | 2 + .../Common/ListOrganizerItem.cs | 1 + .../ManagementList/Common/StateDescriptor.cs | 1 + .../ManagementList/Common/WpfHelp.cs | 1 + .../ManagementList/CommonControls/Resizer.cs | 2 + .../PropertiesTextContainsFilterRule.cs | 1 + .../FilterRules/TextContainsFilterRule.cs | 1 + .../FilterRules/TextEndsWithFilterRule.cs | 1 + .../FilterCore/FilterRules/TextFilterRule.cs | 1 + .../FilterRules/TextStartsWithFilterRule.cs | 1 + .../FilterCore/ValidatingValueBase.cs | 2 + .../FilterRulePanelController.cs | 1 + .../FilterProviders/SearchTextParser.cs | 1 + .../ManagementList/ColumnPicker.xaml.cs | 1 + .../ManagementListStateDescriptor.cs | 6 + .../ManagementList/PropertyValueComparer.cs | 2 + .../CommonUtils.cs | 4 + .../GetCounterCommand.cs | 1 + .../GetEventCommand.cs | 33 ++ .../NewWinEventCommand.cs | 4 + .../PdhHelper.cs | 146 ++++++ .../cmdletization/SessionBasedWrapper.cs | 8 + .../cmdletization/cim/CreateInstanceJob.cs | 2 + .../cim/EnumerateAssociatedInstancesJob.cs | 3 + .../cim/MethodInvocationJobBase.cs | 1 + .../cmdletization/cim/ModifyInstanceJob.cs | 3 + .../cimSupport/cmdletization/cim/QueryJob.cs | 1 + .../cim/TerminatingErrorTracker.cs | 1 + .../cmdletization/cim/cimChildJobBase.cs | 23 + .../cim/cimCmdletDefinitionContext.cs | 1 + .../cmdletization/cim/cimConverter.cs | 1 + .../cim/cimOperationOptionsHelper.cs | 1 + .../cimSupport/cmdletization/cim/cimQuery.cs | 3 + .../cmdletization/cim/cimWrapper.cs | 2 + .../cmdletization/cim/clientSideQuery.cs | 2 + .../commands/management/CIMHelper.cs | 16 + .../management/ClearRecycleBinCommand.cs | 4 + .../commands/management/Clipboard.cs | 3 + .../commands/management/Computer.cs | 18 + .../commands/management/GetChildrenCommand.cs | 1 + .../management/GetComputerInfoCommand.cs | 478 ++++++++++++++++++ .../commands/management/GetContentCommand.cs | 1 + .../commands/management/Hotfix.cs | 1 + .../commands/management/Navigation.cs | 16 + .../commands/management/Process.cs | 40 ++ .../commands/management/Service.cs | 28 + .../commands/management/SetPropertyCommand.cs | 3 + .../management/TestConnectionCommand.cs | 4 + .../commands/management/TimeZoneCommands.cs | 16 + .../commands/utility/AddMember.cs | 1 + .../commands/utility/AddType.cs | 7 + .../commands/utility/Compare-Object.cs | 6 + .../commands/utility/ConsoleColorCmdlet.cs | 2 + .../utility/ConvertFrom-SddlString.cs | 1 + .../utility/ConvertFromMarkdownCommand.cs | 3 + .../commands/utility/ConvertTo-Html.cs | 7 + .../commands/utility/CsvCommands.cs | 10 + .../commands/utility/DebugRunspaceCommand.cs | 10 + .../FormatAndOutput/OutGridView/ColumnInfo.cs | 1 + .../OutGridView/OriginalColumnInfo.cs | 1 + .../OutGridView/OutGridViewCommand.cs | 4 + .../OutGridView/OutWindowProxy.cs | 4 + .../FormatAndOutput/OutGridView/TableView.cs | 2 + .../common/GetFormatDataCommand.cs | 1 + .../commands/utility/Get-Error.cs | 4 + .../commands/utility/GetCultureCommand.cs | 2 + .../commands/utility/GetDateCommand.cs | 8 + .../commands/utility/GetHash.cs | 6 + .../commands/utility/GetRandomCommand.cs | 6 + .../commands/utility/GetRunspaceCommand.cs | 2 + .../commands/utility/GetUnique.cs | 2 + .../commands/utility/Group-Object.cs | 7 + .../utility/ImplicitRemotingCommands.cs | 10 + .../commands/utility/Import-LocalizedData.cs | 1 + .../commands/utility/Join-String.cs | 4 + .../utility/MarkdownOptionCommands.cs | 4 + .../commands/utility/MatchString.cs | 19 + .../commands/utility/Measure-Object.cs | 6 + .../commands/utility/New-Object.cs | 3 + .../commands/utility/NewTimeSpanCommand.cs | 2 + .../commands/utility/ObjectCommandComparer.cs | 3 + .../commands/utility/OrderObjectBase.cs | 2 + .../utility/PSBreakpointCreationBase.cs | 2 + .../commands/utility/ReadConsoleCmdlet.cs | 1 + .../commands/utility/Select-Object.cs | 5 + .../commands/utility/SetDateCommand.cs | 7 + .../commands/utility/Tee-Object.cs | 1 + .../utility/UnregisterEventCommand.cs | 1 + .../commands/utility/Update-TypeData.cs | 10 + .../commands/utility/Var.cs | 1 + .../commands/utility/WaitEventCommand.cs | 3 + .../BasicHtmlWebResponseObject.Common.cs | 5 + .../Common/InvokeRestMethodCommand.Common.cs | 2 + .../WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs | 62 +++ .../utility/WebCmdlet/CoreCLR/WebProxy.cs | 1 + .../utility/WebCmdlet/StreamHelper.cs | 2 + .../commands/utility/XmlCommands.cs | 3 + .../utility/trace/TraceExpressionCommand.cs | 3 + .../utility/trace/TraceListenerCommandBase.cs | 2 + .../WindowsTaskbarJumpList/ComInterfaces.cs | 24 + .../host/msh/CommandLineParameterParser.cs | 31 ++ .../host/msh/ConsoleControl.cs | 82 +++ .../host/msh/ConsoleHost.cs | 33 ++ .../host/msh/ConsoleHostTranscript.cs | 1 + .../host/msh/ConsoleHostUserInterface.cs | 13 + .../msh/ConsoleHostUserInterfaceProgress.cs | 1 + .../host/msh/Executor.cs | 9 + .../host/msh/PendingProgress.cs | 4 + .../host/msh/ProgressNode.cs | 2 + .../host/msh/ProgressPane.cs | 6 + .../host/msh/Serialization.cs | 8 + .../host/msh/StartTranscriptCmdlet.cs | 2 + .../host/msh/UpdatesNotification.cs | 5 + .../DotNetCode/Eventing/EventProvider.cs | 17 + .../Eventing/EventProviderTraceListener.cs | 3 + .../Eventing/Reader/NativeWrapper.cs | 17 + .../Eventing/UnsafeNativeMethods.cs | 165 ++++++ .../VT100EscapeSequences.cs | 22 + .../security/CatalogCommands.cs | 1 + .../security/CertificateProvider.cs | 8 + .../security/ExecutionPolicyCommands.cs | 1 + .../security/SecureStringCommands.cs | 1 + .../security/SignatureCommands.cs | 1 + .../ConfigProvider.cs | 5 + src/Microsoft.WSMan.Management/CredSSP.cs | 1 + .../InvokeWSManAction.cs | 3 + .../WSManInstance.cs | 3 + src/Microsoft.WSMan.Management/WsManHelper.cs | 33 ++ .../AssemblyInfo.cs | 4 + .../CoreCLR/CorePsAssemblyLoadContext.cs | 9 + .../CoreCLR/CorePsPlatform.cs | 6 + .../CoreCLR/CorePsStub.cs | 4 + .../DscSupport/CimDSCParser.cs | 5 + .../FormatAndOutput/common/BaseCommand.cs | 2 + .../common/BaseFormattingCommand.cs | 1 + .../common/BaseFormattingCommandParameters.cs | 5 + .../common/BaseOutputtingCommand.cs | 5 + .../common/ColumnWidthManager.cs | 2 + .../FormatAndOutput/common/ComplexWriter.cs | 8 + .../common/DisplayDatabase/commands.cs | 2 + .../DisplayDatabase/displayDescriptionData.cs | 19 + .../displayDescriptionData_Complex.cs | 1 + .../displayDescriptionData_List.cs | 1 + .../displayDescriptionData_Table.cs | 4 + .../displayResourceManagerCache.cs | 2 + .../common/DisplayDatabase/typeDataManager.cs | 1 + .../common/DisplayDatabase/typeDataQuery.cs | 5 + .../DisplayDatabase/typeDataXmlLoader.cs | 63 +++ .../common/FormatMsgCtxManager.cs | 10 + .../common/FormatViewGenerator.cs | 3 + .../common/FormatViewGenerator_Complex.cs | 7 + .../FormatAndOutput/common/FormatXMLWriter.cs | 1 + .../common/FormattingObjects.cs | 12 + .../FormatAndOutput/common/OutputQueue.cs | 1 + .../FormatAndOutput/common/TableWriter.cs | 4 + .../common/Utilities/MshObjectUtil.cs | 1 + .../common/Utilities/Mshexpression.cs | 1 + .../out-console/ConsoleLineOutput.cs | 2 + .../FormatAndOutput/out-console/OutConsole.cs | 1 + .../cimSupport/cmdletization/EnumWriter.cs | 1 + .../cimSupport/cmdletization/ScriptWriter.cs | 14 + .../cim/WildcardPatternToCimQueryParser.cs | 1 + .../engine/Attributes.cs | 5 + .../engine/COM/ComInvoker.cs | 9 + .../engine/COM/ComMethod.cs | 3 + .../engine/COM/ComProperty.cs | 6 + .../engine/COM/ComTypeInfo.cs | 3 + .../engine/COM/ComUtil.cs | 1 + .../ChildrenCmdletProviderInterfaces.cs | 1 + .../engine/CmdletParameterBinderController.cs | 6 + .../CommandCompletion/CommandCompletion.cs | 9 + .../CommandCompletion/CompletionAnalysis.cs | 14 + .../CommandCompletion/CompletionCompleters.cs | 12 + .../PseudoParameterBinder.cs | 22 + .../engine/CommandDiscovery.cs | 6 + .../engine/CommandInfo.cs | 1 + .../engine/CommandMetadata.cs | 1 + .../engine/CommandParameter.cs | 6 + .../engine/CommandPathSearch.cs | 1 + .../engine/CommandProcessorBase.cs | 1 + .../engine/CommandSearcher.cs | 9 + .../engine/CompiledCommandParameter.cs | 3 + .../engine/ContentCmdletProviderInterfaces.cs | 1 + .../engine/CoreAdapter.cs | 22 + .../engine/Credential.cs | 1 + .../engine/DataStoreAdapterProvider.cs | 2 + .../engine/DscResourceSearcher.cs | 4 + .../engine/EngineIntrinsics.cs | 2 + .../engine/EnumExpressionEvaluator.cs | 4 + .../engine/ErrorPackage.cs | 4 + .../engine/EventManager.cs | 13 + .../engine/ExecutionContext.cs | 4 + .../ExperimentalFeature.cs | 1 + .../engine/ExtendedTypeSystemException.cs | 8 + .../engine/ExternalScriptInfo.cs | 1 + .../engine/GetCommandCommand.cs | 8 + .../engine/InitialSessionState.cs | 11 + .../engine/InternalCommands.cs | 14 + .../engine/InvocationInfo.cs | 3 + .../engine/ItemCmdletProviderInterfaces.cs | 1 + .../engine/LanguagePrimitives.cs | 59 +++ .../MinishellParameterBinderController.cs | 11 + .../engine/Modules/AnalysisCache.cs | 6 + .../Modules/ExportModuleMemberCommand.cs | 4 + .../engine/Modules/GetModuleCommand.cs | 3 + .../engine/Modules/ImportModuleCommand.cs | 8 + .../engine/Modules/ModuleCmdletBase.cs | 2 + .../engine/Modules/ModuleUtils.cs | 2 + .../engine/Modules/PSModuleInfo.cs | 5 + .../engine/Modules/RemoteDiscoveryHelper.cs | 8 + .../engine/Modules/ScriptAnalysis.cs | 13 + .../engine/MshCmdlet.cs | 2 + .../engine/MshCommandRuntime.cs | 27 + .../engine/MshMemberInfo.cs | 26 + .../engine/MshObject.cs | 25 + .../engine/MshObjectTypeDescriptor.cs | 1 + .../engine/NativeCommandParameterBinder.cs | 2 + .../engine/NativeCommandProcessor.cs | 46 ++ .../engine/PSClassSearcher.cs | 7 + .../engine/PSConfiguration.cs | 22 + .../engine/PSVersionInfo.cs | 30 ++ .../engine/ParameterBinderController.cs | 1 + .../engine/PathInterfaces.cs | 1 + .../engine/Pipe.cs | 4 + .../engine/ProcessCodeMethods.cs | 5 + .../PropertyCmdletProviderInterfaces.cs | 1 + .../engine/ScopedItemSearcher.cs | 5 + .../engine/ScriptCommandProcessor.cs | 6 + ...urityDescriptorCmdletProviderInterfaces.cs | 1 + .../engine/SerializationStrings.cs | 8 + .../engine/SessionStatePublic.cs | 4 + .../engine/SessionStateScopeEnumerator.cs | 1 + .../engine/SessionStateStrings.cs | 2 + .../engine/ShellVariable.cs | 1 + .../engine/SpecialVariables.cs | 26 + .../engine/TypeMetadata.cs | 39 ++ .../engine/TypeTable.cs | 58 +++ .../engine/Utils.cs | 31 ++ .../engine/VariablePath.cs | 8 + .../engine/debugger/Breakpoint.cs | 4 + .../engine/debugger/debugger.cs | 57 +++ .../engine/hostifaces/AsyncResult.cs | 2 + .../engine/hostifaces/ChoiceDescription.cs | 1 + .../engine/hostifaces/Command.cs | 4 + .../engine/hostifaces/Connection.cs | 4 + .../engine/hostifaces/ConnectionBase.cs | 2 + .../engine/hostifaces/FieldDescription.cs | 9 + .../engine/hostifaces/History.cs | 1 + .../engine/hostifaces/InformationalRecord.cs | 2 + .../engine/hostifaces/InternalHost.cs | 8 + .../InternalHostRawUserInterface.cs | 1 + .../hostifaces/InternalHostUserInterface.cs | 3 + .../engine/hostifaces/ListModifier.cs | 2 + .../engine/hostifaces/LocalConnection.cs | 1 + .../engine/hostifaces/LocalPipeline.cs | 5 + .../hostifaces/MshHostRawUserInterface.cs | 11 + .../engine/hostifaces/MshHostUserInterface.cs | 5 + .../engine/hostifaces/PSCommand.cs | 2 + .../engine/hostifaces/PSDataCollection.cs | 10 + .../engine/hostifaces/PSTask.cs | 25 + .../engine/hostifaces/PowerShell.cs | 19 + .../hostifaces/PowerShellProcessInstance.cs | 6 + .../engine/hostifaces/RunspacePool.cs | 3 + .../engine/hostifaces/RunspacePoolInternal.cs | 13 + .../engine/hostifaces/pipelinebase.cs | 2 + .../engine/interpreter/ArrayOperations.cs | 1 + .../engine/interpreter/BranchLabel.cs | 6 + .../engine/interpreter/CallInstruction.cs | 1 + .../interpreter/ControlFlowInstructions.cs | 13 + .../engine/interpreter/DynamicInstructionN.cs | 4 + .../interpreter/DynamicSplatInstruction.cs | 1 + .../engine/interpreter/InstructionFactory.cs | 12 + .../engine/interpreter/InstructionList.cs | 32 ++ .../engine/interpreter/InterpretedFrame.cs | 5 + .../engine/interpreter/Interpreter.cs | 2 + .../engine/interpreter/LabelInfo.cs | 7 + .../engine/interpreter/LightCompiler.cs | 16 + .../interpreter/LightDelegateCreator.cs | 3 + .../engine/interpreter/LightLambda.cs | 4 + .../interpreter/LightLambdaClosureVisitor.cs | 1 + .../engine/interpreter/LocalVariables.cs | 8 + .../engine/interpreter/LoopCompiler.cs | 7 + .../interpreter/PowerShellInstructions.cs | 1 + .../engine/interpreter/TypeOperations.cs | 1 + .../engine/interpreter/Utilities.cs | 13 + .../engine/lang/interface/PSParser.cs | 1 + .../engine/lang/parserutils.cs | 5 + .../engine/lang/scriptblock.cs | 12 + .../engine/parser/AstVisitor.cs | 3 + .../engine/parser/CharTraits.cs | 9 + .../engine/parser/Compiler.cs | 77 +++ .../engine/parser/ConstantValues.cs | 3 + .../engine/parser/PSType.cs | 16 + .../engine/parser/Parser.cs | 12 + .../engine/parser/Position.cs | 1 + .../engine/parser/SafeValues.cs | 3 + .../engine/parser/SemanticChecks.cs | 5 + .../engine/parser/SymbolResolver.cs | 10 + .../engine/parser/TypeInferenceVisitor.cs | 1 + .../engine/parser/TypeResolver.cs | 6 + .../engine/parser/VariableAnalysis.cs | 19 + .../engine/parser/ast.cs | 20 + .../engine/parser/token.cs | 3 + .../engine/parser/tokenizer.cs | 26 + .../engine/pipeline.cs | 14 + .../engine/regex.cs | 7 + .../remoting/client/ClientRemotePowerShell.cs | 26 + .../engine/remoting/client/Job.cs | 23 + .../engine/remoting/client/Job2.cs | 8 + .../client/RemoteRunspacePoolInternal.cs | 5 + .../remoting/client/RemotingProtocol2.cs | 8 + .../engine/remoting/client/RunspaceRef.cs | 3 + .../engine/remoting/client/ThrottlingJob.cs | 20 + ...clientremotesessionprotocolstatemachine.cs | 1 + .../engine/remoting/client/remotepipeline.cs | 19 + .../engine/remoting/client/remoterunspace.cs | 26 + .../client/remotingprotocolimplementation.cs | 7 + .../remoting/commands/ConnectPSSession.cs | 9 + .../remoting/commands/CustomShellCommands.cs | 37 ++ .../engine/remoting/commands/DebugJob.cs | 5 + .../remoting/commands/DisconnectPSSession.cs | 1 + .../commands/EnterPSHostProcessCommand.cs | 7 + .../remoting/commands/InvokeCommandCommand.cs | 19 + .../engine/remoting/commands/JobRepository.cs | 2 + .../commands/NewPSSessionConfigurationFile.cs | 1 + .../NewPSSessionConfigurationOptionCommand.cs | 11 + .../remoting/commands/PSRemotingCmdlet.cs | 14 + .../remoting/commands/PushRunspaceCommand.cs | 3 + .../engine/remoting/commands/ReceiveJob.cs | 15 + .../remoting/commands/ReceivePSSession.cs | 9 + .../engine/remoting/commands/RemoveJob.cs | 14 + .../engine/remoting/commands/StopJob.cs | 3 + .../engine/remoting/commands/WaitJob.cs | 8 + .../remoting/commands/getrunspacecommand.cs | 1 + .../remoting/commands/newrunspacecommand.cs | 2 + .../engine/remoting/common/PSETWTracer.cs | 145 ++++++ .../common/RemoteSessionHyperVSocket.cs | 6 + .../remoting/common/RemoteSessionNamedPipe.cs | 36 ++ .../remoting/common/RunspaceConnectionInfo.cs | 20 + .../common/WireDataFormat/EncodeAndDecode.cs | 112 ++++ .../RemoteDebuggingCapability.cs | 7 + .../WireDataFormat/RemoteSessionCapability.cs | 15 + .../WireDataFormat/RemotingDataObject.cs | 6 + .../engine/remoting/common/fragmentor.cs | 12 + .../engine/remoting/common/misc.cs | 32 ++ .../engine/remoting/common/psstreamobject.cs | 2 + .../remoting/common/remotingexceptions.cs | 181 +++++++ .../engine/remoting/common/throttlemanager.cs | 1 + .../remoting/fanin/BaseTransportManager.cs | 36 ++ .../fanin/InitialSessionStateProvider.cs | 76 +++ .../fanin/OutOfProcTransportManager.cs | 54 ++ .../fanin/PSSessionConfigurationData.cs | 7 + .../remoting/fanin/PriorityCollection.cs | 10 + .../engine/remoting/fanin/WSManNativeAPI.cs | 65 +++ .../engine/remoting/fanin/WSManPlugin.cs | 33 ++ .../remoting/fanin/WSManPluginFacade.cs | 9 + .../remoting/fanin/WSManPluginShellSession.cs | 5 + .../fanin/WSManPluginTransportManager.cs | 5 + .../remoting/fanin/WSManTransportManager.cs | 33 ++ .../remoting/host/RemoteHostMethodInfo.cs | 47 ++ .../server/OutOfProcServerMediator.cs | 7 + .../remoting/server/ServerPowerShellDriver.cs | 1 + .../remoting/server/ServerRemoteHost.cs | 2 + .../server/ServerRemotingProtocol2.cs | 4 + .../server/ServerRunspacePoolDriver.cs | 21 + .../server/ServerSteppablePipelineDriver.cs | 3 + .../ServerSteppablePipelineSubscriber.cs | 5 + .../remoting/server/serverremotesession.cs | 6 + .../server/serverremotesessionstatemachine.cs | 2 + .../serverremotingprotocolimplementation.cs | 2 + .../engine/runtime/Binding/Binders.cs | 37 ++ .../engine/runtime/CompiledScriptBlock.cs | 38 ++ .../engine/runtime/MutableTuple.cs | 3 + .../engine/runtime/Operations/MiscOps.cs | 5 + .../engine/runtime/Operations/NumericOps.cs | 1 + .../engine/runtime/ScriptBlockToPowerShell.cs | 4 + .../engine/serialization.cs | 32 ++ .../help/CabinetAPI.cs | 1 + .../help/CabinetNativeApi.cs | 46 ++ .../help/HelpCommands.cs | 4 + .../help/HelpCommentsParser.cs | 15 + .../help/HelpFileHelpInfo.cs | 1 + .../help/HelpSystem.cs | 4 + .../help/ProviderContext.cs | 2 + .../help/UpdatableHelpCommandBase.cs | 4 + .../help/UpdatableHelpSystem.cs | 9 + .../logging/LogProvider.cs | 16 + .../logging/MshLog.cs | 1 + .../namespaces/FileSystemContentStream.cs | 27 + .../namespaces/FileSystemProvider.cs | 90 ++++ .../namespaces/PathInfo.cs | 3 + .../namespaces/RegistryWrapper.cs | 13 + .../namespaces/SessionStateProviderBase.cs | 1 + .../namespaces/Win32Native.cs | 25 + .../security/CatalogHelper.cs | 2 + .../security/MshSignature.cs | 14 + .../security/SecureStringHelper.cs | 4 + .../security/SecurityManager.cs | 4 + .../security/SecuritySupport.cs | 11 + .../security/nativeMethods.cs | 211 ++++++++ .../security/wldpNativeMethods.cs | 15 + .../singleshell/config/MshSnapinInfo.cs | 28 + .../config/MshSnapinLoadException.cs | 2 + .../utils/CommandDiscoveryExceptions.cs | 1 + .../utils/EncodingUtils.cs | 12 + .../utils/ExecutionExceptions.cs | 1 + .../utils/FormatAndTypeDataHelper.cs | 6 + .../utils/MetadataExceptions.cs | 20 + .../utils/MshArgumentException.cs | 1 + .../utils/MshArgumentNullException.cs | 1 + .../utils/MshArgumentOutOfRangeException.cs | 1 + .../utils/MshInvalidOperationException.cs | 2 + .../utils/MshNotImplementedException.cs | 1 + .../utils/MshNotSupportedException.cs | 1 + .../utils/MshObjectDisposedException.cs | 1 + .../utils/ObjectStream.cs | 9 + .../utils/ParameterBinderExceptions.cs | 2 + .../utils/PlatformInvokes.cs | 73 +++ .../utils/PowerShellETWTracer.cs | 1 + .../utils/PsUtils.cs | 3 + .../utils/RuntimeException.cs | 3 + .../utils/SessionStateExceptions.cs | 1 + .../utils/Verbs.cs | 1 + .../utils/tracing/EtwActivity.cs | 4 + .../utils/tracing/EtwActivityReverter.cs | 1 + .../EtwActivityReverterMethodInvoker.cs | 1 + .../utils/tracing/EtwEventCorrelator.cs | 1 + .../utils/tracing/PSEtwLogProvider.cs | 2 + .../utils/tracing/TracingGen.cs | 82 +++ test/xUnit/csharp/test_FileSystemProvider.cs | 1 + test/xUnit/csharp/test_PSConfiguration.cs | 4 + test/xUnit/csharp/test_Runspace.cs | 1 + 452 files changed, 5548 insertions(+) diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs index 1e21b781742..0aa0ca8e298 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs @@ -592,6 +592,7 @@ private void Cleanup() #region const strings internal const string ComputerNameArgument = @"ComputerName"; + internal const string CimSessionArgument = @"CimSession"; #endregion } diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs index d39bbc6c4ce..5775dd231ff 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs @@ -858,17 +858,25 @@ internal void ThrowTerminatingError(Exception exception, string operation) #region Session related parameter set name internal const string ComputerNameSet = "ComputerNameSet"; + internal const string SessionIdSet = "SessionIdSet"; + internal const string InstanceIdSet = "InstanceIdSet"; + internal const string NameSet = "NameSet"; + internal const string CimSessionSet = "CimSessionSet"; + internal const string WSManParameterSet = "WSManParameterSet"; + internal const string DcomParameterSet = "DcomParameterSet"; + internal const string ProtocolNameParameterSet = "ProtocolTypeSet"; #endregion #region register cimindication parameter set name internal const string QueryExpressionSessionSet = "QueryExpressionSessionSet"; + internal const string QueryExpressionComputerSet = "QueryExpressionComputerSet"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs index fd44d922009..75564eb671d 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs @@ -142,7 +142,9 @@ public class CimIndicationWatcher internal enum Status { Default, + Started, + Stopped } @@ -390,10 +392,15 @@ internal void SetCmdlet(Cmdlet cmdlet) /// /// private string computerName; + private CimSession cimSession; + private string nameSpace; + private string queryDialect; + private string queryExpression; + private UInt32 operationTimeout; #endregion #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs index 55cf540c0e8..e24ed1a5f9f 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs @@ -20,7 +20,9 @@ namespace Microsoft.Management.Infrastructure.CimCmdlets public enum AsyncResultType { Result, + Exception, + Completion } #endregion @@ -99,7 +101,9 @@ public AsyncResultEventArgsBase( } public readonly CimSession session; + public readonly IObservable observable; + public readonly AsyncResultType resultType; // property ErrorSource diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs index cd319d242d3..ff593e64c77 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs @@ -174,7 +174,9 @@ public OperationEventArgs(IDisposable operationCancellation, } public readonly IDisposable operationCancellation; + public readonly IObservable operation; + public readonly bool success; } diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs index 36987d35bd9..b4827fa06c7 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs @@ -307,8 +307,11 @@ private CimGetAssociatedInstance CreateOperationAgent() #region const string of parameter names internal const string nameCimInstance = "InputObject"; + internal const string nameComputerName = "ComputerName"; + internal const string nameCimSession = "CimSession"; + internal const string nameResourceUri = "ResourceUri"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs index a439e263f0d..1c2f9160b4a 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs @@ -282,6 +282,7 @@ private CimGetCimClass CreateOperationAgent() #region const string of parameter names internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs index 60c6e6bfa7e..ea2bf732521 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs @@ -532,17 +532,29 @@ private void CheckArgument() #region const string of parameter names internal const string nameCimInstance = "InputObject"; + internal const string nameCimSession = "CimSession"; + internal const string nameClassName = "ClassName"; + internal const string nameResourceUri = "ResourceUri"; + internal const string nameComputerName = "ComputerName"; + internal const string nameFilter = "Filter"; + internal const string nameKeyOnly = "KeyOnly"; + internal const string nameNamespace = "Namespace"; + internal const string nameOperationTimeoutSec = "OperationTimeoutSec"; + internal const string nameQuery = "Query"; + internal const string nameQueryDialect = "QueryDialect"; + internal const string nameSelectProperties = "Property"; + internal const string nameShallow = "Shallow"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs index 34d10b1d204..619a7401752 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs @@ -165,8 +165,11 @@ protected override void ProcessRecord() #region const string of parameter names internal const string nameComputerName = "ComputerName"; + internal const string nameId = "Id"; + internal const string nameInstanceId = "InstanceId"; + internal const string nameName = "Name"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs index e777987a87b..d75a4f60857 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs @@ -454,15 +454,25 @@ private void CheckArgument() #region const string of parameter names internal const string nameClassName = "ClassName"; + internal const string nameCimClass = "CimClass"; + internal const string nameQuery = "Query"; + internal const string nameResourceUri = "ResourceUri"; + internal const string nameQueryDialect = "QueryDialect"; + internal const string nameCimInstance = "InputObject"; + internal const string nameComputerName = "ComputerName"; + internal const string nameCimSession = "CimSession"; + internal const string nameArguments = "Arguments"; + internal const string nameMethodName = "MethodName"; + internal const string nameNamespace = "Namespace"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs index 31b860777ea..c9093a673a6 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs @@ -424,13 +424,21 @@ private void CheckArgument() #region const string of parameter names internal const string nameClassName = "ClassName"; + internal const string nameResourceUri = "ResourceUri"; + internal const string nameKey = "Key"; + internal const string nameCimClass = "CimClass"; + internal const string nameProperty = "Property"; + internal const string nameNamespace = "Namespace"; + internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; + internal const string nameClientOnly = "ClientOnly"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs index eeb4cba4c4d..4ebaf255198 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs @@ -43,6 +43,7 @@ public PasswordAuthenticationMechanism Authentication } private PasswordAuthenticationMechanism authentication; + private bool authenticationSet = false; /// @@ -141,6 +142,7 @@ public UInt32 OperationTimeoutSec } private UInt32 operationTimeout; + internal bool operationTimeoutSet = false; /// @@ -180,6 +182,7 @@ public UInt32 Port } private UInt32 port; + private bool portSet = false; /// diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs index aba99d9401c..8f20f452aa7 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs @@ -75,6 +75,7 @@ public SwitchParameter NoEncryption } private SwitchParameter noEncryption; + private bool noEncryptionSet = false; /// @@ -96,6 +97,7 @@ public SwitchParameter SkipCACheck } private SwitchParameter skipCACheck; + private bool skipCACheckSet = false; /// @@ -117,6 +119,7 @@ public SwitchParameter SkipCNCheck } private SwitchParameter skipCNCheck; + private bool skipCNCheckSet = false; /// @@ -138,6 +141,7 @@ public SwitchParameter SkipRevocationCheck } private SwitchParameter skipRevocationCheck; + private bool skipRevocationCheckSet = false; /// @@ -159,6 +163,7 @@ public SwitchParameter EncodePortInServicePrincipalName } private SwitchParameter encodeportinserviceprincipalname; + private bool encodeportinserviceprincipalnameSet = false; /// @@ -182,6 +187,7 @@ public PacketEncoding Encoding } private PacketEncoding encoding; + private bool encodingSet = false; /// @@ -223,6 +229,7 @@ public UInt32 MaxEnvelopeSizeKB } private UInt32 maxenvelopesizekb; + private bool maxenvelopesizekbSet = false; /// @@ -244,6 +251,7 @@ public PasswordAuthenticationMechanism ProxyAuthentication } private PasswordAuthenticationMechanism proxyAuthentication; + private bool proxyauthenticationSet = false; /// @@ -303,6 +311,7 @@ public ProxyType ProxyType } private ProxyType proxytype; + private bool proxytypeSet = false; /// @@ -324,6 +333,7 @@ public SwitchParameter UseSsl } private SwitchParameter usessl; + private bool usesslSet = false; /// @@ -345,6 +355,7 @@ public ImpersonationType Impersonation } private ImpersonationType impersonation; + private bool impersonationSet = false; /// @@ -366,6 +377,7 @@ public SwitchParameter PacketIntegrity } private SwitchParameter packetintegrity; + private bool packetintegritySet = false; /// @@ -387,6 +399,7 @@ public SwitchParameter PacketPrivacy } private SwitchParameter packetprivacy; + private bool packetprivacySet = false; /// @@ -691,21 +704,37 @@ internal WSManSessionOptions CreateWSMANSessionOptions() #region const string of parameter names internal const string nameNoEncryption = "NoEncryption"; + internal const string nameSkipCACheck = "SkipCACheck"; + internal const string nameSkipCNCheck = "SkipCNCheck"; + internal const string nameSkipRevocationCheck = "SkipRevocationCheck"; + internal const string nameEncodePortInServicePrincipalName = "EncodePortInServicePrincipalName"; + internal const string nameEncoding = "Encoding"; + internal const string nameHttpPrefix = "HttpPrefix"; + internal const string nameMaxEnvelopeSizeKB = "MaxEnvelopeSizeKB"; + internal const string nameProxyAuthentication = "ProxyAuthentication"; + internal const string nameProxyCertificateThumbprint = "ProxyCertificateThumbprint"; + internal const string nameProxyCredential = "ProxyCredential"; + internal const string nameProxyType = "ProxyType"; + internal const string nameUseSsl = "UseSsl"; + internal const string nameImpersonation = "Impersonation"; + internal const string namePacketIntegrity = "PacketIntegrity"; + internal const string namePacketPrivacy = "PacketPrivacy"; + internal const string nameProtocol = "Protocol"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs index 8e2e6ae27fd..d2220498510 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs @@ -311,9 +311,13 @@ private void SetParameter(object value, string parameterName) #region const string of parameter names internal const string nameClassName = "ClassName"; + internal const string nameQuery = "Query"; + internal const string nameQueryDialect = "QueryDialect"; + internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs index 60b152055b9..061910f90e8 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs @@ -308,11 +308,17 @@ private CimRemoveCimInstance CreateOperationAgent() #region const string of parameter names internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; + internal const string nameResourceUri = "ResourceUri"; + internal const string nameNamespace = "Namespace"; + internal const string nameCimInstance = "InputObject"; + internal const string nameQuery = "Query"; + internal const string nameQueryDialect = "QueryDialect"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs index 2fb4126a5b0..9977a44dc66 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs @@ -190,9 +190,13 @@ protected override void ProcessRecord() #region const string of parameter names internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; + internal const string nameId = "Id"; + internal const string nameInstanceId = "InstanceId"; + internal const string nameName = "Name"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs index 7237352b61a..493d084373e 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs @@ -365,12 +365,19 @@ private CimSetCimInstance CreateOperationAgent() #region const string of parameter names internal const string nameCimSession = "CimSession"; + internal const string nameComputerName = "ComputerName"; + internal const string nameResourceUri = "ResourceUri"; + internal const string nameNamespace = "Namespace"; + internal const string nameCimInstance = "InputObject"; + internal const string nameQuery = "Query"; + internal const string nameQueryDialect = "QueryDialect"; + internal const string nameProperty = "Property"; #endregion diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs index f46793eb50b..544bc363515 100644 --- a/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs +++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs @@ -197,19 +197,33 @@ internal static bool GenerateVerboseMessage #region internal strings internal static readonly string runspaceStateChanged = "Runspace {0} state changed to {1}"; + internal static readonly string classDumpInfo = @"Class type is {0}"; + internal static readonly string propertyDumpInfo = @"Property name {0} of type {1}, its value is {2}"; + internal static readonly string defaultPropertyType = @"It is a default property, default value is {0}"; + internal static readonly string propertyValueSet = @"This property value is set by user {0}"; + internal static readonly string addParameterSetName = @"Add parameter set {0} name to cache"; + internal static readonly string removeParameterSetName = @"Remove parameter set {0} name from cache"; + internal static readonly string currentParameterSetNameCount = @"Cache have {0} parameter set names"; + internal static readonly string currentParameterSetNameInCache = @"Cache have parameter set {0} valid {1}"; + internal static readonly string currentnonMandatoryParameterSetInCache = @"Cache have optional parameter set {0} valid {1}"; + internal static readonly string optionalParameterSetNameCount = @"Cache have {0} optional parameter set names"; + internal static readonly string finalParameterSetName = @"------Final parameter set name of the cmdlet is {0}"; + internal static readonly string addToOptionalParameterSet = @"Add to optional ParameterSetNames {0}"; + internal static readonly string startToResolveParameterSet = @"------Resolve ParameterSet Name"; + internal static readonly string reservedString = @"------"; #endregion diff --git a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs index 8667afa3a62..f5368a42e8a 100644 --- a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs +++ b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs @@ -48,7 +48,9 @@ internal HelpParagraphBuilder(Paragraph paragraph, PSObject psObj) private enum HelpCategory { Default, + DscResource, + Class } diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/BooleanBoxes.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/BooleanBoxes.cs index 92d50d5d007..13b261973fa 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/BooleanBoxes.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/BooleanBoxes.cs @@ -9,6 +9,7 @@ namespace Microsoft.Management.UI.Internal internal static class BooleanBoxes { private static object trueBox = true; + private static object falseBox = false; internal static object TrueBox diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs index 90684f3f6cc..bb7b529d812 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs @@ -13,7 +13,9 @@ namespace Microsoft.Management.UI.Internal internal enum LogicalDirection { None, + Left, + Right } diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs index ddcb75df521..80163057740 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs @@ -18,6 +18,7 @@ namespace Microsoft.Management.UI.Internal public partial class ListOrganizerItem : Control { private string startingText; + private FrameworkElement templatedParent; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs index be8cc841757..1cb7d6d7cbf 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs @@ -17,6 +17,7 @@ namespace Microsoft.Management.UI.Internal public abstract class StateDescriptor { private Guid id; + private string name; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs index 055e6453c22..50016f787d1 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs @@ -98,6 +98,7 @@ private static void Element_Loaded(object sender, RoutedEventArgs e) private class RetryActionAfterLoadedDataQueue { private Queue callbacks = new Queue(); + private Queue parameters = new Queue(); /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/Resizer.cs b/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/Resizer.cs index 19c0671bf21..ba8c1a4c805 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/Resizer.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/Resizer.cs @@ -36,7 +36,9 @@ public enum ResizeGripLocation public partial class Resizer : ContentControl { private AdornerLayer adornerLayer; + private UIElementAdorner adorner; + private ContentControl adornerContent; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs index 984d378dfdf..64c565d0a83 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs @@ -16,6 +16,7 @@ namespace Microsoft.Management.UI.Internal public class PropertiesTextContainsFilterRule : TextFilterRule { private static readonly string TextContainsCharactersRegexPattern = "{0}"; + private static readonly string TextContainsWordsRegexPattern = WordBoundaryRegexPattern + TextContainsCharactersRegexPattern + WordBoundaryRegexPattern; private Regex cachedRegex; diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs index 9186827c5f5..4275ece5e43 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs @@ -15,6 +15,7 @@ namespace Microsoft.Management.UI.Internal public class TextContainsFilterRule : TextFilterRule { private static readonly string TextContainsCharactersRegexPattern = "{0}"; + private static readonly string TextContainsWordsRegexPattern = WordBoundaryRegexPattern + TextContainsCharactersRegexPattern + WordBoundaryRegexPattern; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs index 45a9dd85386..92b251cf618 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs @@ -15,6 +15,7 @@ namespace Microsoft.Management.UI.Internal public class TextEndsWithFilterRule : TextFilterRule { private static readonly string TextEndsWithCharactersRegexPattern = "{0}$"; + private static readonly string TextEndsWithWordsRegexPattern = WordBoundaryRegexPattern + TextEndsWithCharactersRegexPattern; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs index 3440935889f..e03d1837c97 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs @@ -23,6 +23,7 @@ public abstract class TextFilterRule : SingleValueComparableValueFilterRule diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs index 8cfdc7960d8..ed90fce8526 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs @@ -15,6 +15,7 @@ namespace Microsoft.Management.UI.Internal public class TextStartsWithFilterRule : TextFilterRule { private static readonly string TextStartsWithCharactersRegexPattern = "^{0}"; + private static readonly string TextStartsWithWordsRegexPattern = TextStartsWithCharactersRegexPattern + WordBoundaryRegexPattern; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs index f3959685349..bdf5d34ca2e 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs @@ -23,7 +23,9 @@ public abstract class ValidatingValueBase : IDataErrorInfo, INotifyPropertyChang #region ValidationRules private List validationRules = new List(); + private ReadOnlyCollection readonlyValidationRules; + private bool isValidationRulesCollectionDirty = true; [field: NonSerialized] diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs index 63c611ce66f..60dd13c8efc 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs @@ -18,6 +18,7 @@ public class FilterRulePanelController : IFilterExpressionProvider #region Properties private ObservableCollection filterRulePanelItems; + private ReadOnlyObservableCollection readOnlyFilterRulePanelItems; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs index 04ba32ece6d..f797c063ec5 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs @@ -182,6 +182,7 @@ private List ParseMatches(MatchCollection matches) protected class SearchableRule { private SelectorFilterRule selectorFilterRule; + private TextFilterRule childRule; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs index 470a7670860..4d0fc8679e9 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs @@ -26,6 +26,7 @@ namespace Microsoft.Management.UI.Internal public partial class ColumnPicker : Window { private ObservableCollection notSelectedColumns = new ObservableCollection(); + private ObservableCollection selectedColumns = new ObservableCollection(); #region constructor diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs index 841175c97da..579f754ba9f 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs @@ -21,8 +21,11 @@ public class ManagementListStateDescriptor : StateDescriptor { #region Fields private Dictionary columns = new Dictionary(); + private string searchBoxText; + private List rulesSelected = new List(); + private string sortOrderPropertyName; #endregion Fields @@ -475,8 +478,11 @@ private static void SetColumnWidth(GridViewColumn ilc, double width) internal class ColumnStateDescriptor { private int index; + private bool isInUse; + private ListSortDirection sortDirection; + private double width; /// diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueComparer.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueComparer.cs index 5c9f56daa81..dc374b10a05 100644 --- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueComparer.cs +++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueComparer.cs @@ -16,7 +16,9 @@ namespace Microsoft.Management.UI.Internal internal class PropertyValueComparer : IComparer { private IPropertyValueGetter propertyValueGetter; + private List dataDescriptions; + private bool sortRecursively = true; /// diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs index bd686e7f9c9..9ce16f1ab32 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs @@ -15,11 +15,15 @@ namespace Microsoft.PowerShell.Commands.Diagnostics.Common internal static class CommonUtilities { private const string LibraryLoadDllName = "api-ms-win-core-libraryloader-l1-2-0.dll"; + private const string LocalizationDllName = "api-ms-win-core-localization-l1-2-1.dll"; private const uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; + private const uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; + private const uint LOAD_LIBRARY_AS_DATAFILE = 0x00000002; + private const uint FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; [DllImport(LocalizationDllName, SetLastError = true, CharSet = CharSet.Unicode)] diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs index 1c5da218afc..d243799ee2d 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs @@ -137,6 +137,7 @@ public Int64 MaxSamples } private Int64 _maxSamples = 1; + private bool _maxSamplesSpecified = false; // diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs index b9208804caa..81f435848da 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs @@ -372,37 +372,60 @@ public SwitchParameter Oldest // Query builder constant strings // private const string queryListOpen = ""; + private const string queryListClose = ""; + private const string queryTemplate = ""; + private const string queryOpenerTemplate = ""; + private const string suppressOpener = "*"; + private const string suppressCloser = ""; + private const string propOpen = "["; + private const string propClose = "]"; + private const string filePrefix = "file://"; + private const string NamedDataTemplate = "((EventData[Data[@Name='{0}']='{1}']) or (UserData/*/{0}='{1}'))"; + private const string DataTemplate = "(EventData/Data='{0}')"; + private const string SystemTimePeriodTemplate = "(System/TimeCreated[@SystemTime>='{0}' and @SystemTime<='{1}'])"; + private const string SystemTimeStartTemplate = "(System/TimeCreated[@SystemTime>='{0}'])"; + private const string SystemTimeEndTemplate = "(System/TimeCreated[@SystemTime<='{0}'])"; + private const string SystemLevelTemplate = "(System/Level="; + private const string SystemEventIDTemplate = "(System/EventID="; + private const string SystemSecurityTemplate = "(System/Security[@UserID='{0}'])"; + private const string SystemKeywordsTemplate = "System[band(Keywords,{0})]"; // // Other private members and constants // private ResourceManager _resourceMgr = null; + private Dictionary _providersByLogMap = new Dictionary(); private StringCollection _logNamesMatchingWildcard = null; + private StringCollection _resolvedPaths = new StringCollection(); private List _accumulatedLogNames = new List(); + private List _accumulatedProviderNames = new List(); + private List _accumulatedFileNames = new List(); private const uint MAX_EVENT_BATCH = 100; @@ -411,15 +434,25 @@ public SwitchParameter Oldest // Hashtable query key names // private const string hashkey_logname_lc = "logname"; + private const string hashkey_providername_lc = "providername"; + private const string hashkey_path_lc = "path"; + private const string hashkey_keywords_lc = "keywords"; + private const string hashkey_id_lc = "id"; + private const string hashkey_level_lc = "level"; + private const string hashkey_starttime_lc = "starttime"; + private const string hashkey_endtime_lc = "endtime"; + private const string hashkey_userid_lc = "userid"; + private const string hashkey_data_lc = "data"; + private const string hashkey_supress_lc = "suppresshashfilter"; /// diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs index 216e9bca7ea..4f320350624 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs @@ -23,9 +23,11 @@ namespace Microsoft.PowerShell.Commands public sealed class NewWinEventCommand : PSCmdlet { private ProviderMetadata _providerMetadata; + private EventDescriptor? _eventDescriptor; private const string TemplateTag = "template"; + private const string DataTag = "data"; private ResourceManager _resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager(); @@ -74,6 +76,7 @@ public int Id } private int _id; + private bool _idSpecified = false; /// @@ -97,6 +100,7 @@ public byte Version } private byte _version; + private bool _versionSpecified = false; /// diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs index 40935f6c8e0..0e4d6b5f32c 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs @@ -18,98 +18,186 @@ namespace Microsoft.Powershell.Commands.GetCounter.PdhNative internal static class PdhResults { public const long PDH_CSTATUS_VALID_DATA = 0x0L; + public const long PDH_CSTATUS_NEW_DATA = 0x1L; + public const long PDH_CSTATUS_NO_MACHINE = 0x800007D0L; + public const long PDH_CSTATUS_NO_INSTANCE = 0x800007D1L; + public const long PDH_MORE_DATA = 0x800007D2L; + public const long PDH_CSTATUS_ITEM_NOT_VALIDATED = 0x800007D3L; + public const long PDH_RETRY = 0x800007D4L; + public const long PDH_NO_DATA = 0x800007D5L; + public const long PDH_CALC_NEGATIVE_DENOMINATOR = 0x800007D6L; + public const long PDH_CALC_NEGATIVE_TIMEBASE = 0x800007D7L; + public const long PDH_CALC_NEGATIVE_VALUE = 0x800007D8L; + public const long PDH_DIALOG_CANCELLED = 0x800007D9L; + public const long PDH_END_OF_LOG_FILE = 0x800007DAL; + public const long PDH_ASYNC_QUERY_TIMEOUT = 0x800007DBL; + public const long PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE = 0x800007DCL; + public const long PDH_UNABLE_MAP_NAME_FILES = 0x80000BD5L; + public const long PDH_PLA_VALIDATION_WARNING = 0x80000BF3L; + public const long PDH_CSTATUS_NO_OBJECT = 0xC0000BB8L; + public const long PDH_CSTATUS_NO_COUNTER = 0xC0000BB9L; + public const long PDH_CSTATUS_INVALID_DATA = 0xC0000BBAL; + public const long PDH_MEMORY_ALLOCATION_FAILURE = 0xC0000BBBL; + public const long PDH_INVALID_HANDLE = 0xC0000BBCL; + public const long PDH_INVALID_ARGUMENT = 0xC0000BBDL; + public const long PDH_FUNCTION_NOT_FOUND = 0xC0000BBEL; + public const long PDH_CSTATUS_NO_COUNTERNAME = 0xC0000BBFL; + public const long PDH_CSTATUS_BAD_COUNTERNAME = 0xC0000BC0L; + public const long PDH_INVALID_BUFFER = 0xC0000BC1L; + public const long PDH_INSUFFICIENT_BUFFER = 0xC0000BC2L; + public const long PDH_CANNOT_CONNECT_MACHINE = 0xC0000BC3L; + public const long PDH_INVALID_PATH = 0xC0000BC4L; + public const long PDH_INVALID_INSTANCE = 0xC0000BC5L; + public const long PDH_INVALID_DATA = 0xC0000BC6L; + public const long PDH_NO_DIALOG_DATA = 0xC0000BC7L; + public const long PDH_CANNOT_READ_NAME_STRINGS = 0xC0000BC8L; + public const long PDH_LOG_FILE_CREATE_ERROR = 0xC0000BC9L; + public const long PDH_LOG_FILE_OPEN_ERROR = 0xC0000BCAL; + public const long PDH_LOG_TYPE_NOT_FOUND = 0xC0000BCBL; + public const long PDH_NO_MORE_DATA = 0xC0000BCCL; + public const long PDH_ENTRY_NOT_IN_LOG_FILE = 0xC0000BCDL; + public const long PDH_DATA_SOURCE_IS_LOG_FILE = 0xC0000BCEL; + public const long PDH_DATA_SOURCE_IS_REAL_TIME = 0xC0000BCFL; + public const long PDH_UNABLE_READ_LOG_HEADER = 0xC0000BD0L; + public const long PDH_FILE_NOT_FOUND = 0xC0000BD1L; + public const long PDH_FILE_ALREADY_EXISTS = 0xC0000BD2L; + public const long PDH_NOT_IMPLEMENTED = 0xC0000BD3L; + public const long PDH_STRING_NOT_FOUND = 0xC0000BD4L; + public const long PDH_UNKNOWN_LOG_FORMAT = 0xC0000BD6L; + public const long PDH_UNKNOWN_LOGSVC_COMMAND = 0xC0000BD7L; + public const long PDH_LOGSVC_QUERY_NOT_FOUND = 0xC0000BD8L; + public const long PDH_LOGSVC_NOT_OPENED = 0xC0000BD9L; + public const long PDH_WBEM_ERROR = 0xC0000BDAL; + public const long PDH_ACCESS_DENIED = 0xC0000BDBL; + public const long PDH_LOG_FILE_TOO_SMALL = 0xC0000BDCL; + public const long PDH_INVALID_DATASOURCE = 0xC0000BDDL; + public const long PDH_INVALID_SQLDB = 0xC0000BDEL; + public const long PDH_NO_COUNTERS = 0xC0000BDFL; + public const long PDH_SQL_ALLOC_FAILED = 0xC0000BE0L; + public const long PDH_SQL_ALLOCCON_FAILED = 0xC0000BE1L; + public const long PDH_SQL_EXEC_DIRECT_FAILED = 0xC0000BE2L; + public const long PDH_SQL_FETCH_FAILED = 0xC0000BE3L; + public const long PDH_SQL_ROWCOUNT_FAILED = 0xC0000BE4L; + public const long PDH_SQL_MORE_RESULTS_FAILED = 0xC0000BE5L; + public const long PDH_SQL_CONNECT_FAILED = 0xC0000BE6L; + public const long PDH_SQL_BIND_FAILED = 0xC0000BE7L; + public const long PDH_CANNOT_CONNECT_WMI_SERVER = 0xC0000BE8L; + public const long PDH_PLA_COLLECTION_ALREADY_RUNNING = 0xC0000BE9L; + public const long PDH_PLA_ERROR_SCHEDULE_OVERLAP = 0xC0000BEAL; + public const long PDH_PLA_COLLECTION_NOT_FOUND = 0xC0000BEBL; + public const long PDH_PLA_ERROR_SCHEDULE_ELAPSED = 0xC0000BECL; + public const long PDH_PLA_ERROR_NOSTART = 0xC0000BEDL; + public const long PDH_PLA_ERROR_ALREADY_EXISTS = 0xC0000BEEL; + public const long PDH_PLA_ERROR_TYPE_MISMATCH = 0xC0000BEFL; + public const long PDH_PLA_ERROR_FILEPATH = 0xC0000BF0L; + public const long PDH_PLA_SERVICE_ERROR = 0xC0000BF1L; + public const long PDH_PLA_VALIDATION_ERROR = 0xC0000BF2L; + public const long PDH_PLA_ERROR_NAME_TOO_LONG = 0xC0000BF4L; + public const long PDH_INVALID_SQL_LOG_FORMAT = 0xC0000BF5L; + public const long PDH_COUNTER_ALREADY_IN_QUERY = 0xC0000BF6L; + public const long PDH_BINARY_LOG_CORRUPT = 0xC0000BF7L; + public const long PDH_LOG_SAMPLE_TOO_SMALL = 0xC0000BF8L; + public const long PDH_OS_LATER_VERSION = 0xC0000BF9L; + public const long PDH_OS_EARLIER_VERSION = 0xC0000BFAL; + public const long PDH_INCORRECT_APPEND_TIME = 0xC0000BFBL; + public const long PDH_UNMATCHED_APPEND_COUNTER = 0xC0000BFCL; + public const long PDH_SQL_ALTER_DETAIL_FAILED = 0xC0000BFDL; + public const long PDH_QUERY_PERF_DATA_TIMEOUT = 0xC0000BFEL; } internal static class PerfDetail { public const uint PERF_DETAIL_NOVICE = 100; // The uninformed can understand it + public const uint PERF_DETAIL_ADVANCED = 200; // For the advanced user + public const uint PERF_DETAIL_EXPERT = 300; // For the expert user + public const uint PERF_DETAIL_WIZARD = 400; // For the system designer } @@ -117,78 +205,116 @@ internal static class PerfDetail internal struct SYSTEMTIME { public UInt16 year; + public UInt16 month; + public UInt16 dayOfWeek; + public UInt16 day; + public UInt16 hour; + public UInt16 minute; + public UInt16 second; + public UInt16 milliseconds; } internal static class PdhFormat { public const uint PDH_FMT_RAW = 0x00000010; + public const uint PDH_FMT_ANSI = 0x00000020; + public const uint PDH_FMT_UNICODE = 0x00000040; + public const uint PDH_FMT_LONG = 0x00000100; + public const uint PDH_FMT_DOUBLE = 0x00000200; + public const uint PDH_FMT_LARGE = 0x00000400; + public const uint PDH_FMT_NOSCALE = 0x00001000; + public const uint PDH_FMT_1000 = 0x00002000; + public const uint PDH_FMT_NODATA = 0x00004000; + public const uint PDH_FMT_NOCAP100 = 0x00008000; + public const uint PERF_DETAIL_COSTLY = 0x00010000; + public const uint PERF_DETAIL_STANDARD = 0x0000FFFF; } internal static class PdhLogAccess { public const uint PDH_LOG_READ_ACCESS = 0x00010000; + public const uint PDH_LOG_WRITE_ACCESS = 0x00020000; + public const uint PDH_LOG_UPDATE_ACCESS = 0x00040000; + public const uint PDH_LOG_ACCESS_MASK = 0x000F0000; } internal static class PdhLogOpenMode { public const uint PDH_LOG_CREATE_NEW = 0x00000001; + public const uint PDH_LOG_CREATE_ALWAYS = 0x00000002; + public const uint PDH_LOG_OPEN_ALWAYS = 0x00000003; + public const uint PDH_LOG_OPEN_EXISTING = 0x00000004; + public const uint PDH_LOG_CREATE_MASK = 0x0000000F; } internal static class PdhLogOpenOption { public const uint PDH_LOG_OPT_USER_STRING = 0x01000000; + public const uint PDH_LOG_OPT_CIRCULAR = 0x02000000; + public const uint PDH_LOG_OPT_MAX_IS_BYTES = 0x04000000; + public const uint PDH_LOG_OPT_APPEND = 0x08000000; } internal enum PdhLogFileType { PDH_LOG_TYPE_UNDEFINED = 0, + PDH_LOG_TYPE_CSV = 1, + PDH_LOG_TYPE_TSV = 2, + PDH_LOG_TYPE_TRACE_KERNEL = 4, + PDH_LOG_TYPE_TRACE_GENERIC = 5, + PDH_LOG_TYPE_PERFMON = 6, + PDH_LOG_TYPE_SQL = 7, + PDH_LOG_TYPE_BINARY = 8 } internal static class PdhWildCardFlag { public const uint PDH_NOEXPANDCOUNTERS = 1; + public const uint PDH_NOEXPANDINSTANCES = 2; + public const uint PDH_REFRESHCOUNTERS = 4; } internal struct CounterHandleNInstance { public IntPtr hCounter; + public string InstanceName; } @@ -250,9 +376,13 @@ private struct PDH_FMT_COUNTERVALUE_UNICODE private struct PDH_RAW_COUNTER { public uint CStatus; + public System.Runtime.InteropServices.ComTypes.FILETIME TimeStamp; + public Int64 FirstValue; + public Int64 SecondValue; + public uint MultiCount; } @@ -260,7 +390,9 @@ private struct PDH_RAW_COUNTER private struct PDH_TIME_INFO { public Int64 StartTime; + public Int64 EndTime; + public UInt32 SampleCount; } @@ -273,23 +405,37 @@ private struct PDH_TIME_INFO private struct PDH_COUNTER_INFO { [FieldOffset(0)] public UInt32 dwLength; + [FieldOffset(4)] public UInt32 dwType; + [FieldOffset(8)] public UInt32 CVersion; + [FieldOffset(12)] public UInt32 CStatus; + [FieldOffset(16)] public UInt32 lScale; + [FieldOffset(20)] public UInt32 lDefaultScale; + [FieldOffset(24)] public IntPtr dwUserData; + [FieldOffset(32)] public IntPtr dwQueryUserData; + [FieldOffset(40)] public string szFullPath; [FieldOffset(48)] public string szMachineName; + [FieldOffset(56)] public string szObjectName; + [FieldOffset(64)] public string szInstanceName; + [FieldOffset(72)] public string szParentInstance; + [FieldOffset(80)] public UInt32 dwInstanceIndex; + [FieldOffset(88)] public string szCounterName; [FieldOffset(96)] public string szExplainText; + [FieldOffset(104)] public IntPtr DataBuffer; } diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs index 9ad44f3a07f..db3db30949a 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs @@ -90,6 +90,7 @@ protected TSession[] Session } private TSession[] _session; + private bool _sessionWasSpecified; /// @@ -314,14 +315,21 @@ private static void DiscardJobOutputs(PSDataCollection psDataCollection) private enum JobOutputs { Output = 0x1, + Error = 0x2, + Warning = 0x4, + Verbose = 0x8, + Debug = 0x10, + Progress = 0x20, + Results = 0x40, NonPipelineResults = Output | Error | Warning | Verbose | Debug | Progress, + PipelineResults = Results, } diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs index b55b105e20b..f91c427ca68 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs @@ -15,6 +15,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class CreateInstanceJob : PropertySettingJob { private CimInstance _resultFromCreateInstance; + private CimInstance _resultFromGetInstance; private static CimInstance GetEmptyInstance(CimJobContext jobContext) @@ -54,6 +55,7 @@ private IObservable GetGetInstanceOperation() #if DEBUG private bool _createInstanceOperationGotStarted; + private bool _getInstanceOperationGotStarted; #endif diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs index bd024b7d76a..07f45096527 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs @@ -17,8 +17,11 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class EnumerateAssociatedInstancesJob : QueryJobBase { private readonly CimInstance _associatedObject; + private readonly string _associationName; + private readonly string _resultRole; + private readonly string _sourceRole; internal EnumerateAssociatedInstancesJob(CimJobContext jobContext, CimQuery cimQuery, CimInstance associatedObject, string associationName, string resultRole, string sourceRole) diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs index 075e218ea60..20a42acc941 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs @@ -32,6 +32,7 @@ internal MethodInvocationJobBase(CimJobContext jobContext, bool passThru, string } private readonly bool _passThru; + private readonly MethodInvocationInfo _methodInvocationInfo; internal string MethodName diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs index f0d07fc201d..793b0c716d6 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs @@ -16,8 +16,11 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class ModifyInstanceJob : PropertySettingJob { private CimInstance _resultFromModifyInstance; + private bool _resultFromModifyInstanceHasBeenPassedThru; + private readonly CimInstance _originalInstance; + private CimInstance _temporaryInstance; internal ModifyInstanceJob(CimJobContext jobContext, bool passThru, CimInstance managementObject, MethodInvocationInfo methodInvocationInfo) diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs index 4297c00616c..98f2c6a4ffb 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs @@ -17,6 +17,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class QueryInstancesJob : QueryJobBase { private readonly string _wqlQuery; + private readonly bool _useEnumerateInstances; internal QueryInstancesJob(CimJobContext jobContext, CimQuery cimQuery, string wqlCondition) diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs index 730e54a6391..92940ebb868 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs @@ -91,6 +91,7 @@ internal static TerminatingErrorTracker GetTracker(InvocationInfo invocationInfo #region Tracking terminating errors within a single cmdlet invocation private readonly int _numberOfSessions; + private int _numberOfReportedSessionTerminatingErrors; private TerminatingErrorTracker(int numberOfSessions) diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs index 3743d1965f0..be1f989fff4 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs @@ -26,6 +26,7 @@ internal abstract class CimChildJobBase : IObserver { private static long s_globalJobNumberCounter; + private readonly long _myJobNumber = Interlocked.Increment(ref s_globalJobNumberCounter); private const string CIMJobType = "CimJob"; @@ -69,16 +70,27 @@ internal CimChildJobBase(CimJobContext jobContext) private enum WsManErrorCode : uint { ERROR_WSMAN_QUOTA_MAX_SHELLS = 0x803381A5, + ERROR_WSMAN_QUOTA_MAX_OPERATIONS = 0x803381A6, + ERROR_WSMAN_QUOTA_USER = 0x803381A7, + ERROR_WSMAN_QUOTA_SYSTEM = 0x803381A8, + ERROR_WSMAN_QUOTA_MAX_SHELLUSERS = 0x803381AB, + ERROR_WSMAN_QUOTA_MAX_SHELLS_PPQ = 0x803381E4, + ERROR_WSMAN_QUOTA_MAX_USERS_PPQ = 0x803381E5, + ERROR_WSMAN_QUOTA_MAX_PLUGINSHELLS_PPQ = 0x803381E6, + ERROR_WSMAN_QUOTA_MAX_PLUGINOPERATIONS_PPQ = 0x803381E7, + ERROR_WSMAN_QUOTA_MAX_OPERATIONS_USER_PPQ = 0x803381E8, + ERROR_WSMAN_QUOTA_MAX_COMMANDS_PER_SHELL_PPQ = 0x803381E9, + ERROR_WSMAN_QUOTA_MIN_REQUIREMENT_NOT_AVAILABLE_PPQ = 0x803381EA, } @@ -160,11 +172,15 @@ public virtual void OnCompleted() } private static readonly Random s_globalRandom = new Random(); + private readonly Random _random; + private int _sleepAndRetryDelayRangeMs = 1000; + private int _sleepAndRetryExtraDelayMs = 0; private const int MaxRetryDelayMs = 15 * 1000; + private const int MinRetryDelayMs = 100; private Timer _sleepAndRetryTimer; @@ -580,9 +596,13 @@ public override void StopJob() } private readonly object _jobStateLock = new object(); + private bool _jobHadErrors; + private bool _jobWasStarted; + private bool _jobWasStopped; + private bool _alreadyReachedCompletedState; internal bool JobHadErrors @@ -822,7 +842,9 @@ private void WriteProgressCallback(string activity, string currentOperation, str private enum MessageChannel { Warning = 0, + Verbose = 1, + Debug = 2, } @@ -890,6 +912,7 @@ private CimResponseType WriteErrorCallback(CimInstance cimError) } private bool _userWasPromptedForContinuationOfProcessing; + private bool _userRespondedYesToAtLeastOneShouldProcess; internal bool DidUserSuppressTheOperation diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs index 6fa40516322..2bc5075a477 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs @@ -113,6 +113,7 @@ public bool ClientSideShouldProcess } private Uri _resourceUri; + private bool _resourceUriHasBeenCalculated; public Uri ResourceUri diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs index 033b8813534..fd3c32ec38e 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs @@ -29,6 +29,7 @@ internal class CimSensitiveValueConverter : IDisposable private class SensitiveString : IDisposable { private GCHandle _gcHandle; + private string _string; public string Value { get { return _string; } } diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs index 17801923bf0..2ed18335feb 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs @@ -17,6 +17,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class CimCustomOptionsDictionary { private readonly IDictionary _dict; + private readonly object _dictModificationLock = new object(); private CimCustomOptionsDictionary(IEnumerable> wrappedDictionary) diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs index 551b2149e41..43f69d9fe67 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs @@ -23,8 +23,11 @@ internal class CimQuery : QueryBuilder, ISessionBoundQueryBuilder private readonly StringBuilder _wqlCondition; private CimInstance _associatedObject; + private string _associationName; + private string _resultRole; + private string _sourceRole; internal readonly Dictionary queryOptions = new Dictionary(StringComparer.OrdinalIgnoreCase); diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs index a667e6da2f5..dc42a9b005e 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs @@ -25,7 +25,9 @@ public sealed class CimCmdletAdapter : #region Special method and parameter names internal const string CreateInstance_MethodName = "cim:CreateInstance"; + internal const string ModifyInstance_MethodName = "cim:ModifyInstance"; + internal const string DeleteInstance_MethodName = "cim:DeleteInstance"; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs index 6b454ad8b7e..120b4552758 100644 --- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs +++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs @@ -624,9 +624,11 @@ private static bool ActualValueLessThanOrEqualToExpectedValue(string propertyNam } private int _numberOfResultsFromMi; + private int _numberOfMatchingResults; private readonly List _filters = new List(); + private readonly object _myLock = new object(); #region "Public" interface for client-side filtering diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs index 559af13127b..902beef5d20 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs @@ -16,24 +16,40 @@ internal static class CIMHelper internal static class ClassNames { internal const string OperatingSystem = "Win32_OperatingSystem"; + internal const string PageFileUsage = "Win32_PageFileUsage"; + internal const string Bios = "Win32_BIOS"; + internal const string BaseBoard = "Win32_BaseBoard"; + internal const string ComputerSystem = "Win32_ComputerSystem"; + internal const string Keyboard = "Win32_Keyboard"; + internal const string DeviceGuard = "Win32_DeviceGuard"; + internal const string HotFix = "Win32_QuickFixEngineering"; + internal const string MicrosoftNetworkAdapter = "MSFT_NetAdapter"; + internal const string NetworkAdapter = "Win32_NetworkAdapter"; + internal const string NetworkAdapterConfiguration = "Win32_NetworkAdapterConfiguration"; + internal const string Processor = "Win32_Processor"; + internal const string PhysicalMemory = "Win32_PhysicalMemory"; + internal const string TimeZone = "Win32_TimeZone"; } internal const string DefaultNamespace = @"root\cimv2"; + internal const string DeviceGuardNamespace = @"root\Microsoft\Windows\DeviceGuard"; + internal const string MicrosoftNetworkAdapterNamespace = "root/StandardCimv2"; + internal const string DefaultQueryDialect = "WQL"; /// diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs index f42e4dae173..b7675adc50e 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs @@ -23,7 +23,9 @@ namespace Microsoft.PowerShell.Commands public class ClearRecycleBinCommand : PSCmdlet { private string[] _drivesList; + private DriveInfo[] _availableDrives; + private bool _force; /// @@ -244,7 +246,9 @@ internal static class NativeMethod internal enum RecycleFlags : uint { SHERB_NOCONFIRMATION = 0x00000001, + SHERB_NOPROGRESSUI = 0x00000002, + SHERB_NOSOUND = 0x00000004 } diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs index 38a1b5c48a6..0a1d4771b7c 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs @@ -151,7 +151,9 @@ public static void SetRtf(string plainText, string rtfText) } private const uint GMEM_MOVEABLE = 0x0002; + private const uint GMEM_ZEROINIT = 0x0040; + private const uint GHND = GMEM_MOVEABLE | GMEM_ZEROINIT; [DllImport("kernel32.dll")] @@ -196,6 +198,7 @@ public static void SetRtf(string plainText, string rtfText) private static extern uint RegisterClipboardFormat(string lpszFormat); private const uint CF_TEXT = 1; + private const uint CF_UNICODETEXT = 13; private static uint s_CF_RTF; diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs index d8f0b96fade..4f572ee1607 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs @@ -170,6 +170,7 @@ public class RestartComputerCommand : PSCmdlet, IDisposable #region "Parameters and PrivateData" private const string DefaultParameterSet = "DefaultSet"; + private const int forcedReboot = 6; // see https://msdn.microsoft.com/library/aa394058(v=vs.85).aspx /// @@ -200,7 +201,9 @@ public class RestartComputerCommand : PSCmdlet, IDisposable public string[] ComputerName { get; set; } = new string[] { "." }; private List _validatedComputerNames = new List(); + private readonly List _waitOnComputers = new List(); + private readonly HashSet _uniqueComputerNames = new HashSet(StringComparer.OrdinalIgnoreCase); /// @@ -248,6 +251,7 @@ public int Timeout } private int _timeout = -1; + private bool _timeoutSpecified = false; /// @@ -267,6 +271,7 @@ public WaitForServiceTypes For } private WaitForServiceTypes _waitFor = WaitForServiceTypes.PowerShell; + private bool _waitForSpecified = false; /// @@ -287,6 +292,7 @@ public Int16 Delay } private int _delay = 5; + private bool _delaySpecified = false; /// @@ -341,12 +347,14 @@ public Int16 Delay /// Indicate to exit. /// private bool _exit, _timeUp; + private readonly CancellationTokenSource _cancel = new CancellationTokenSource(); /// /// A waithandler to wait on. Current thread will wait on it during the delay interval. /// private readonly ManualResetEventSlim _waitHandler = new ManualResetEventSlim(false); + private readonly Dictionary _computerInfos = new Dictionary(StringComparer.OrdinalIgnoreCase); // CLR 4.0 Port note - use https://msdn.microsoft.com/library/system.net.networkinformation.ipglobalproperties.hostname(v=vs.110).aspx @@ -356,14 +364,21 @@ public Int16 Delay private readonly string _fullLocalMachineName = Dns.GetHostEntryAsync(string.Empty).Result.HostName; private int _percent; + private string _status; + private string _activity; + private Timer _timer; + private System.Management.Automation.PowerShell _powershell; private const string StageVerification = "VerifyStage"; + private const string WmiConnectionTest = "WMI"; + private const string WinrmConnectionTest = "WinRM"; + private const string PowerShellConnectionTest = "PowerShell"; #endregion "parameters and PrivateData" @@ -521,6 +536,7 @@ private void OnTimedEvent(object s) private class ComputerInfo { internal string LastBootUpTime; + internal bool RebootComplete; } @@ -1280,9 +1296,11 @@ public class RenameComputerCommand : PSCmdlet #region Private Members private bool _containsLocalHost = false; + private string _newNameForLocalHost = null; private readonly string _shortLocalMachineName = Dns.GetHostName(); + private readonly string _fullLocalMachineName = Dns.GetHostEntryAsync(string.Empty).Result.HostName; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs index 3dcd0d51c4a..564ecbbe07c 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs @@ -26,6 +26,7 @@ public class GetChildItemCommand : CoreCommandBase /// -recurse /// private const string childrenSet = "Items"; + private const string literalChildrenSet = "LiteralItems"; #region Command parameters diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs index 14f8a207ae5..9ca06b53824 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs @@ -34,53 +34,76 @@ public class GetComputerInfoCommand : PSCmdlet private class OSInfoGroup { public WmiOperatingSystem os; + public HotFix[] hotFixes; + public WmiPageFileUsage[] pageFileUsage; + public string halVersion; + public TimeSpan? upTime; + public RegWinNtCurrentVersion regCurVer; } private class SystemInfoGroup { public WmiBaseBoard baseboard; + public WmiBios bios; + public WmiComputerSystem computer; + public Processor[] processors; + public NetworkAdapter[] networkAdapters; } private class HyperVInfo { public bool? Present; + public bool? VMMonitorModeExtensions; + public bool? SecondLevelAddressTranslation; + public bool? VirtualizationFirmwareEnabled; + public bool? DataExecutionPreventionAvailable; } private class DeviceGuardInfo { public DeviceGuardSmartStatus status; + public DeviceGuard deviceGuard; } private class MiscInfoGroup { public ulong? physicallyInstalledMemory; + public string timeZone; + public string logonServer; + public FirmwareType? firmwareType; + public PowerPlatformRole? powerPlatformRole; + public WmiKeyboard[] keyboards; + public HyperVInfo hyperV; + public ServerLevel? serverLevel; + public DeviceGuardInfo deviceGuard; } #endregion Inner Types #region Static Data and Constants private const string activity = "Get-ComputerInfo"; + private const string localMachineName = null; #endregion Static Data and Constants @@ -1340,32 +1363,59 @@ protected static string GetLanguageName(uint? lcid) internal class WmiBaseBoard { public string Caption; + public string[] ConfigOptions; + public float? Depth; + public string Description; + public float? Height; + public bool? HostingBoard; + public bool? HotSwappable; + public DateTime? InstallDate; + public string Manufacturer; + public string Model; + public string Name; + public string OtherIdentifyingInfo; + public string PartNumber; + public bool? PoweredOn; + public string Product; + public bool? Removable; + public bool? Replaceable; + public string RequirementsDescription; + public bool? RequiresDaughterBoard; + public string SerialNumber; + public string SKU; + public string SlotLayout; + public bool? SpecialRequirements; + public string Status; + public string Tag; + public string Version; + public float? Weight; + public float? Width; } @@ -1373,34 +1423,63 @@ internal class WmiBaseBoard internal class WmiBios : WmiClassBase { public UInt16[] BiosCharacteristics; + public string[] BIOSVersion; + public string BuildNumber; + public string Caption; + public string CodeSet; + public string CurrentLanguage; + public string Description; + public byte? EmbeddedControllerMajorVersion; + public byte? EmbeddedControllerMinorVersion; + public string IdentificationCode; + public ushort? InstallableLanguages; + public DateTime? InstallDate; + public string LanguageEdition; + public string[] ListOfLanguages; + public string Manufacturer; + public string Name; + public string OtherTargetOS; + public bool? PrimaryBIOS; + public DateTime? ReleaseDate; + public string SerialNumber; + public string SMBIOSBIOSVersion; + public ushort? SMBIOSMajorVersion; + public ushort? SMBIOSMinorVersion; + public bool? SMBIOSPresent; + public ushort? SoftwareElementState; + public string Status; + public byte? SystemBiosMajorVersion; + public byte? SystemBiosMinorVersion; + public ushort? TargetOperatingSystem; + public string Version; } @@ -1408,62 +1487,119 @@ internal class WmiBios : WmiClassBase internal class WmiComputerSystem { public ushort? AdminPasswordStatus; + public bool? AutomaticManagedPagefile; + public bool? AutomaticResetBootOption; + public bool? AutomaticResetCapability; + public ushort? BootOptionOnLimit; + public ushort? BootOptionOnWatchDog; + public bool? BootROMSupported; + public string BootupState; + public UInt16[] BootStatus; + public string Caption; + public ushort? ChassisBootupState; + public string ChassisSKUNumber; + public Int16? CurrentTimeZone; + public bool? DaylightInEffect; + public string Description; + public string DNSHostName; + public string Domain; + public ushort? DomainRole; + public bool? EnableDaylightSavingsTime; + public ushort? FrontPanelResetStatus; + public bool? HypervisorPresent; + public bool? InfraredSupported; + public string InitialLoadInfo; + public DateTime? InstallDate; + public ushort? KeyboardPasswordStatus; + public string LastLoadInfo; + public string Manufacturer; + public string Model; + public string Name; + public bool? NetworkServerModeEnabled; + public uint? NumberOfLogicalProcessors; + public uint? NumberOfProcessors; + public string[] OEMStringArray; + public bool? PartOfDomain; + public Int64? PauseAfterReset; + public ushort? PCSystemType; + public ushort? PCSystemTypeEx; + public UInt16[] PowerManagementCapabilities; + public bool? PowerManagementSupported; + public ushort? PowerOnPasswordStatus; + public ushort? PowerState; + public ushort? PowerSupplyState; + public string PrimaryOwnerContact; + public string PrimaryOwnerName; + public ushort? ResetCapability; + public Int16? ResetCount; + public Int16? ResetLimit; + public string[] Roles; + public string Status; + public string[] SupportContactDescription; + public string SystemFamily; + public string SystemSKUNumber; + public string SystemType; + public ushort? ThermalState; + public ulong? TotalPhysicalMemory; + public string UserName; + public ushort? WakeUpType; + public string Workgroup; public PowerManagementCapabilities[] GetPowerManagementCapabilities() @@ -1491,11 +1627,17 @@ public PowerManagementCapabilities[] GetPowerManagementCapabilities() internal class WmiDeviceGuard { public UInt32[] AvailableSecurityProperties; + public uint? CodeIntegrityPolicyEnforcementStatus; + public uint? UsermodeCodeIntegrityPolicyEnforcementStatus; + public UInt32[] RequiredSecurityProperties; + public UInt32[] SecurityServicesConfigured; + public UInt32[] SecurityServicesRunning; + public uint? VirtualizationBasedSecurityStatus; public DeviceGuard AsOutputType @@ -1566,26 +1708,47 @@ public DeviceGuard AsOutputType internal class WmiKeyboard { public ushort? Availability; + public string Caption; + public uint? ConfigManagerErrorCode; + public bool? ConfigManagerUserConfig; + public string Description; + public string DeviceID; + public bool? ErrorCleared; + public string ErrorDescription; + public DateTime? InstallDate; + public bool? IsLocked; + public uint? LastErrorCode; + public string Layout; + public string Name; + public ushort? NumberOfFunctionKeys; + public ushort? Password; + public string PNPDeviceID; + public UInt16[] PowerManagementCapabilities; + public bool? PowerManagementSupported; + public string Status; + public ushort? StatusInfo; + public string SystemCreationClassName; + public string SystemName; } @@ -1600,87 +1763,169 @@ internal class WMiLogicalMemory internal class WmiMsftNetAdapter { public string Caption; + public string Description; + public DateTime? InstallDate; + public string Name; + public string Status; + public ushort? Availability; + public uint? ConfigManagerErrorCode; + public bool? ConfigManagerUserConfig; + public string DeviceID; + public bool? ErrorCleared; + public string ErrorDescription; + public uint? LastErrorCode; + public string PNPDeviceID; + public UInt16[] PowerManagementCapabilities; + public bool? PowerManagementSupported; + public ushort? StatusInfo; + public string SystemCreationClassName; + public string SystemName; + public ulong? Speed; + public ulong? MaxSpeed; + public ulong? RequestedSpeed; + public ushort? UsageRestriction; + public ushort? PortType; + public string OtherPortType; + public string OtherNetworkPortType; + public ushort? PortNumber; + public ushort? LinkTechnology; + public string OtherLinkTechnology; + public string PermanentAddress; + public string[] NetworkAddresses; + public bool? FullDuplex; + public bool? AutoSense; + public ulong? SupportedMaximumTransmissionUnit; + public ulong? ActiveMaximumTransmissionUnit; + public string InterfaceDescription; + public string InterfaceName; + public ulong? NetLuid; + public string InterfaceGuid; + public uint? InterfaceIndex; + public string DeviceName; + public uint? NetLuidIndex; + public bool? Virtual; + public bool? Hidden; + public bool? NotUserRemovable; + public bool? IMFilter; + public uint? InterfaceType; + public bool? HardwareInterface; + public bool? WdmInterface; + public bool? EndPointInterface; + public bool? iSCSIInterface; + public uint? State; + public uint? NdisMedium; + public uint? NdisPhysicalMedium; + public uint? InterfaceOperationalStatus; + public bool? OperationalStatusDownDefaultPortNotAuthenticated; + public bool? OperationalStatusDownMediaDisconnected; + public bool? OperationalStatusDownInterfacePaused; + public bool? OperationalStatusDownLowPowerState; + public uint? InterfaceAdminStatus; + public uint? MediaConnectState; + public uint? MtuSize; + public ushort? VlanID; + public ulong? TransmitLinkSpeed; + public ulong? ReceiveLinkSpeed; + public bool? PromiscuousMode; + public bool? DeviceWakeUpEnable; + public bool? ConnectorPresent; + public uint? MediaDuplexState; + public string DriverDate; + public ulong? DriverDateData; + public string DriverVersionString; + public string DriverName; + public string DriverDescription; + public ushort? MajorDriverVersion; + public ushort? MinorDriverVersion; + public byte? DriverMajorNdisVersion; + public byte? DriverMinorNdisVersion; + public string PnPDeviceID; + public string DriverProvider; + public string ComponentID; + public UInt32[] LowerLayerInterfaceIndices; + public UInt32[] HigherLayerInterfaceIndices; + public bool? AdminLocked; } @@ -1688,43 +1933,81 @@ internal class WmiMsftNetAdapter internal class WmiNetworkAdapter { public string AdapterType; + public ushort? AdapterTypeID; + public bool? AutoSense; + public ushort? Availability; + public string Caption; + public uint? ConfigManagerErrorCode; + public bool? ConfigManagerUserConfig; + public string Description; + public string DeviceID; + public bool? ErrorCleared; + public string ErrorDescription; + public string GUID; + public uint? Index; + public DateTime? InstallDate; + public bool? Installed; + public uint? InterfaceIndex; + public uint? LastErrorCode; + public string MACAddress; + public string Manufacturer; + public uint? MaxNumberControlled; + public ulong? MaxSpeed; + public string Name; + public string NetConnectionID; + public ushort? NetConnectionStatus; + public bool? NetEnabled; + public string[] NetworkAddresses; + public string PermanentAddress; + public bool? PhysicalAdapter; + public string PNPDeviceID; + public UInt16[] PowerManagementCapabilities; + public bool? PowerManagementSupported; + public string ProductName; + public string ServiceName; + public ulong? Speed; + public string Status; + public ushort? StatusInfo; + public string SystemCreationClassName; + public string SystemName; + public DateTime? TimeOfLastReset; } @@ -1732,65 +2015,125 @@ internal class WmiNetworkAdapter internal class WmiNetworkAdapterConfiguration { public bool? ArpAlwaysSourceRoute; + public bool? ArpUseEtherSNAP; + public string Caption; + public string DatabasePath; + public bool? DeadGWDetectEnabled; + public string[] DefaultIPGateway; + public byte? DefaultTOS; + public byte? DefaultTTL; + public string Description; + public bool? DHCPEnabled; + public DateTime? DHCPLeaseExpires; + public DateTime? DHCPLeaseObtained; + public string DHCPServer; + public string DNSDomain; + public string[] DNSDomainSuffixSearchOrder; + public bool? DNSEnabledForWINSResolution; + public string DNSHostName; + public string[] DNSServerSearchOrder; + public bool? DomainDNSRegistrationEnabled; + public uint? ForwardBufferMemory; + public bool? FullDNSRegistrationEnabled; + public UInt16[] GatewayCostMetric; + public byte? IGMPLevel; + public uint? Index; + public uint? InterfaceIndex; + public string[] IPAddress; + public uint? IPConnectionMetric; + public bool? IPEnabled; + public bool? IPFilterSecurityEnabled; + public bool? IPPortSecurityEnabled; + public string[] IPSecPermitIPProtocols; + public string[] IPSecPermitTCPPorts; + public string[] IPSecPermitUDPPorts; + public string[] IPSubnet; + public bool? IPUseZeroBroadcast; + public string IPXAddress; + public bool? IPXEnabled; + public UInt32[] IPXFrameType; + public uint? IPXMediaType; + public string[] IPXNetworkNumber; + public string IPXVirtualNetNumber; + public uint? KeepAliveInterval; + public uint? KeepAliveTime; + public string MACAddress; + public uint? MTU; + public uint? NumForwardPackets; + public bool? PMTUBHDetectEnabled; + public bool? PMTUDiscoveryEnabled; + public string ServiceName; + public string SettingID; + public uint? TcpipNetbiosOptions; + public uint? TcpMaxConnectRetransmissions; + public uint? TcpMaxDataRetransmissions; + public uint? TcpNumConnections; + public bool? TcpUseRFC1122UrgentPointer; + public ushort? TcpWindowSize; + public bool? WINSEnableLMHostsLookup; + public string WINSHostLookupFile; + public string WINSPrimaryServer; + public string WINSScopeID; + public string WINSSecondaryServer; } @@ -1799,63 +2142,121 @@ internal class WmiOperatingSystem : WmiClassBase { #region Fields public string BootDevice; + public string BuildNumber; + public string BuildType; + public string Caption; + public string CodeSet; + public string CountryCode; + public string CSDVersion; + public string CSName; + public Int16? CurrentTimeZone; + public bool? DataExecutionPrevention_Available; + public bool? DataExecutionPrevention_32BitApplications; + public bool? DataExecutionPrevention_Drivers; + public byte? DataExecutionPrevention_SupportPolicy; + public bool? Debug; + public string Description; + public bool? Distributed; + public uint? EncryptionLevel; + public byte? ForegroundApplicationBoost; + public ulong? FreePhysicalMemory; + public ulong? FreeSpaceInPagingFiles; + public ulong? FreeVirtualMemory; + public DateTime? InstallDate; + public DateTime? LastBootUpTime; + public DateTime? LocalDateTime; + public string Locale; + public string Manufacturer; + public uint? MaxNumberOfProcesses; + public ulong? MaxProcessMemorySize; + public string[] MUILanguages; + public string Name; + public uint? NumberOfLicensedUsers; + public uint? NumberOfProcesses; + public uint? NumberOfUsers; + public uint? OperatingSystemSKU; + public string Organization; + public string OSArchitecture; + public uint? OSLanguage; + public uint? OSProductSuite; + public ushort? OSType; + public string OtherTypeDescription; + public bool? PAEEnabled; + public bool? PortableOperatingSystem; + public bool? Primary; + public uint? ProductType; + public string RegisteredUser; + public string SerialNumber; + public ushort? ServicePackMajorVersion; + public ushort? ServicePackMinorVersion; + public ulong? SizeStoredInPagingFiles; + public string Status; + public uint? SuiteMask; + public string SystemDevice; + public string SystemDirectory; + public string SystemDrive; + public ulong? TotalSwapSpaceSize; + public ulong? TotalVirtualMemorySize; + public ulong? TotalVisibleMemorySize; + public string Version; + public string WindowsDirectory; #endregion Fields @@ -1905,13 +2306,21 @@ private OSProductSuite[] MakeProductSuites(uint? suiteMask) internal class WmiPageFileUsage { public uint? AllocatedBaseSize; + public string Caption; + public uint? CurrentUsage; + public string Description; + public DateTime? InstallDate; + public string Name; + public uint? PeakUsage; + public string Status; + public bool? TempPageFile; } @@ -1919,59 +2328,113 @@ internal class WmiPageFileUsage internal class WmiProcessor { public ushort? AddressWidth; + public ushort? Architecture; + public string AssetTag; + public ushort? Availability; + public string Caption; + public uint? Characteristics; + public uint? ConfigManagerErrorCode; + public bool? ConfigManagerUserConfig; + public ushort? CpuStatus; + public uint? CurrentClockSpeed; + public ushort? CurrentVoltage; + public ushort? DataWidth; + public string Description; + public string DeviceID; + public bool? ErrorCleared; + public string ErrorDescription; + public uint? ExtClock; + public ushort? Family; + public DateTime? InstallDate; + public uint? L2CacheSize; + public uint? L2CacheSpeed; + public uint? L3CacheSize; + public uint? L3CacheSpeed; + public uint? LastErrorCode; + public ushort? Level; + public ushort? LoadPercentage; + public string Manufacturer; + public uint? MaxClockSpeed; + public string Name; + public uint? NumberOfCores; + public uint? NumberOfEnabledCore; + public uint? NumberOfLogicalProcessors; + public string OtherFamilyDescription; + public string PartNumber; + public string PNPDeviceID; + public UInt16[] PowerManagementCapabilities; + public bool? PowerManagementSupported; + public string ProcessorId; + public ushort? ProcessorType; + public ushort? Revision; + public string Role; + public bool? SecondLevelAddressTranslationExtensions; + public string SerialNumber; + public string SocketDesignation; + public string Status; + public ushort? StatusInfo; + public string Stepping; + public string SystemName; + public uint? ThreadCount; + public string UniqueId; + public ushort? UpgradeMethod; + public string Version; + public bool? VirtualizationFirmwareEnabled; + public bool? VMMonitorModeExtensions; + public uint? VoltageCaps; } @@ -1982,16 +2445,27 @@ internal class WmiProcessor internal class RegWinNtCurrentVersion { public string BuildLabEx; + public string CurrentVersion; + public string EditionId; + public string InstallationType; + public DateTime? InstallDate; + public string ProductId; + public string ProductName; + public string RegisteredOrganization; + public string RegisteredOwner; + public string SystemRoot; + public string ReleaseId; + public int? UBR; } #endregion Other Intermediate classes @@ -5090,12 +5564,16 @@ internal static class Native private static class PInvokeDllNames { public const string GetPhysicallyInstalledSystemMemoryDllName = "api-ms-win-core-sysinfo-l1-2-1.dll"; + public const string PowerDeterminePlatformRoleExDllName = "api-ms-win-power-base-l1-1-0.dll"; + public const string GetFirmwareTypeDllName = "api-ms-win-core-kernel32-legacy-l1-1-1"; } public const int LOCALE_NAME_MAX_LENGTH = 85; + public const uint POWER_PLATFORM_ROLE_V1 = 0x1; + public const uint POWER_PLATFORM_ROLE_V2 = 0x2; public const UInt32 S_OK = 0; diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs index 86f252fb8fc..0a9195b29d5 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs @@ -69,6 +69,7 @@ public int Tail } private int _backCount = -1; + private bool _tailSpecified = false; /// diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs index f4c634adca2..0a7c9ca581e 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs @@ -66,6 +66,7 @@ public sealed class GetHotFixCommand : PSCmdlet, IDisposable private ManagementObjectSearcher _searchProcess; private bool _inputContainsWildcard = false; + private readonly ConnectionOptions _connectionOptions = new ConnectionOptions { }; /// diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs index 4389f657f69..e4ad830582c 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs @@ -339,6 +339,7 @@ internal override CmdletProviderContext CmdletProviderContext public class GetLocationCommand : DriveMatchingCoreCommandBase { private const string LocationParameterSet = "Location"; + private const string StackParameterSet = "Stack"; #region Command parameters @@ -639,7 +640,9 @@ public class SetLocationCommand : CoreCommandBase { #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; + private const string StackParameterSet = "Stack"; /// @@ -814,6 +817,7 @@ public class PushLocationCommand : CoreCommandBase { #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -1486,6 +1490,7 @@ public class RemovePSDriveCommand : DriveMatchingCoreCommandBase #region Command parameters private const string NameParameterSet = "Name"; + private const string LiteralNameParameterSet = "LiteralName"; /// @@ -1664,6 +1669,7 @@ public class GetPSDriveCommand : DriveMatchingCoreCommandBase #region Command parameters private const string NameParameterSet = "Name"; + private const string LiteralNameParameterSet = "LiteralName"; /// @@ -1847,6 +1853,7 @@ public class GetItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -2016,6 +2023,7 @@ public class NewItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string NameParameterSet = "nameSet"; + private const string PathParameterSet = "pathSet"; /// @@ -2167,6 +2175,7 @@ public class SetItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -2370,6 +2379,7 @@ public class RemoveItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -2798,6 +2808,7 @@ public class MoveItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -3174,6 +3185,7 @@ public class RenameItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string ByPathParameterSet = "ByPath"; + private const string ByLiteralPathParameterSet = "ByLiteralPath"; /// @@ -3515,6 +3527,7 @@ public class CopyItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -3685,6 +3698,7 @@ internal override object GetDynamicParameters(CmdletProviderContext context) /// Determines if the containers should be copied with the items or not. /// private bool _container = true; + private bool _containerSpecified; /// @@ -3774,6 +3788,7 @@ public class ClearItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// @@ -3963,6 +3978,7 @@ public class InvokeItemCommand : CoreCommandWithCredentialsBase #region Command parameters private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; /// diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs index 91665575118..288361c000f 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs @@ -108,6 +108,7 @@ public virtual Process[] InputObject // We use a Dictionary to optimize the check whether the object // is already in the list. private List _matchingProcesses = new List(); + private Dictionary _keys = new Dictionary(); /// @@ -461,10 +462,15 @@ public sealed class GetProcessCommand : ProcessBaseCommand #region ParameterSetStrings private const string NameParameterSet = "Name"; + private const string IdParameterSet = "Id"; + private const string InputObjectParameterSet = "InputObject"; + private const string NameWithUserNameParameterSet = "NameWithUserName"; + private const string IdWithUserNameParameterSet = "IdWithUserName"; + private const string InputObjectWithUserNameParameterSet = "InputObjectWithUserName"; #endregion ParameterSetStrings @@ -912,6 +918,7 @@ public int Timeout } private int _timeout = 0; + private bool _timeOutSpecified; #endregion Parameters @@ -959,6 +966,7 @@ private void myProcess_Exited(object sender, System.EventArgs e) // Wait handle which is used by thread to sleep. private ManualResetEvent _waitHandle; + private int _numberOfProcessesToWaitFor; /// @@ -1609,6 +1617,7 @@ private string MapReturnCodeToErrorMessage(int returnCode) public sealed class StartProcessCommand : PSCmdlet, IDisposable { private ManualResetEvent _waithandle = null; + private bool _isDefaultSetParameterSpecified = false; #region Parameters @@ -1782,6 +1791,7 @@ public ProcessWindowStyle WindowStyle } private ProcessWindowStyle _windowstyle = ProcessWindowStyle.Normal; + private bool _windowstyleSpecified = false; /// @@ -2701,12 +2711,19 @@ internal static class ProcessNativeMethods { // Fields internal static readonly UInt32 GENERIC_READ = 0x80000000; + internal static readonly UInt32 GENERIC_WRITE = 0x40000000; + internal static readonly UInt32 FILE_ATTRIBUTE_NORMAL = 0x80000000; + internal static readonly UInt32 CREATE_ALWAYS = 2; + internal static readonly UInt32 FILE_SHARE_WRITE = 0x00000002; + internal static readonly UInt32 FILE_SHARE_READ = 0x00000001; + internal static readonly UInt32 OF_READWRITE = 0x00000002; + internal static readonly UInt32 OPEN_EXISTING = 3; // Methods @@ -2767,6 +2784,7 @@ System.IntPtr hTemplateFile internal enum LogonFlags { LOGON_NETCREDENTIALS_ONLY = 2, + LOGON_WITH_PROFILE = 1 } @@ -2774,7 +2792,9 @@ internal enum LogonFlags internal class SECURITY_ATTRIBUTES { public int nLength; + public SafeLocalMemHandle lpSecurityDescriptor; + public bool bInheritHandle; public SECURITY_ATTRIBUTES() @@ -2813,22 +2833,39 @@ protected override bool ReleaseHandle() internal class STARTUPINFO { public int cb; + public IntPtr lpReserved; + public IntPtr lpDesktop; + public IntPtr lpTitle; + public int dwX; + public int dwY; + public int dwXSize; + public int dwYSize; + public int dwXCountChars; + public int dwYCountChars; + public int dwFillAttribute; + public int dwFlags; + public short wShowWindow; + public short cbReserved2; + public IntPtr lpReserved2; + public SafeFileHandle hStdInput; + public SafeFileHandle hStdOutput; + public SafeFileHandle hStdError; public STARTUPINFO() @@ -2883,8 +2920,11 @@ internal static class SafeNativeMethods internal class PROCESS_INFORMATION { public IntPtr hProcess; + public IntPtr hThread; + public int dwProcessId; + public int dwThreadId; public PROCESS_INFORMATION() diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs index f62591fa19c..3e3b1264451 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs @@ -2611,25 +2611,45 @@ internal static class NativeMethods { // from winuser.h internal const int ERROR_SERVICE_ALREADY_RUNNING = 1056; + internal const int ERROR_SERVICE_NOT_ACTIVE = 1062; + internal const int ERROR_INSUFFICIENT_BUFFER = 122; + internal const DWORD ERROR_ACCESS_DENIED = 0x5; + internal const DWORD SC_MANAGER_CONNECT = 1; + internal const DWORD SC_MANAGER_CREATE_SERVICE = 2; + internal const DWORD SC_MANAGER_ALL_ACCESS = 0xf003f; + internal const DWORD SERVICE_QUERY_CONFIG = 1; + internal const DWORD SERVICE_CHANGE_CONFIG = 2; + internal const DWORD SERVICE_DELETE = 0x10000; + internal const DWORD SERVICE_NO_CHANGE = 0xffffffff; + internal const DWORD SERVICE_AUTO_START = 0x2; + internal const DWORD SERVICE_DEMAND_START = 0x3; + internal const DWORD SERVICE_DISABLED = 0x4; + internal const DWORD SERVICE_CONFIG_DESCRIPTION = 1; + internal const DWORD SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 3; + internal const DWORD SERVICE_CONFIG_SERVICE_SID_INFO = 5; + internal const DWORD WRITE_DAC = 262144; + internal const DWORD WRITE_OWNER = 524288; + internal const DWORD SERVICE_WIN32_OWN_PROCESS = 0x10; + internal const DWORD SERVICE_ERROR_NORMAL = 1; // from winnt.h @@ -2715,13 +2735,21 @@ internal struct SERVICE_DESCRIPTIONW internal struct QUERY_SERVICE_CONFIG { internal uint dwServiceType; + internal uint dwStartType; + internal uint dwErrorControl; + [MarshalAs(UnmanagedType.LPWStr)] internal string lpBinaryPathName; + [MarshalAs(UnmanagedType.LPWStr)] internal string lpLoadOrderGroup; + internal uint dwTagId; + [MarshalAs(UnmanagedType.LPWStr)] internal string lpDependencies; + [MarshalAs(UnmanagedType.LPWStr)] internal string lpServiceStartName; + [MarshalAs(UnmanagedType.LPWStr)] internal string lpDisplayName; }; diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetPropertyCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/SetPropertyCommand.cs index 9e2018342ba..775d54e5020 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetPropertyCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/SetPropertyCommand.cs @@ -16,8 +16,11 @@ namespace Microsoft.PowerShell.Commands public class SetItemPropertyCommand : PassThroughItemPropertyCommandBase { private const string propertyValuePathSet = "propertyValuePathSet"; + private const string propertyValueLiteralPathSet = "propertyValueLiteralPathSet"; + private const string propertyPSObjectPathSet = "propertyPSObjectPathSet"; + private const string propertyPSObjectLiteralPathSet = "propertyPSObjectLiteralPathSet"; #region Parameters diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs index a6ff78d8c08..80ea83b64fd 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs @@ -32,9 +32,13 @@ public class TestConnectionCommand : PSCmdlet, IDisposable { #region Parameter Set Names private const string DefaultPingParameterSet = "DefaultPing"; + private const string RepeatPingParameterSet = "RepeatPing"; + private const string TraceRouteParameterSet = "TraceRoute"; + private const string TcpPortParameterSet = "TcpPort"; + private const string MtuSizeDetectParameterSet = "MtuSizeDetect"; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs index 106c9038981..f8548edad8a 100644 --- a/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs +++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs @@ -440,13 +440,21 @@ private NativeMethods() #region Native DLL locations private const string SetDynamicTimeZoneApiDllName = "api-ms-win-core-timezone-l1-1-0.dll"; + private const string GetTimeZoneInformationForYearApiDllName = "api-ms-win-core-timezone-l1-1-0.dll"; + private const string GetCurrentProcessApiDllName = "api-ms-win-downlevel-kernel32-l1-1-0.dll"; + private const string OpenProcessTokenApiDllName = "api-ms-win-downlevel-advapi32-l1-1-1.dll"; + private const string LookupPrivilegeTokenApiDllName = "api-ms-win-downlevel-advapi32-l4-1-0.dll"; + private const string PrivilegeCheckApiDllName = "api-ms-win-downlevel-advapi32-l1-1-1.dll"; + private const string AdjustTokenPrivilegesApiDllName = "api-ms-win-downlevel-advapi32-l1-1-1.dll"; + private const string CloseHandleApiDllName = "api-ms-win-downlevel-kernel32-l1-1-0.dll"; + private const string SendMessageTimeoutApiDllName = "ext-ms-win-rtcore-ntuser-window-ext-l1-1-0.dll"; #endregion Native DLL locations @@ -701,8 +709,11 @@ public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool Disable public struct PRIVILEGE_SET { public int PrivilegeCount; + public int Control; + public long Luid; + public int Attributes; } @@ -713,7 +724,9 @@ public struct PRIVILEGE_SET public struct TOKEN_PRIVILEGES { public int PrivilegeCount; + public long Luid; + public int Attributes; } @@ -765,8 +778,11 @@ internal static class TimeZoneHelper #region Error Ids internal const string TimeZoneNotFoundError = "TimeZoneNotFound"; + internal const string MultipleMatchingTimeZonesError = "MultipleMatchingTimeZones"; + internal const string InsufficientPermissionsError = "InsufficientPermissions"; + internal const string SetTimeZoneFailedError = "SetTimeZoneFailed"; #endregion Error Ids diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs index 2ea6d6e20ae..6e2a8a1c54d 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs @@ -140,6 +140,7 @@ public SwitchParameter PassThru #region Simplifying NoteProperty Declaration private const string NotePropertySingleMemberSet = "NotePropertySingleMemberSet"; + private const string NotePropertyMultiMemberSet = "NotePropertyMultiMemberSet"; private string _notePropertyName; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs index 870c47b7ee2..6a3bbf3239e 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs @@ -631,6 +631,7 @@ protected override void EndProcessing() // We don't worry about unbounded growing of the cache because in .Net Core 2.0 we can not unload assemblies. // TODO: review if we will be able to unload assemblies after migrating to .Net Core 2.1. private static readonly HashSet s_sourceTypesCache = new HashSet(); + private static readonly Dictionary s_sourceAssemblyCache = new Dictionary(); private static readonly string s_defaultSdkDirectory = Utils.DefaultPowerShellAppBase; @@ -638,12 +639,17 @@ protected override void EndProcessing() private const ReportDiagnostic defaultDiagnosticOption = ReportDiagnostic.Error; private static readonly string[] s_writeInformationTags = new string[] { "PSHOST" }; + private int _syntaxTreesHash; private const string FromMemberParameterSetName = "FromMember"; + private const string FromSourceParameterSetName = "FromSource"; + private const string FromPathParameterSetName = "FromPath"; + private const string FromLiteralPathParameterSetName = "FromLiteralPath"; + private const string FromAssemblyNameParameterSetName = "FromAssemblyName"; private void LoadAssemblies(IEnumerable assemblies) @@ -1099,6 +1105,7 @@ private void CheckDuplicateTypes(Compilation compilation, out ConcurrentBag DuplicateSymbols = new ConcurrentBag(); + public readonly ConcurrentBag UniqueSymbols = new ConcurrentBag(); public override void VisitNamespace(INamespaceSymbol symbol) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs index 5a1b944792d..7e6a9a5ad7e 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs @@ -82,6 +82,7 @@ public SwitchParameter IncludeEqual } private bool _includeEqual /* = false */; + private bool _isIncludeEqualSpecified /* = false */; /// @@ -107,15 +108,20 @@ private readonly List _differenceEntryBacklog = new List(); private OrderByProperty _orderByProperty = null; + private OrderByPropertyComparer _comparer = null; private int _referenceObjectIndex /* = 0 */; // These are programmatic strings, not subject to INTL private const string SideIndicatorPropertyName = "SideIndicator"; + private const string SideIndicatorMatch = "=="; + private const string SideIndicatorReference = "<="; + private const string SideIndicatorDifference = "=>"; + private const string InputObjectPropertyName = "InputObject"; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConsoleColorCmdlet.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConsoleColorCmdlet.cs index 250b00422d6..833cc543c56 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConsoleColorCmdlet.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConsoleColorCmdlet.cs @@ -101,9 +101,11 @@ private static ErrorRecord BuildOutOfRangeErrorRecord(object val, string errorId #endregion helper private ConsoleColor _fgColor; + private ConsoleColor _bgColor; private bool _isFgColorSet = false; + private bool _isBgColorSet = false; private readonly Type _consoleColorEnumType; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs index 1e64dfe7754..ccd0e9239e1 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs @@ -43,6 +43,7 @@ public AccessRightTypeNames Type } private AccessRightTypeNames _type; + private bool _isTypeSet = false; private string ConvertToNTAccount(SecurityIdentifier securityIdentifier) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFromMarkdownCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFromMarkdownCommand.cs index dfa6bd6c4b0..335df73d2e9 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFromMarkdownCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFromMarkdownCommand.cs @@ -56,10 +56,13 @@ public class ConvertFromMarkdownCommand : PSCmdlet public SwitchParameter AsVT100EncodedString { get; set; } private const string PathParameterSet = "PathParamSet"; + private const string LiteralPathParameterSet = "LiteralParamSet"; + private const string InputObjParamSet = "InputObjParamSet"; private MarkdownConversionType _conversionType = MarkdownConversionType.HTML; + private PSMarkdownOptionInfo _mdOption = null; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs index b0c3ff27f35..86af9d8f133 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs @@ -175,6 +175,7 @@ public Uri CssUri } private Uri _cssuri; + private bool _cssuriSpecified; /// @@ -262,6 +263,7 @@ public Hashtable Meta } private Hashtable _meta; + private bool _metaSpecified = false; /// @@ -285,6 +287,7 @@ public string Charset } private string _charset; + private bool _charsetSpecified = false; /// @@ -315,7 +318,9 @@ public SwitchParameter Transitional internal static class ConvertHTMLParameterDefinitionKeys { internal const string LabelEntryKey = "label"; + internal const string AlignmentEntryKey = "alignment"; + internal const string WidthEntryKey = "width"; } @@ -760,7 +765,9 @@ protected override void EndProcessing() /// List of incoming objects to compare. /// private bool _isTHWritten; + private List _propertyMshParameterList; + private List _resolvedNameMshParameters; // private string ResourcesBaseName = "ConvertHTMLStrings"; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs index 397ca036151..7e2abb2e3da 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs @@ -172,6 +172,7 @@ public string Path } private string _path; + private bool _specifiedPath = false; /// @@ -233,8 +234,11 @@ public string LiteralPath #region Overrides private bool _shouldProcess; + private IList _propertyNames; + private IList _preexistingPropertyNames; + private ExportCsvHelper _helper; /// @@ -543,6 +547,7 @@ public string[] Path } private string[] _paths; + private bool _specifiedPath = false; /// @@ -853,8 +858,11 @@ protected override void ProcessRecord() internal class ExportCsvHelper : IDisposable { private char _delimiter; + readonly private BaseCsvWritingCommand.QuoteKind _quoteKind; + readonly private HashSet _quoteFields; + readonly private StringBuilder _outputString; /// @@ -1205,6 +1213,7 @@ internal class ImportCsvHelper // Set to reasonable initial sizes. They may grow beyond these, // but this will prevent a few reallocations. private const int ValueCountGuestimate = 16; + private const int LineLengthGuestimate = 256; internal ImportCsvHelper(PSCmdlet cmdlet, char delimiter, IList header, string typeName, StreamReader streamReader) @@ -1717,6 +1726,7 @@ private PSObject BuildMshobject(string type, IList names, List v internal static class ImportExportCSVHelper { internal const char CSVDelimiter = ','; + internal const string CSVTypePrefix = "CSV:"; internal static char SetDelimiter(PSCmdlet cmdlet, string parameterSetName, char explicitDelimiter, bool useCulture) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs index 355d94912af..57ccbd8ecbd 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs @@ -26,8 +26,11 @@ public sealed class DebugRunspaceCommand : PSCmdlet #region Strings private const string RunspaceParameterSet = "RunspaceParameterSet"; + private const string NameParameterSet = "NameParameterSet"; + private const string IdParameterSet = "IdParameterSet"; + private const string InstanceIdParameterSet = "InstanceIdParameterSet"; #endregion @@ -35,15 +38,22 @@ public sealed class DebugRunspaceCommand : PSCmdlet #region Private members private Runspace _runspace; + private System.Management.Automation.Debugger _debugger; + private PSDataCollection _debugBlockingCollection; + private PSDataCollection _debugAccumulateCollection; + private Pipeline _runningPipeline; + private System.Management.Automation.PowerShell _runningPowerShell; // Debugging to persist until Ctrl+C or Debugger 'Exit' stops cmdlet. private bool _debugging; + private ManualResetEventSlim _newRunningScriptEvent = new ManualResetEventSlim(true); + private RunspaceAvailability _previousRunspaceAvailability = RunspaceAvailability.None; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs index 0d2db93302a..0b11ca1b28d 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs @@ -10,6 +10,7 @@ namespace Microsoft.PowerShell.Commands internal abstract class ColumnInfo { protected string displayName; + protected string staleObjectPropertyName; internal ColumnInfo(string staleObjectPropertyName, string displayName) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs index 48a9004e604..93364f7a3b6 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs @@ -12,6 +12,7 @@ namespace Microsoft.PowerShell.Commands internal class OriginalColumnInfo : ColumnInfo { private string _liveObjectPropertyName; + private OutGridViewCommand _parentCmdlet; internal OriginalColumnInfo(string staleObjectPropertyName, string displayName, string liveObjectPropertyName, OutGridViewCommand parentCmdlet) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs index b95e9968c5c..0fc1799c8c4 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs @@ -42,11 +42,15 @@ public class OutGridViewCommand : PSCmdlet, IDisposable #region Properties private const string DataNotQualifiedForGridView = "DataNotQualifiedForGridView"; + private const string RemotingNotSupported = "RemotingNotSupported"; private TypeInfoDataBase _typeInfoDataBase; + private PSPropertyExpressionFactory _expressionFactory; + private OutWindowProxy _windowProxy; + private GridHeader _gridHeader; #endregion Properties diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs index 55158034368..4fb5646f4a8 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs @@ -16,9 +16,13 @@ namespace Microsoft.PowerShell.Commands internal class OutWindowProxy : IDisposable { private const string OutGridViewWindowClassName = "Microsoft.Management.UI.Internal.OutGridViewWindow"; + private const string OriginalTypePropertyName = "OriginalType"; + internal const string OriginalObjectPropertyName = "OutGridViewOriginalObject"; + private const string ToStringValuePropertyName = "ToStringValue"; + private const string IndexPropertyName = "IndexValue"; private int _index; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs index dc967889e69..716e53162c0 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs @@ -15,7 +15,9 @@ namespace Microsoft.PowerShell.Commands internal class TableView { private PSPropertyExpressionFactory _expressionFactory; + private TypeInfoDataBase _typeInfoDatabase; + private FormatErrorManager _errorManager; internal void Initialize(PSPropertyExpressionFactory expressionFactory, diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs index 09a6a88693f..9e523383785 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs @@ -23,6 +23,7 @@ namespace Microsoft.PowerShell.Commands public class GetFormatDataCommand : PSCmdlet { private string[] _typename; + private WildcardPattern[] _filter = new WildcardPattern[1]; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs index 7c2fdbe0c14..0daa07b5ee2 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs @@ -18,9 +18,13 @@ namespace Microsoft.PowerShell.Commands public sealed class GetErrorCommand : PSCmdlet { internal const string ErrorParameterSetName = "Error"; + internal const string NewestParameterSetName = "Newest"; + internal const string AliasNewest = "Last"; + internal const string ErrorRecordPSExtendedError = "System.Management.Automation.ErrorRecord#PSExtendedError"; + internal const string ExceptionPSExtendedError = "System.Exception#PSExtendedError"; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetCultureCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetCultureCommand.cs index 82a725ba212..d33c375a2f7 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetCultureCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetCultureCommand.cs @@ -19,7 +19,9 @@ namespace Microsoft.PowerShell.Commands public sealed class GetCultureCommand : PSCmdlet { private const string CurrentCultureParameterSet = "CurrentCulture"; + private const string NameParameterSet = "Name"; + private const string ListAvailableParameterSet = "ListAvailable"; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs index 4516568cc34..15b329066ad 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs @@ -47,6 +47,7 @@ public DateTime Date public SwitchParameter FromUnixTime; private DateTime _date; + private bool _dateSpecified; /// @@ -69,6 +70,7 @@ public int Year } private int _year; + private bool _yearSpecified; /// @@ -91,6 +93,7 @@ public int Month } private int _month; + private bool _monthSpecified; /// @@ -113,6 +116,7 @@ public int Day } private int _day; + private bool _daySpecified; /// @@ -135,6 +139,7 @@ public int Hour } private int _hour; + private bool _hourSpecified; /// @@ -157,6 +162,7 @@ public int Minute } private int _minute; + private bool _minuteSpecified; /// @@ -179,6 +185,7 @@ public int Second } private int _second; + private bool _secondSpecified; /// @@ -201,6 +208,7 @@ public int Millisecond } private int _millisecond; + private bool _millisecondSpecified; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs index 65e55a86ab1..b1a9238e9d4 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs @@ -222,7 +222,9 @@ private void WriteHashResult(string Algorithm, string hash, string path) /// Parameter set names. /// private const string PathParameterSet = "Path"; + private const string LiteralPathParameterSet = "LiteralPath"; + private const string StreamParameterSet = "StreamParameterSet"; } @@ -270,9 +272,13 @@ public string Algorithm internal static class HashAlgorithmNames { public const string MD5 = "MD5"; + public const string SHA1 = "SHA1"; + public const string SHA256 = "SHA256"; + public const string SHA384 = "SHA384"; + public const string SHA512 = "SHA512"; } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs index 01cf6534c48..9ea606f9a4a 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs @@ -27,7 +27,9 @@ public class GetRandomCommand : PSCmdlet #region Parameter set handling private const string RandomNumberParameterSet = "RandomNumberParameterSet"; + private const string RandomListItemParameterSet = "RandomListItemParameterSet"; + private const string ShuffleParameterSet = "ShuffleParameterSet"; private static readonly object[] _nullInArray = new object[] { null }; @@ -35,7 +37,9 @@ public class GetRandomCommand : PSCmdlet private enum MyParameterSet { Unknown, + RandomNumber, + RandomListItem } @@ -273,6 +277,7 @@ private double ConvertToDouble(object o, double defaultIfNull) #region Parameters and variables for RandomListItemParameterSet private List _chosenListItems; + private int _numberOfProcessedListItems; /// @@ -598,6 +603,7 @@ internal PolymorphicRandomNumberGenerator(int seed) } private Random _pseudoGenerator = null; + private RandomNumberGenerator _cryptographicGenerator = null; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRunspaceCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRunspaceCommand.cs index 0aedd4c9d06..aeccd404eb3 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRunspaceCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRunspaceCommand.cs @@ -22,7 +22,9 @@ public sealed class GetRunspaceCommand : PSCmdlet #region Strings private const string NameParameterSet = "NameParameterSet"; + private const string IdParameterSet = "IdParameterSet"; + private const string InstanceIdParameterSet = "InstanceIdParameterSet"; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs index 9dc133caced..7634a0b2327 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs @@ -112,7 +112,9 @@ protected override void ProcessRecord() #region Internal private PSObject _lastObject = null; + private string _lastObjectAsString = null; + private ObjectCommandComparer _comparer = null; #endregion Internal } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs index 9938dc15c7f..ba12998feec 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs @@ -250,12 +250,19 @@ public class GroupObjectCommand : ObjectBase public SwitchParameter AsString { get; set; } private readonly List _groups = new List(); + private readonly OrderByProperty _orderByProperty = new OrderByProperty(); + private readonly Dictionary _tupleToGroupInfoMappingDictionary = new Dictionary(); + private readonly List _entriesToOrder = new List(); + private OrderByPropertyComparer _orderByPropertyComparer; + private bool _hasProcessedFirstInputObject; + private bool _hasDifferentValueTypes; + private Type[] _propertyTypesCandidate; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs index 2e1d8988496..c722769c9ec 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs @@ -319,7 +319,9 @@ protected override void BeginProcessing() public class ImplicitRemotingCommandBase : PSCmdlet { internal const string ImplicitRemotingKey = "ImplicitRemoting"; + internal const string ImplicitRemotingHashKey = "Hash"; + internal const string ImplicitRemotingCommandsToSkipKey = "CommandsToSkip"; #region Constructor @@ -362,6 +364,7 @@ public string[] CommandName } private string[] _commandNameParameter; + private Collection _commandNamePatterns; // initialized to default value in the constructor /// @@ -442,6 +445,7 @@ public string[] Module } private string[] _PSSnapins = Array.Empty(); + internal bool IsModuleSpecified = false; /// /// Gets or sets the FullyQualifiedModule parameter to the cmdlet. @@ -468,6 +472,7 @@ public ModuleSpecification[] FullyQualifiedModule } private ModuleSpecification[] _moduleSpecifications = new ModuleSpecification[0]; + internal bool IsFullyQualifiedModuleSpecified = false; private bool _commandParameterSpecified; // initialized to default value in the constructor @@ -498,7 +503,9 @@ public string[] FormatTypeName } private string[] _formatTypeNameParameter; // initialized to default value in the constructor + private Collection _formatTypeNamePatterns; + private bool _formatTypeNamesSpecified; // initialized to default value in the constructor #endregion @@ -1907,7 +1914,9 @@ internal class ImplicitRemotingCodeGenerator #region Constructor and shared private data private PSSession _remoteRunspaceInfo; + private Guid _moduleGuid; + private InvocationInfo _invocationInfo; internal ImplicitRemotingCodeGenerator( @@ -2551,6 +2560,7 @@ private string GenerateNewRunspaceExpression() -ApplicationName '{1}' {2} {3} "; private const string VMIdParameterTemplate = @"-VMId '{0}' "; + private const string ContainerIdParameterTemplate = @"-ContainerId '{0}' "; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs index 4749d28322c..8ab2cbc96e4 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs @@ -117,6 +117,7 @@ public string[] SupportedCommand } private string[] _commandsAllowed = new string[] { "ConvertFrom-StringData" }; + private bool _setSupportedCommand = false; #endregion Parameters diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs index 652e32652ce..da0ef04f3f8 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs @@ -24,9 +24,13 @@ public sealed class JoinStringCommand : PSCmdlet private const int DefaultOutputStringCapacity = 256; private readonly StringBuilder _outputBuilder = new StringBuilder(DefaultOutputStringCapacity); + private CultureInfo _cultureInfo = CultureInfo.InvariantCulture; + private string _separator; + private char _quoteChar; + private bool _firstInputObject = true; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MarkdownOptionCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MarkdownOptionCommands.cs index 0ee80712123..6f34f907bb3 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MarkdownOptionCommands.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MarkdownOptionCommands.cs @@ -124,9 +124,13 @@ public class SetMarkdownOptionCommand : PSCmdlet public PSObject InputObject { get; set; } private const string IndividualSetting = "IndividualSetting"; + private const string InputObjectParamSet = "InputObject"; + private const string ThemeParamSet = "Theme"; + private const string LightThemeName = "Light"; + private const string DarkThemeName = "Dark"; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs index 3a5d4c77a5f..3284b5c76ef 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs @@ -220,13 +220,16 @@ public string RelativePath(string directory) } private const string MatchFormat = "{0}{1}:{2}:{3}"; + private const string SimpleFormat = "{0}{1}"; // Prefixes used by formatting: Match and Context prefixes // are used when context-tracking is enabled, otherwise // the empty prefix is used. private const string MatchPrefix = "> "; + private const string ContextPrefix = " "; + private const string EmptyPrefix = ""; /// @@ -400,10 +403,15 @@ internal MatchInfo Clone() public sealed class SelectStringCommand : PSCmdlet { private const string ParameterSetFile = "File"; + private const string ParameterSetFileRaw = "FileRaw"; + private const string ParameterSetObject = "Object"; + private const string ParameterSetObjectRaw = "ObjectRaw"; + private const string ParameterSetLiteralFile = "LiteralFile"; + private const string ParameterSetLiteralFileRaw = "LiteralFileRaw"; /// @@ -632,12 +640,16 @@ private class DisplayContextTracker : IContextTracker private enum ContextState { InitialState, + CollectPre, + CollectPost, } private ContextState _contextState = ContextState.InitialState; + private readonly int _preContext; + private readonly int _postContext; // The context leading up to the match. @@ -792,6 +804,7 @@ private class LogicalContextTracker : IContextTracker private class ContextEntry { public readonly string Line; + public readonly MatchInfo Match; public ContextEntry(string line) @@ -814,6 +827,7 @@ public ContextEntry(MatchInfo match) private bool _hasProcessedPreEntries; private readonly int _preContext; + private readonly int _postContext; // A circular buffer tracking both precontext and postcontext. @@ -992,6 +1006,7 @@ private string[] CopyContext(int startIndex, int length) private class ContextTracker : IContextTracker { private readonly IContextTracker _displayTracker; + private readonly IContextTracker _logicalTracker; /// @@ -1122,11 +1137,15 @@ public string Culture } internal const string OrdinalCultureName = "Ordinal"; + internal const string InvariantCultureName = "Invariant"; + internal const string CurrentCultureName = "Current"; private string _cultureName = CultureInfo.CurrentCulture.Name; + private StringComparison _stringComparison = StringComparison.CurrentCultureIgnoreCase; + private CompareOptions _compareOptions = CompareOptions.IgnoreCase; private delegate int CultureInfoIndexOf(string source, string value, int startIndex, int count, CompareOptions options); diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs index 2ef311e38f3..8ad2b75356a 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs @@ -207,14 +207,20 @@ private class Statistics // Generic/Numeric statistics internal double sum = 0.0; + internal double sumPrevious = 0.0; + internal double variance = 0.0; + internal object max = null; + internal object min = null; // Text statistics internal int characters = 0; + internal int words = 0; + internal int lines = 0; } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs index b2dd03762cb..c38ae3b6d23 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs @@ -398,7 +398,9 @@ private object SafeCreateInstance(Type t, object[] args) private class ComCreateInfo { public object objectCreated; + public bool success; + public Exception e; } @@ -492,6 +494,7 @@ private object CreateComObject() // HResult code '-2147417850' - Cannot change thread mode after it is set. private const int RPC_E_CHANGED_MODE = unchecked((int)0x80010106); + private const string netSetName = "Net"; } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs index 0e633ca5b2e..e164af273c6 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs @@ -39,6 +39,7 @@ public DateTime Start } private DateTime _start; + private bool _startSpecified; /// @@ -62,6 +63,7 @@ public DateTime End } private DateTime _end; + private bool _endSpecified = false; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs index fd69a2011fb..ab894fca1ac 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs @@ -66,8 +66,11 @@ internal CultureInfo Culture } internal static readonly ObjectCommandPropertyValue NonExistingProperty = new ObjectCommandPropertyValue(); + internal static readonly ObjectCommandPropertyValue ExistingNullProperty = new ObjectCommandPropertyValue(null); + private bool _caseSensitive; + internal CultureInfo cultureInfo = null; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs index c2ebc9261a1..994bc1c6579 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs @@ -19,6 +19,7 @@ namespace Microsoft.PowerShell.Commands internal static class SortObjectParameterDefinitionKeys { internal const string AscendingEntryKey = "ascending"; + internal const string DescendingEntryKey = "descending"; } @@ -624,6 +625,7 @@ private static void EvaluateSortingExpression( internal sealed class OrderByPropertyEntry { internal PSObject inputObject = null; + internal List orderValues = new List(); // The originalIndex field was added to enable stable heap-sorts (Top N/Bottom N) internal int originalIndex = -1; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCreationBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCreationBase.cs index cb0e9ea2435..54125cdb8d9 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCreationBase.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCreationBase.cs @@ -15,7 +15,9 @@ namespace Microsoft.PowerShell.Commands public class PSBreakpointCreationBase : PSCmdlet { internal const string CommandParameterSetName = "Command"; + internal const string LineParameterSetName = "Line"; + internal const string VariableParameterSetName = "Variable"; #region parameters diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ReadConsoleCmdlet.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ReadConsoleCmdlet.cs index 23b4bac873a..290f843f286 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ReadConsoleCmdlet.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ReadConsoleCmdlet.cs @@ -176,6 +176,7 @@ protected override void BeginProcessing() #endregion Cmdlet Overrides private object _prompt = null; + private bool _safe = false; } } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs index bba2ac2873d..20cf5b8df18 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs @@ -143,6 +143,7 @@ public int First } private int _first = 0; + private bool _firstOrLastSpecified; /// @@ -215,7 +216,9 @@ public int[] SkipIndex } private int[] _index; + private bool _indexSpecified; + private bool _isIncludeIndex; #endregion @@ -304,7 +307,9 @@ public PSObject StreamingDequeue() } private int _streamedObjectCount; + private int _first, _last, _skip, _skipLast; + private bool _firstOrLastSpecified; } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs index e00a3bda2d9..0f6971fcd7a 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs @@ -119,12 +119,19 @@ internal static class NativeMethods public struct SystemTime { public UInt16 Year; + public UInt16 Month; + public UInt16 DayOfWeek; + public UInt16 Day; + public UInt16 Hour; + public UInt16 Minute; + public UInt16 Second; + public UInt16 Milliseconds; } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs index 32048362b06..bbebb3d1cc2 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs @@ -157,6 +157,7 @@ public void Dispose() } #region private private CommandWrapper _commandWrapper; + private bool _alreadyDisposed; #endregion private } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs index f89b3d6e4cc..571e6123044 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs @@ -53,6 +53,7 @@ public string SourceIdentifier #endregion parameters private WildcardPattern _matchPattern; + private bool _foundMatch = false; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs index de7d2590176..20a28b59dce 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs @@ -26,6 +26,7 @@ public class UpdateTypeDataCommand : UpdateData // Dynamic type set name and type data set name private const string DynamicTypeSet = "DynamicTypeSet"; + private const string TypeDataSet = "TypeDataSet"; private static object s_notSpecified = new object(); @@ -36,6 +37,7 @@ private static bool HasBeenSpecified(object obj) } private PSMemberTypes _memberType; + private bool _isMemberTypeSet = false; /// /// The member type of to be added. @@ -239,9 +241,13 @@ public string[] PropertySerializationSet // These members are represented as NoteProperty in types.ps1xml private string _serializationMethod; + private Type _targetTypeForDeserialization; + private int _serializationDepth = int.MinValue; + private string _defaultDisplayProperty; + private bool? _inheritPropertySerializationSet; // These members are represented as AliasProperty in types.ps1xml @@ -249,7 +255,9 @@ public string[] PropertySerializationSet // These members are represented as PropertySet in types.ps1xml private string[] _defaultDisplayPropertySet; + private string[] _defaultKeyPropertySet; + private string[] _propertySerializationSet; private string _typeName; @@ -1044,7 +1052,9 @@ protected override void ProcessRecord() public class RemoveTypeDataCommand : PSCmdlet { private const string RemoveTypeSet = "RemoveTypeSet"; + private const string RemoveFileSet = "RemoveFileSet"; + private const string RemoveTypeDataSet = "RemoveTypeDataSet"; private string _typeName; diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs index 6739dbb38e5..8c0214c1109 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs @@ -706,6 +706,7 @@ public SwitchParameter PassThru private bool _passThru; private bool _nameIsFormalParameter; + private bool _valueIsFormalParameter; #endregion parameters diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs index 7aeb864e2ba..00edd6a5438 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs @@ -61,8 +61,11 @@ public int Timeout #endregion parameters private AutoResetEvent _eventArrived = new AutoResetEvent(false); + private PSEventArgs _receivedEvent = null; + private object _receivedEventLock = new object(); + private WildcardPattern _matchPattern; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs index 1d33957d624..b8b1e6c79a7 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs @@ -21,10 +21,15 @@ public class BasicHtmlWebResponseObject : WebResponseObject #region Private Fields private static Regex s_attribNameValueRegex; + private static Regex s_attribsRegex; + private static Regex s_imageRegex; + private static Regex s_inputFieldRegex; + private static Regex s_linkRegex; + private static Regex s_tagRegex; #endregion Private Fields diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs index 273fae835c3..ad7867722b3 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs @@ -262,7 +262,9 @@ internal BufferingStreamReader(Stream baseStream) } private Stream _baseStream; + private MemoryStream _streamBuffer; + private byte[] _copyBuffer; public override bool CanRead diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs index 80d07a54ddf..da8cb254173 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs @@ -13,67 +13,129 @@ internal static class HttpKnownHeaderNames // Known HTTP Header Names. // List comes from corefx/System/Net/HttpKnownHeaderNames.cs public const string Accept = "Accept"; + public const string AcceptCharset = "Accept-Charset"; + public const string AcceptEncoding = "Accept-Encoding"; + public const string AcceptLanguage = "Accept-Language"; + public const string AcceptRanges = "Accept-Ranges"; + public const string Age = "Age"; + public const string Allow = "Allow"; + public const string Authorization = "Authorization"; + public const string CacheControl = "Cache-Control"; + public const string Connection = "Connection"; + public const string ContentDisposition = "Content-Disposition"; + public const string ContentEncoding = "Content-Encoding"; + public const string ContentLanguage = "Content-Language"; + public const string ContentLength = "Content-Length"; + public const string ContentLocation = "Content-Location"; + public const string ContentMD5 = "Content-MD5"; + public const string ContentRange = "Content-Range"; + public const string ContentType = "Content-Type"; + public const string Cookie = "Cookie"; + public const string Cookie2 = "Cookie2"; + public const string Date = "Date"; + public const string ETag = "ETag"; + public const string Expect = "Expect"; + public const string Expires = "Expires"; + public const string From = "From"; + public const string Host = "Host"; + public const string IfMatch = "If-Match"; + public const string IfModifiedSince = "If-Modified-Since"; + public const string IfNoneMatch = "If-None-Match"; + public const string IfRange = "If-Range"; + public const string IfUnmodifiedSince = "If-Unmodified-Since"; + public const string KeepAlive = "Keep-Alive"; + public const string LastModified = "Last-Modified"; + public const string Location = "Location"; + public const string MaxForwards = "Max-Forwards"; + public const string Origin = "Origin"; + public const string P3P = "P3P"; + public const string Pragma = "Pragma"; + public const string ProxyAuthenticate = "Proxy-Authenticate"; + public const string ProxyAuthorization = "Proxy-Authorization"; + public const string ProxyConnection = "Proxy-Connection"; + public const string Range = "Range"; + public const string Referer = "Referer"; // NB: The spelling-mistake "Referer" for "Referrer" must be matched. + public const string RetryAfter = "Retry-After"; + public const string SecWebSocketAccept = "Sec-WebSocket-Accept"; + public const string SecWebSocketExtensions = "Sec-WebSocket-Extensions"; + public const string SecWebSocketKey = "Sec-WebSocket-Key"; + public const string SecWebSocketProtocol = "Sec-WebSocket-Protocol"; + public const string SecWebSocketVersion = "Sec-WebSocket-Version"; + public const string Server = "Server"; + public const string SetCookie = "Set-Cookie"; + public const string SetCookie2 = "Set-Cookie2"; + public const string TE = "TE"; + public const string Trailer = "Trailer"; + public const string TransferEncoding = "Transfer-Encoding"; + public const string Upgrade = "Upgrade"; + public const string UserAgent = "User-Agent"; + public const string Vary = "Vary"; + public const string Via = "Via"; + public const string WWWAuthenticate = "WWW-Authenticate"; + public const string Warning = "Warning"; + public const string XAspNetVersion = "X-AspNet-Version"; + public const string XPoweredBy = "X-Powered-By"; #endregion Known_HTTP_Header_Names diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs index 5cb4f2b4fde..76f05e2c1f0 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs @@ -9,6 +9,7 @@ namespace Microsoft.PowerShell.Commands internal class WebProxy : IWebProxy { private ICredentials _credentials; + private Uri _proxyAddress; internal WebProxy(Uri address) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs index 58d63c36ca3..9004d6e1bba 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs @@ -25,7 +25,9 @@ internal class WebResponseContentMemoryStream : MemoryStream #region Data private Stream _originalStreamToProxy; + private bool _isInitialized = false; + private Cmdlet _ownerCmdlet; #endregion diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs index 8736965fd61..a0dc027bd0f 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs @@ -633,6 +633,7 @@ internal class ImportXmlHelper : IDisposable /// Reference to cmdlet which is using this helper class. /// private readonly PSCmdlet _cmdlet; + private bool _isLiteralPath; internal ImportXmlHelper(string fileName, PSCmdlet cmdlet, bool isLiteralPath) @@ -1085,7 +1086,9 @@ public sealed class SelectXmlInfo /// If the object is InputObject, Input Stream is used. /// private const string inputStream = "InputStream"; + private const string MatchFormat = "{0}:{1}"; + private const string SimpleFormat = "{0}"; /// diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs index 12f8e5b4e09..1d8b38ae386 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs @@ -541,8 +541,11 @@ private static ErrorRecord ConvertToErrorRecord(object obj) } private TraceListenerCommandBase _cmdlet; + private bool _writeError; + private bool _isOpen = true; + private Collection _matchingSources = new Collection(); } } diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceListenerCommandBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceListenerCommandBase.cs index 3eecdd51cba..79ec50da75e 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceListenerCommandBase.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceListenerCommandBase.cs @@ -373,7 +373,9 @@ internal void AddTraceListenersToSources(Collection matchingSourc } private DefaultTraceListener _defaultListener; + private PSHostTraceListener _hostListener; + private Collection _fileListeners; /// diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs index 761c6f6e26f..5b82e5d654f 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs @@ -22,22 +22,39 @@ internal static class ComInterfaces internal struct StartUpInfo { public readonly UInt32 cb; + private readonly IntPtr lpReserved; + public readonly IntPtr lpDesktop; + public readonly IntPtr lpTitle; + public readonly UInt32 dwX; + public readonly UInt32 dwY; + public readonly UInt32 dwXSize; + public readonly UInt32 dwYSize; + public readonly UInt32 dwXCountChars; + public readonly UInt32 dwYCountChars; + public readonly UInt32 dwFillAttribute; + public readonly UInt32 dwFlags; + public readonly UInt16 wShowWindow; + private readonly UInt16 cbReserved2; + private readonly IntPtr lpReserved2; + public readonly IntPtr hStdInput; + public readonly IntPtr hStdOutput; + public readonly IntPtr hStdError; } @@ -58,6 +75,7 @@ void GetPath( uint fFlags); void GetIDList(out IntPtr ppidl); + void SetIDList(IntPtr pidl); void GetDescription( @@ -83,8 +101,11 @@ void SetArguments( [MarshalAs(UnmanagedType.LPWStr)] string pszArgs); void GetHotKey(out short wHotKey); + void SetHotKey(short wHotKey); + void GetShowCmd(out uint iShowCmd); + void SetShowCmd(uint iShowCmd); void GetIconLocation( @@ -198,6 +219,7 @@ void DeleteList( internal enum KnownDestinationCategory { Frequent = 1, + Recent } @@ -235,6 +257,7 @@ void AddFromArray( [MarshalAs(UnmanagedType.Interface)] IObjectArray poaSource); void RemoveObject(uint uiIndex); + void Clear(); } @@ -253,6 +276,7 @@ internal interface IShellLinkDataListW Int32 RemoveDataBlock(UInt32 dwSig); void GetFlags(out uint pdwFlags); + void SetFlags(uint dwFlags); } diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs index ba90c7dd04e..9960b140391 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs @@ -181,6 +181,7 @@ public override void WriteWarningLine(string message) internal class CommandLineParameterParser { private const int MaxPipePathLengthLinux = 108; + private const int MaxPipePathLengthMacOS = 104; internal static readonly string[] validParameters = { @@ -1414,35 +1415,65 @@ private bool CollectArgs(string[] args, ref int i) } private bool _socketServerMode; + private bool _serverMode; + private bool _namedPipeServerMode; + private bool _sshServerMode; + private bool _showVersion; + private string _configurationName; + private PSHostUserInterface _hostUI; + private bool _showHelp; + private bool _showExtendedHelp; + private bool _showBanner = true; + private bool _noInteractive; + private string _bannerText; + private string _helpText; + private bool _abortStartup; + private bool _skipUserInit; + private string _customPipeName; + private bool? _staMode = null; + private bool _noExit = true; + private bool _explicitReadCommandsFromStdin; + private bool _noPrompt; + private string _commandLineCommand; + private bool _wasCommandEncoded; + private uint _exitCode = ConsoleHost.ExitCodeSuccess; + private bool _dirty; + private Serialization.DataFormat _outFormat = Serialization.DataFormat.Text; + private bool _outputFormatSpecified = false; + private Serialization.DataFormat _inFormat = Serialization.DataFormat.Text; + private Collection _collectedArgs = new Collection(); + private string _file; + private string _executionPolicy; + private string _workingDirectory; #if !UNIX diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs index 6159e349497..42f4e76d00a 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs @@ -56,9 +56,13 @@ internal enum InputRecordEventTypes : ushort // not make sense to have more than one of the INPUT_RECORD union members "in effect" at any one time. KEY_EVENT = 0x0001, + MOUSE_EVENT = 0x0002, + WINDOW_BUFFER_SIZE_EVENT = 0x0004, + MENU_EVENT = 0x0008, + FOCUS_EVENT = 0x0010 } @@ -66,6 +70,7 @@ internal enum InputRecordEventTypes : ushort internal struct INPUT_RECORD { internal WORD EventType; + internal KEY_EVENT_RECORD KeyEvent; } @@ -74,13 +79,21 @@ internal enum ControlKeyStates : uint { // From wincon.h. RIGHT_ALT_PRESSED = 0x0001, // the right alt key is pressed. + LEFT_ALT_PRESSED = 0x0002, // the left alt key is pressed. + RIGHT_CTRL_PRESSED = 0x0004, // the right ctrl key is pressed. + LEFT_CTRL_PRESSED = 0x0008, // the left ctrl key is pressed. + SHIFT_PRESSED = 0x0010, // the shift key is pressed. + NUMLOCK_ON = 0x0020, // the numlock light is on. + SCROLLLOCK_ON = 0x0040, // the scrolllock light is on. + CAPSLOCK_ON = 0x0080, // the capslock light is on. + ENHANCED_KEY = 0x0100 // the key is enhanced. } @@ -131,10 +144,15 @@ internal struct CONSOLE_READCONSOLE_CONTROL internal struct CONSOLE_FONT_INFO_EX { internal int cbSize; + internal int nFont; + internal short FontWidth; + internal short FontHeight; + internal int FontFamily; + internal int FontWeight; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] @@ -204,11 +222,15 @@ internal struct FONTSIGNATURE // fsUsb*: A 128-bit Unicode subset bitfield (USB) identifying up to 126 Unicode subranges internal DWORD fsUsb0; + internal DWORD fsUsb1; + internal DWORD fsUsb2; + internal DWORD fsUsb3; // fsCsb*: A 64-bit, code-page bitfield (CPB) that identifies a specific character set or code page. internal DWORD fsCsb0; + internal DWORD fsCsb1; } @@ -217,7 +239,9 @@ internal struct CHARSETINFO { // From public\sdk\inc\wingdi.h internal uint ciCharset; // Character set value. + internal uint ciACP; // ANSI code-page identifier. + internal FONTSIGNATURE fs; } @@ -226,24 +250,43 @@ internal struct TEXTMETRIC { // From public\sdk\inc\wingdi.h public int tmHeight; + public int tmAscent; + public int tmDescent; + public int tmInternalLeading; + public int tmExternalLeading; + public int tmAveCharWidth; + public int tmMaxCharWidth; + public int tmWeight; + public int tmOverhang; + public int tmDigitizedAspectX; + public int tmDigitizedAspectY; + public char tmFirstChar; + public char tmLastChar; + public char tmDefaultChar; + public char tmBreakChar; + public byte tmItalic; + public byte tmUnderlined; + public byte tmStruckOut; + public byte tmPitchAndFamily; + public byte tmCharSet; } @@ -253,6 +296,7 @@ internal struct TEXTMETRIC internal struct INPUT { internal DWORD Type; + internal MouseKeyboardHardwareInput Data; } @@ -427,19 +471,33 @@ internal enum KeyboardFlag : uint internal static extern IntPtr GetConsoleWindow(); internal const int SW_HIDE = 0; + internal const int SW_SHOWNORMAL = 1; + internal const int SW_NORMAL = 1; + internal const int SW_SHOWMINIMIZED = 2; + internal const int SW_SHOWMAXIMIZED = 3; + internal const int SW_MAXIMIZE = 3; + internal const int SW_SHOWNOACTIVATE = 4; + internal const int SW_SHOW = 5; + internal const int SW_MINIMIZE = 6; + internal const int SW_SHOWMINNOACTIVE = 7; + internal const int SW_SHOWNA = 8; + internal const int SW_RESTORE = 9; + internal const int SW_SHOWDEFAULT = 10; + internal const int SW_FORCEMINIMIZE = 11; + internal const int SW_MAX = 11; #if !UNIX @@ -487,8 +545,11 @@ internal enum ConsoleBreakSignal : uint // These correspond to the CRTL_XXX_EVENT #defines in public/sdk/inc/wincon.h CtrlC = 0, + CtrlBreak = 1, + Close = 2, + Logoff = 5, // This only gets received by services @@ -635,17 +696,27 @@ internal enum ConsoleModes : uint // These values from wincon.h // input modes ProcessedInput = 0x001, + LineInput = 0x002, + EchoInput = 0x004, + WindowInput = 0x008, + MouseInput = 0x010, + Insert = 0x020, + QuickEdit = 0x040, + Extended = 0x080, + AutoPosition = 0x100, // output modes ProcessedOutput = 0x001, // yes, I know they are the same values as some flags defined above. + WrapEndOfLine = 0x002, + VirtualTerminal = 0x004, // Error getting console mode Unknown = 0xffffffff, @@ -1219,7 +1290,9 @@ private static BufferCellArrayRowType GetEdgeType(BufferCell left, BufferCell ri private struct BufferCellArrayRowTypeRange { internal int Start; + internal int End; + internal BufferCellArrayRowType Type; } @@ -1227,6 +1300,7 @@ private struct BufferCellArrayRowTypeRange private enum BufferCellArrayRowType : uint { LeftTrailing = 0x1, + RightLeading = 0x2 } @@ -3008,6 +3082,7 @@ internal static class NativeMethods internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); // WinBase.h internal const int FontTypeMask = 0x06; + internal const int TrueTypeFont = 0x04; #region CreateFile @@ -3017,6 +3092,7 @@ internal enum AccessQualifiers : uint { // From winnt.h GenericRead = 0x80000000, + GenericWrite = 0x40000000 } @@ -3025,6 +3101,7 @@ internal enum ShareModes : uint { // From winnt.h ShareRead = 0x00000001, + ShareWrite = 0x00000002 } @@ -3032,9 +3109,13 @@ internal enum CreationDisposition : uint { // From winbase.h CreateNew = 1, + CreateAlways = 2, + OpenExisting = 3, + OpenAlways = 4, + TruncateExisting = 5 } @@ -3264,6 +3345,7 @@ out DWORD numberOfEventsRead internal enum CHAR_INFO_Attributes : uint { COMMON_LVB_LEADING_BYTE = 0x0100, + COMMON_LVB_TRAILING_BYTE = 0x0200 } } diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs index 44ad59579d2..44b4d1c3161 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs @@ -52,9 +52,13 @@ internal sealed partial class ConsoleHost #region static methods internal const int ExitCodeSuccess = 0; + internal const int ExitCodeCtrlBreak = 128 + 21; // SIGBREAK + internal const int ExitCodeInitFailure = 70; // Internal Software Error + internal const int ExitCodeBadCommandLineParameter = 64; // Command Line Usage Error + private const uint SPI_GETSCREENREADER = 0x0046; [DllImport("user32.dll", SetLastError = true)] @@ -2232,6 +2236,7 @@ internal bool DebuggerCanStopCommand } private Exception _lastRunspaceInitializationException = null; + internal uint ExitCode; /// @@ -2841,12 +2846,19 @@ private string EvaluateDebugPrompt() } private ConsoleHost _parent; + private bool _isNested; + private bool _shouldExit; + private Executor _exec; + private Executor _promptExec; + private object _syncObject = new object(); + private bool _isRunspacePushed = false; + private bool _runspacePopped = false; // The instance stack is used to keep track of which InputLoop instance should be told to exit @@ -2909,21 +2921,31 @@ private class ConsoleHostStartupException : Exception // Set to Unknown so that we avoid saving/restoring the console mode if we don't have a console. private ConsoleControl.ConsoleModes _savedConsoleMode = ConsoleControl.ConsoleModes.Unknown; + private ConsoleControl.ConsoleModes _initialConsoleMode = ConsoleControl.ConsoleModes.Unknown; #endif private Thread _breakHandlerThread; + private bool _isDisposed; + internal ConsoleHostUserInterface ui; internal Lazy ConsoleIn { get; } = new Lazy(() => Console.In); private string _savedWindowTitle = string.Empty; + private Version _ver = PSVersionInfo.PSVersion; + private int _exitCodeFromRunspace; + private bool _noExit = true; + private bool _setShouldExitCalled; + private bool _isRunningPromptLoop; + private bool _wasInitialCommandEncoded; + private bool? _screenReaderActive; // hostGlobalLock is used to sync public method calls (in case multiple threads call into the host) and access to @@ -2936,14 +2958,21 @@ private class ConsoleHostStartupException : Exception // thread). We use hostGlobalLock to sync access to them. private bool _shouldEndSession; + private int _beginApplicationNotifyCount; private ConsoleTextWriter _consoleWriter; + private WrappedSerializer _outputSerializer; + private WrappedSerializer _errorSerializer; + private bool _displayDebuggerBanner; + private DebuggerStopEventArgs _debuggerStopEventArgs; + private bool _inPushedConfiguredSession; + internal Pipeline runningCmd; // The ConsoleHost class is a singleton. Note that there is not a thread-safety issue with these statics as there can @@ -2985,9 +3014,13 @@ internal RunspaceCreationEventArgs( } internal string InitialCommand { get; set; } + internal bool SkipProfiles { get; set; } + internal bool StaMode { get; set; } + internal string ConfigurationName { get; set; } + internal Collection InitialCommandArgs { get; set; } } } // namespace diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostTranscript.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostTranscript.cs index fd1b91574b4..90488a1d8af 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostTranscript.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostTranscript.cs @@ -127,6 +127,7 @@ internal void WriteToTranscript(ReadOnlySpan text, bool newLine) } private StreamWriter _transcriptionWriter; + private object _transcriptionStateLock = new object(); } } // namespace diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs index a4d0e91f540..8a8dad31dd2 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs @@ -993,13 +993,16 @@ internal List WrapText(string text, int maxWidthInBufferCells) internal enum WordFlags { IsWhitespace = 0x01, + IsNewline = 0x02 } internal struct Word { internal int CellCount; + internal string Text; + internal WordFlags Flags; } @@ -1397,23 +1400,29 @@ public override void WriteErrorLine(string value) // Error colors public ConsoleColor ErrorAccentColor { get; set; } = ConsoleColor.Cyan; + public ConsoleColor ErrorForegroundColor { get; set; } = ConsoleColor.Red; + public ConsoleColor ErrorBackgroundColor { get; set; } = Console.BackgroundColor; // Warning colors public ConsoleColor WarningForegroundColor { get; set; } = ConsoleColor.Yellow; + public ConsoleColor WarningBackgroundColor { get; set; } = Console.BackgroundColor; // Debug colors public ConsoleColor DebugForegroundColor { get; set; } = ConsoleColor.Yellow; + public ConsoleColor DebugBackgroundColor { get; set; } = Console.BackgroundColor; // Verbose colors public ConsoleColor VerboseForegroundColor { get; set; } = ConsoleColor.Yellow; + public ConsoleColor VerboseBackgroundColor { get; set; } = Console.BackgroundColor; // Progress colors public ConsoleColor ProgressForegroundColor { get; set; } = ConsoleColor.Black; + public ConsoleColor ProgressBackgroundColor { get; set; } = ConsoleColor.Yellow; #endregion Line-oriented interaction @@ -1429,8 +1438,11 @@ public override void WriteErrorLine(string value) internal enum ReadLineResult { endedOnEnter = 0, + endedOnTab = 1, + endedOnShiftTab = 2, + endedOnBreak = 3 } @@ -2242,6 +2254,7 @@ internal void HandleThrowOnReadAndPrompt() // This instance data is "read-only" and need not have access serialized. private ConsoleHostRawUserInterface _rawui; + private ConsoleHost _parent; [TraceSourceAttribute("ConsoleHostUserInterface", "Console host's subclass of S.M.A.Host.Console")] diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs index ffc5735f35f..b9c3d5c6fb2 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs @@ -189,6 +189,7 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt } private ProgressPane _progPane = null; + private PendingProgress _pendingProgress = null; // The timer set up 'progPaneUpdateFlag' every 'UpdateTimerThreshold' milliseconds to update 'ProgressPane' private Timer _progPaneUpdateTimer = null; diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs index bdba911e298..15838d5b015 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs @@ -31,8 +31,11 @@ internal class Executor internal enum ExecutionOptions { None = 0x0, + AddOutputter = 0x01, + AddToHistory = 0x02, + ReadInputObjects = 0x04 } @@ -731,13 +734,19 @@ internal static void CancelCurrentExecutor() // to currentExecutor is guarded by staticStateLock, and static initializers are run by the CLR at program init time. private static Executor s_currentExecutor; + private static object s_staticStateLock = new object(); private ConsoleHost _parent; + private Pipeline _pipeline; + private bool _cancelled; + internal bool useNestedPipelines; + private object _instanceStateLock = new object(); + private bool _isPromptFunctionExecutor; } } // namespace diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs index ce4b6d95acb..ecf6df619b1 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs @@ -405,6 +405,7 @@ internal override IndexWhereFound = -1; private int _idToFind = -1; + private Int64 _sourceIdToFind; } @@ -687,7 +688,9 @@ internal override } private PSHostRawUserInterface _rawUi; + private int _maxHeight; + private int _maxWidth; internal int Tally; @@ -1018,6 +1021,7 @@ internal static #endregion private ArrayList _topLevelNodes = new ArrayList(); + private int _nodeCount; private const int maxNodeCount = 128; diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs index 35066c0bf09..39f6fb7fd1e 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs @@ -29,7 +29,9 @@ namespace Microsoft.PowerShell RenderStyle { Invisible = 0, + Minimal = 1, + Compact = 2, /// diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs index 55dba38d6b4..6be666bc71c 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs @@ -236,11 +236,17 @@ class ProgressPane } private Coordinates _location = new Coordinates(0, 0); + private Coordinates _savedCursor; + private Size _bufSize; + private BufferCell[,] _savedRegion; + private BufferCell[,] _progressRegion; + private PSHostRawUserInterface _rawui; + private ConsoleHostUserInterface _ui; } } // namespace diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs index 696e47313d5..8495ece7e11 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs @@ -54,6 +54,7 @@ internal enum DataFormat protected static string XmlCliTag = "#< CLIXML"; protected string streamName; + protected DataFormat format; } @@ -141,8 +142,11 @@ class WrappedSerializer : Serialization } internal TextWriter textWriter; + private XmlWriter _xmlWriter; + private Serializer _xmlSerializer; + private bool _firstCall = true; } @@ -271,9 +275,13 @@ class WrappedDeserializer : Serialization } internal TextReader textReader; + private XmlReader _xmlReader; + private Deserializer _xmlDeserializer; + private string _firstLine; + private bool _atEnd; } } // namespace diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs index 1587f91d3f9..ade9a48af04 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs @@ -346,7 +346,9 @@ private void ReportMultipleFilesNotSupported() } private bool _shouldAppend; + private string _outFilename; + private bool _isFilenameSet; } } diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs index 5c202eb32b1..ee71b1a36b4 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs @@ -24,8 +24,11 @@ namespace Microsoft.PowerShell internal static class UpdatesNotification { private const string UpdateCheckEnvVar = "POWERSHELL_UPDATECHECK"; + private const string LTSBuildInfoURL = "https://aka.ms/pwsh-buildinfo-lts"; + private const string StableBuildInfoURL = "https://aka.ms/pwsh-buildinfo-stable"; + private const string PreviewBuildInfoURL = "https://aka.ms/pwsh-buildinfo-preview"; /// @@ -46,7 +49,9 @@ internal static class UpdatesNotification private static readonly string s_sentinelFileName, s_doneFileNameTemplate, s_doneFileNamePattern; private static readonly string s_cacheDirectory; + private static readonly EnumerationOptions s_enumOptions; + private static readonly NotificationType s_notificationType; /// diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs index a1eba143e28..556fd4c31ce 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs @@ -16,11 +16,17 @@ public class EventProvider : IDisposable private UnsafeNativeMethods.EtwEnableCallback _etwCallback; // Trace Callback function private long _regHandle; // Trace Registration Handle + private byte _level; // Tracing Level + private long _anyKeywordMask; // Trace Enable Flags + private long _allKeywordMask; // Match all keyword + private int _enabled; // Enabled flag from Trace callback + private Guid _providerId; // Control Guid + private int _disposed; // when 1, provider has unregister [ThreadStatic] @@ -30,10 +36,15 @@ public class EventProvider : IDisposable private static Guid t_activityId; private const int s_basicTypeAllocationBufferSize = 16; + private const int s_etwMaxNumberArguments = 32; + private const int s_etwAPIMaxStringCount = 8; + private const int s_maxEventDataDescriptors = 128; + private const int s_traceEventMaximumSize = 65482; + private const int s_traceEventMaximumStringSize = 32724; [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] @@ -41,7 +52,9 @@ public enum WriteEventErrorCode : int { // check mapping to runtime codes NoError = 0, + NoFreeBuffers = 1, + EventTooBig = 2 } @@ -61,9 +74,13 @@ private struct EventData private enum ActivityControl : uint { EVENT_ACTIVITY_CTRL_GET_ID = 1, + EVENT_ACTIVITY_CTRL_SET_ID = 2, + EVENT_ACTIVITY_CTRL_CREATE_ID = 3, + EVENT_ACTIVITY_CTRL_GET_SET_ID = 4, + EVENT_ACTIVITY_CTRL_CREATE_SET_ID = 5 } diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs index 97c10d167ef..79bed93b6a3 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs @@ -22,12 +22,15 @@ public class EventProviderTraceListener : TraceListener private EventProvider _provider; private const string s_nullStringValue = "null"; + private const string s_nullStringComaValue = "null,"; + private const string s_nullCStringValue = ": null"; private string _delimiter = ";"; private const uint s_keyWordMask = 0xFFFFFF00; + private const int s_defaultPayloadSize = 512; [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs index 8a7fda12c74..81b4881745d 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs @@ -30,22 +30,39 @@ public class SystemProperties public bool filled = false; public ushort? Id = null; + public byte? Version = null; + public ushort? Qualifiers = null; + public byte? Level = null; + public ushort? Task = null; + public byte? Opcode = null; + public ulong? Keywords = null; + public ulong? RecordId = null; + public string ProviderName = null; + public Guid? ProviderId = null; + public string ChannelName = null; + public uint? ProcessId = null; + public uint? ThreadId = null; + public string ComputerName = null; + public System.Security.Principal.SecurityIdentifier UserId = null; + public DateTime? TimeCreated = null; + public Guid? ActivityId = null; + public Guid? RelatedActivityId = null; public SystemProperties() diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs index 5da8809897d..d21def94fe1 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs @@ -12,16 +12,22 @@ namespace System.Diagnostics.Eventing internal static class UnsafeNativeMethods { private const string FormatMessageDllName = "api-ms-win-core-localization-l1-2-0.dll"; + private const string EventProviderDllName = "api-ms-win-eventing-provider-l1-1-0.dll"; + private const string WEVTAPI = "wevtapi.dll"; private static readonly IntPtr s_NULL = IntPtr.Zero; // WinError.h codes: internal const int ERROR_SUCCESS = 0x0; + internal const int ERROR_FILE_NOT_FOUND = 0x2; + internal const int ERROR_PATH_NOT_FOUND = 0x3; + internal const int ERROR_ACCESS_DENIED = 0x5; + internal const int ERROR_INVALID_HANDLE = 0x6; // Can occurs when filled buffers are trying to flush to disk, but disk IOs are not fast enough. @@ -30,49 +36,83 @@ internal static class UnsafeNativeMethods internal const int ERROR_NOT_ENOUGH_MEMORY = 0x8; internal const int ERROR_INVALID_DRIVE = 0xF; + internal const int ERROR_NO_MORE_FILES = 0x12; + internal const int ERROR_NOT_READY = 0x15; + internal const int ERROR_BAD_LENGTH = 0x18; + internal const int ERROR_SHARING_VIOLATION = 0x20; + internal const int ERROR_LOCK_VIOLATION = 0x21; // 33 + internal const int ERROR_HANDLE_EOF = 0x26; // 38 + internal const int ERROR_FILE_EXISTS = 0x50; + internal const int ERROR_INVALID_PARAMETER = 0x57; // 87 + internal const int ERROR_BROKEN_PIPE = 0x6D; // 109 + internal const int ERROR_INSUFFICIENT_BUFFER = 0x7A; // 122 + internal const int ERROR_INVALID_NAME = 0x7B; + internal const int ERROR_BAD_PATHNAME = 0xA1; + internal const int ERROR_ALREADY_EXISTS = 0xB7; + internal const int ERROR_ENVVAR_NOT_FOUND = 0xCB; + internal const int ERROR_FILENAME_EXCED_RANGE = 0xCE; // filename too long + internal const int ERROR_PIPE_BUSY = 0xE7; // 231 + internal const int ERROR_NO_DATA = 0xE8; // 232 + internal const int ERROR_PIPE_NOT_CONNECTED = 0xE9; // 233 + internal const int ERROR_MORE_DATA = 0xEA; + internal const int ERROR_NO_MORE_ITEMS = 0x103; // 259 + internal const int ERROR_PIPE_CONNECTED = 0x217; // 535 + internal const int ERROR_PIPE_LISTENING = 0x218; // 536 + internal const int ERROR_OPERATION_ABORTED = 0x3E3; // 995; For IO Cancellation + internal const int ERROR_IO_PENDING = 0x3E5; // 997 + internal const int ERROR_NOT_FOUND = 0x490; // 1168 // The event size is larger than the allowed maximum (64k - header). internal const int ERROR_ARITHMETIC_OVERFLOW = 0x216; // 534 + internal const int ERROR_RESOURCE_LANG_NOT_FOUND = 0x717; // 1815 // Event log specific codes: internal const int ERROR_EVT_MESSAGE_NOT_FOUND = 15027; + internal const int ERROR_EVT_MESSAGE_ID_NOT_FOUND = 15028; + internal const int ERROR_EVT_UNRESOLVED_VALUE_INSERT = 15029; + internal const int ERROR_EVT_UNRESOLVED_PARAMETER_INSERT = 15030; + internal const int ERROR_EVT_MAX_INSERTS_REACHED = 15031; + internal const int ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND = 15033; + internal const int ERROR_MUI_FILE_NOT_FOUND = 15100; // ErrorCode & format // for win32 error message formatting private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; + private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; + private const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000; [DllImport(FormatMessageDllName, CharSet = CharSet.Unicode, BestFitMapping = false)] @@ -188,9 +228,13 @@ [In] char* message internal enum EvtQueryFlags { EvtQueryChannelPath = 0x1, + EvtQueryFilePath = 0x2, + EvtQueryForwardDirection = 0x100, + EvtQueryReverseDirection = 0x200, + EvtQueryTolerateQueryErrors = 0x1000 } @@ -200,38 +244,62 @@ internal enum EvtQueryFlags internal enum EvtVariantType { EvtVarTypeNull = 0, + EvtVarTypeString = 1, + EvtVarTypeAnsiString = 2, + EvtVarTypeSByte = 3, + EvtVarTypeByte = 4, + EvtVarTypeInt16 = 5, + EvtVarTypeUInt16 = 6, + EvtVarTypeInt32 = 7, + EvtVarTypeUInt32 = 8, + EvtVarTypeInt64 = 9, + EvtVarTypeUInt64 = 10, + EvtVarTypeSingle = 11, + EvtVarTypeDouble = 12, + EvtVarTypeBoolean = 13, + EvtVarTypeBinary = 14, + EvtVarTypeGuid = 15, + EvtVarTypeSizeT = 16, + EvtVarTypeFileTime = 17, + EvtVarTypeSysTime = 18, + EvtVarTypeSid = 19, + EvtVarTypeHexInt32 = 20, + EvtVarTypeHexInt64 = 21, // these types used internally EvtVarTypeEvtHandle = 32, + EvtVarTypeEvtXml = 35, // Array = 128 EvtVarTypeStringArray = 129, + EvtVarTypeUInt32Array = 136 } internal enum EvtMasks { EVT_VARIANT_TYPE_MASK = 0x7f, + EVT_VARIANT_TYPE_ARRAY = 128 } @@ -343,6 +411,7 @@ internal struct EvtVariant internal enum EvtEventPropertyId { EvtEventQueryIDs = 0, + EvtEventPath = 1 } @@ -352,6 +421,7 @@ internal enum EvtEventPropertyId internal enum EvtQueryPropertyId { EvtQueryNames = 0, // String; // Variant will be array of EvtVarTypeString + EvtQueryStatuses = 1 // UInt32; // Variant will be Array of EvtVarTypeUInt32 } @@ -361,38 +431,61 @@ internal enum EvtQueryPropertyId internal enum EvtPublisherMetadataPropertyId { EvtPublisherMetadataPublisherGuid = 0, // EvtVarTypeGuid + EvtPublisherMetadataResourceFilePath = 1, // EvtVarTypeString + EvtPublisherMetadataParameterFilePath = 2, // EvtVarTypeString + EvtPublisherMetadataMessageFilePath = 3, // EvtVarTypeString + EvtPublisherMetadataHelpLink = 4, // EvtVarTypeString + EvtPublisherMetadataPublisherMessageID = 5, // EvtVarTypeUInt32 EvtPublisherMetadataChannelReferences = 6, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataChannelReferencePath = 7, // EvtVarTypeString + EvtPublisherMetadataChannelReferenceIndex = 8, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceID = 9, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceFlags = 10, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceMessageID = 11, // EvtVarTypeUInt32 EvtPublisherMetadataLevels = 12, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataLevelName = 13, // EvtVarTypeString + EvtPublisherMetadataLevelValue = 14, // EvtVarTypeUInt32 + EvtPublisherMetadataLevelMessageID = 15, // EvtVarTypeUInt32 EvtPublisherMetadataTasks = 16, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataTaskName = 17, // EvtVarTypeString + EvtPublisherMetadataTaskEventGuid = 18, // EvtVarTypeGuid + EvtPublisherMetadataTaskValue = 19, // EvtVarTypeUInt32 + EvtPublisherMetadataTaskMessageID = 20, // EvtVarTypeUInt32 EvtPublisherMetadataOpcodes = 21, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataOpcodeName = 22, // EvtVarTypeString + EvtPublisherMetadataOpcodeValue = 23, // EvtVarTypeUInt32 + EvtPublisherMetadataOpcodeMessageID = 24, // EvtVarTypeUInt32 EvtPublisherMetadataKeywords = 25, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataKeywordName = 26, // EvtVarTypeString + EvtPublisherMetadataKeywordValue = 27, // EvtVarTypeUInt64 + EvtPublisherMetadataKeywordMessageID = 28 // EvtVarTypeUInt32 // EvtPublisherMetadataPropertyIdEND } @@ -405,13 +498,21 @@ internal enum EvtChannelReferenceFlags internal enum EvtEventMetadataPropertyId { EventMetadataEventID, // EvtVarTypeUInt32 + EventMetadataEventVersion, // EvtVarTypeUInt32 + EventMetadataEventChannel, // EvtVarTypeUInt32 + EventMetadataEventLevel, // EvtVarTypeUInt32 + EventMetadataEventOpcode, // EvtVarTypeUInt32 + EventMetadataEventTask, // EvtVarTypeUInt32 + EventMetadataEventKeyword, // EvtVarTypeUInt64 + EventMetadataEventMessageID,// EvtVarTypeUInt32 + EventMetadataEventTemplate // EvtVarTypeString // EvtEventMetadataPropertyIdEND } @@ -420,25 +521,45 @@ internal enum EvtEventMetadataPropertyId internal enum EvtChannelConfigPropertyId { EvtChannelConfigEnabled = 0, // EvtVarTypeBoolean + EvtChannelConfigIsolation, // EvtVarTypeUInt32, EVT_CHANNEL_ISOLATION_TYPE + EvtChannelConfigType, // EvtVarTypeUInt32, EVT_CHANNEL_TYPE + EvtChannelConfigOwningPublisher, // EvtVarTypeString + EvtChannelConfigClassicEventlog, // EvtVarTypeBoolean + EvtChannelConfigAccess, // EvtVarTypeString + EvtChannelLoggingConfigRetention, // EvtVarTypeBoolean + EvtChannelLoggingConfigAutoBackup, // EvtVarTypeBoolean + EvtChannelLoggingConfigMaxSize, // EvtVarTypeUInt64 + EvtChannelLoggingConfigLogFilePath, // EvtVarTypeString + EvtChannelPublishingConfigLevel, // EvtVarTypeUInt32 + EvtChannelPublishingConfigKeywords, // EvtVarTypeUInt64 + EvtChannelPublishingConfigControlGuid, // EvtVarTypeGuid + EvtChannelPublishingConfigBufferSize, // EvtVarTypeUInt32 + EvtChannelPublishingConfigMinBuffers, // EvtVarTypeUInt32 + EvtChannelPublishingConfigMaxBuffers, // EvtVarTypeUInt32 + EvtChannelPublishingConfigLatency, // EvtVarTypeUInt32 + EvtChannelPublishingConfigClockType, // EvtVarTypeUInt32, EVT_CHANNEL_CLOCK_TYPE + EvtChannelPublishingConfigSidType, // EvtVarTypeUInt32, EVT_CHANNEL_SID_TYPE + EvtChannelPublisherList, // EvtVarTypeString | EVT_VARIANT_TYPE_ARRAY + EvtChannelConfigPropertyIdEND } @@ -446,19 +567,28 @@ internal enum EvtChannelConfigPropertyId internal enum EvtLogPropertyId { EvtLogCreationTime = 0, // EvtVarTypeFileTime + EvtLogLastAccessTime, // EvtVarTypeFileTime + EvtLogLastWriteTime, // EvtVarTypeFileTime + EvtLogFileSize, // EvtVarTypeUInt64 + EvtLogAttributes, // EvtVarTypeUInt32 + EvtLogNumberOfLogRecords, // EvtVarTypeUInt64 + EvtLogOldestRecordNumber, // EvtVarTypeUInt64 + EvtLogFull, // EvtVarTypeBoolean } internal enum EvtExportLogFlags { EvtExportLogChannelPath = 1, + EvtExportLogFilePath = 2, + EvtExportLogTolerateQueryErrors = 0x1000 } @@ -466,50 +596,80 @@ internal enum EvtExportLogFlags internal enum EvtRenderContextFlags { EvtRenderContextValues = 0, // Render specific properties + EvtRenderContextSystem = 1, // Render all system properties (System) + EvtRenderContextUser = 2 // Render all user properties (User/EventData) } internal enum EvtRenderFlags { EvtRenderEventValues = 0, // Variants + EvtRenderEventXml = 1, // XML + EvtRenderBookmark = 2 // Bookmark } internal enum EvtFormatMessageFlags { EvtFormatMessageEvent = 1, + EvtFormatMessageLevel = 2, + EvtFormatMessageTask = 3, + EvtFormatMessageOpcode = 4, + EvtFormatMessageKeyword = 5, + EvtFormatMessageChannel = 6, + EvtFormatMessageProvider = 7, + EvtFormatMessageId = 8, + EvtFormatMessageXml = 9 } internal enum EvtSystemPropertyId { EvtSystemProviderName = 0, // EvtVarTypeString + EvtSystemProviderGuid, // EvtVarTypeGuid + EvtSystemEventID, // EvtVarTypeUInt16 + EvtSystemQualifiers, // EvtVarTypeUInt16 + EvtSystemLevel, // EvtVarTypeUInt8 + EvtSystemTask, // EvtVarTypeUInt16 + EvtSystemOpcode, // EvtVarTypeUInt8 + EvtSystemKeywords, // EvtVarTypeHexInt64 + EvtSystemTimeCreated, // EvtVarTypeFileTime + EvtSystemEventRecordId, // EvtVarTypeUInt64 + EvtSystemActivityID, // EvtVarTypeGuid + EvtSystemRelatedActivityID, // EvtVarTypeGuid + EvtSystemProcessID, // EvtVarTypeUInt32 + EvtSystemThreadID, // EvtVarTypeUInt32 + EvtSystemChannel, // EvtVarTypeString + EvtSystemComputer, // EvtVarTypeString + EvtSystemUserID, // EvtVarTypeSid + EvtSystemVersion, // EvtVarTypeUInt8 + EvtSystemPropertyIdEND } @@ -542,10 +702,15 @@ internal struct EvtRpcLogin internal enum EvtSeekFlags { EvtSeekRelativeToFirst = 1, + EvtSeekRelativeToLast = 2, + EvtSeekRelativeToCurrent = 3, + EvtSeekRelativeToBookmark = 4, + EvtSeekOriginMask = 7, + EvtSeekStrict = 0x10000 } diff --git a/src/Microsoft.PowerShell.MarkdownRender/VT100EscapeSequences.cs b/src/Microsoft.PowerShell.MarkdownRender/VT100EscapeSequences.cs index 0827fdf049f..22d9afdd17f 100644 --- a/src/Microsoft.PowerShell.MarkdownRender/VT100EscapeSequences.cs +++ b/src/Microsoft.PowerShell.MarkdownRender/VT100EscapeSequences.cs @@ -78,6 +78,7 @@ public enum MarkdownOptionInfoProperty public sealed class PSMarkdownOptionInfo { private const char Esc = (char)0x1b; + private const string EndSequence = "[0m"; /// @@ -200,28 +201,49 @@ public PSMarkdownOptionInfo() } private const string Header1Dark = "[7m"; + private const string Header2Dark = "[4;93m"; + private const string Header3Dark = "[4;94m"; + private const string Header4Dark = "[4;95m"; + private const string Header5Dark = "[4;96m"; + private const string Header6Dark = "[4;97m"; + private const string CodeDark = "[48;2;155;155;155;38;2;30;30;30m"; + private const string CodeMacOS = "[107;95m"; + private const string LinkDark = "[4;38;5;117m"; + private const string ImageDark = "[33m"; + private const string EmphasisBoldDark = "[1m"; + private const string EmphasisItalicsDark = "[36m"; private const string Header1Light = "[7m"; + private const string Header2Light = "[4;33m"; + private const string Header3Light = "[4;34m"; + private const string Header4Light = "[4;35m"; + private const string Header5Light = "[4;36m"; + private const string Header6Light = "[4;30m"; + private const string CodeLight = "[48;2;155;155;155;38;2;30;30;30m"; + private const string LinkLight = "[4;38;5;117m"; + private const string ImageLight = "[33m"; + private const string EmphasisBoldLight = "[1m"; + private const string EmphasisItalicsLight = "[36m"; /// diff --git a/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs b/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs index 5d094413904..f6b2dc0c12e 100644 --- a/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs +++ b/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs @@ -260,6 +260,7 @@ public string[] FilesToSkip } private string[] filesToSkip = null; + internal WildcardPattern[] excludedPatterns = null; /// diff --git a/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs b/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs index 3579ce7b46f..1a9ea1e0383 100644 --- a/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs +++ b/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs @@ -451,10 +451,15 @@ public bool Valid } private bool _archivedCerts = false; + private X509StoreLocation _storeLocation = null; + private string _storeName = null; + private CertificateStoreHandle _storeHandle = null; + private bool _valid = false; + private bool _open = false; } @@ -3178,9 +3183,11 @@ public EnhancedKeyUsageProperty(X509Certificate2 cert) public sealed class DnsNameProperty { private List _dnsList = new List(); + private System.Globalization.IdnMapping idnMapping = new System.Globalization.IdnMapping(); private const string dnsNamePrefix = "DNS Name="; + private const string distinguishedNamePrefix = "CN="; /// @@ -3267,6 +3274,7 @@ public DnsNameProperty(X509Certificate2 cert) internal static class DownLevelHelper { private static bool s_isWin8Set = false; + private static bool s_isWin8 = false; internal static bool IsWin8AndAbove() diff --git a/src/Microsoft.PowerShell.Security/security/ExecutionPolicyCommands.cs b/src/Microsoft.PowerShell.Security/security/ExecutionPolicyCommands.cs index 7924fcd7652..932f47fe9f1 100644 --- a/src/Microsoft.PowerShell.Security/security/ExecutionPolicyCommands.cs +++ b/src/Microsoft.PowerShell.Security/security/ExecutionPolicyCommands.cs @@ -40,6 +40,7 @@ public ExecutionPolicyScope Scope } private ExecutionPolicyScope _executionPolicyScope = ExecutionPolicyScope.LocalMachine; + private bool _scopeSpecified = false; /// diff --git a/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs b/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs index 74dee890cdf..30220a46a74 100644 --- a/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs +++ b/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs @@ -65,6 +65,7 @@ public abstract class ConvertFromToSecureStringCommandBase : SecureStringCommand protected ConvertFromToSecureStringCommandBase(string name) : base(name) { } private SecureString _secureKey = null; + private byte[] _key; /// diff --git a/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs b/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs index 91a3e8e3a83..40c9fa0272c 100644 --- a/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs +++ b/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs @@ -593,6 +593,7 @@ protected override Signature PerformAction(string sourcePathOrExtension, byte[] private struct SigningOptionInfo { internal SigningOption option; + internal string optionName; internal SigningOptionInfo(SigningOption o, string n) diff --git a/src/Microsoft.WSMan.Management/ConfigProvider.cs b/src/Microsoft.WSMan.Management/ConfigProvider.cs index 7384bacf026..24bee817696 100644 --- a/src/Microsoft.WSMan.Management/ConfigProvider.cs +++ b/src/Microsoft.WSMan.Management/ConfigProvider.cs @@ -5434,13 +5434,16 @@ private bool IsValueOfParamList(string name, string[] paramcontainer) private enum ProviderMethods { GetChildItems, + GetChildNames }; private enum WsManElementObjectTypes { WSManConfigElement, + WSManConfigContainerElement, + WSManConfigLeafElement }; @@ -5458,7 +5461,9 @@ private enum WsManElementObjectTypes // Defining Primarykeys for resource uri's private static readonly string[] PKeyListener = new string[] { "Address", "Transport" }; + private static readonly string[] PKeyPlugin = new string[] { "Name" }; + private static readonly string[] PKeyCertMapping = new string[] { "Issuer", "Subject", "Uri" }; /// diff --git a/src/Microsoft.WSMan.Management/CredSSP.cs b/src/Microsoft.WSMan.Management/CredSSP.cs index aaa38a43bab..4f02c75102e 100644 --- a/src/Microsoft.WSMan.Management/CredSSP.cs +++ b/src/Microsoft.WSMan.Management/CredSSP.cs @@ -36,6 +36,7 @@ public class WSManCredSSPCommandBase : PSCmdlet #region Protected / Internal Data internal const string Server = "Server"; + internal const string Client = "Client"; #endregion diff --git a/src/Microsoft.WSMan.Management/InvokeWSManAction.cs b/src/Microsoft.WSMan.Management/InvokeWSManAction.cs index 71f8ae4c84d..ff1f0e66c26 100644 --- a/src/Microsoft.WSMan.Management/InvokeWSManAction.cs +++ b/src/Microsoft.WSMan.Management/InvokeWSManAction.cs @@ -245,8 +245,11 @@ public Uri ResourceURI private Uri resourceuri; private WSManHelper helper; + private IWSManEx m_wsmanObject = (IWSManEx)new WSManClass(); + private IWSManSession m_session = null; + private string connectionStr = string.Empty; /// diff --git a/src/Microsoft.WSMan.Management/WSManInstance.cs b/src/Microsoft.WSMan.Management/WSManInstance.cs index 00a824c6d66..0b544a15c9c 100644 --- a/src/Microsoft.WSMan.Management/WSManInstance.cs +++ b/src/Microsoft.WSMan.Management/WSManInstance.cs @@ -1475,8 +1475,11 @@ public Hashtable ValueSet private Hashtable valueset; private WSManHelper helper; + private IWSManEx m_wsmanObject = (IWSManEx)new WSManClass(); + private IWSManSession m_session = null; + private string connectionStr = string.Empty; /// diff --git a/src/Microsoft.WSMan.Management/WsManHelper.cs b/src/Microsoft.WSMan.Management/WsManHelper.cs index 651840cd2ef..9085341d9b7 100644 --- a/src/Microsoft.WSMan.Management/WsManHelper.cs +++ b/src/Microsoft.WSMan.Management/WsManHelper.cs @@ -26,62 +26,95 @@ internal class WSManHelper { // regular expressions private const string PTRN_URI_LAST = @"([a-z_][-a-z0-9._]*)$"; + private const string PTRN_OPT = @"^-([a-z]+):(.*)"; + private const string PTRN_HASH_TOK = @"\s*([\w:]+)\s*=\s*(\$null|""([^""]*)"")\s*"; // schemas private const string URI_IPMI = @"http://schemas.dmtf.org/wbem/wscim/1/cim-schema"; + private const string URI_WMI = @"http://schemas.microsoft.com/wbem/wsman/1/wmi"; + private const string NS_IPMI = @"http://schemas.dmtf.org/wbem/wscim/1/cim-schema"; + private const string NS_CIMBASE = @"http://schemas.dmtf.org/wbem/wsman/1/base"; + private const string NS_WSMANL = @"http://schemas.microsoft.com"; + private const string NS_XSI = @"xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"""; + private const string ATTR_NIL = @"xsi:nil=""true"""; + private const string ATTR_NIL_NAME = @"xsi:nil"; + private const string NS_XSI_URI = @"http://www.w3.org/2001/XMLSchema-instance"; + private const string ALIAS_XPATH = @"xpath"; + private const string URI_XPATH_DIALECT = @"http://www.w3.org/TR/1999/REC-xpath-19991116"; // credSSP strings internal string CredSSP_RUri = "winrm/config/client/auth"; + internal string CredSSP_XMLNmsp = "http://schemas.microsoft.com/wbem/wsman/1/config/client/auth"; + internal string CredSSP_SNode = "/cfg:Auth/cfg:CredSSP"; + internal string Client_uri = "winrm/config/client"; + internal string urlprefix_node = "/cfg:Client/cfg:URLPrefix"; + internal string Client_XMLNmsp = "http://schemas.microsoft.com/wbem/wsman/1/config/client"; internal string Service_Uri = "winrm/config/service"; + internal string Service_UrlPrefix_Node = "/cfg:Service/cfg:URLPrefix"; + internal string Service_XMLNmsp = "http://schemas.microsoft.com/wbem/wsman/1/config/service"; + internal string Service_CredSSP_Uri = "winrm/config/service/auth"; + internal string Service_CredSSP_XMLNmsp = "http://schemas.microsoft.com/wbem/wsman/1/config/service/auth"; // gpo registry path and keys internal string Registry_Path_Credentials_Delegation = @"SOFTWARE\Policies\Microsoft\Windows"; + internal string Key_Allow_Fresh_Credentials = "AllowFreshCredentials"; + internal string Key_Concatenate_Defaults_AllowFresh = "ConcatenateDefaults_AllowFresh"; + internal string Delegate = "delegate"; + internal string keyAllowcredssp = "AllowCredSSP"; // 'Constants for MS-XML private const string NODE_ATTRIBUTE = "2"; + private const int NODE_TEXT = 3; // strings for dialects internal string ALIAS_WQL = @"wql"; + internal string ALIAS_ASSOCIATION = @"association"; + internal string ALIAS_SELECTOR = @"selector"; + internal string URI_WQL_DIALECT = @"http://schemas.microsoft.com/wbem/wsman/1/WQL"; + internal string URI_SELECTOR_DIALECT = @"http://schemas.dmtf.org/wbem/wsman/1/wsman/SelectorFilter"; + internal string URI_ASSOCIATION_DIALECT = @" http://schemas.dmtf.org/wbem/wsman/1/cimbinding/associationFilter"; // string for operation internal string WSManOp = null; private PSCmdlet cmdletname; + private NavigationCmdletProvider _provider; private FileStream _fs; + private StreamReader _sr; private static ResourceManager _resourceMgr = new ResourceManager("Microsoft.WSMan.Management.resources.WsManResources", typeof(WSManHelper).GetTypeInfo().Assembly); diff --git a/src/System.Management.Automation/AssemblyInfo.cs b/src/System.Management.Automation/AssemblyInfo.cs index 279feede65b..6476e542687 100644 --- a/src/System.Management.Automation/AssemblyInfo.cs +++ b/src/System.Management.Automation/AssemblyInfo.cs @@ -30,9 +30,13 @@ namespace System.Management.Automation internal class NTVerpVars { internal const int PRODUCTMAJORVERSION = 10; + internal const int PRODUCTMINORVERSION = 0; + internal const int PRODUCTBUILD = 10032; + internal const int PRODUCTBUILD_QFE = 0; + internal const int PACKAGEBUILD_QFE = 814; } } diff --git a/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs b/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs index 293c3599267..025d44b9539 100644 --- a/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs +++ b/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs @@ -26,7 +26,9 @@ internal partial class PowerShellAssemblyLoadContext // 2. Load assembly with culture 'en' (Microsoft.PowerShell.CoreCLR.AssemblyLoadContext.resources, Version=3.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35) // When the first attempt fails, we again need to retrieve the resource string to construct another exception, which ends up with an infinite loop. private const string BaseFolderDoesNotExist = "The base directory '{0}' does not exist."; + private const string ManifestDefinitionDoesNotMatch = "Could not load file or assembly '{0}' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference."; + private const string SingletonAlreadyInitialized = "The singleton of PowerShellAssemblyLoadContext has already been initialized."; #endregion Resource_Strings @@ -106,12 +108,15 @@ private PowerShellAssemblyLoadContext(string basePaths) #region Fields private static readonly object s_syncObj = new object(); + private readonly string[] _probingPaths; + private readonly string[] _extensions = new string[] { ".ni.dll", ".dll" }; // CoreCLR type catalog dictionary // - Key: namespace qualified type name (FullName) // - Value: strong name of the TPA that contains the type represented by Key. private readonly Dictionary _coreClrTypeCatalog; + private readonly Lazy> _availableDotNetAssemblyNames; private readonly HashSet _denyListedAssemblies = new HashSet(StringComparer.OrdinalIgnoreCase){ @@ -120,8 +125,11 @@ private PowerShellAssemblyLoadContext(string basePaths) #if !UNIX private string _winDir; + private string _gacPathMSIL; + private string _gacPath32; + private string _gacPath64; #endif @@ -533,6 +541,7 @@ private void ThrowFileNotFoundException(string errorTemplate, params object[] ar } private static string s_nativeDllSubFolder; + private static string s_nativeDllExtension; private static string GetNativeDllSubFolderName(out string ext) diff --git a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs index c6ac57070cb..30897f0004f 100644 --- a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs +++ b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs @@ -147,10 +147,13 @@ public static bool IsWindowsDesktop #else // Gets the location for cache and config folders. internal static readonly string CacheDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\PowerShell"; + internal static readonly string ConfigDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"\PowerShell"; private static bool? _isNanoServer = null; + private static bool? _isIoT = null; + private static bool? _isWindowsDesktop = null; #endif @@ -564,6 +567,7 @@ internal static int NonWindowsGetProcessParentPid(int pid) internal static class Unix { private static Dictionary usernameCache = new Dictionary(); + private static Dictionary groupnameCache = new Dictionary(); /// The type of a Unix file system item. @@ -692,7 +696,9 @@ public class CommonStat public bool IsSticky; private const char CanRead = 'r'; + private const char CanWrite = 'w'; + private const char CanExecute = 'x'; // helper for getting unix mode diff --git a/src/System.Management.Automation/CoreCLR/CorePsStub.cs b/src/System.Management.Automation/CoreCLR/CorePsStub.cs index 2691e168364..db6e308d60b 100644 --- a/src/System.Management.Automation/CoreCLR/CorePsStub.cs +++ b/src/System.Management.Automation/CoreCLR/CorePsStub.cs @@ -467,9 +467,13 @@ public ObjectSecurity GetAccessControl(AccessControlSections includeSections) internal sealed class TransactedRegistry { internal static readonly TransactedRegistryKey LocalMachine; + internal static readonly TransactedRegistryKey ClassesRoot; + internal static readonly TransactedRegistryKey Users; + internal static readonly TransactedRegistryKey CurrentConfig; + internal static readonly TransactedRegistryKey CurrentUser; } diff --git a/src/System.Management.Automation/DscSupport/CimDSCParser.cs b/src/System.Management.Automation/DscSupport/CimDSCParser.cs index be547213afa..2fa04560c9a 100644 --- a/src/System.Management.Automation/DscSupport/CimDSCParser.cs +++ b/src/System.Management.Automation/DscSupport/CimDSCParser.cs @@ -321,6 +321,7 @@ public override object Transform(EngineIntrinsics engineIntrinsics, object input internal class CimDSCParser { private CimMofDeserializer _deserializer; + private CimMofDeserializer.OnClassNeeded _onClassNeeded; /// /// @@ -527,6 +528,7 @@ public DscClassCacheEntry(DSCResourceRunAsCredential aDSCResourceRunAsCredential public static class DscClassCache { private const string InboxDscResourceModulePath = "WindowsPowershell\\v1.0\\Modules\\PsDesiredStateConfiguration"; + private const string reservedDynamicKeywords = "^(Synchronization|Certificate|IIS|SQL)$"; private const string reservedProperties = "^(Require|Trigger|Notify|Before|After|Subscribe)$"; @@ -535,8 +537,11 @@ public static class DscClassCache // Constants for items in the module qualified name (Module\Version\ClassName) private const int IndexModuleName = 0; + private const int IndexModuleVersion = 1; + private const int IndexClassName = 2; + private const int IndexFriendlyName = 3; // Create a list of classes which are not actual DSC resources similar to what we do inside PSDesiredStateConfiguration.psm1 diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs index e03b4ae61eb..d995db0bfd0 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs @@ -132,7 +132,9 @@ public void Dispose() private PipelineProcessor _pp = null; private string _commandName = null; + private Type _commandType; + private List _commandParameterList = new List(); private ExecutionContext _context = null; diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs index ffccf13f4e1..2a8c17613e8 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs @@ -537,6 +537,7 @@ internal ScriptBlock CreateScriptBlock(string scriptText) private TypeInfoDataBase _typeInfoDataBase = null; private FormattingCommandLineParameters _parameters = null; + private FormatViewManager _viewManager = new FormatViewManager(); private int _enumerationLimit = InitialSessionState.DefaultFormatEnumerationLimit; diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs index cdd60637a7a..ab0d416bd1b 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs @@ -82,6 +82,7 @@ internal abstract class ShapeSpecificParameters internal sealed class TableSpecificParameters : ShapeSpecificParameters { internal bool? hideHeaders = null; + internal bool? multiLine = null; } @@ -312,7 +313,9 @@ private void ProcessIllegalValue(string s, TerminatingErrorContext invocationCon private static readonly string[] s_legalValues = new string[] { LeftAlign, CenterAlign, RightAlign }; private const string LeftAlign = "left"; + private const string CenterAlign = "center"; + private const string RightAlign = "right"; } @@ -419,10 +422,12 @@ internal static class FormatParameterDefinitionKeys { // common entries internal const string ExpressionEntryKey = "expression"; + internal const string FormatStringEntryKey = "formatString"; // specific to format-table internal const string AlignmentEntryKey = "alignment"; + internal const string WidthEntryKey = "width"; // specific to format-table,list and wide diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs index bb8305b2fdc..2eb22e7cd8f 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs @@ -251,7 +251,9 @@ private enum FormattingState private enum PreprocessingState { raw, processed, error } private const int DefaultConsoleWidth = 120; + private const int DefaultConsoleHeight = int.MaxValue; + internal const int StackAllocThreshold = 120; /// @@ -946,7 +948,9 @@ internal TableOutputContextBase(OutCommandInner cmd, private sealed class TableOutputContext : TableOutputContextBase { private int _rowCount = 0; + private int _consoleHeight = -1; + private int _consoleWidth = -1; private const int WhitespaceAndPagerLineCount = 2; @@ -1358,6 +1362,7 @@ internal void Reset() } private string[] _arr; + private int _lastEmptySpot; } } diff --git a/src/System.Management.Automation/FormatAndOutput/common/ColumnWidthManager.cs b/src/System.Management.Automation/FormatAndOutput/common/ColumnWidthManager.cs index d2e44c4ad60..1e9c4698e76 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/ColumnWidthManager.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/ColumnWidthManager.cs @@ -202,7 +202,9 @@ private static int GetLastVisibleColumn(Span columnWidths) } private int _tableWidth; + private int _minimumColumnWidth; + private int _separatorWidth; } } diff --git a/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs index 74031dc515c..c26225d71bb 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs @@ -320,6 +320,7 @@ private int ComputeLeftIndentation() internal struct GetWordsResult { internal string Word; + internal string Delim; } @@ -329,8 +330,11 @@ internal struct GetWordsResult internal sealed class StringManipulationHelper { private static readonly char s_softHyphen = '\u00AD'; + private static readonly char s_hardHyphen = '\u2011'; + private static readonly char s_nonBreakingSpace = '\u00A0'; + private static Collection s_cultureCollection = new Collection(); static StringManipulationHelper() @@ -511,8 +515,11 @@ internal int ActiveLen } private StringCollection _retVal; + private bool _addedFirstLine; + private int _firstLineLen; + private int _followingLinesLen; } @@ -727,6 +734,7 @@ internal static string PadLeft(string val, int count) } private static readonly char[] s_newLineChar = new char[] { '\n' }; + private static readonly char[] s_lineBreakChars = new char[] { '\n', '\r' }; } } diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/commands.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/commands.cs index 1402fbbbc8a..cfe1558c863 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/commands.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/commands.cs @@ -10,7 +10,9 @@ namespace Microsoft.PowerShell.Commands internal static class EnumerableExpansionConversion { internal const string CoreOnlyString = "CoreOnly"; + internal const string EnumOnlyString = "EnumOnly"; + internal const string BothString = "Both"; internal static bool Convert(string expansionString, out EnumerableExpansion expansion) diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs index 64af2244fb8..841a5f25790 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs @@ -36,8 +36,11 @@ internal sealed partial class TypeInfoDataBase { // define the sections corresponding the XML file internal DefaultSettingsSection defaultSettingsSection = new DefaultSettingsSection(); + internal TypeGroupsSection typeGroupSection = new TypeGroupsSection(); + internal ViewDefinitionsSection viewDefinitionsSection = new ViewDefinitionsSection(); + internal FormatControlDefinitionHolder formatControlDefinitionHolder = new FormatControlDefinitionHolder(); /// @@ -49,10 +52,15 @@ internal sealed partial class TypeInfoDataBase internal sealed class DatabaseLoadingInfo { internal string fileDirectory = null; + internal string filePath = null; + internal bool isFullyTrusted = false; + internal bool isProductCode = false; + internal string xPath = null; + internal DateTime loadTime = DateTime.Now; } #endregion @@ -121,7 +129,9 @@ internal bool MultilineTables private bool? _multilineTables; internal FormatErrorPolicy formatErrorPolicy = new FormatErrorPolicy(); + internal ShapeSelectionDirectives shapeSelectionDirectives = new ShapeSelectionDirectives(); + internal List enumerableExpansionDirectiveList = new List(); } @@ -227,6 +237,7 @@ internal sealed class FormatShapeSelectionOnType : FormatShapeSelectionBase internal sealed class EnumerableExpansionDirective { internal EnumerableExpansion enumerableExpansion = EnumerableExpansion.EnumOnly; + internal AppliesTo appliesTo; } @@ -242,6 +253,7 @@ internal sealed class TypeGroupsSection internal sealed class TypeGroupDefinition { internal string name; + internal List typeReferenceList = new List(); } @@ -274,6 +286,7 @@ internal abstract class FormatToken internal sealed class TextToken : FormatToken { internal string text; + internal StringResourceReference resource; } @@ -331,6 +344,7 @@ internal ExpressionToken(string expressionValue, bool isScriptBlock) } internal bool isScriptBlock; + internal string expressionValue; } @@ -342,6 +356,7 @@ internal abstract class PropertyTokenBase : FormatToken internal ExpressionToken conditionToken = null; internal ExpressionToken expression = new ExpressionToken(); + internal bool enumerateCollection = false; } @@ -579,9 +594,13 @@ internal abstract class FormatDirective internal sealed class StringResourceReference { internal DatabaseLoadingInfo loadingInfo = null; + internal string assemblyName = null; + internal string assemblyLocation = null; + internal string baseName = null; + internal string resourceId = null; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs index d3290c18752..ca218f90f4e 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs @@ -325,6 +325,7 @@ public sealed class CustomItemText : CustomItemBase public sealed class CustomEntryBuilder { private readonly Stack> _entryStack; + private readonly CustomControlBuilder _controlBuilder; internal CustomEntryBuilder(CustomControlBuilder controlBuilder, CustomControlEntry entry) diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs index 6025acfff44..d48eacfc106 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs @@ -364,6 +364,7 @@ internal bool CompatibleWithOldPowerShell() public class ListEntryBuilder { private readonly ListControlBuilder _listBuilder; + internal ListControlEntry _listEntry; internal ListEntryBuilder(ListControlBuilder listBuilder, ListControlEntry listEntry) diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs index b9d1e897068..7219e1692ab 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs @@ -20,8 +20,11 @@ namespace Microsoft.PowerShell.Commands.Internal.Format internal static class TextAlignment { internal const int Undefined = 0; + internal const int Left = 1; + internal const int Center = 2; + internal const int Right = 3; } @@ -496,6 +499,7 @@ internal bool CompatibleWithOldPowerShell() public sealed class TableRowDefinitionBuilder { internal readonly TableControlBuilder _tcb; + internal readonly TableControlRow _tcr; internal TableRowDefinitionBuilder(TableControlBuilder tcb, TableControlRow tcr) diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs index 1892a87668b..8dc65d05cd1 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs @@ -135,6 +135,7 @@ private Assembly LoadAssemblyFromResourceReference(StringResourceReference resou private sealed class AssemblyLoadResult { internal Assembly a; + internal AssemblyBindingStatus status; } @@ -220,6 +221,7 @@ private Assembly ResolveAssemblyNameInLoadedAssemblies(string assemblyName, bool } private AssemblyNameResolver _assemblyNameResolver = new AssemblyNameResolver(); + private Hashtable _resourceReferenceToAssemblyCache = new Hashtable(); } } diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs index 985561670f8..96f83154b14 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs @@ -33,6 +33,7 @@ internal sealed class TypeInfoDataBaseManager internal object updateDatabaseLock = new object(); // this is used to throw errors when updating a shared TypeTable. internal bool isShared; + private List _formatFileList; internal bool DisableFormatTableUpdates { get; set; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs index 470832670a9..39c37e4d0ee 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs @@ -231,14 +231,19 @@ private bool MatchCondition(PSObject currentObject, PSPropertyExpression ex) } private PSPropertyExpressionFactory _expressionFactory; + private TypeInfoDataBase _db; + private Collection _typeNameHierarchy; + private bool _useInheritance; private int _bestMatchIndex = BestMatchIndexUndefined; + private TypeMatchItem _bestMatchItem; private const int BestMatchIndexUndefined = -1; + private const int BestMatchIndexPerfect = 0; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs index 79bcbd61dca..68dc3c4ece4 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs @@ -28,8 +28,11 @@ internal XmlFileLoadInfo(string dir, string path, ConcurrentBag errors, } internal string fileDirectory = null; + internal string filePath = null; + internal ConcurrentBag errors; + internal string psSnapinName; } @@ -53,100 +56,152 @@ private static class XmlTags { // top level entries in the XML document internal const string DefaultSettingsNode = "DefaultSettings"; + internal const string ConfigurationNode = "Configuration"; + internal const string SelectionSetsNode = "SelectionSets"; + internal const string ViewDefinitionsNode = "ViewDefinitions"; + internal const string ControlsNode = "Controls"; // default settings entries internal const string MultilineTablesNode = "WrapTables"; + internal const string PropertyCountForTableNode = "PropertyCountForTable"; + internal const string ShowErrorsAsMessagesNode = "ShowError"; + internal const string ShowErrorsInFormattedOutputNode = "DisplayError"; + internal const string EnumerableExpansionsNode = "EnumerableExpansions"; + internal const string EnumerableExpansionNode = "EnumerableExpansion"; + internal const string ExpandNode = "Expand"; // entries identifying the various control types definitions internal const string ControlNode = "Control"; + internal const string ComplexControlNameNode = "CustomControlName"; // selection sets (a.k.a. Type Groups) internal const string SelectionSetNode = "SelectionSet"; + internal const string SelectionSetNameNode = "SelectionSetName"; + internal const string SelectionConditionNode = "SelectionCondition"; + internal const string NameNode = "Name"; + internal const string TypesNode = "Types"; + internal const string TypeNameNode = "TypeName"; internal const string ViewNode = "View"; // entries identifying the various control types internal const string TableControlNode = "TableControl"; + internal const string ListControlNode = "ListControl"; + internal const string WideControlNode = "WideControl"; + internal const string ComplexControlNode = "CustomControl"; + internal const string FieldControlNode = "FieldControl"; // view specific tags internal const string ViewSelectedByNode = "ViewSelectedBy"; + internal const string GroupByNode = "GroupBy"; + internal const string OutOfBandNode = "OutOfBand"; // table specific tags internal const string HideTableHeadersNode = "HideTableHeaders"; + internal const string TableHeadersNode = "TableHeaders"; + internal const string TableColumnHeaderNode = "TableColumnHeader"; internal const string TableRowEntriesNode = "TableRowEntries"; + internal const string TableRowEntryNode = "TableRowEntry"; + internal const string MultiLineNode = "Wrap"; + internal const string TableColumnItemsNode = "TableColumnItems"; + internal const string TableColumnItemNode = "TableColumnItem"; + internal const string WidthNode = "Width"; // list specific tags internal const string ListEntriesNode = "ListEntries"; + internal const string ListEntryNode = "ListEntry"; + internal const string ListItemsNode = "ListItems"; + internal const string ListItemNode = "ListItem"; // wide specific tags internal const string ColumnNumberNode = "ColumnNumber"; + internal const string WideEntriesNode = "WideEntries"; + internal const string WideEntryNode = "WideEntry"; + internal const string WideItemNode = "WideItem"; // complex specific tags internal const string ComplexEntriesNode = "CustomEntries"; + internal const string ComplexEntryNode = "CustomEntry"; + internal const string ComplexItemNode = "CustomItem"; internal const string ExpressionBindingNode = "ExpressionBinding"; + internal const string NewLineNode = "NewLine"; + internal const string TextNode = "Text"; + internal const string FrameNode = "Frame"; + internal const string LeftIndentNode = "LeftIndent"; + internal const string RightIndentNode = "RightIndent"; + internal const string FirstLineIndentNode = "FirstLineIndent"; + internal const string FirstLineHangingNode = "FirstLineHanging"; internal const string EnumerateCollectionNode = "EnumerateCollection"; // general purpose tags internal const string AutoSizeNode = "AutoSize"; // valid only for table and wide + internal const string AlignmentNode = "Alignment"; + internal const string PropertyNameNode = "PropertyName"; + internal const string ScriptBlockNode = "ScriptBlock"; + internal const string FormatStringNode = "FormatString"; + internal const string LabelNode = "Label"; internal const string EntrySelectedByNode = "EntrySelectedBy"; + internal const string ItemSelectionConditionNode = "ItemSelectionCondition"; // attribute tags for resource strings internal const string AssemblyNameAttribute = "AssemblyName"; + internal const string BaseNameAttribute = "BaseName"; + internal const string ResourceIdAttribute = "ResourceId"; } @@ -156,10 +211,13 @@ private static class XmlTags private static class XMLStringValues { internal const string True = "TRUE"; + internal const string False = "FALSE"; internal const string AlignmentLeft = "left"; + internal const string AlignmentCenter = "center"; + internal const string AlignmentRight = "right"; } @@ -2036,7 +2094,9 @@ internal ExpressionToken GenerateExpressionToken() } private TypeInfoDataBaseLoader _loader; + private ExpressionToken _token; + private bool _fatalError = false; } @@ -2172,7 +2232,9 @@ internal bool ProcessExpressionDirectives(XmlNode containerNode, List u internal ExpressionToken Expression { get { return _expression; } } private string _formatString; + private TextToken _textToken; + private ExpressionToken _expression; private TypeInfoDataBaseLoader _loader; @@ -2228,6 +2290,7 @@ internal ControlBase Control } private ControlBase _control; + private TypeInfoDataBaseLoader _loader; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs index 0aaf16a9a28..f195a7c3229 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs @@ -19,18 +19,28 @@ internal class FormatMessagesContextManager { // callbacks declarations internal delegate OutputContext FormatContextCreationCallback(OutputContext parentContext, FormatInfoData formatData); + internal delegate void FormatStartCallback(OutputContext c); + internal delegate void FormatEndCallback(FormatEndData fe, OutputContext c); + internal delegate void GroupStartCallback(OutputContext c); + internal delegate void GroupEndCallback(GroupEndData fe, OutputContext c); + internal delegate void PayloadCallback(FormatEntryData formatEntryData, OutputContext c); // callback instances internal FormatContextCreationCallback contextCreation = null; + internal FormatStartCallback fs = null; + internal FormatEndCallback fe = null; + internal GroupStartCallback gs = null; + internal GroupEndCallback ge = null; + internal PayloadCallback payload = null; /// diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs index cf6a4d2eb88..71280e8e25a 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs @@ -338,7 +338,9 @@ protected bool RepeatHeader protected class DataBaseInfo { internal TypeInfoDataBase db = null; + internal ViewDefinition view = null; + internal AppliesTo applicableTypes = null; } @@ -351,6 +353,7 @@ protected class DataBaseInfo protected DataBaseInfo dataBaseInfo = new DataBaseInfo(); protected List activeAssociationList = null; + protected FormattingCommandLineParameters inputParameters = null; protected string GetExpressionDisplayValue(PSObject so, int enumerationLimit, PSPropertyExpression ex, diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs index c9cd80bbee8..c7d805eb9b4 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs @@ -384,11 +384,17 @@ private bool EvaluateDisplayCondition(PSObject so, ExpressionToken conditionToke } private TypeInfoDataBase _db; + private DatabaseLoadingInfo _loadingInfo; + private PSPropertyExpressionFactory _expressionFactory; + private List _controlDefinitionList; + private FormatErrorManager _errorManager; + private TerminatingErrorContext _errorContext; + private int _enumerationLimit; } @@ -413,6 +419,7 @@ internal TraversalInfo NextLevel } private int _level; + private int _maxDepth; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs index bb2c8ff93e7..36f8096ecda 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs @@ -16,6 +16,7 @@ namespace Microsoft.PowerShell.Commands internal class FormatXmlWriter { private XmlWriter _writer; + private bool _exportScriptBlock; private FormatXmlWriter() { } diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs index f4ac55d1feb..5813feb8dfd 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs @@ -148,7 +148,9 @@ internal sealed partial class FormatEntryData : PacketInfoData public FormatEntryInfo formatEntryInfo = null; public bool outOfBand = false; + public WriteStreamType writeStream = WriteStreamType.None; + internal bool isHelpObject = false; } #endregion @@ -187,7 +189,9 @@ public TableHeaderInfo() public override string ClassId2e4f51ef21dd47e99d3c952918aff9cd { get { return CLSID; } } public bool hideHeader; + public bool repeatHeader; + public List tableColumnInfoList; } @@ -205,7 +209,9 @@ internal sealed partial class TableColumnInfo : FormatInfoData public int width = 0; public int alignment = TextAlignment.Left; + public string label = null; + public string propertyName = null; } @@ -261,7 +267,9 @@ internal sealed partial class ListViewField : FormatInfoData public override string ClassId2e4f51ef21dd47e99d3c952918aff9cd { get { return CLSID; } } public string label = null; + public string propertyName = null; + public FormatPropertyField formatPropertyField = new FormatPropertyField(); } @@ -272,6 +280,7 @@ internal sealed partial class TableRowEntry : FormatEntryInfo public override string ClassId2e4f51ef21dd47e99d3c952918aff9cd { get { return CLSID; } } public List formatPropertyFieldList = new List(); + public bool multiLine = false; } @@ -357,6 +366,7 @@ internal sealed partial class FormatPropertyField : FormatValue public override string ClassId2e4f51ef21dd47e99d3c952918aff9cd { get { return CLSID; } } public string propertyValue = null; + public int alignment = TextAlignment.Undefined; } @@ -386,7 +396,9 @@ internal sealed partial class FrameInfo : FormatInfoData public override string ClassId2e4f51ef21dd47e99d3c952918aff9cd { get { return CLSID; } } public int leftIndentation = 0; + public int rightIndentation = 0; + public int firstLine = 0; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs b/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs index 1545f456e12..a2dbd5803b3 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs @@ -179,6 +179,7 @@ internal PacketInfoData Dequeue() /// A positive timespan: use all objects that have been processed within the timeframe. /// private TimeSpan _groupingDuration = TimeSpan.MinValue; + private Stopwatch _groupingTimer = null; /// diff --git a/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs index e01be6f5b8c..950e106a7bd 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs @@ -19,7 +19,9 @@ internal class TableWriter private class ColumnInfo { internal int startCol = 0; + internal int width = 0; + internal int alignment = TextAlignment.Left; } /// @@ -28,6 +30,7 @@ private class ColumnInfo private class ScreenInfo { internal int screenColumns = 0; + internal int screenRows = 0; internal const int separatorCharacterCount = 1; @@ -42,6 +45,7 @@ private class ScreenInfo private ScreenInfo _si; private const char ESC = '\u001b'; + private const string ResetConsoleVt100Code = "\u001b[m"; private List _header; diff --git a/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs b/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs index c890599cb1e..a76c0d7214c 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs @@ -542,6 +542,7 @@ internal sealed class PSPropertyExpressionError : FormattingError internal sealed class StringFormatError : FormattingError { internal string formatString; + internal Exception exception; } diff --git a/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs b/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs index bf3acfab2a1..38b8c524f25 100644 --- a/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs +++ b/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs @@ -358,6 +358,7 @@ private PSObject IfHashtableWrapAsPSCustomObject(PSObject target) // private members private string _stringValue; + private bool _isResolved = false; #endregion Private Members diff --git a/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs b/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs index b6cde18fb65..81af068fcdd 100644 --- a/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs +++ b/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs @@ -499,7 +499,9 @@ internal int ComputePromptLines(DisplayCells displayCells, int cols) internal enum PromptResponse { NextPage, + NextLine, + Quit } diff --git a/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs b/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs index e7afeda5e15..cb8f76154ce 100644 --- a/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs +++ b/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs @@ -163,6 +163,7 @@ protected override void InternalDispose() } private List _outVarResults = null; + private IDisposable _transcribeOnlyCookie = null; } diff --git a/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs b/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs index 23c7a09c4f2..bab10c12b47 100644 --- a/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs +++ b/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs @@ -24,6 +24,7 @@ private static ModuleBuilder CreateModuleBuilder() } private static Lazy s_moduleBuilder = new Lazy(CreateModuleBuilder, isThreadSafe: true); + private static object s_moduleBuilderUsageLock = new object(); internal static string GetEnumFullName(EnumMetadataEnum enumMetadata) diff --git a/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs b/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs index 3757319c9ab..b8818ffdb58 100644 --- a/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs +++ b/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs @@ -69,15 +69,22 @@ static ScriptWriter() internal enum GenerationOptions { TypesPs1Xml = 1, + FormatPs1Xml = 2, + HelpXml = 4, } private readonly PowerShellMetadata _cmdletizationMetadata; + private readonly string _moduleName; + private readonly Type _objectModelWrapper; + private readonly Type _objectInstanceType; + private readonly InvocationInfo _invocationInfo; + private readonly GenerationOptions _generationOptions; internal ScriptWriter( @@ -923,13 +930,17 @@ private static void EnsureOrderOfPositionalParameters( } private const string StaticCommonParameterSetTemplate = "{1}"; // "{0}::{1}"; + private const string StaticMethodParameterSetTemplate = "{0}"; // "{1}::{0}"; private const string InstanceCommonParameterSetTemplate = "{1}"; // "{0}::{1}::{2}"; + private const string InstanceQueryParameterSetTemplate = "{0}"; // "{1}::{0}::{2}"; + private const string InstanceMethodParameterSetTemplate = "{2}"; // "{1}::{2}::{0}"; private const string InputObjectQueryParameterSetName = "InputObject (cdxml)"; + private const string SingleQueryParameterSetName = "Query (cdxml)"; private static void MultiplyParameterSets( @@ -2167,8 +2178,11 @@ internal void WriteScriptModule(TextWriter output) #region PSModuleInfo internal const string PrivateDataKey_CmdletsOverObjects = "CmdletsOverObjects"; + internal const string PrivateDataKey_ClassName = "ClassName"; + internal const string PrivateDataKey_ObjectModelWrapper = "CmdletAdapter"; + internal const string PrivateDataKey_DefaultSession = "DefaultSession"; internal void PopulatePSModuleInfo(PSModuleInfo moduleInfo) diff --git a/src/System.Management.Automation/cimSupport/cmdletization/cim/WildcardPatternToCimQueryParser.cs b/src/System.Management.Automation/cimSupport/cmdletization/cim/WildcardPatternToCimQueryParser.cs index 4ce8a854487..f28afebaabc 100644 --- a/src/System.Management.Automation/cimSupport/cmdletization/cim/WildcardPatternToCimQueryParser.cs +++ b/src/System.Management.Automation/cimSupport/cmdletization/cim/WildcardPatternToCimQueryParser.cs @@ -21,6 +21,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim internal class WildcardPatternToCimQueryParser : WildcardPatternParser { private readonly StringBuilder _result = new StringBuilder(); + private bool _needClientSideFiltering; protected override void AppendLiteralCharacter(char c) diff --git a/src/System.Management.Automation/engine/Attributes.cs b/src/System.Management.Automation/engine/Attributes.cs index 99433b32d0f..3c7f4f18e03 100644 --- a/src/System.Management.Automation/engine/Attributes.cs +++ b/src/System.Management.Automation/engine/Attributes.cs @@ -591,7 +591,9 @@ public ParameterAttribute(string experimentName, ExperimentAction experimentActi private string _parameterSetName = ParameterAttribute.AllParameterSets; private string _helpMessage; + private string _helpMessageBaseName; + private string _helpMessageResourceId; #region Experimental Feature Related Properties @@ -607,6 +609,7 @@ public ParameterAttribute(string experimentName, ExperimentAction experimentActi public ExperimentAction ExperimentAction { get; } internal bool ToHide => EffectiveAction == ExperimentAction.Hide; + internal bool ToShow => EffectiveAction == ExperimentAction.Show; /// @@ -1532,6 +1535,7 @@ public abstract class CachedValidValuesGeneratorBase : IValidateSetValuesGenerat { // Cached valid values. private string[] _validValues; + private int _validValuesCacheExpiration; /// @@ -1592,6 +1596,7 @@ public sealed class ValidateSetAttribute : ValidateEnumeratedArgumentsAttribute // We can use either static '_validValues' or dynamic valid values list generated by instance // of 'validValuesGenerator'. private string[] _validValues; + private IValidateSetValuesGenerator validValuesGenerator = null; // The valid values generator cache works across 'ValidateSetAttribute' instances. diff --git a/src/System.Management.Automation/engine/COM/ComInvoker.cs b/src/System.Management.Automation/engine/COM/ComInvoker.cs index 3834be3de8e..60a9d88a054 100644 --- a/src/System.Management.Automation/engine/COM/ComInvoker.cs +++ b/src/System.Management.Automation/engine/COM/ComInvoker.cs @@ -321,13 +321,21 @@ internal static object Invoke(IDispatch target, int dispId, object[] args, bool[ internal struct EXCEPINFO { public short wCode; + public short wReserved; + public IntPtr bstrSource; + public IntPtr bstrDescription; + public IntPtr bstrHelpFile; + public int dwHelpContext; + public IntPtr pvReserved; + public IntPtr pfnDeferredFillIn; + public int scode; } @@ -370,6 +378,7 @@ internal struct TypeUnion internal struct Record { internal IntPtr _record; + internal IntPtr _recordInfo; } diff --git a/src/System.Management.Automation/engine/COM/ComMethod.cs b/src/System.Management.Automation/engine/COM/ComMethod.cs index 32552c6bd14..d16077601bc 100644 --- a/src/System.Management.Automation/engine/COM/ComMethod.cs +++ b/src/System.Management.Automation/engine/COM/ComMethod.cs @@ -13,7 +13,9 @@ namespace System.Management.Automation internal class ComMethodInformation : MethodInformation { internal readonly Type ReturnType; + internal readonly int DispId; + internal readonly COM.INVOKEKIND InvokeKind; internal ComMethodInformation(bool hasvarargs, bool hasoptional, ParameterInformation[] arguments, Type returnType, int dispId, COM.INVOKEKIND invokekind) @@ -31,6 +33,7 @@ internal ComMethodInformation(bool hasvarargs, bool hasoptional, ParameterInform internal class ComMethod { private Collection _methods = new Collection(); + private COM.ITypeInfo _typeInfo; /// diff --git a/src/System.Management.Automation/engine/COM/ComProperty.cs b/src/System.Management.Automation/engine/COM/ComProperty.cs index 2de108a872e..5a3043ebf5c 100644 --- a/src/System.Management.Automation/engine/COM/ComProperty.cs +++ b/src/System.Management.Automation/engine/COM/ComProperty.cs @@ -17,11 +17,17 @@ namespace System.Management.Automation internal class ComProperty { private bool _hasSetter = false; + private bool _hasSetterByRef = false; + private int _dispId; + private int _setterIndex; + private int _setterByRefIndex; + private int _getterIndex; + private COM.ITypeInfo _typeInfo; /// diff --git a/src/System.Management.Automation/engine/COM/ComTypeInfo.cs b/src/System.Management.Automation/engine/COM/ComTypeInfo.cs index 6a03f31c9ac..cfe75f414f1 100644 --- a/src/System.Management.Automation/engine/COM/ComTypeInfo.cs +++ b/src/System.Management.Automation/engine/COM/ComTypeInfo.cs @@ -31,8 +31,11 @@ internal class ComTypeInfo /// Member variables. /// private Dictionary _properties = null; + private Dictionary _methods = null; + private COM.ITypeInfo _typeinfo = null; + private Guid _guid = Guid.Empty; /// diff --git a/src/System.Management.Automation/engine/COM/ComUtil.cs b/src/System.Management.Automation/engine/COM/ComUtil.cs index 4d5a9964339..c876ce1e59d 100644 --- a/src/System.Management.Automation/engine/COM/ComUtil.cs +++ b/src/System.Management.Automation/engine/COM/ComUtil.cs @@ -372,6 +372,7 @@ internal static ComMethodInformation[] GetMethodInformationArray(COM.ITypeInfo t internal class ComEnumerator : IEnumerator { private COM.IEnumVARIANT _enumVariant; + private object[] _element; private ComEnumerator(COM.IEnumVARIANT enumVariant) diff --git a/src/System.Management.Automation/engine/ChildrenCmdletProviderInterfaces.cs b/src/System.Management.Automation/engine/ChildrenCmdletProviderInterfaces.cs index 85cff4c8efb..1c5b2a77f72 100644 --- a/src/System.Management.Automation/engine/ChildrenCmdletProviderInterfaces.cs +++ b/src/System.Management.Automation/engine/ChildrenCmdletProviderInterfaces.cs @@ -762,6 +762,7 @@ internal bool HasChild( #region private data private Cmdlet _cmdlet; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/CmdletParameterBinderController.cs b/src/System.Management.Automation/engine/CmdletParameterBinderController.cs index 069201589af..562c01c07d3 100644 --- a/src/System.Management.Automation/engine/CmdletParameterBinderController.cs +++ b/src/System.Management.Automation/engine/CmdletParameterBinderController.cs @@ -3728,8 +3728,11 @@ private bool BindValueFromPipelineByPropertyName( private enum CurrentlyBinding { ValueFromPipelineNoCoercion = 0, + ValueFromPipelineByPropertyNameNoCoercion = 1, + ValueFromPipelineWithCoercion = 2, + ValueFromPipelineByPropertyNameWithCoercion = 3 } @@ -3995,6 +3998,7 @@ internal object GetDefaultParameterValue(string name) // Hold all user defined default parameter values private Dictionary _allDefaultParameterValuePairs; + private bool _useDefaultParameterBinding = true; #endregion DefaultParameterBindingStructures @@ -4149,7 +4153,9 @@ private class DelayedScriptBlockArgument // Remember the parameter binder so we know when to invoke the script block // and when to use the evaluated argument. internal CmdletParameterBinderController _parameterBinder; + internal CommandParameterInternal _argument; + internal Collection _evaluatedArgument; public override string ToString() diff --git a/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs b/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs index 7af3fb62fb4..272a4350efe 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs @@ -708,6 +708,7 @@ private static List InvokeLegacyTabExpansion(PowerShell powers private static class PSv2CompletionCompleter { private static readonly Regex s_cmdletTabRegex = new Regex(@"^[\w\*\?]+-[\w\*\?]*"); + private static readonly char[] s_charsRequiringQuotedString = "`&@'#{}()$,;|<> \t".ToCharArray(); #region "Handle Command" @@ -743,6 +744,7 @@ private static bool PSv2IsCommandLikeCmdlet(string lastWord, out bool isSnapinSp private struct CommandAndName { internal readonly PSObject Command; + internal readonly PSSnapinQualifiedName CommandName; internal CommandAndName(PSObject command, PSSnapinQualifiedName commandName) @@ -1070,7 +1072,9 @@ private static bool PSv2ShouldFullyQualifyPathsPath(PowerShellExecutionHelper he private struct PathItemAndConvertedPath { internal readonly string Path; + internal readonly PSObject Item; + internal readonly string ConvertedPath; internal PathItemAndConvertedPath(string path, PSObject item, string convertedPath) @@ -1322,10 +1326,15 @@ private static bool IsWhitespace(char c) } private readonly string _sentence; + private char[] _wordBuffer; + private int _wordBufferIndex; + private int _replacementIndex; + private int _sentenceIndex; + private bool _sequenceDueToEnd; } diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs index 1a5f0989b8f..a409afe5ee7 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs @@ -19,18 +19,29 @@ internal class CompletionContext // This is how we can tell if we're trying to complete part of something (like a member) // or complete an argument, where TokenBeforeCursor could be a parameter name. internal Token TokenAtCursor { get; set; } + internal Token TokenBeforeCursor { get; set; } + internal IScriptPosition CursorPosition { get; set; } internal PowerShellExecutionHelper Helper { get; set; } + internal Hashtable Options { get; set; } + internal Dictionary CustomArgumentCompleters { get; set; } + internal Dictionary NativeArgumentCompleters { get; set; } + internal string WordToComplete { get; set; } + internal int ReplacementIndex { get; set; } + internal int ReplacementLength { get; set; } + internal ExecutionContext ExecutionContext { get; set; } + internal PseudoBindingInfo PseudoBindingInfo { get; set; } + internal TypeInferenceContext TypeInferenceContext { get; set; } internal bool GetOption(string option, bool @default) @@ -47,8 +58,11 @@ internal bool GetOption(string option, bool @default) internal class CompletionAnalysis { private readonly Ast _ast; + private readonly Token[] _tokens; + private readonly IScriptPosition _cursorPosition; + private readonly Hashtable _options; internal CompletionAnalysis(Ast ast, Token[] tokens, IScriptPosition cursorPosition, Hashtable options) diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs index e00302a1eb4..051b01b99dc 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs @@ -4089,7 +4089,9 @@ private static ArgumentLocation FindTargetArgumentLocation(Collection CompleteFilename(CompletionContext private struct SHARE_INFO_1 { public string netname; + public int type; + public string remark; } private const int MAX_PREFERRED_LENGTH = -1; + private const int NERR_Success = 0; + private const int ERROR_MORE_DATA = 234; + private const int STYPE_DISKTREE = 0; + private const int STYPE_MASK = 0x000000FF; private static System.IO.EnumerationOptions _enumerationOptions = new System.IO.EnumerationOptions @@ -4846,7 +4854,9 @@ private static void AddUniqueVariable(HashSet hashedResults, List> VariableSources = new List>(); public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst) @@ -5444,6 +5454,7 @@ private static bool IsConstructor(object member) private abstract class TypeCompletionBase { internal abstract CompletionResult GetCompletionResult(string keyMatched, string prefix, string suffix); + internal abstract CompletionResult GetCompletionResult(string keyMatched, string prefix, string suffix, string namespaceToRemove); internal static string RemoveBackTick(string typeName) @@ -5719,6 +5730,7 @@ private class TypeCompletionMapping { // The Key is the string we'll be searching on. It could complete to various things. internal string Key; + internal List Completions = new List(); } diff --git a/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs b/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs index d19a4b9bddb..20ad885229f 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs @@ -20,9 +20,13 @@ namespace System.Management.Automation.Language internal enum AstParameterArgumentType { AstPair = 0, + Switch = 1, + Fake = 2, + AstArray = 3, + PipeObject = 4 } @@ -795,6 +799,7 @@ internal StaticBindingError(CommandElementAst commandElement, ParameterBindingEx internal enum PseudoBindingInfoType { PseudoBindingFail = 0, + PseudoBindingSucceed = 1, } @@ -1114,28 +1119,45 @@ private void RestoreHost(ExecutionContext executionContext) // command ast related states private CommandAst _commandAst; + private ReadOnlyCollection _commandElements; // binding related states private bool _function = false; + private string _commandName = null; + private CommandInfo _commandInfo = null; + private uint _currentParameterSetFlag = uint.MaxValue; + private uint _defaultParameterSetFlag = 0; + private MergedCommandParameterMetadata _bindableParameters = null; + private Dictionary _boundParameters; + private Dictionary _boundArguments; + private Collection _arguments; + private Collection _boundPositionalParameter; + private List _unboundParameters; // tab expansion related states private Type _pipelineInputType = null; + private bool _bindingEffective = true; + private bool _isPipelineInputExpected = false; + private Collection _parametersNotFound; + private Collection _ambiguousParameters; + private Collection _duplicateParameters; + private Dictionary _bindingExceptions; /// diff --git a/src/System.Management.Automation/engine/CommandDiscovery.cs b/src/System.Management.Automation/engine/CommandDiscovery.cs index 4737fe18d78..0e6311479b1 100644 --- a/src/System.Management.Automation/engine/CommandDiscovery.cs +++ b/src/System.Management.Automation/engine/CommandDiscovery.cs @@ -1282,8 +1282,11 @@ internal void UnregisterLookupCommandInfoAction(string currentAction, string com } private HashSet _activePreLookup = new HashSet(StringComparer.OrdinalIgnoreCase); + private HashSet _activeModuleSearch = new HashSet(StringComparer.OrdinalIgnoreCase); + private HashSet _activeCommandNotFound = new HashSet(StringComparer.OrdinalIgnoreCase); + private HashSet _activePostCommand = new HashSet(StringComparer.OrdinalIgnoreCase); /// @@ -1429,8 +1432,11 @@ private static void InitPathExtCache(string pathExt) #region private members private static object s_lockObject = new object(); + private static string s_pathExtCacheKey; + private static string[] s_cachedPathExtCollection; + private static string[] s_cachedPathExtCollectionWithPs1; /// diff --git a/src/System.Management.Automation/engine/CommandInfo.cs b/src/System.Management.Automation/engine/CommandInfo.cs index 1090a3fbb86..b35b2349285 100644 --- a/src/System.Management.Automation/engine/CommandInfo.cs +++ b/src/System.Management.Automation/engine/CommandInfo.cs @@ -481,6 +481,7 @@ private MergedCommandParameterMetadata GetMergedCommandParameterMetadataSafely() private class GetMergedCommandParameterMetadataSafelyEventArgs : EventArgs { public MergedCommandParameterMetadata Result; + public ExceptionDispatchInfo Exception; } diff --git a/src/System.Management.Automation/engine/CommandMetadata.cs b/src/System.Management.Automation/engine/CommandMetadata.cs index edcd9a9cd66..56ba8916a2a 100644 --- a/src/System.Management.Automation/engine/CommandMetadata.cs +++ b/src/System.Management.Automation/engine/CommandMetadata.cs @@ -584,6 +584,7 @@ private set } private Dictionary _parameters; + private bool _shouldGenerateCommonParameters; /// diff --git a/src/System.Management.Automation/engine/CommandParameter.cs b/src/System.Management.Automation/engine/CommandParameter.cs index 0ee5f7855f1..1f30add1685 100644 --- a/src/System.Management.Automation/engine/CommandParameter.cs +++ b/src/System.Management.Automation/engine/CommandParameter.cs @@ -15,19 +15,25 @@ internal sealed class CommandParameterInternal private class Parameter { internal Ast ast; + internal string parameterName; + internal string parameterText; } private class Argument { internal Ast ast; + internal object value; + internal bool splatted; } private Parameter _parameter; + private Argument _argument; + private bool _spaceAfterParameter; internal bool SpaceAfterParameter { get { return _spaceAfterParameter; } } diff --git a/src/System.Management.Automation/engine/CommandPathSearch.cs b/src/System.Management.Automation/engine/CommandPathSearch.cs index 96c6c8c1953..6cbf2c4a2de 100644 --- a/src/System.Management.Automation/engine/CommandPathSearch.cs +++ b/src/System.Management.Automation/engine/CommandPathSearch.cs @@ -576,6 +576,7 @@ private void GetNewDirectoryResults(string pattern, string directory) private Func?> _postProcessEnumeratedFiles; private string[] _orderedPathExt; + private Collection? _acceptableCommandNames; private bool _useFuzzyMatch = false; diff --git a/src/System.Management.Automation/engine/CommandProcessorBase.cs b/src/System.Management.Automation/engine/CommandProcessorBase.cs index 87fd4606c9f..0b121344be2 100644 --- a/src/System.Management.Automation/engine/CommandProcessorBase.cs +++ b/src/System.Management.Automation/engine/CommandProcessorBase.cs @@ -377,6 +377,7 @@ internal void RestorePreviousScope() } private SessionStateScope _previousScope; + private SessionStateInternal _previousCommandSessionState; /// diff --git a/src/System.Management.Automation/engine/CommandSearcher.cs b/src/System.Management.Automation/engine/CommandSearcher.cs index d3a1033c932..ca507ab1cbe 100644 --- a/src/System.Management.Automation/engine/CommandSearcher.cs +++ b/src/System.Management.Automation/engine/CommandSearcher.cs @@ -1407,9 +1407,13 @@ private static bool IsQualifiedPSPath(string commandName) private enum CanDoPathLookupResult { Yes, + PathIsRooted, + WildcardCharacters, + DirectorySeparator, + IllegalCharacters } @@ -1673,6 +1677,7 @@ internal CommandOrigin CommandOrigin private CommandInfo? _currentMatch; private bool _canDoPathLookup; + private CanDoPathLookupResult _canDoPathLookupResult = CanDoPathLookupResult.Yes; /// @@ -1727,9 +1732,13 @@ private enum SearchState internal enum SearchResolutionOptions { None = 0x0, + ResolveAliasPatterns = 0x01, + ResolveFunctionPatterns = 0x02, + CommandNameIsPattern = 0x04, + SearchAllScopes = 0x08, /// Use fuzzy matching. diff --git a/src/System.Management.Automation/engine/CompiledCommandParameter.cs b/src/System.Management.Automation/engine/CompiledCommandParameter.cs index a9e85f43280..5449543e34c 100644 --- a/src/System.Management.Automation/engine/CompiledCommandParameter.cs +++ b/src/System.Management.Automation/engine/CompiledCommandParameter.cs @@ -575,8 +575,11 @@ public override string ToString() internal enum ParameterCollectionType { NotCollection, + IList, + Array, + ICollectionGeneric } diff --git a/src/System.Management.Automation/engine/ContentCmdletProviderInterfaces.cs b/src/System.Management.Automation/engine/ContentCmdletProviderInterfaces.cs index 382f6b7e46a..d2367341628 100644 --- a/src/System.Management.Automation/engine/ContentCmdletProviderInterfaces.cs +++ b/src/System.Management.Automation/engine/ContentCmdletProviderInterfaces.cs @@ -587,6 +587,7 @@ internal object ClearContentDynamicParameters(string path, CmdletProviderContext #region private data private Cmdlet _cmdlet; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/CoreAdapter.cs b/src/System.Management.Automation/engine/CoreAdapter.cs index 2fd5e1868c5..71734af1ce6 100644 --- a/src/System.Management.Automation/engine/CoreAdapter.cs +++ b/src/System.Management.Automation/engine/CoreAdapter.cs @@ -1180,8 +1180,11 @@ private static MethodBase GetGenericMethodDefinitionIfPossible(MethodBase method private class OverloadCandidate { internal MethodInformation method; + internal ParameterInformation[] parameters; + internal ParameterInformation[] expandedParameters; + internal ConversionRank[] conversionRanks; internal OverloadCandidate(MethodInformation method, int argCount) @@ -2014,6 +2017,7 @@ internal class CacheTable /// . /// internal Collection memberCollection; + private Dictionary _indexes; internal CacheTable() @@ -2079,6 +2083,7 @@ internal object GetFirstOrDefault(MemberNamePredicate predicate) internal class MethodInformation { internal MethodBase method; + private string _cachedMethodDefinition; internal string methodDefinition @@ -2097,8 +2102,11 @@ internal string methodDefinition } internal ParameterInformation[] parameters; + internal bool hasVarArgs; + internal bool hasOptional; + internal bool isGeneric; private bool _useReflection; @@ -2518,9 +2526,13 @@ private MethodInvoker GetMethodInvoker(MethodInfo method) internal class ParameterInformation { internal Type parameterType; + internal object defaultValue; + internal bool isOptional; + internal bool isByRef; + internal bool isParamArray; internal ParameterInformation(System.Reflection.ParameterInfo parameter) @@ -2669,10 +2681,15 @@ internal EventCacheEntry(EventInfo[] events) internal class ParameterizedPropertyCacheEntry : CacheEntry { internal MethodInformation[] getterInformation; + internal MethodInformation[] setterInformation; + internal string propertyName; + internal bool readOnly; + internal bool writeOnly; + internal Type propertyType; // propertyDefinition is used as a string representation of the property internal string[] propertyDefinition; @@ -2748,6 +2765,7 @@ internal ParameterizedPropertyCacheEntry(List properties) internal class PropertyCacheEntry : CacheEntry { internal delegate object GetterDelegate(object instance); + internal delegate void SetterDelegate(object instance, object setValue); internal PropertyCacheEntry(PropertyInfo property) @@ -2980,9 +2998,13 @@ internal SetterDelegate setterDelegate private SetterDelegate _setterDelegate; internal bool useReflection; + internal bool readOnly; + internal bool writeOnly; + internal bool isStatic; + internal Type propertyType; private bool? _isHidden; diff --git a/src/System.Management.Automation/engine/Credential.cs b/src/System.Management.Automation/engine/Credential.cs index 6b9c4be8d4d..a7a379c6684 100644 --- a/src/System.Management.Automation/engine/Credential.cs +++ b/src/System.Management.Automation/engine/Credential.cs @@ -178,6 +178,7 @@ private PSCredential(SerializationInfo info, StreamingContext context) } private string _userName; + private SecureString _password; /// diff --git a/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs b/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs index f1e798c0edf..91d3886df9d 100644 --- a/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs +++ b/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs @@ -37,6 +37,7 @@ public class ProviderInfo private SessionState _sessionState; private string _fullName; + private string _cachedModuleName; /// @@ -194,6 +195,7 @@ public Provider.ProviderCapabilities Capabilities } private ProviderCapabilities _capabilities = ProviderCapabilities.None; + private bool _capabilitiesRead; /// diff --git a/src/System.Management.Automation/engine/DscResourceSearcher.cs b/src/System.Management.Automation/engine/DscResourceSearcher.cs index 8bb4f5bd267..04a2ff0087e 100644 --- a/src/System.Management.Automation/engine/DscResourceSearcher.cs +++ b/src/System.Management.Automation/engine/DscResourceSearcher.cs @@ -28,9 +28,13 @@ internal DscResourceSearcher( #region private properties private string _resourceName = null; + private ExecutionContext _context = null; + private DscResourceInfo _currentMatch = null; + private IEnumerator _matchingResource = null; + private Collection _matchingResourceList = null; #endregion diff --git a/src/System.Management.Automation/engine/EngineIntrinsics.cs b/src/System.Management.Automation/engine/EngineIntrinsics.cs index d0bc7a2f100..307c24c1bb2 100644 --- a/src/System.Management.Automation/engine/EngineIntrinsics.cs +++ b/src/System.Management.Automation/engine/EngineIntrinsics.cs @@ -109,7 +109,9 @@ public CommandInvocationIntrinsics InvokeCommand #region private data private ExecutionContext _context; + private PSHost _host; + private CommandInvocationIntrinsics _invokeCommand; #endregion private data } diff --git a/src/System.Management.Automation/engine/EnumExpressionEvaluator.cs b/src/System.Management.Automation/engine/EnumExpressionEvaluator.cs index 092500c0af7..1f2d76ca0c9 100644 --- a/src/System.Management.Automation/engine/EnumExpressionEvaluator.cs +++ b/src/System.Management.Automation/engine/EnumExpressionEvaluator.cs @@ -105,8 +105,11 @@ public FlagsExpression(object[] expression) internal enum TokenKind { Identifier, + And, + Or, + Not } @@ -157,6 +160,7 @@ internal abstract class Node public Node Operand1 { get; set; } internal abstract bool Eval(object val); + internal abstract bool ExistEnum(object enumVal); } diff --git a/src/System.Management.Automation/engine/ErrorPackage.cs b/src/System.Management.Automation/engine/ErrorPackage.cs index fc346e2ee96..17747b48093 100644 --- a/src/System.Management.Automation/engine/ErrorPackage.cs +++ b/src/System.Management.Automation/engine/ErrorPackage.cs @@ -1640,9 +1640,13 @@ internal bool SerializeExtendedInfo #region Exposed by ErrorCategoryInfo internal ErrorCategory _category; + internal string _activityOverride; + internal string _reasonOverride; + internal string _targetNameOverride; + internal string _targetTypeOverride; #endregion Exposed by ErrorCategoryInfo diff --git a/src/System.Management.Automation/engine/EventManager.cs b/src/System.Management.Automation/engine/EventManager.cs index a962f745eac..cfe4ee26085 100644 --- a/src/System.Management.Automation/engine/EventManager.cs +++ b/src/System.Management.Automation/engine/EventManager.cs @@ -332,16 +332,24 @@ internal PSLocalEventManager(ExecutionContext context) } private Dictionary _eventSubscribers; + private Dictionary> _engineEventSubscribers; + private Queue _actionQueue; + private ExecutionContext _context; + private int _nextSubscriptionId = 1; + private double _throttleLimit = 1; + private int _throttleChecks = 0; // The assembly and module to hold our event registrations private AssemblyBuilder _eventAssembly = null; + private ModuleBuilder _eventModule = null; + private int _typeId = 0; /// @@ -554,7 +562,9 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName #region OnIdleProcessing private Timer _timer = null; + private bool _timerInitialized = false; + private bool _isTimerActive = false; /// /// We sample every 100ms to check if the engine is idle (currentlyRunningPipeline == null). If it's "idle" @@ -1169,6 +1179,7 @@ private void AutoUnregisterEventIfNecessary(PSEventSubscriber subscriber) } private object _actionProcessingLock = new object(); + private EventAction _processingAction = null; /// @@ -2492,7 +2503,9 @@ public PSEventJob(PSEventManager eventManager, PSEventSubscriber subscriber, Scr } private PSEventManager _eventManager = null; + private PSEventSubscriber _subscriber = null; + private int _highestErrorIndex = 0; /// diff --git a/src/System.Management.Automation/engine/ExecutionContext.cs b/src/System.Management.Automation/engine/ExecutionContext.cs index 98f0b3deb5a..5dda13f0539 100644 --- a/src/System.Management.Automation/engine/ExecutionContext.cs +++ b/src/System.Management.Automation/engine/ExecutionContext.cs @@ -679,6 +679,7 @@ internal HelpSystem HelpSystem #endregion internal Dictionary CustomArgumentCompleters { get; set; } + internal Dictionary NativeArgumentCompleters { get; set; } /// @@ -773,7 +774,9 @@ internal EngineIntrinsics EngineIntrinsics internal class SavedContextData { private bool _stepScript; + private bool _ignoreScriptDebug; + private int _PSDebug; private Pipe _shellFunctionErrorOutputPipe; @@ -1263,6 +1266,7 @@ internal WeakReference TypeTableWeakReference } private TypeTable _typeTable; + private WeakReference _typeTableWeakReference; /// diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs index f6993a03a0a..06ddc17c2a2 100644 --- a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs +++ b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs @@ -356,6 +356,7 @@ internal static void ValidateArguments(string experimentName, ExperimentAction e } internal bool ToHide => EffectiveAction == ExperimentAction.Hide; + internal bool ToShow => EffectiveAction == ExperimentAction.Show; /// diff --git a/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs b/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs index 542ad8bbf7e..314fed13c34 100644 --- a/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs +++ b/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs @@ -76,9 +76,13 @@ protected ExtendedTypeSystemException(SerializationInfo info, StreamingContext c public class MethodException : ExtendedTypeSystemException { internal const string MethodArgumentCountExceptionMsg = "MethodArgumentCountException"; + internal const string MethodAmbiguousExceptionMsg = "MethodAmbiguousException"; + internal const string MethodArgumentConversionExceptionMsg = "MethodArgumentConversionException"; + internal const string NonRefArgumentToRefParameterMsg = "NonRefArgumentToRefParameter"; + internal const string RefArgumentToNonRefParameterMsg = "RefArgumentToNonRefParameter"; #region ctor @@ -143,7 +147,9 @@ protected MethodException(SerializationInfo info, StreamingContext context) public class MethodInvocationException : MethodException { internal const string MethodInvocationExceptionMsg = "MethodInvocationException"; + internal const string CopyToInvocationExceptionMsg = "CopyToInvocationException"; + internal const string WMIMethodInvocationException = "WMIMethodInvocationException"; #region ctor @@ -208,6 +214,7 @@ protected MethodInvocationException(SerializationInfo info, StreamingContext con public class GetValueException : ExtendedTypeSystemException { internal const string GetWithoutGetterExceptionMsg = "GetWithoutGetterException"; + internal const string WriteOnlyProperty = "WriteOnlyProperty"; #region ctor /// @@ -605,6 +612,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "PSInvalidCastException"; } } diff --git a/src/System.Management.Automation/engine/ExternalScriptInfo.cs b/src/System.Management.Automation/engine/ExternalScriptInfo.cs index d87e3027f2e..a7d6fb0ec5d 100644 --- a/src/System.Management.Automation/engine/ExternalScriptInfo.cs +++ b/src/System.Management.Automation/engine/ExternalScriptInfo.cs @@ -232,6 +232,7 @@ private set } private ScriptBlock _scriptBlock; + private ScriptBlockAst _scriptBlockAst; private static ScriptBlock ParseScriptContents(Parser parser, string fileName, string fileContents, PSLanguageMode? definingLanguageMode) diff --git a/src/System.Management.Automation/engine/GetCommandCommand.cs b/src/System.Management.Automation/engine/GetCommandCommand.cs index eef50f29a24..ccf603c18ff 100644 --- a/src/System.Management.Automation/engine/GetCommandCommand.cs +++ b/src/System.Management.Automation/engine/GetCommandCommand.cs @@ -65,6 +65,7 @@ public string[] Name } private string[] _names; + private bool _nameContainsWildcard; /// @@ -145,6 +146,7 @@ public string[] Module } private string[] _modules = Array.Empty(); + private bool _isModuleSpecified = false; /// @@ -170,6 +172,7 @@ public ModuleSpecification[] FullyQualifiedModule } private ModuleSpecification[] _moduleSpecifications = Array.Empty(); + private bool _isFullyQualifiedModuleSpecified = false; /// @@ -192,6 +195,7 @@ public CommandTypes CommandType } private CommandTypes _commandType = CommandTypes.All; + private bool _isCommandTypeSpecified = false; /// @@ -297,7 +301,9 @@ public string[] ParameterName } private Collection _parameterNameWildcards; + private string[] _parameterNames; + private HashSet _matchedParameterNames; /// @@ -1520,7 +1526,9 @@ private bool IsCommandInResult(CommandInfo command) // These members are the collection of wildcard patterns for the "CmdletSet" private Collection _verbPatterns; + private Collection _nounPatterns; + private Collection _modulePatterns; #if LEGACYTELEMETRY diff --git a/src/System.Management.Automation/engine/InitialSessionState.cs b/src/System.Management.Automation/engine/InitialSessionState.cs index 0d2e1274aa6..3c7aae16d2a 100644 --- a/src/System.Management.Automation/engine/InitialSessionState.cs +++ b/src/System.Management.Automation/engine/InitialSessionState.cs @@ -1790,6 +1790,7 @@ public Microsoft.PowerShell.ExecutionPolicy ExecutionPolicy } private Microsoft.PowerShell.ExecutionPolicy _executionPolicy = Microsoft.PowerShell.ExecutionPolicy.Default; + private bool _wasExecutionPolicySet = false; /// @@ -4095,6 +4096,7 @@ internal void ImportCmdletsFromAssembly(Assembly assembly, PSModuleInfo module) // Now define a bunch of functions that describe the rest of the default session state... internal const string FormatEnumerationLimit = "FormatEnumerationLimit"; + internal const int DefaultFormatEnumerationLimit = 4; /// @@ -4425,14 +4427,21 @@ .ForwardHelpCategory Cmdlet } internal const ActionPreference DefaultDebugPreference = ActionPreference.SilentlyContinue; + internal const ActionPreference DefaultErrorActionPreference = ActionPreference.Continue; + internal const ActionPreference DefaultProgressPreference = ActionPreference.Continue; + internal const ActionPreference DefaultVerbosePreference = ActionPreference.SilentlyContinue; + internal const ActionPreference DefaultWarningPreference = ActionPreference.Continue; + internal const ActionPreference DefaultInformationPreference = ActionPreference.SilentlyContinue; internal const ErrorView DefaultErrorView = ErrorView.ConciseView; + internal const bool DefaultWhatIfPreference = false; + internal const ConfirmImpact DefaultConfirmPreference = ConfirmImpact.High; internal static readonly SessionStateVariableEntry[] BuiltInVariables = new SessionStateVariableEntry[] @@ -4844,7 +4853,9 @@ internal static void RemoveAllDrivesForProvider(ProviderInfo pi, SessionStateInt private static PSTraceSource s_PSSnapInTracer = PSTraceSource.GetTracer("PSSnapInLoadUnload", "Loading and unloading mshsnapins", false); internal static readonly string CoreSnapin = "Microsoft.PowerShell.Core"; + internal static readonly string CoreModule = "Microsoft.PowerShell.Core"; + internal Collection defaultSnapins = new Collection(); // The list of engine modules to create warnings when you try to remove them diff --git a/src/System.Management.Automation/engine/InternalCommands.cs b/src/System.Management.Automation/engine/InternalCommands.cs index 7c37cc4f0eb..4c39ac82a74 100644 --- a/src/System.Management.Automation/engine/InternalCommands.cs +++ b/src/System.Management.Automation/engine/InternalCommands.cs @@ -65,7 +65,9 @@ public sealed class ForEachObjectCommand : PSCmdlet, IDisposable #region Private Members private const string ParallelParameterSet = "ParallelParameterSet"; + private const string ScriptBlockSet = "ScriptBlockSet"; + private const string PropertyAndMethodSet = "PropertyAndMethodSet"; #endregion @@ -137,6 +139,7 @@ public ScriptBlock[] Process } private ScriptBlock _endScript; + private bool _setEndScript; /// @@ -209,7 +212,9 @@ public string MemberName } private string _propertyOrMethodName; + private string _targetString; + private DynamicPropertyGetter _propGetter; /// @@ -373,12 +378,19 @@ public void Dispose() #region PSTasks private PSTaskPool _taskPool; + private PSTaskDataStreamWriter _taskDataStreamWriter; + private Dictionary _usingValuesMap; + private Timer _taskTimer; + private PSTaskJob _taskJob; + private PSDataCollection _taskCollection; + private Exception _taskCollectionException; + private string _currentLocationPath; private void InitParallelParameterSet() @@ -1358,7 +1370,9 @@ public string Property } private object _convertedValue; + private object _value = true; + private bool _valueNotSpecified = true; /// diff --git a/src/System.Management.Automation/engine/InvocationInfo.cs b/src/System.Management.Automation/engine/InvocationInfo.cs index 1871ae3c9cd..927d97556ac 100644 --- a/src/System.Management.Automation/engine/InvocationInfo.cs +++ b/src/System.Management.Automation/engine/InvocationInfo.cs @@ -179,8 +179,11 @@ internal InvocationInfo(PSObject psObject) #region Private Data private IScriptExtent _scriptPosition; + private string _invocationName; + private Dictionary _boundParameters; + private List _unboundArguments; #endregion Internal or Private diff --git a/src/System.Management.Automation/engine/ItemCmdletProviderInterfaces.cs b/src/System.Management.Automation/engine/ItemCmdletProviderInterfaces.cs index 699d60dafa0..9eb72f3d698 100644 --- a/src/System.Management.Automation/engine/ItemCmdletProviderInterfaces.cs +++ b/src/System.Management.Automation/engine/ItemCmdletProviderInterfaces.cs @@ -2083,6 +2083,7 @@ internal bool IsContainer( #region private data private Cmdlet _cmdlet; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/LanguagePrimitives.cs b/src/System.Management.Automation/engine/LanguagePrimitives.cs index d4681be1a7b..096414829af 100644 --- a/src/System.Management.Automation/engine/LanguagePrimitives.cs +++ b/src/System.Management.Automation/engine/LanguagePrimitives.cs @@ -252,41 +252,77 @@ public override object ConvertTo(object sourceValue, Type destinationType, IForm internal enum ConversionRank { None = 0x0000, + UnrelatedArraysS2A = 0x0007, + UnrelatedArrays = 0x000F, + ToStringS2A = 0x0017, + ToString = 0x001F, + CustomS2A = 0x0027, + Custom = 0x002F, + IConvertibleS2A = 0x0037, + IConvertible = 0x003F, + ImplicitCastS2A = 0x0047, + ImplicitCast = 0x004F, + ExplicitCastS2A = 0x0057, + ExplicitCast = 0x005F, + ConstructorS2A = 0x0067, + Constructor = 0x006F, + Create = 0x0073, + ParseS2A = 0x0077, + Parse = 0x007F, + PSObjectS2A = 0x0087, + PSObject = 0x008F, + LanguageS2A = 0x0097, + Language = 0x009F, + NullToValue = 0x00AF, + NullToRef = 0x00BF, + NumericExplicitS2A = 0x00C7, + NumericExplicit = 0x00CF, + NumericExplicit1S2A = 0x00D7, + NumericExplicit1 = 0x00DF, + NumericStringS2A = 0x00E7, + NumericString = 0x00EF, + NumericImplicitS2A = 0x00F7, + NumericImplicit = 0x00FF, + AssignableS2A = 0x0107, + Assignable = 0x010F, + IdentityS2A = 0x0117, + StringToCharArray = 0x011A, + Identity = 0x011F, ValueDependent = 0xFFF7, @@ -306,7 +342,9 @@ public static class LanguagePrimitives internal delegate void MemberSetValueError(SetValueException e); internal const string OrderedAttribute = "ordered"; + internal const string DoublePrecision = "G15"; + internal const string SinglePrecision = "G7"; internal static void CreateMemberNotFoundError(PSObject pso, DictionaryEntry property, Type resultType) @@ -365,7 +403,9 @@ internal static void UpdateTypeConvertFromTypeTable(string typeName) private class EnumerableTWrapper : IEnumerable { private object _enumerable; + private Type _enumerableType; + private DynamicMethod _getEnumerator; internal EnumerableTWrapper(object enumerable, Type enumerableType) @@ -1231,13 +1271,19 @@ internal static T FromObjectAs(object castObject) private enum TypeCodeTraits { None = 0x00, + SignedInteger = 0x01, + UnsignedInteger = 0x02, + Floating = 0x04, + CimIntrinsicType = 0x08, + Decimal = 0x10, Integer = SignedInteger | UnsignedInteger, + Numeric = Integer | Floating | Decimal, } @@ -1424,6 +1470,7 @@ internal static void DoConversionsForSetInGenericDictionary(IDictionary dictiona #region type converter internal static readonly PSTraceSource typeConversion = PSTraceSource.GetTracer("TypeConversion", "Traces the type conversion algorithm", false); + internal static readonly ConversionData NoConversion = new ConversionData(ConvertNoConversion, ConversionRank.None); private static TypeConverter GetIntegerSystemConverter(Type type) @@ -1914,9 +1961,13 @@ internal EnumHashEntry(string[] names, Array values, UInt64 allValues, bool hasN } internal string[] names; + internal Array values; + internal UInt64 allValues; + internal bool hasNegativeValue; + internal bool hasFlagsAttribute; } @@ -3825,9 +3876,11 @@ internal object Convert(object valueToConvert, private class ConvertViaIEnumerableConstructor { internal Func ListCtorLambda; + internal Func TargetCtorLambda; internal Type ElementType; + internal bool IsScalar; internal object Convert(object valueToConvert, @@ -4101,6 +4154,7 @@ private static object ConvertNumericIConvertible(object valueToConvert, private class ConvertCheckingForCustomConverter { internal PSConverter tryfirstConverter; + internal PSConverter fallbackConverter; internal object Convert(object valueToConvert, @@ -4272,6 +4326,7 @@ private static object ConvertNotSupportedConversion(object valueToConvert, private struct ConversionTypePair { internal Type from; + internal Type to; internal ConversionTypePair(Type fromType, Type toType) @@ -4401,6 +4456,7 @@ internal static ConversionRank GetConversionRank(Type fromType, Type toType) // Do not reorder the elements of these arrays, we depend on them being ordered by increasing size. private static Type[] s_signedIntegerTypes = new Type[] { typeof(sbyte), typeof(Int16), typeof(Int32), typeof(Int64) }; + private static Type[] s_unsignedIntegerTypes = new Type[] { typeof(byte), typeof(UInt16), typeof(UInt32), typeof(UInt64) }; private static Type[] s_realTypes = new Type[] { typeof(Single), typeof(double), typeof(decimal) }; @@ -5064,11 +5120,14 @@ private struct SignatureComparator private enum TypeMatchingContext { ReturnType, + ParameterType, + OutParameterType } private readonly ParameterInfo[] targetParameters; + private readonly Type targetReturnType; internal SignatureComparator(MethodInfo targetMethodInfo) diff --git a/src/System.Management.Automation/engine/MinishellParameterBinderController.cs b/src/System.Management.Automation/engine/MinishellParameterBinderController.cs index a85b462abb9..b053a128fb1 100644 --- a/src/System.Management.Automation/engine/MinishellParameterBinderController.cs +++ b/src/System.Management.Automation/engine/MinishellParameterBinderController.cs @@ -256,21 +256,32 @@ internal Collection BindParameters(Collection s_emptyReturnCollection = new Collection(); internal const string CommandParameter = "command"; + internal const string EncodedCommandParameter = "encodedCommand"; + internal const string ArgsParameter = "args"; + internal const string EncodedArgsParameter = "encodedarguments"; + internal const string InputFormatParameter = "inputFormat"; + internal const string OutputFormatParameter = "outputFormat"; + internal const string XmlFormatValue = "xml"; + internal const string TextFormatValue = "text"; + internal const string NonInteractiveParameter = "noninteractive"; [Flags] private enum MinishellParameters { Command = 0x01, + Arguments = 0x02, + InputFormat = 0x04, + OutputFormat = 0x08 }; diff --git a/src/System.Management.Automation/engine/Modules/AnalysisCache.cs b/src/System.Management.Automation/engine/Modules/AnalysisCache.cs index 4baa7cc6bfa..97ef8ce7a07 100644 --- a/src/System.Management.Automation/engine/Modules/AnalysisCache.cs +++ b/src/System.Management.Automation/engine/Modules/AnalysisCache.cs @@ -877,7 +877,9 @@ private void Serialize(string filename) } private const string TruncatedErrorMessage = "module cache file appears truncated"; + private const string InvalidSignatureErrorMessage = "module cache signature not valid"; + private const string PossibleCorruptionErrorMessage = "possible corruption in module cache"; private static unsafe long ReadLong(FileStream stream, byte[] bytes) @@ -1129,9 +1131,13 @@ static AnalysisCacheData() internal class ModuleCacheEntry { public DateTime LastWriteTime; + public string ModulePath; + public bool TypesAnalyzed; + public ConcurrentDictionary Commands; + public ConcurrentDictionary Types; } } diff --git a/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs b/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs index 7dc91d76776..923a82ec641 100644 --- a/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs +++ b/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs @@ -47,6 +47,7 @@ public string[] Function } private string[] _functionList; + private List _functionPatterns; /// @@ -76,6 +77,7 @@ public string[] Cmdlet } private string[] _cmdletList; + private List _cmdletPatterns; /// @@ -105,6 +107,7 @@ public string[] Variable } private string[] _variableExportList; + private List _variablePatterns; /// @@ -134,6 +137,7 @@ public string[] Alias } private string[] _aliasExportList; + private List _aliasPatterns; /// diff --git a/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs b/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs index bfecce83e4e..c7f93f34462 100644 --- a/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs +++ b/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs @@ -35,8 +35,11 @@ public sealed class GetModuleCommand : ModuleCmdletBase, IDisposable #region Cmdlet parameters private const string ParameterSet_Loaded = "Loaded"; + private const string ParameterSet_AvailableLocally = "Available"; + private const string ParameterSet_AvailableInPsrpSession = "PsSession"; + private const string ParameterSet_AvailableInCimSession = "CimSession"; /// diff --git a/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs b/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs index 1521edfc702..f1c4ec96a03 100644 --- a/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs +++ b/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs @@ -46,14 +46,21 @@ public sealed class ImportModuleCommand : ModuleCmdletBase, IDisposable #region Cmdlet parameters private const string ParameterSet_Name = "Name"; + private const string ParameterSet_FQName = "FullyQualifiedName"; + private const string ParameterSet_ModuleInfo = "ModuleInfo"; + private const string ParameterSet_Assembly = "Assembly"; private const string ParameterSet_ViaPsrpSession = "PSSession"; + private const string ParameterSet_ViaCimSession = "CimSession"; + private const string ParameterSet_FQName_ViaPsrpSession = "FullyQualifiedNameAndPSSession"; + private const string ParameterSet_ViaWinCompat = "WinCompat"; + private const string ParameterSet_FQName_ViaWinCompat = "FullyQualifiedNameAndWinCompat"; /// @@ -385,6 +392,7 @@ public string Scope } private string _scope = string.Empty; + private bool _isScopeSpecified = false; /// diff --git a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs index 8e2e9c519ef..66273fde1d2 100644 --- a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs +++ b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs @@ -4419,7 +4419,9 @@ private bool GetListOfFilesFromData( internal enum ModuleLoggingGroupPolicyStatus { Undefined = 0x00, + Enabled = 0x01, + Disabled = 0x02, } diff --git a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs index b825a54fbab..1b1278bfbce 100644 --- a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs +++ b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs @@ -27,6 +27,7 @@ internal static class ModuleUtils new System.IO.EnumerationOptions() { AttributesToSkip = FileAttributes.Hidden, BufferSize = 16384 }; private static readonly string EnCulturePath = Path.DirectorySeparatorChar + "en"; + private static readonly string EnUsCulturePath = Path.DirectorySeparatorChar + "en-us"; /// @@ -612,6 +613,7 @@ public CommandScore(CommandInfo command, int score) } public CommandInfo Command; + public int Score; } } diff --git a/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs b/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs index 15e2495e4fd..25750293009 100644 --- a/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs +++ b/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs @@ -523,12 +523,17 @@ public Version DotNetFrameworkVersion } internal Collection DeclaredFunctionExports = null; + internal Collection DeclaredCmdletExports = null; + internal Collection DeclaredAliasExports = null; + internal Collection DeclaredVariableExports = null; internal List DetectedFunctionExports = new List(); + internal List DetectedCmdletExports = new List(); + internal Dictionary DetectedAliasExports = new Dictionary(); /// diff --git a/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs b/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs index 4a1c50186eb..528282f3a09 100644 --- a/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs +++ b/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs @@ -498,8 +498,11 @@ internal static IEnumerable InvokePowerShell( #region CIM private const string DiscoveryProviderNamespace = "root/Microsoft/Windows/Powershellv3"; + private const string DiscoveryProviderModuleClass = "PS_Module"; + private const string DiscoveryProviderFileClass = "PS_ModuleFile"; + private const string DiscoveryProviderAssociationClass = "PS_ModuleToModuleFile"; private static T GetPropertyValue(CimInstance cimInstance, string propertyName, T defaultValue) @@ -553,9 +556,13 @@ private static T GetPropertyValue(CimInstance cimInstance, string propertyNam internal enum CimFileCode { Unknown = 0, + PsdV1, + TypesV1, + FormatV1, + CmdletizationV1, } @@ -644,6 +651,7 @@ public string ModuleName private enum DiscoveredModuleType : ushort { Unknown = 0, + Cim = 1, } diff --git a/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs b/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs index 6ec64a4cf0f..41668328849 100644 --- a/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs +++ b/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs @@ -105,10 +105,15 @@ internal static string ReadScript(string path) } internal List DiscoveredExports { get; set; } + internal Dictionary DiscoveredAliases { get; set; } + internal List DiscoveredModules { get; set; } + internal List DiscoveredCommandFilters { get; set; } + internal bool AddsSelfToPath { get; set; } + internal List DiscoveredClasses { get; set; } } @@ -160,11 +165,17 @@ static ExportVisitor() private readonly bool _forCompletion; internal List DiscoveredExports { get; set; } + internal List DiscoveredModules { get; set; } + internal Dictionary DiscoveredFunctions { get; set; } + internal Dictionary DiscoveredAliases { get; set; } + internal List DiscoveredCommandFilters { get; set; } + internal bool AddsSelfToPath { get; set; } + internal List DiscoveredClasses { get; set; } public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) @@ -557,6 +568,7 @@ private class ParameterBindingInfo private struct ParameterInfo { internal string name; + internal int position; } } @@ -567,6 +579,7 @@ private struct ParameterInfo internal class RequiredModuleInfo { internal string Name { get; set; } + internal List CommandsToPostFilter { get; set; } } } diff --git a/src/System.Management.Automation/engine/MshCmdlet.cs b/src/System.Management.Automation/engine/MshCmdlet.cs index d6c8d941a04..b5b12ca6669 100644 --- a/src/System.Management.Automation/engine/MshCmdlet.cs +++ b/src/System.Management.Automation/engine/MshCmdlet.cs @@ -234,7 +234,9 @@ public override string ToString() public class CommandInvocationIntrinsics { private ExecutionContext _context; + private PSCmdlet _cmdlet; + private MshCommandRuntime _commandRuntime; internal CommandInvocationIntrinsics(ExecutionContext context, PSCmdlet cmdlet) diff --git a/src/System.Management.Automation/engine/MshCommandRuntime.cs b/src/System.Management.Automation/engine/MshCommandRuntime.cs index 4d07cd3d3a8..c04cb9cd852 100644 --- a/src/System.Management.Automation/engine/MshCommandRuntime.cs +++ b/src/System.Management.Automation/engine/MshCommandRuntime.cs @@ -35,6 +35,7 @@ internal class MshCommandRuntime : ICommandRuntime2 internal ExecutionContext Context { get; set; } private SessionState _state = null; + internal InternalHost CBhost; /// @@ -44,7 +45,9 @@ internal class MshCommandRuntime : ICommandRuntime2 // Output pipes. private Pipe _inputPipe; + private Pipe _outputPipe; + private Pipe _errorOutputPipe; /// @@ -92,6 +95,7 @@ internal bool IsPipelineInputExpected internal PipelineProcessor PipelineProcessor { get; set; } private CommandInfo _commandInfo; + private InternalCommand _thisCommand; #endregion private_members @@ -295,6 +299,7 @@ private void DoWriteEnumeratedObject(object sendToPipeline) // Variables needed to generate a unique SourceId for // WriteProgress(ProgressRecord). private static Int64 s_lastUsedSourceId /* = 0 */; + private Int64 _sourceId /* = 0 */; /// @@ -1589,6 +1594,7 @@ private bool DoShouldProcess( internal enum ShouldProcessPossibleOptimization { AutoYes_CanSkipShouldProcessCall, + AutoYes_CanCallShouldProcessAsynchronously, AutoNo_CanCallShouldProcessAsynchronously, @@ -2352,8 +2358,11 @@ public void Dispose() // being disposed and always following stack semantics. private PipelineProcessor _pp = null; + private InternalCommand _wasPermittedToWrite = null; + private bool _wasPermittedToWriteToPipeline = false; + private Thread _wasPermittedToWriteThread = null; } @@ -2928,6 +2937,7 @@ internal void _WriteErrorSkipAllowCheck(ErrorRecord errorRecord, ActionPreferenc // See "User Feedback Mechanisms - Note.doc" for details. private bool _isConfirmPreferenceCached = false; + private ConfirmImpact _confirmPreference = InitialSessionState.DefaultConfirmPreference; /// /// Preference setting controlling behavior of ShouldProcess() @@ -2968,7 +2978,9 @@ internal ConfirmImpact ConfirmPreference } private bool _isDebugPreferenceSet = false; + private ActionPreference _debugPreference = InitialSessionState.DefaultDebugPreference; + private bool _isDebugPreferenceCached = false; /// /// Preference setting. @@ -3022,6 +3034,7 @@ internal ActionPreference DebugPreference } private bool _isVerbosePreferenceCached = false; + private ActionPreference _verbosePreference = InitialSessionState.DefaultVerbosePreference; /// /// Preference setting. @@ -3071,6 +3084,7 @@ internal ActionPreference VerbosePreference internal bool IsWarningActionSet { get; private set; } = false; private bool _isWarningPreferenceCached = false; + private ActionPreference _warningPreference = InitialSessionState.DefaultWarningPreference; /// /// Preference setting. @@ -3211,6 +3225,7 @@ internal bool Debug internal bool IsDebugFlagSet { get; private set; } = false; private bool _whatIfFlag = InitialSessionState.DefaultWhatIfPreference; + private bool _isWhatIfPreferenceCached /* = false */; /// /// WhatIf indicates that the command should not @@ -3243,6 +3258,7 @@ internal SwitchParameter WhatIf internal bool IsWhatIfFlagSet { get; private set; } private ActionPreference _errorAction = InitialSessionState.DefaultErrorActionPreference; + private bool _isErrorActionPreferenceCached = false; /// /// ErrorAction tells the command what to do when an error occurs. @@ -3319,7 +3335,9 @@ internal ActionPreference ProgressPreference } private ActionPreference _progressPreference = InitialSessionState.DefaultProgressPreference; + private bool _isProgressPreferenceSet = false; + private bool _isProgressPreferenceCached = false; /// @@ -3376,17 +3394,26 @@ internal ActionPreference InformationPreference internal enum ContinueStatus { Yes, + No, + YesToAll, + NoToAll }; internal ContinueStatus lastShouldProcessContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastErrorContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastDebugContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastVerboseContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastWarningContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastProgressContinueStatus = ContinueStatus.Yes; + internal ContinueStatus lastInformationContinueStatus = ContinueStatus.Yes; /// diff --git a/src/System.Management.Automation/engine/MshMemberInfo.cs b/src/System.Management.Automation/engine/MshMemberInfo.cs index f60aa8f6f3e..ef8d07b948f 100644 --- a/src/System.Management.Automation/engine/MshMemberInfo.cs +++ b/src/System.Management.Automation/engine/MshMemberInfo.cs @@ -172,6 +172,7 @@ internal enum MshMemberMatchOptions public abstract class PSMemberInfo { internal object instance; + internal string name; internal bool ShouldSerialize { get; set; } @@ -1042,6 +1043,7 @@ public override string ToString() internal string typeOfValue; internal object serializedValue; + internal bool isDeserialized; /// @@ -1050,6 +1052,7 @@ public override string ToString() internal Adapter adapter; internal object adapterData; + internal object baseObject; /// @@ -1563,11 +1566,15 @@ public override string ToString() } private readonly PSLanguageMode? _languageMode; + private readonly string _getterScriptText; + private ScriptBlock _getterScript; private readonly string _setterScriptText; + private ScriptBlock _setterScript; + private bool _shouldCloneOnAccess; /// @@ -2290,6 +2297,7 @@ public override string ToString() } private readonly ScriptBlock _script; + private bool _shouldCloneOnAccess; /// @@ -2475,7 +2483,9 @@ public override string ToString() } internal object adapterData; + internal Adapter _adapter; + internal object baseObject; /// @@ -2788,6 +2798,7 @@ internal class MethodGroup { private int _currentIndex; + private readonly Type _t; internal PSMethodSignatureEnumerator(Type t) @@ -2894,7 +2905,9 @@ public override string ToString() } internal Adapter adapter; + internal object adapterData; + internal object baseObject; /// @@ -3043,13 +3056,19 @@ public override string ToString() } private readonly PSMemberInfoIntegratingCollection _members; + private readonly PSMemberInfoIntegratingCollection _properties; + private readonly PSMemberInfoIntegratingCollection _methods; + internal PSMemberInfoInternalCollection internalMembers; + private readonly PSObject _constructorPSObject; private static readonly Collection> s_emptyMemberCollection = new Collection>(); + private static readonly Collection> s_emptyMethodCollection = new Collection>(); + private static readonly Collection> s_emptyPropertyCollection = new Collection>(); /// @@ -3127,7 +3146,9 @@ internal PSMemberSet(string name, PSMemberInfoInternalCollection m } private static readonly Collection> s_typeMemberCollection = GetTypeMemberCollection(); + private static readonly Collection> s_typeMethodCollection = GetTypeMethodCollection(); + private static readonly Collection> s_typePropertyCollection = GetTypePropertyCollection(); private static Collection> GetTypeMemberCollection() @@ -3279,6 +3300,7 @@ public override object Value internal class PSInternalMemberSet : PSMemberSet { private readonly object _syncObject = new object(); + private readonly PSObject _psObject; #region Constructor @@ -3980,6 +4002,7 @@ public virtual IEnumerator GetEnumerator() internal class PSMemberInfoInternalCollection : PSMemberInfoCollection, IEnumerable where T : PSMemberInfo { private OrderedDictionary _members; + private int _countHidden; /// @@ -4495,6 +4518,7 @@ private void GenerateAllReservedMembers() internal Collection> Collections { get; } private readonly PSObject _mshOwner; + private readonly PSMemberSet _memberSetOwner; internal PSMemberInfoIntegratingCollection(object owner, Collection> collections) @@ -5027,7 +5051,9 @@ internal override T FirstOrDefault(MemberNamePredicate predicate) internal struct Enumerator : IEnumerator where S : PSMemberInfo { private S _current; + private int _currentIndex; + private readonly PSMemberInfoInternalCollection _allMembers; /// diff --git a/src/System.Management.Automation/engine/MshObject.cs b/src/System.Management.Automation/engine/MshObject.cs index e7bfeec31d2..3c0dc128cf7 100644 --- a/src/System.Management.Automation/engine/MshObject.cs +++ b/src/System.Management.Automation/engine/MshObject.cs @@ -623,10 +623,15 @@ internal static PSObject ConstructPSObjectFromSerializationInfo(SerializationInf private object _immediateBaseObject; private WeakReference _typeTable; + private AdapterSet _adapterSet; + private PSMemberInfoInternalCollection _instanceMembers; + private PSMemberInfoIntegratingCollection _members; + private PSMemberInfoIntegratingCollection _properties; + private PSMemberInfoIntegratingCollection _methods; private PSObjectFlags _flags; @@ -638,15 +643,21 @@ internal static PSObject ConstructPSObjectFromSerializationInfo(SerializationInf private static readonly ConditionalWeakTable s_typeNamesResurrectionTable = new ConditionalWeakTable(); private static readonly Collection> s_memberCollection = GetMemberCollection(PSMemberViewTypes.All); + private static readonly Collection> s_methodCollection = GetMethodCollection(); + private static readonly Collection> s_propertyCollection = GetPropertyCollection(PSMemberViewTypes.All); private static readonly DotNetAdapter s_dotNetInstanceAdapter = new DotNetAdapter(); + private static readonly DotNetAdapter s_baseAdapterForAdaptedObjects = new BaseDotNetAdapterForAdaptedObjects(); + private static readonly DotNetAdapter s_dotNetStaticAdapter = new DotNetAdapter(true); private static readonly AdapterSet s_dotNetInstanceAdapterSet = new AdapterSet(DotNetInstanceAdapter, null); + private static readonly AdapterSet s_mshMemberSetAdapter = new AdapterSet(new PSMemberSetAdapter(), null); + private static readonly AdapterSet s_mshObjectAdapter = new AdapterSet(new PSObjectAdapter(), null); private static readonly PSObject.AdapterSet s_cimInstanceAdapter = @@ -655,11 +666,15 @@ internal static PSObject ConstructPSObjectFromSerializationInfo(SerializationInf PSObject.DotNetInstanceAdapter); #if !UNIX private static readonly AdapterSet s_managementObjectAdapter = new AdapterSet(new ManagementObjectAdapter(), DotNetInstanceAdapter); + private static readonly AdapterSet s_managementClassAdapter = new AdapterSet(new ManagementClassApdapter(), DotNetInstanceAdapter); + private static readonly AdapterSet s_directoryEntryAdapter = new AdapterSet(new DirectoryEntryAdapter(), DotNetInstanceAdapter); #endif private static readonly AdapterSet s_dataRowViewAdapter = new AdapterSet(new DataRowViewAdapter(), s_baseAdapterForAdaptedObjects); + private static readonly AdapterSet s_dataRowAdapter = new AdapterSet(new DataRowAdapter(), s_baseAdapterForAdaptedObjects); + private static readonly AdapterSet s_xmlNodeAdapter = new AdapterSet(new XmlNodeAdapter(), s_baseAdapterForAdaptedObjects); #endregion fields @@ -2430,7 +2445,9 @@ private enum PSObjectFlags : byte /// Set to true when the BaseObject is PSCustomObject. /// HasGeneratedReservedMembers = 0b00000010, + ImmediateBaseObjectIsEmpty = 0b00000100, + IsHelpObject = 0b00001000, /// @@ -2447,11 +2464,17 @@ private enum PSObjectFlags : byte internal enum WriteStreamType : byte { None, + Output, + Error, + Warning, + Verbose, + Debug, + Information } @@ -2486,7 +2509,9 @@ public override string ToString() internal enum SerializationMethod { AllPublicProperties = 0, + String = 1, + SpecificProperties = 2 } } diff --git a/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs b/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs index ee54859a1ea..4c01a9a0015 100644 --- a/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs +++ b/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs @@ -92,6 +92,7 @@ internal GettingValueExceptionEventArgs(Exception exception) public class PSObjectPropertyDescriptor : PropertyDescriptor { internal event EventHandler SettingValueException; + internal event EventHandler GettingValueException; internal PSObjectPropertyDescriptor(string propertyName, Type propertyType, bool isReadOnly, AttributeCollection propertyAttributes) diff --git a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs index 0091596a443..2be6bdc6738 100644 --- a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs +++ b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs @@ -473,7 +473,9 @@ private static string GetEnumerableArgSeparator(ArrayLiteralAst arrayLiteralAst, /// The native command to bind to. /// private NativeCommand _nativeCommand; + private static readonly string TildeDirectorySeparator = $"~{Path.DirectorySeparatorChar}"; + private static readonly string TildeAltDirectorySeparator = $"~{Path.AltDirectorySeparatorChar}"; #endregion private members diff --git a/src/System.Management.Automation/engine/NativeCommandProcessor.cs b/src/System.Management.Automation/engine/NativeCommandProcessor.cs index 9c1a92fcda2..3ec3395ab40 100644 --- a/src/System.Management.Automation/engine/NativeCommandProcessor.cs +++ b/src/System.Management.Automation/engine/NativeCommandProcessor.cs @@ -32,6 +32,7 @@ namespace System.Management.Automation internal enum NativeCommandIOFormat { Text, + Xml }; @@ -41,12 +42,19 @@ internal enum NativeCommandIOFormat internal enum MinishellStream { Output, + Error, + Verbose, + Warning, + Debug, + Progress, + Information, + Unknown } @@ -57,11 +65,17 @@ internal enum MinishellStream internal static class StringToMinishellStreamConverter { internal const string OutputStream = "output"; + internal const string ErrorStream = "error"; + internal const string DebugStream = "debug"; + internal const string VerboseStream = "verbose"; + internal const string WarningStream = "warning"; + internal const string ProgressStream = "progress"; + internal const string InformationStream = "information"; internal static MinishellStream ToMinishellStream(string stream) @@ -370,7 +384,9 @@ internal override void ProcessRecord() private BlockingCollection _nativeProcessOutputQueue; private static bool? s_supportScreenScrape = null; + private bool _isTranscribing; + private Host.Coordinates _startPosition; /// @@ -816,6 +832,7 @@ private static void KillProcess(Process processToKill) internal struct ProcessWithParentId { public Process OriginalProcessInstance; + private int _parentId; public int ParentId @@ -1395,18 +1412,26 @@ private static string FindExecutable(string filename) #region Interop for SHGetFileInfo private const int SCS_32BIT_BINARY = 0; // A 32-bit Windows-based application + private const int SCS_DOS_BINARY = 1; // An MS-DOS - based application + private const int SCS_WOW_BINARY = 2; // A 16-bit Windows-based application + private const int SCS_PIF_BINARY = 3; // A PIF file that executes an MS-DOS - based application + private const int SCS_POSIX_BINARY = 4; // A POSIX - based application + private const int SCS_OS216_BINARY = 5; // A 16-bit OS/2-based application + private const int SCS_64BIT_BINARY = 6; // A 64-bit Windows-based application. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] private struct SHFILEINFO { public IntPtr hIcon; + public int iIcon; + public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] @@ -1462,11 +1487,17 @@ internal class ProcessOutputHandler internal const string XmlCliTag = "#< CLIXML"; private int _refCount; + private BlockingCollection _queue; + private bool _isFirstOutput; + private bool _isFirstError; + private bool _isXmlCliOutput; + private bool _isXmlCliError; + private string _processFileName; public ProcessOutputHandler(Process process, BlockingCollection queue) @@ -1721,6 +1752,7 @@ internal ProcessInputWriter(InternalCommand command) #endregion constructor private SteppablePipeline _pipeline; + private Serializer _xmlSerializer; /// @@ -1918,19 +1950,33 @@ internal static class ConsoleVisibility internal static extern IntPtr GetConsoleWindow(); internal const int SW_HIDE = 0; + internal const int SW_SHOWNORMAL = 1; + internal const int SW_NORMAL = 1; + internal const int SW_SHOWMINIMIZED = 2; + internal const int SW_SHOWMAXIMIZED = 3; + internal const int SW_MAXIMIZE = 3; + internal const int SW_SHOWNOACTIVATE = 4; + internal const int SW_SHOW = 5; + internal const int SW_MINIMIZE = 6; + internal const int SW_SHOWMINNOACTIVE = 7; + internal const int SW_SHOWNA = 8; + internal const int SW_RESTORE = 9; + internal const int SW_SHOWDEFAULT = 10; + internal const int SW_FORCEMINIMIZE = 11; + internal const int SW_MAX = 11; /// diff --git a/src/System.Management.Automation/engine/PSClassSearcher.cs b/src/System.Management.Automation/engine/PSClassSearcher.cs index 613035820d0..30d6a5c6fa4 100644 --- a/src/System.Management.Automation/engine/PSClassSearcher.cs +++ b/src/System.Management.Automation/engine/PSClassSearcher.cs @@ -34,12 +34,19 @@ internal PSClassSearcher( #region private properties private string _className = null; + private ExecutionContext _context = null; + private PSClassInfo _currentMatch = null; + private IEnumerator _matchingClass = null; + private Collection _matchingClassList = null; + private bool _useWildCards = false; + private Dictionary _moduleInfoCache = null; + private object _lockObject = new object(); #endregion diff --git a/src/System.Management.Automation/engine/PSConfiguration.cs b/src/System.Management.Automation/engine/PSConfiguration.cs index aacf5c50e32..2b5ce5b23f1 100644 --- a/src/System.Management.Automation/engine/PSConfiguration.cs +++ b/src/System.Management.Automation/engine/PSConfiguration.cs @@ -48,9 +48,13 @@ public enum ConfigScope internal sealed class PowerShellConfig { private const string ConfigFileName = "powershell.config.json"; + private const string ExecutionPolicyDefaultShellKey = "Microsoft.PowerShell:ExecutionPolicy"; + private const string DisableImplicitWinCompatKey = "DisableImplicitWinCompat"; + private const string WindowsPowerShellCompatibilityModuleDenyListKey = "WindowsPowerShellCompatibilityModuleDenyList"; + private const string WindowsPowerShellCompatibilityNoClobberModuleListKey = "WindowsPowerShellCompatibilityNoClobberModuleList"; // Provide a singleton @@ -59,17 +63,21 @@ internal sealed class PowerShellConfig // The json file containing system-wide configuration settings. // When passed as a pwsh command-line option, overrides the system wide configuration file. private string systemWideConfigFile; + private string systemWideConfigDirectory; // The json file containing the per-user configuration settings. private readonly string perUserConfigFile; + private readonly string perUserConfigDirectory; // Note: JObject and JsonSerializer are thread safe. // Root Json objects corresponding to the configuration file for 'AllUsers' and 'CurrentUser' respectively. // They are used as a cache to avoid hitting the disk for every read operation. private readonly JObject[] configRoots; + private readonly JObject emptyConfig; + private readonly JsonSerializer serializer; /// @@ -636,11 +644,17 @@ private void RemoveValueFromFile(ConfigScope scope, string key) internal sealed class PowerShellPolicies { public ScriptExecution ScriptExecution { get; set; } + public ScriptBlockLogging ScriptBlockLogging { get; set; } + public ModuleLogging ModuleLogging { get; set; } + public ProtectedEventLogging ProtectedEventLogging { get; set; } + public Transcription Transcription { get; set; } + public UpdatableHelp UpdatableHelp { get; set; } + public ConsoleSessionConfiguration ConsoleSessionConfiguration { get; set; } } @@ -652,6 +666,7 @@ internal abstract class PolicyBase { } internal sealed class ScriptExecution : PolicyBase { public string ExecutionPolicy { get; set; } + public bool? EnableScripts { get; set; } } @@ -661,6 +676,7 @@ internal sealed class ScriptExecution : PolicyBase internal sealed class ScriptBlockLogging : PolicyBase { public bool? EnableScriptBlockInvocationLogging { get; set; } + public bool? EnableScriptBlockLogging { get; set; } } @@ -670,6 +686,7 @@ internal sealed class ScriptBlockLogging : PolicyBase internal sealed class ModuleLogging : PolicyBase { public bool? EnableModuleLogging { get; set; } + public string[] ModuleNames { get; set; } } @@ -679,7 +696,9 @@ internal sealed class ModuleLogging : PolicyBase internal sealed class Transcription : PolicyBase { public bool? EnableTranscripting { get; set; } + public bool? EnableInvocationHeader { get; set; } + public string OutputDirectory { get; set; } } @@ -689,6 +708,7 @@ internal sealed class Transcription : PolicyBase internal sealed class UpdatableHelp : PolicyBase { public bool? EnableUpdateHelpDefaultSourcePath { get; set; } + public string DefaultSourcePath { get; set; } } @@ -698,6 +718,7 @@ internal sealed class UpdatableHelp : PolicyBase internal sealed class ConsoleSessionConfiguration : PolicyBase { public bool? EnableConsoleSessionConfiguration { get; set; } + public string ConsoleSessionConfigurationName { get; set; } } @@ -707,6 +728,7 @@ internal sealed class ConsoleSessionConfiguration : PolicyBase internal sealed class ProtectedEventLogging : PolicyBase { public bool? EnableProtectedEventLogging { get; set; } + public string[] EncryptionCertificate { get; set; } } diff --git a/src/System.Management.Automation/engine/PSVersionInfo.cs b/src/System.Management.Automation/engine/PSVersionInfo.cs index b1cbdf2a1cb..1bcd3485591 100644 --- a/src/System.Management.Automation/engine/PSVersionInfo.cs +++ b/src/System.Management.Automation/engine/PSVersionInfo.cs @@ -30,14 +30,23 @@ namespace System.Management.Automation public class PSVersionInfo { internal const string PSVersionTableName = "PSVersionTable"; + internal const string PSRemotingProtocolVersionName = "PSRemotingProtocolVersion"; + internal const string PSVersionName = "PSVersion"; + internal const string PSEditionName = "PSEdition"; + internal const string PSGitCommitIdName = "GitCommitId"; + internal const string PSCompatibleVersionsName = "PSCompatibleVersions"; + internal const string PSPlatformName = "Platform"; + internal const string PSOSName = "OS"; + internal const string SerializationVersionName = "SerializationVersion"; + internal const string WSManStackVersionName = "WSManStackVersion"; private static readonly PSVersionHashTable s_psVersionTable; @@ -54,16 +63,27 @@ public class PSVersionInfo /// be updated to reflect the right version. /// private static readonly Version s_psV1Version = new Version(1, 0); + private static readonly Version s_psV2Version = new Version(2, 0); + private static readonly Version s_psV3Version = new Version(3, 0); + private static readonly Version s_psV4Version = new Version(4, 0); + private static readonly Version s_psV5Version = new Version(5, 0); + private static readonly Version s_psV51Version = new Version(5, 1, NTVerpVars.PRODUCTBUILD, NTVerpVars.PRODUCTBUILD_QFE); + private static readonly SemanticVersion s_psV6Version = new SemanticVersion(6, 0, 0, preReleaseLabel: null, buildLabel: null); + private static readonly SemanticVersion s_psV61Version = new SemanticVersion(6, 1, 0, preReleaseLabel: null, buildLabel: null); + private static readonly SemanticVersion s_psV62Version = new SemanticVersion(6, 2, 0, preReleaseLabel: null, buildLabel: null); + private static readonly SemanticVersion s_psV7Version = new SemanticVersion(7, 0, 0, preReleaseLabel: null, buildLabel: null); + private static readonly SemanticVersion s_psSemVersion; + private static readonly Version s_psVersion; /// @@ -426,10 +446,15 @@ IEnumerator IEnumerable.GetEnumerator() public sealed class SemanticVersion : IComparable, IComparable, IEquatable { private const string VersionSansRegEx = @"^(?\d+)(\.(?\d+))?(\.(?\d+))?$"; + private const string LabelRegEx = @"^((?[0-9A-Za-z][0-9A-Za-z\-\.]*))?(\+(?[0-9A-Za-z][0-9A-Za-z\-\.]*))?$"; + private const string LabelUnitRegEx = @"^[0-9A-Za-z][0-9A-Za-z\-\.]*$"; + private const string PreLabelPropertyName = "PSSemVerPreReleaseLabel"; + private const string BuildLabelPropertyName = "PSSemVerBuildLabel"; + private const string TypeNameForVersionWithLabel = "System.Version#IncludeLabel"; private string versionString; @@ -1004,15 +1029,20 @@ private static int ComparePreLabel(string preLabel1, string preLabel2) internal enum ParseFailureKind { ArgumentException, + ArgumentOutOfRangeException, + FormatException } internal struct VersionResult { internal SemanticVersion _parsedVersion; + internal ParseFailureKind _failure; + internal string _exceptionArgument; + internal bool _canThrow; internal void Init(bool canThrow) diff --git a/src/System.Management.Automation/engine/ParameterBinderController.cs b/src/System.Management.Automation/engine/ParameterBinderController.cs index a68192c7a90..d44625c9d8e 100644 --- a/src/System.Management.Automation/engine/ParameterBinderController.cs +++ b/src/System.Management.Automation/engine/ParameterBinderController.cs @@ -1153,6 +1153,7 @@ internal void BindUnboundScriptParameterWithDefaultValue(MergedCompiledCommandPa } internal uint _currentParameterSetFlag = uint.MaxValue; + internal uint _prePipelineProcessingParameterSetFlags = uint.MaxValue; protected IScriptExtent GetErrorExtent(CommandParameterInternal cpi) diff --git a/src/System.Management.Automation/engine/PathInterfaces.cs b/src/System.Management.Automation/engine/PathInterfaces.cs index d11a225797e..21b76447cd4 100644 --- a/src/System.Management.Automation/engine/PathInterfaces.cs +++ b/src/System.Management.Automation/engine/PathInterfaces.cs @@ -1407,6 +1407,7 @@ private LocationGlobber PathResolver } private LocationGlobber _pathResolver; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/Pipe.cs b/src/System.Management.Automation/engine/Pipe.cs index ac9350487a0..5c9642db540 100644 --- a/src/System.Management.Automation/engine/Pipe.cs +++ b/src/System.Management.Automation/engine/Pipe.cs @@ -13,8 +13,11 @@ namespace System.Management.Automation.Internal internal enum VariableStreamKind { Output, + Error, + Warning, + Information }; @@ -381,6 +384,7 @@ internal Pipe(IEnumerator enumeratorToProcess) } private IEnumerator _enumeratorToProcess; + private bool _enumeratorToProcessIsEmpty; #endregion ctor diff --git a/src/System.Management.Automation/engine/ProcessCodeMethods.cs b/src/System.Management.Automation/engine/ProcessCodeMethods.cs index 604ac3787ad..6863a3fcd29 100644 --- a/src/System.Management.Automation/engine/ProcessCodeMethods.cs +++ b/src/System.Management.Automation/engine/ProcessCodeMethods.cs @@ -72,10 +72,15 @@ internal static int GetParentPid(Process process) private struct PROCESS_BASIC_INFORMATION { public IntPtr ExitStatus; + public IntPtr PebBaseAddress; + public IntPtr AffinityMask; + public IntPtr BasePriority; + public IntPtr UniqueProcessId; + public IntPtr InheritedFromUniqueProcessId; } diff --git a/src/System.Management.Automation/engine/PropertyCmdletProviderInterfaces.cs b/src/System.Management.Automation/engine/PropertyCmdletProviderInterfaces.cs index 9c1f9379190..d4544fcdf23 100644 --- a/src/System.Management.Automation/engine/PropertyCmdletProviderInterfaces.cs +++ b/src/System.Management.Automation/engine/PropertyCmdletProviderInterfaces.cs @@ -1825,6 +1825,7 @@ internal object MovePropertyDynamicParameters( #region private data private Cmdlet _cmdlet; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/ScopedItemSearcher.cs b/src/System.Management.Automation/engine/ScopedItemSearcher.cs index 4d5f2f1107f..ec574f7daf1 100644 --- a/src/System.Management.Automation/engine/ScopedItemSearcher.cs +++ b/src/System.Management.Automation/engine/ScopedItemSearcher.cs @@ -230,10 +230,15 @@ private void InitializeScopeEnumerator() } private T _current; + protected SessionStateInternal sessionState; + private VariablePath _lookupPath; + private SessionStateScopeEnumerator _scopeEnumerable; + private bool _isSingleScopeLookup; + private bool _isInitialized; #endregion private members diff --git a/src/System.Management.Automation/engine/ScriptCommandProcessor.cs b/src/System.Management.Automation/engine/ScriptCommandProcessor.cs index 89e898a5532..4d2733bb23f 100644 --- a/src/System.Management.Automation/engine/ScriptCommandProcessor.cs +++ b/src/System.Management.Automation/engine/ScriptCommandProcessor.cs @@ -232,11 +232,17 @@ internal override bool IsHelpRequested(out string helpTarget, out HelpCategory h internal sealed class DlrScriptCommandProcessor : ScriptCommandProcessorBase { private readonly ArrayList _input = new ArrayList(); + private readonly object _dollarUnderbar = AutomationNull.Value; + private new ScriptBlock _scriptBlock; + private MutableTuple _localsTuple; + private bool _runOptimizedCode; + private bool _argsBound; + private FunctionContext _functionContext; internal DlrScriptCommandProcessor(ScriptBlock scriptBlock, ExecutionContext context, bool useNewScope, CommandOrigin origin, SessionStateInternal sessionState, object dollarUnderbar) diff --git a/src/System.Management.Automation/engine/SecurityDescriptorCmdletProviderInterfaces.cs b/src/System.Management.Automation/engine/SecurityDescriptorCmdletProviderInterfaces.cs index 826fff642c3..e19551a9c5c 100644 --- a/src/System.Management.Automation/engine/SecurityDescriptorCmdletProviderInterfaces.cs +++ b/src/System.Management.Automation/engine/SecurityDescriptorCmdletProviderInterfaces.cs @@ -240,6 +240,7 @@ public ObjectSecurity NewOfType(string providerId, string type, AccessControlSec #region private data private Cmdlet _cmdlet; + private SessionStateInternal _sessionState; #endregion private data diff --git a/src/System.Management.Automation/engine/SerializationStrings.cs b/src/System.Management.Automation/engine/SerializationStrings.cs index c3a1c8a46dc..9ecee8fd0e8 100644 --- a/src/System.Management.Automation/engine/SerializationStrings.cs +++ b/src/System.Management.Automation/engine/SerializationStrings.cs @@ -257,13 +257,21 @@ internal static class SerializationStrings #region progress record internal const string ProgressRecord = "PR"; + internal const string ProgressRecordActivityId = "AI"; + internal const string ProgressRecordParentActivityId = "PI"; + internal const string ProgressRecordActivity = "AV"; + internal const string ProgressRecordStatusDescription = "SD"; + internal const string ProgressRecordCurrentOperation = "CO"; + internal const string ProgressRecordPercentComplete = "PC"; + internal const string ProgressRecordSecondsRemaining = "SR"; + internal const string ProgressRecordType = "T"; #endregion progress record diff --git a/src/System.Management.Automation/engine/SessionStatePublic.cs b/src/System.Management.Automation/engine/SessionStatePublic.cs index 0dca57054db..fc57b2c45fe 100644 --- a/src/System.Management.Automation/engine/SessionStatePublic.cs +++ b/src/System.Management.Automation/engine/SessionStatePublic.cs @@ -312,9 +312,13 @@ internal SessionStateInternal Internal #region private data private SessionStateInternal _sessionState; + private DriveManagementIntrinsics _drive; + private CmdletProviderManagementIntrinsics _provider; + private PathIntrinsics _path; + private PSVariableIntrinsics _variable; #endregion private data diff --git a/src/System.Management.Automation/engine/SessionStateScopeEnumerator.cs b/src/System.Management.Automation/engine/SessionStateScopeEnumerator.cs index c3b643e4f31..bc70ce9ca38 100644 --- a/src/System.Management.Automation/engine/SessionStateScopeEnumerator.cs +++ b/src/System.Management.Automation/engine/SessionStateScopeEnumerator.cs @@ -98,6 +98,7 @@ public void Dispose() } private readonly SessionStateScope _initialScope; + private SessionStateScope _currentEnumeratedScope; } } diff --git a/src/System.Management.Automation/engine/SessionStateStrings.cs b/src/System.Management.Automation/engine/SessionStateStrings.cs index ac5ced27170..5bef2ac8fff 100644 --- a/src/System.Management.Automation/engine/SessionStateStrings.cs +++ b/src/System.Management.Automation/engine/SessionStateStrings.cs @@ -23,6 +23,7 @@ internal static class StringLiterals /// it is '\', and on Linux, it is '/', as expected. /// internal static readonly char DefaultPathSeparator = System.IO.Path.DirectorySeparatorChar; + internal static readonly string DefaultPathSeparatorString = DefaultPathSeparator.ToString(); /// @@ -34,6 +35,7 @@ internal static class StringLiterals /// separator on Linux. /// internal static readonly char AlternatePathSeparator = Platform.IsWindows ? '/' : '\\'; + internal static readonly string AlternatePathSeparatorString = AlternatePathSeparator.ToString(); /// diff --git a/src/System.Management.Automation/engine/ShellVariable.cs b/src/System.Management.Automation/engine/ShellVariable.cs index 4be5a96f52b..47d089deb17 100644 --- a/src/System.Management.Automation/engine/ShellVariable.cs +++ b/src/System.Management.Automation/engine/ShellVariable.cs @@ -748,6 +748,7 @@ private static object PreserveValueType(object value) internal class LocalVariable : PSVariable { private readonly MutableTuple _tuple; + private readonly int _tupleSlot; public LocalVariable(string name, MutableTuple tuple, int tupleSlot) diff --git a/src/System.Management.Automation/engine/SpecialVariables.cs b/src/System.Management.Automation/engine/SpecialVariables.cs index aa241b6c942..53e15081318 100644 --- a/src/System.Management.Automation/engine/SpecialVariables.cs +++ b/src/System.Management.Automation/engine/SpecialVariables.cs @@ -115,6 +115,7 @@ internal static class SpecialVariables internal static bool IsUnderbar(string name) { return name.Length == 1 && name[0] == '_'; } internal const string PSItem = "PSItem"; // simple alias for $_ + internal const string Underbar = "_"; internal static readonly VariablePath UnderbarVarPath = new VariablePath(Underbar); @@ -275,15 +276,25 @@ internal static class SpecialVariables #region AllScope variables created in every session internal const string ExecutionContext = "ExecutionContext"; + internal const string Home = "HOME"; + internal const string Host = "Host"; + internal const string PID = "PID"; + internal const string PSCulture = "PSCulture"; + internal const string PSHome = "PSHOME"; + internal const string PSUICulture = "PSUICulture"; + internal const string PSVersionTable = "PSVersionTable"; + internal const string PSEdition = "PSEdition"; + internal const string ShellId = "ShellId"; + internal const string EnabledExperimentalFeatures = "EnabledExperimentalFeatures"; #endregion AllScope variables created in every session @@ -377,25 +388,40 @@ internal static bool IsImplicitVariableAccessibleInClassMethod(VariablePath vari internal enum AutomaticVariable { Underbar = 0, + Args = 1, + This = 2, + Input = 3, + PSCmdlet = 4, + PSBoundParameters = 5, + MyInvocation = 6, + PSScriptRoot = 7, + PSCommandPath = 8, + NumberOfAutomaticVariables // 1 + the last, used to initialize global scope. } internal enum PreferenceVariable { Debug = 9, + Verbose = 10, + Error = 11, + WhatIf = 12, + Warning = 13, + Information = 14, + Confirm = 15, } } diff --git a/src/System.Management.Automation/engine/TypeMetadata.cs b/src/System.Management.Automation/engine/TypeMetadata.cs index 192042a3def..98e4ffef71b 100644 --- a/src/System.Management.Automation/engine/TypeMetadata.cs +++ b/src/System.Management.Automation/engine/TypeMetadata.cs @@ -22,12 +22,19 @@ public sealed class ParameterSetMetadata #region Private Data private bool _isMandatory; + private int _position; + private bool _valueFromPipeline; + private bool _valueFromPipelineByPropertyName; + private bool _valueFromRemainingArguments; + private string _helpMessage; + private string _helpMessageBaseName; + private string _helpMessageResourceId; #endregion @@ -255,8 +262,11 @@ internal bool Equals(ParameterSetMetadata second) internal enum ParameterFlags : uint { Mandatory = 0x01, + ValueFromPipeline = 0x02, + ValueFromPipelineByPropertyName = 0x04, + ValueFromRemainingArguments = 0x08, } @@ -303,10 +313,15 @@ internal ParameterSetMetadata( #region Proxy Parameter Generation private const string MandatoryFormat = @"{0}Mandatory=$true"; + private const string PositionFormat = @"{0}Position={1}"; + private const string ValueFromPipelineFormat = @"{0}ValueFromPipeline=$true"; + private const string ValueFromPipelineByPropertyNameFormat = @"{0}ValueFromPipelineByPropertyName=$true"; + private const string ValueFromRemainingArgumentsFormat = @"{0}ValueFromRemainingArguments=$true"; + private const string HelpMessageFormat = @"{0}HelpMessage='{1}'"; /// @@ -371,10 +386,15 @@ public sealed class ParameterMetadata #region Private Data private string _name; + private Type _parameterType; + private bool _isDynamic; + private Dictionary _parameterSets; + private Collection _aliases; + private Collection _attributes; #endregion @@ -756,24 +776,43 @@ internal bool IsMatchingType(PSTypeName psTypeName) // The formats are prefixed with {0} to enable easy formatting. private const string ParameterNameFormat = @"{0}${{{1}}}"; + private const string ParameterTypeFormat = @"{0}[{1}]"; + private const string ParameterSetNameFormat = "ParameterSetName='{0}'"; + private const string AliasesFormat = @"{0}[Alias({1})]"; + private const string ValidateLengthFormat = @"{0}[ValidateLength({1}, {2})]"; + private const string ValidateRangeRangeKindFormat = @"{0}[ValidateRange([System.Management.Automation.ValidateRangeKind]::{1})]"; + private const string ValidateRangeFloatFormat = @"{0}[ValidateRange({1:R}, {2:R})]"; + private const string ValidateRangeFormat = @"{0}[ValidateRange({1}, {2})]"; + private const string ValidatePatternFormat = "{0}[ValidatePattern('{1}')]"; + private const string ValidateScriptFormat = @"{0}[ValidateScript({{ {1} }})]"; + private const string ValidateCountFormat = @"{0}[ValidateCount({1}, {2})]"; + private const string ValidateSetFormat = @"{0}[ValidateSet({1})]"; + private const string ValidateNotNullFormat = @"{0}[ValidateNotNull()]"; + private const string ValidateNotNullOrEmptyFormat = @"{0}[ValidateNotNullOrEmpty()]"; + private const string AllowNullFormat = @"{0}[AllowNull()]"; + private const string AllowEmptyStringFormat = @"{0}[AllowEmptyString()]"; + private const string AllowEmptyCollectionFormat = @"{0}[AllowEmptyCollection()]"; + private const string PSTypeNameFormat = @"{0}[PSTypeName('{1}')]"; + private const string ObsoleteFormat = @"{0}[Obsolete({1})]"; + private const string CredentialAttributeFormat = @"{0}[System.Management.Automation.CredentialAttribute()]"; /// diff --git a/src/System.Management.Automation/engine/TypeTable.cs b/src/System.Management.Automation/engine/TypeTable.cs index 2b0c0eb2ed0..7676cedc341 100644 --- a/src/System.Management.Automation/engine/TypeTable.cs +++ b/src/System.Management.Automation/engine/TypeTable.cs @@ -36,7 +36,9 @@ public TypesPs1xmlReader(LoadContext context) } private readonly LoadContext _context; + private readonly XmlReader _reader; + private readonly IXmlLineInfo _readerLineInfo; #region Helpers @@ -1535,31 +1537,57 @@ private NotePropertyData Read_NoteProperty() } private string _idTypeName; + private string _idSetCodeReference; + private string _idScriptMethod; + private string _idValue; + private string _idScriptProperty; + private string _idIsHidden; + private string _idScript; + private string _idCodeMethod; + private string _idMemberSet; + private string _idCodeProperty; + private string _idMembers; + private string _idName; + private string _idGetCodeReference; + private string _idMethodName; + private string _idInheritMembers; + private string _idNoteProperty; + private string _idTypeAdapter; + private string _idSetScriptBlock; + private string _idPropertySet; + private string _idTypeConverter; + private string _idAliasProperty; + private string _idType; + private string _idCodeReference; + private string _idTypes; + private string _idReferencedProperties; + private string _idGetScriptBlock; + private string _idReferencedMemberName; protected void InitIDs() @@ -1700,9 +1728,13 @@ int IEqualityComparer.GetHashCode(ConsolidatedString obj) internal class LoadContext { internal XmlReader reader; + internal ConcurrentBag errors; + internal string fileName; + internal string PSSnapinName; + internal bool isFullyTrusted; internal LoadContext(string PSSnapinName, string fileName, ConcurrentBag errors) @@ -1891,12 +1923,19 @@ public Collection Errors public sealed class TypeData { internal const string NoteProperty = "NoteProperty"; + internal const string AliasProperty = "AliasProperty"; + internal const string ScriptProperty = "ScriptProperty"; + internal const string CodeProperty = "CodeProperty"; + internal const string ScriptMethod = "ScriptMethod"; + internal const string CodeMethod = "CodeMethod"; + internal const string PropertySet = "PropertySet"; + internal const string MemberSet = "MemberSet"; private TypeData() @@ -2268,8 +2307,11 @@ public PropertySetData PropertySerializationSet // They are of NoteProperty private string _serializationMethod; + private Type _targetTypeForDeserialization; + private uint _serializationDepth; + private string _defaultDisplayProperty; // InheritPropertySerializationSet should be true or false @@ -2283,7 +2325,9 @@ public PropertySetData PropertySerializationSet // They are of propertySet private PropertySetData _defaultDisplayPropertySet; + private PropertySetData _defaultKeyPropertySet; + private PropertySetData _propertySerializationSet; #endregion StandardMember @@ -2818,16 +2862,27 @@ public sealed partial class TypeTable #region strings internal const string PSStandardMembers = "PSStandardMembers"; + internal const string SerializationDepth = "SerializationDepth"; + internal const string StringSerializationSource = "StringSerializationSource"; + internal const string SerializationMethodNode = "SerializationMethod"; + internal const string TargetTypeForDeserialization = "TargetTypeForDeserialization"; + internal const string PropertySerializationSet = "PropertySerializationSet"; + internal const string InheritPropertySerializationSet = "InheritPropertySerializationSet"; + internal const string Types = "Types"; + internal const string Type = "Type"; + internal const string DefaultDisplayPropertySet = "DefaultDisplayPropertySet"; + internal const string DefaultKeyPropertySet = "DefaultKeyPropertySet"; + internal const string DefaultDisplayProperty = "DefaultDisplayProperty"; // this is used for extended properties like Note,Alias,Script,Code @@ -2874,6 +2929,7 @@ private readonly ConcurrentDictionary _typeConverters // this is used to throw errors when updating a shared TypeTable. internal readonly bool isShared; + private readonly List _typeFileList; // The member factory is cached to avoid allocating Func<> delegates on each call @@ -2905,7 +2961,9 @@ private readonly ConcurrentDictionary _typeConverters // Built-in type file paths. internal static readonly string TypesFilePath; + internal static readonly string TypesV3FilePath; + internal static readonly string GetEventTypesFilePath; #endregion diff --git a/src/System.Management.Automation/engine/Utils.cs b/src/System.Management.Automation/engine/Utils.cs index 12374148fa7..efa153dfb35 100644 --- a/src/System.Management.Automation/engine/Utils.cs +++ b/src/System.Management.Automation/engine/Utils.cs @@ -739,8 +739,11 @@ internal static bool IsValidPSEditionValue(string editionValue) internal static readonly string ModuleDirectory = Path.Combine(ProductNameForDirectory, "Modules"); internal static readonly ConfigScope[] SystemWideOnlyConfig = new[] { ConfigScope.AllUsers }; + internal static readonly ConfigScope[] CurrentUserOnlyConfig = new[] { ConfigScope.CurrentUser }; + internal static readonly ConfigScope[] SystemWideThenCurrentUserConfig = new[] { ConfigScope.AllUsers, ConfigScope.CurrentUser }; + internal static readonly ConfigScope[] CurrentUserThenSystemWideConfig = new[] { ConfigScope.CurrentUser, ConfigScope.AllUsers }; internal static T GetPolicySetting(ConfigScope[] preferenceOrder) where T : PolicyBase, new() @@ -1552,23 +1555,37 @@ private static class EmptyReadOnlyCollectionHolder internal static class Separators { internal static readonly char[] Backslash = new char[] { '\\' }; + internal static readonly char[] Directory = new char[] { '\\', '/' }; + internal static readonly char[] DirectoryOrDrive = new char[] { '\\', '/', ':' }; internal static readonly char[] Colon = new char[] { ':' }; + internal static readonly char[] Dot = new char[] { '.' }; + internal static readonly char[] Pipe = new char[] { '|' }; + internal static readonly char[] Comma = new char[] { ',' }; + internal static readonly char[] Semicolon = new char[] { ';' }; + internal static readonly char[] StarOrQuestion = new char[] { '*', '?' }; + internal static readonly char[] ColonOrBackslash = new char[] { '\\', ':' }; + internal static readonly char[] PathSeparator = new char[] { Path.PathSeparator }; internal static readonly char[] QuoteChars = new char[] { '\'', '"' }; + internal static readonly char[] Space = new char[] { ' ' }; + internal static readonly char[] QuotesSpaceOrTab = new char[] { ' ', '\t', '\'', '"' }; + internal static readonly char[] SpaceOrTab = new char[] { ' ', '\t' }; + internal static readonly char[] Newline = new char[] { '\n' }; + internal static readonly char[] CrLf = new char[] { '\r', '\n' }; // (Copied from System.IO.Path so we can call TrimEnd in the same way that Directory.EnumerateFiles would on the search patterns). @@ -1878,6 +1895,7 @@ private static bool TryGetCommandInfoList(PowerShell ps, HashSet command internal class PipelineForBatchingChecker : AstVisitor { internal readonly HashSet ValidVariables = new HashSet(StringComparer.OrdinalIgnoreCase); + internal readonly HashSet Commands = new HashSet(StringComparer.OrdinalIgnoreCase); internal ScriptBlockAst ScriptBeingConverted { get; set; } @@ -2050,25 +2068,37 @@ namespace System.Management.Automation.Internal public static class InternalTestHooks { internal static bool BypassGroupPolicyCaching; + internal static bool ForceScriptBlockLogging; + internal static bool UseDebugAmsiImplementation; + internal static bool BypassAppLockerPolicyCaching; + internal static bool BypassOnlineHelpRetrieval; + internal static bool ForcePromptForChoiceDefaultOption; // Stop/Restart/Rename Computer tests internal static bool TestStopComputer; + internal static bool TestWaitStopComputer; + internal static bool TestRenameComputer; + internal static int TestStopComputerResults; + internal static int TestRenameComputerResults; // It's useful to test that we don't depend on the ScriptBlock and AST objects and can use a re-parsed version. internal static bool IgnoreScriptBlockCache; // Simulate 'System.Diagnostics.Stopwatch.IsHighResolution is false' to test Get-Uptime throw internal static bool StopwatchIsNotHighResolution; + internal static bool DisableGACLoading; + internal static bool SetConsoleWidthToZero; + internal static bool SetConsoleHeightToZero; // A location to test PSEdition compatibility functionality for Windows PowerShell modules with @@ -2129,6 +2159,7 @@ public static PSSenderInfo GetCustomPSSenderInfo(string url, Version clientVersi internal class HistoryStack { private readonly BoundedStack _boundedUndoStack; + private readonly BoundedStack _boundedRedoStack; internal HistoryStack(uint capacity) diff --git a/src/System.Management.Automation/engine/VariablePath.cs b/src/System.Management.Automation/engine/VariablePath.cs index 0e33ae620c5..c213ede6c3f 100644 --- a/src/System.Management.Automation/engine/VariablePath.cs +++ b/src/System.Management.Automation/engine/VariablePath.cs @@ -10,13 +10,21 @@ namespace System.Management.Automation internal enum VariablePathFlags { None = 0x00, + Local = 0x01, + Script = 0x02, + Global = 0x04, + Private = 0x08, + Variable = 0x10, + Function = 0x20, + DriveQualified = 0x40, + Unqualified = 0x80, // If any of these bits are set, the path does not represent an unscoped variable. diff --git a/src/System.Management.Automation/engine/debugger/Breakpoint.cs b/src/System.Management.Automation/engine/debugger/Breakpoint.cs index f9f550da7fa..77a6eab723e 100644 --- a/src/System.Management.Automation/engine/debugger/Breakpoint.cs +++ b/src/System.Management.Automation/engine/debugger/Breakpoint.cs @@ -137,6 +137,7 @@ internal BreakpointAction Trigger() internal enum BreakpointAction { Continue = 0x0, + Break = 0x1 } @@ -434,7 +435,9 @@ public override string ToString() } internal int SequencePointIndex { get; set; } + internal IScriptExtent[] SequencePoints { get; set; } + internal BitArray BreakpointBitArray { get; set; } private class CheckBreakpointInScript : AstVisitor @@ -447,6 +450,7 @@ public static bool IsInNestedScriptBlock(Ast ast, LineBreakpoint breakpoint) } private LineBreakpoint _breakpoint; + private bool _result; public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) diff --git a/src/System.Management.Automation/engine/debugger/debugger.cs b/src/System.Management.Automation/engine/debugger/debugger.cs index 6355b0d83e5..89028e3ab75 100644 --- a/src/System.Management.Automation/engine/debugger/debugger.cs +++ b/src/System.Management.Automation/engine/debugger/debugger.cs @@ -1598,8 +1598,11 @@ internal void OnSequencePointHit(FunctionContext functionContext) private class CallStackInfo { internal InvocationInfo InvocationInfo { get; set; } + internal string File { get; set; } + internal bool DebuggerStepThrough { get; set; } + internal FunctionContext FunctionContext { get; set; } /// @@ -1693,47 +1696,74 @@ internal void Clear() } private readonly ExecutionContext _context; + private ConcurrentDictionary _pendingBreakpoints; + private readonly ConcurrentDictionary>> _boundBreakpoints; + private readonly ConcurrentDictionary _commandBreakpoints; + private readonly ConcurrentDictionary> _variableBreakpoints; + private readonly ConcurrentDictionary _idToBreakpoint; + private SteppingMode _steppingMode; + private CallStackInfo _overOrOutFrame; + private CallStackList _callStack; + private static readonly List s_emptyBreakpointList = new List(); private DebuggerCommandProcessor _commandProcessor = new DebuggerCommandProcessor(); + private InvocationInfo _currentInvocationInfo; + private bool _inBreakpoint; + private PowerShell _psDebuggerCommand; // Job debugger integration. private bool _nestedDebuggerStop; + private Dictionary _runningJobs; + private ConcurrentStack _activeDebuggers; + private ConcurrentStack _debuggerStopEventArgs; + private DebuggerResumeAction _lastActiveDebuggerAction; + private DebuggerResumeAction _currentDebuggerAction; + private DebuggerResumeAction _previousDebuggerAction; + private CallStackInfo _nestedRunningFrame; + private object _syncObject; + private object _syncActiveDebuggerStopObject; + private int _processingOutputCount; + private ManualResetEventSlim _processingOutputCompleteEvent = new ManualResetEventSlim(true); // Runspace debugger integration. private Dictionary _runningRunspaces; private const int _jobCallStackOffset = 2; + private const int _runspaceCallStackOffset = 1; private bool _preserveUnhandledDebugStopEvent; + private ManualResetEventSlim _preserveDebugStopEvent; // Process runspace debugger private Lazy> _runspaceDebugQueue = new Lazy>(); + private volatile int _processingRunspaceDebugQueue; + private ManualResetEventSlim _runspaceDebugCompleteEvent; // System is locked down when true. Used to disable debugger on lock down. @@ -1994,6 +2024,7 @@ private bool WaitForDebugStopSubscriber() private enum SteppingMode { StepIn, + None } @@ -2096,8 +2127,11 @@ private void StopOnSequencePoint(FunctionContext functionContext, List _runningPowerShells; + private PowerShell _baseRunningPowerShell; + private object _syncObject; #endregion @@ -806,6 +809,7 @@ internal static ReadOnlyDictionary> RunspaceDiction } private static SortedDictionary> s_runspaceDictionary; + private static object s_syncObject; /// diff --git a/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs b/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs index bd0f7943b54..2fdc6490c4f 100644 --- a/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs +++ b/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs @@ -680,7 +680,9 @@ public RunspaceEventQueueItem(RunspaceStateInfo runspaceStateInfo, RunspaceAvail } public RunspaceStateInfo RunspaceStateInfo; + public RunspaceAvailability CurrentRunspaceAvailability; + public RunspaceAvailability NewRunspaceAvailability; } diff --git a/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs b/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs index 545440a1574..7b80993f864 100644 --- a/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs +++ b/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs @@ -413,16 +413,25 @@ internal bool IsFromRemoteHost #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private readonly string name = null; + private string label = string.Empty; + private string parameterTypeName = null; + private string parameterTypeFullName = null; + private string parameterAssemblyFullName = null; + private string helpMessage = string.Empty; + private bool isMandatory = true; private PSObject defaultValue = null; + private Collection metadata = new Collection(); + private bool modifiedByRemotingProtocol = false; + private bool isFromRemoteHost = false; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/History.cs b/src/System.Management.Automation/engine/hostifaces/History.cs index e22aa0804eb..4177c2e9c18 100644 --- a/src/System.Management.Automation/engine/hostifaces/History.cs +++ b/src/System.Management.Automation/engine/hostifaces/History.cs @@ -980,6 +980,7 @@ public class InvokeHistoryCommand : PSCmdlet /// ids are provided, we throw error. /// private bool _multipleIdProvided; + private string _id; /// /// Accepts a string value indicating a previously executed command to diff --git a/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs b/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs index 9325f95ccad..7b396cd33e5 100644 --- a/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs +++ b/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs @@ -160,7 +160,9 @@ internal virtual void ToPSObjectForRemoting(PSObject psObject) private string _message; private InvocationInfo _invocationInfo; + private ReadOnlyCollection _pipelineIterationInfo; + private bool _serializeExtendedInfo; } diff --git a/src/System.Management.Automation/engine/hostifaces/InternalHost.cs b/src/System.Management.Automation/engine/hostifaces/InternalHost.cs index e170a3792e4..8cb16f463cf 100644 --- a/src/System.Management.Automation/engine/hostifaces/InternalHost.cs +++ b/src/System.Management.Automation/engine/hostifaces/InternalHost.cs @@ -217,9 +217,13 @@ public override void EnterNestedPrompt() private struct PromptContextData { public object SavedCurrentlyExecutingCommandVarValue; + public object SavedPSBoundParametersVarValue; + public ExecutionContext.SavedContextData SavedContextData; + public RunspaceAvailability RunspaceAvailability; + public PSLanguageMode LanguageMode; } @@ -566,12 +570,16 @@ internal PSHost ExternalHost // Masked variables. private ObjectRef _externalHostRef; + private ObjectRef _internalUIRef; // Private variables. private string _nameResult; + private Version _versionResult; + private Guid _idResult; + private Stack _contextStack = new Stack(); private readonly Guid _zeroGuid; diff --git a/src/System.Management.Automation/engine/hostifaces/InternalHostRawUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/InternalHostRawUserInterface.cs index d182ef6302a..317ad8adf29 100644 --- a/src/System.Management.Automation/engine/hostifaces/InternalHostRawUserInterface.cs +++ b/src/System.Management.Automation/engine/hostifaces/InternalHostRawUserInterface.cs @@ -625,6 +625,7 @@ public override } private PSHostRawUserInterface _externalRawUI; + private InternalHost _parentHost; } } diff --git a/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs index 1e2478d7bd2..1548df8a292 100644 --- a/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs +++ b/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs @@ -1077,8 +1077,11 @@ private Collection EmulatePromptForMultipleChoice(string caption, } private PSHostUserInterface _externalUI = null; + private InternalHostRawUserInterface _internalRawUI = null; + private InternalHost _parent = null; + private PSInformationalBuffers _informationalBuffers = null; } } diff --git a/src/System.Management.Automation/engine/hostifaces/ListModifier.cs b/src/System.Management.Automation/engine/hostifaces/ListModifier.cs index 191a5309cc7..ba9cf9b31e2 100644 --- a/src/System.Management.Automation/engine/hostifaces/ListModifier.cs +++ b/src/System.Management.Automation/engine/hostifaces/ListModifier.cs @@ -251,7 +251,9 @@ internal Hashtable ToHashtable() } internal const string AddKey = "Add"; + internal const string RemoveKey = "Remove"; + internal const string ReplaceKey = "Replace"; } diff --git a/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs b/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs index e63fc85e614..1aaf3485589 100644 --- a/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs +++ b/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs @@ -364,6 +364,7 @@ public override Debugger Debugger } private static string s_debugPreferenceCachePath = Path.Combine(Path.Combine(Platform.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "WindowsPowerShell"), "DebugPreference.clixml"); + private static object s_debugPreferenceLockObject = new object(); /// diff --git a/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs b/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs index 93cd99d92b6..2e159a83b6e 100644 --- a/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs +++ b/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs @@ -1106,6 +1106,7 @@ private LocalRunspace LocalRunspace private bool _useExternalInput; private PipelineWriter _oldExternalErrorOutput; + private PipelineWriter _oldExternalSuccessOutput; #if !UNIX @@ -1284,8 +1285,11 @@ public void Dispose() } private Thread _worker; + private ThreadStart _workItem; + private AutoResetEvent _workItemReady; + private bool _closed; } @@ -1306,6 +1310,7 @@ internal class PipelineStopper /// Object used for synchronization. /// private object _syncRoot = new object(); + private LocalPipeline _localPipeline; /// diff --git a/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs index 79f4bcff66a..035c3762a0b 100644 --- a/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs +++ b/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs @@ -22,6 +22,7 @@ struct Coordinates #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private int x; + private int y; #endregion @@ -214,6 +215,7 @@ struct Size #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private int width; + private int height; #endregion @@ -507,8 +509,11 @@ struct KeyInfo #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private int virtualKeyCode; + private char character; + private ControlKeyStates controlKeyState; + private bool keyDown; #endregion @@ -718,8 +723,11 @@ struct Rectangle #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private int left; + private int top; + private int right; + private int bottom; #endregion @@ -991,8 +999,11 @@ struct BufferCell #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private char character; + private ConsoleColor foregroundColor; + private ConsoleColor backgroundColor; + private BufferCellType bufferCellType; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs index 2efd4d3c154..2bdad3f7b55 100644 --- a/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs +++ b/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs @@ -423,6 +423,7 @@ internal void IgnoreCommand(string commandText, InvocationInfo invocation) private sealed class TranscribeOnlyCookie : IDisposable { private PSHostUserInterface _ui; + private bool _disposed = false; public TranscribeOnlyCookie(PSHostUserInterface ui) @@ -977,6 +978,7 @@ internal static TranscriptionOption GetSystemTranscriptOption(TranscriptionOptio } internal static TranscriptionOption systemTranscript = null; + private static object s_systemTranscriptLock = new object(); private static Lazy s_transcriptionSettingCache = new Lazy( @@ -1079,8 +1081,11 @@ internal List Transcripts } internal TranscriptionOption SystemTranscript { get; set; } + internal string CommandBeingIgnored { get; set; } + internal bool IsHelperCommand { get; set; } + internal string PromptText { get; set; } } diff --git a/src/System.Management.Automation/engine/hostifaces/PSCommand.cs b/src/System.Management.Automation/engine/hostifaces/PSCommand.cs index 781e53eaf51..30cd9f76dec 100644 --- a/src/System.Management.Automation/engine/hostifaces/PSCommand.cs +++ b/src/System.Management.Automation/engine/hostifaces/PSCommand.cs @@ -16,7 +16,9 @@ public sealed class PSCommand #region Private Fields private PowerShell _owner; + private CommandCollection _commands; + private Command _currentCommand; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs b/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs index 51d74dcc269..eb3bda60439 100644 --- a/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs +++ b/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs @@ -122,9 +122,13 @@ public class PSDataCollection : IList, ICollection, IEnumerable, ILi #region Private Data private IList _data; + private ManualResetEvent _readWaitHandle; + private bool _isOpen = true; + private bool _releaseOnEnumeration; + private bool _isEnumerated; // a counter to keep track of active PowerShell instances // using this buffer. @@ -145,7 +149,9 @@ public class PSDataCollection : IList, ICollection, IEnumerable, ILi private bool _refCountIncrementedForBlockingEnumerator = false; private int _countNewData = 0; + private int _dataAddedFrequency = 1; + private Guid _sourceGuid = Guid.Empty; #endregion @@ -1399,6 +1405,7 @@ private void RaiseEvents(Guid psInstanceId, int index) } private Guid _lastPsInstanceId; + private int _lastIndex; private void RaiseDataAddingEvent(Guid psInstanceId, object itemAdded) @@ -1842,8 +1849,11 @@ internal sealed class PSDataCollectionEnumerator : IBlockingEnumerator #region Private Data private W _currentElement; + private int _index; + private PSDataCollection _collToEnumerate; + private bool _neverBlock; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/PSTask.cs b/src/System.Management.Automation/engine/hostifaces/PSTask.cs index 6bf8a74b839..d64e7f2f1ac 100644 --- a/src/System.Management.Automation/engine/hostifaces/PSTask.cs +++ b/src/System.Management.Automation/engine/hostifaces/PSTask.cs @@ -313,12 +313,19 @@ internal abstract class PSTaskBase : IDisposable #region Members private readonly ScriptBlock _scriptBlockToRun; + private readonly Dictionary _usingValuesMap; + private readonly object _dollarUnderbar; + private readonly int _id; + private readonly string _currentLocationPath; + private Runspace _runspace; + protected PowerShell _powershell; + protected PSDataCollection _output; public const string RunspaceName = "PSTask"; @@ -509,7 +516,9 @@ internal sealed class PSTaskDataStreamWriter : IDisposable #region Members private readonly PSCmdlet _cmdlet; + private readonly PSDataCollection _dataStream; + private readonly int _cmdletThreadId; #endregion @@ -638,19 +647,31 @@ internal sealed class PSTaskPool : IDisposable #region Members private readonly ManualResetEvent _addAvailable; + private readonly int _sizeLimit; + private readonly ManualResetEvent _stopAll; + private readonly object _syncObject; + private readonly Dictionary _taskPool; + private readonly ConcurrentQueue _runspacePool; + private readonly ConcurrentDictionary _activeRunspaces; + private readonly WaitHandle[] _waitHandles; + private readonly bool _useRunspacePool; + private bool _isOpen; + private bool _stopping; + private int _createdRunspaceCount; private const int AddAvailable = 0; + private const int Stop = 1; #endregion @@ -979,7 +1000,9 @@ public sealed class PSTaskJob : Job #region Members private readonly PSTaskPool _taskPool; + private bool _isOpen; + private bool _stopSignaled; #endregion @@ -1172,6 +1195,7 @@ internal sealed class PSTaskChildDebugger : Debugger #region Members private readonly Debugger _wrappedDebugger; + private readonly string _jobName; #endregion @@ -1433,6 +1457,7 @@ internal sealed class PSTaskChildJob : Job, IJobDebugger #region Members private readonly PSJobTask _task; + private PSTaskChildDebugger _jobDebuggerWrapper; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/PowerShell.cs b/src/System.Management.Automation/engine/hostifaces/PowerShell.cs index 646f289076c..f4b4ad2e2f7 100644 --- a/src/System.Management.Automation/engine/hostifaces/PowerShell.cs +++ b/src/System.Management.Automation/engine/hostifaces/PowerShell.cs @@ -579,28 +579,39 @@ public sealed class PowerShell : IDisposable private PSCommand _psCommand; // worker object which does the invoke private Worker _worker; + private PowerShellAsyncResult _invokeAsyncResult; + private PowerShellAsyncResult _stopAsyncResult; + private PowerShellAsyncResult _batchAsyncResult; + private PSInvocationSettings _batchInvocationSettings; + private PSCommand _backupPSCommand; + private object _rsConnection; private PSDataCollection _errorBuffer; private bool _isDisposed; + private object _syncObject = new object(); // client remote powershell if the powershell // is executed with a remote runspace pool private ConnectCommandInfo _connectCmdInfo; + private bool _commandInvokedSynchronously = false; + private bool _isBatching = false; + private bool _stopBatchExecution = false; // Delegates for asynchronous invocation/termination of PowerShell commands private readonly Func> _endInvokeMethod; + private readonly Action _endStopMethod; #endregion @@ -5316,11 +5327,17 @@ private RemoteRunspacePoolInternal GetRemoteRunspacePoolInternal() private sealed class Worker { private ObjectStreamBase _inputStream; + private ObjectStreamBase _outputStream; + private ObjectStreamBase _errorStream; + private PSInvocationSettings _settings; + private bool _isNotActive; + private PowerShell _shell; + private object _syncObject = new object(); /// @@ -6146,7 +6163,9 @@ public void ClearStreams() internal class PowerShellStopper : IDisposable { private PipelineBase _pipeline; + private PowerShell _powerShell; + private EventHandler _eventHandler; internal PowerShellStopper(ExecutionContext context, PowerShell powerShell) diff --git a/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs b/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs index 35029df1e06..21b64caa0b1 100644 --- a/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs +++ b/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs @@ -17,13 +17,19 @@ public sealed class PowerShellProcessInstance : IDisposable #region Fields private readonly ProcessStartInfo _startInfo; + private RunspacePool _runspacePool; + private readonly object _syncObject = new object(); + private bool _started; + private bool _isDisposed; + private bool _processExited; internal static readonly string PwshExePath; + internal static readonly string WinPwshExePath; #endregion Fields diff --git a/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs b/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs index ae97cd8e334..aa8b1afa916 100644 --- a/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs +++ b/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs @@ -505,10 +505,13 @@ public sealed class RunspacePool : IDisposable #region Private Data private RunspacePoolInternal _internalPool; + private object _syncObject = new object(); private event EventHandler InternalStateChanged = null; + private event EventHandler InternalForwardEvent = null; + private event EventHandler InternalRunspaceCreated = null; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs b/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs index aa4252cfcb1..a5277459043 100644 --- a/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs +++ b/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs @@ -21,25 +21,38 @@ internal class RunspacePoolInternal #region Private data protected int maxPoolSz; + protected int minPoolSz; // we need total active runspaces to avoid lock() statements everywhere protected int totalRunspaces; + protected List runspaceList = new List(); // info of all the runspaces in the pool. + protected Stack pool; // stack of runspaces that are available. + protected Queue runspaceRequestQueue; // request queue. // let requesters request on the runspaceRequestQueue..internally // pool services on this queue. protected Queue ultimateRequestQueue; + protected RunspacePoolStateInfo stateInfo; + protected InitialSessionState _initialSessionState; + protected PSHost host; + protected Guid instanceId; + private bool _isDisposed; + protected bool isServicingRequests; + protected object syncObject = new object(); private static readonly TimeSpan s_defaultCleanupPeriod = new TimeSpan(0, 15, 0); // 15 minutes. + private TimeSpan _cleanupInterval; + private Timer _cleanupTimer; #endregion diff --git a/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs b/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs index df15ce6313e..6f7cbc181db 100644 --- a/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs +++ b/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs @@ -776,7 +776,9 @@ public ExecutionEventQueueItem(PipelineStateInfo pipelineStateInfo, RunspaceAvai } public PipelineStateInfo PipelineStateInfo; + public RunspaceAvailability CurrentRunspaceAvailability; + public RunspaceAvailability NewRunspaceAvailability; } diff --git a/src/System.Management.Automation/engine/interpreter/ArrayOperations.cs b/src/System.Management.Automation/engine/interpreter/ArrayOperations.cs index 8d8ffd8468f..859e6a4e0c4 100644 --- a/src/System.Management.Automation/engine/interpreter/ArrayOperations.cs +++ b/src/System.Management.Automation/engine/interpreter/ArrayOperations.cs @@ -60,6 +60,7 @@ public override int Run(InterpretedFrame frame) internal sealed class NewArrayBoundsInstruction : Instruction { private readonly Type _elementType; + private readonly int _rank; internal NewArrayBoundsInstruction(Type elementType, int rank) diff --git a/src/System.Management.Automation/engine/interpreter/BranchLabel.cs b/src/System.Management.Automation/engine/interpreter/BranchLabel.cs index 919a7b06106..f2c2cf444ec 100644 --- a/src/System.Management.Automation/engine/interpreter/BranchLabel.cs +++ b/src/System.Management.Automation/engine/interpreter/BranchLabel.cs @@ -22,7 +22,9 @@ namespace System.Management.Automation.Interpreter internal struct RuntimeLabel { public readonly int Index; + public readonly int StackDepth; + public readonly int ContinuationStackDepth; public RuntimeLabel(int index, int continuationStackDepth, int stackDepth) @@ -41,11 +43,15 @@ public override string ToString() internal sealed class BranchLabel { internal const int UnknownIndex = Int32.MinValue; + internal const int UnknownDepth = Int32.MinValue; internal int _labelIndex = UnknownIndex; + internal int _targetIndex = UnknownIndex; + internal int _stackDepth = UnknownDepth; + internal int _continuationStackDepth = UnknownDepth; // Offsets of forward branching instructions targeting this label diff --git a/src/System.Management.Automation/engine/interpreter/CallInstruction.cs b/src/System.Management.Automation/engine/interpreter/CallInstruction.cs index d351a08bfd4..48449de2f94 100644 --- a/src/System.Management.Automation/engine/interpreter/CallInstruction.cs +++ b/src/System.Management.Automation/engine/interpreter/CallInstruction.cs @@ -262,6 +262,7 @@ public override string ToString() internal sealed partial class MethodInfoCallInstruction : CallInstruction { private readonly MethodInfo _target; + private readonly int _argumentCount; public override MethodInfo Info { get { return _target; } } diff --git a/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs b/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs index 56aca65df37..45f51d6b713 100644 --- a/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs +++ b/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs @@ -29,6 +29,7 @@ namespace System.Management.Automation.Interpreter internal abstract class OffsetInstruction : Instruction { internal const int Unknown = Int32.MinValue; + internal const int CacheSize = 32; // the offset to jump to (relative to this instruction): @@ -167,6 +168,7 @@ public override Instruction[] Cache } internal readonly bool _hasResult; + internal readonly bool _hasValue; internal BranchInstruction() @@ -308,6 +310,7 @@ public override int Run(InterpretedFrame frame) internal sealed class EnterTryCatchFinallyInstruction : IndexedBranchInstruction { private readonly bool _hasFinally = false; + private TryCatchFinallyHandler _tryHandler; internal void SetTryHandler(TryCatchFinallyHandler tryHandler) @@ -520,6 +523,7 @@ public override int Run(InterpretedFrame frame) internal sealed class EnterExceptionHandlerInstruction : Instruction { internal static readonly EnterExceptionHandlerInstruction Void = new EnterExceptionHandlerInstruction(false); + internal static readonly EnterExceptionHandlerInstruction NonVoid = new EnterExceptionHandlerInstruction(true); // True if try-expression is non-void. @@ -598,6 +602,7 @@ public override int Run(InterpretedFrame frame) internal sealed class LeaveFaultInstruction : Instruction { internal static readonly Instruction NonVoid = new LeaveFaultInstruction(true); + internal static readonly Instruction Void = new LeaveFaultInstruction(false); private readonly bool _hasValue; @@ -632,8 +637,11 @@ public override int Run(InterpretedFrame frame) internal sealed class ThrowInstruction : Instruction { internal static readonly ThrowInstruction Throw = new ThrowInstruction(true, false); + internal static readonly ThrowInstruction VoidThrow = new ThrowInstruction(false, false); + internal static readonly ThrowInstruction Rethrow = new ThrowInstruction(true, true); + internal static readonly ThrowInstruction VoidRethrow = new ThrowInstruction(false, true); private readonly bool _hasResult, _rethrow; @@ -695,10 +703,15 @@ public override int Run(InterpretedFrame frame) internal sealed class EnterLoopInstruction : Instruction { private readonly int _instructionIndex; + private Dictionary _variables; + private Dictionary _closureVariables; + private PowerShellLoopExpression _loop; + private int _loopEnd; + private int _compilationThreshold; internal EnterLoopInstruction(PowerShellLoopExpression loop, LocalVariables locals, int compilationThreshold, int instructionIndex) diff --git a/src/System.Management.Automation/engine/interpreter/DynamicInstructionN.cs b/src/System.Management.Automation/engine/interpreter/DynamicInstructionN.cs index 3d4686628cf..911ad30d76a 100644 --- a/src/System.Management.Automation/engine/interpreter/DynamicInstructionN.cs +++ b/src/System.Management.Automation/engine/interpreter/DynamicInstructionN.cs @@ -20,9 +20,13 @@ namespace System.Management.Automation.Interpreter internal sealed partial class DynamicInstructionN : Instruction { private readonly CallInstruction _target; + private readonly object _targetDelegate; + private readonly CallSite _site; + private readonly int _argumentCount; + private readonly bool _isVoid; public DynamicInstructionN(Type delegateType, CallSite site) diff --git a/src/System.Management.Automation/engine/interpreter/DynamicSplatInstruction.cs b/src/System.Management.Automation/engine/interpreter/DynamicSplatInstruction.cs index ab7aa891a26..84de1f79d21 100644 --- a/src/System.Management.Automation/engine/interpreter/DynamicSplatInstruction.cs +++ b/src/System.Management.Automation/engine/interpreter/DynamicSplatInstruction.cs @@ -23,6 +23,7 @@ namespace System.Management.Automation.Interpreter internal sealed class DynamicSplatInstruction : Instruction { private readonly CallSite> _site; + private readonly int _argumentCount; internal DynamicSplatInstruction(int argumentCount, CallSite> site) diff --git a/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs b/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs index 286fce26f15..8861429f6dc 100644 --- a/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs +++ b/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs @@ -53,11 +53,17 @@ internal static InstructionFactory GetFactory(Type type) } protected internal abstract Instruction GetArrayItem(); + protected internal abstract Instruction SetArrayItem(); + protected internal abstract Instruction TypeIs(); + protected internal abstract Instruction TypeAs(); + protected internal abstract Instruction DefaultValue(); + protected internal abstract Instruction NewArray(); + protected internal abstract Instruction NewArrayInit(int elementCount); } @@ -67,11 +73,17 @@ internal sealed class InstructionFactory : InstructionFactory public static readonly InstructionFactory Factory = new InstructionFactory(); private Instruction _getArrayItem; + private Instruction _setArrayItem; + private Instruction _typeIs; + private Instruction _defaultValue; + private Instruction _newArray; + private Instruction _typeAs; + private Instruction[] _newArrayInit; // This number is somewhat arbitrary - trying to avoid some gc without keeping // objects (instructions) around that aren't used that often. diff --git a/src/System.Management.Automation/engine/interpreter/InstructionList.cs b/src/System.Management.Automation/engine/interpreter/InstructionList.cs index 9617c746359..fc205344763 100644 --- a/src/System.Management.Automation/engine/interpreter/InstructionList.cs +++ b/src/System.Management.Automation/engine/interpreter/InstructionList.cs @@ -27,9 +27,13 @@ namespace System.Management.Automation.Interpreter internal struct InstructionArray { internal readonly int MaxStackDepth; + internal readonly int MaxContinuationDepth; + internal readonly Instruction[] Instructions; + internal readonly object[] Objects; + internal readonly RuntimeLabel[] Labels; // list of (instruction index, cookie) sorted by instruction index: @@ -85,13 +89,19 @@ public InstructionList.DebugView.InstructionView[] A0 internal sealed class InstructionList { private readonly List _instructions = new List(); + private List _objects; private int _currentStackDepth; + private int _maxStackDepth; + private int _currentContinuationsDepth; + private int _maxContinuationDepth; + private int _runtimeLabelCount; + private List _labels; // list of (instruction index, cookie) sorted by instruction index: @@ -159,9 +169,13 @@ internal static InstructionView[] GetInstructionViews(IList instruc internal struct InstructionView { private readonly int _index; + private readonly int _stackDepth; + private readonly int _continuationsDepth; + private readonly string _name; + private readonly Instruction _instruction; internal string GetName() @@ -323,13 +337,19 @@ public InstructionArray ToArray() #region Stack Operations private const int PushIntMinCachedValue = -100; + private const int PushIntMaxCachedValue = 100; + private const int CachedObjectCount = 256; private static Instruction s_null; + private static Instruction s_true; + private static Instruction s_false; + private static Instruction[] s_ints; + private static Instruction[] s_loadObjectCached; public void EmitLoad(object value) @@ -434,17 +454,29 @@ internal void SwitchToBoxed(int index, int instructionIndex) private const int LocalInstrCacheSize = 64; private static Instruction[] s_loadLocal; + private static Instruction[] s_loadLocalBoxed; + private static Instruction[] s_loadLocalFromClosure; + private static Instruction[] s_loadLocalFromClosureBoxed; + private static Instruction[] s_assignLocal; + private static Instruction[] s_storeLocal; + private static Instruction[] s_assignLocalBoxed; + private static Instruction[] s_storeLocalBoxed; + private static Instruction[] s_assignLocalToClosure; + private static Instruction[] s_initReference; + private static Instruction[] s_initImmutableRefBox; + private static Instruction[] s_parameterBox; + private static Instruction[] s_parameter; public void EmitLoadLocal(int index) diff --git a/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs b/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs index d4d6923da81..465a07735a2 100644 --- a/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs +++ b/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs @@ -31,13 +31,16 @@ internal sealed class InterpretedFrame public static readonly ThreadLocal CurrentFrame = new ThreadLocal(); internal readonly Interpreter Interpreter; + internal InterpretedFrame _parent; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")] private int[] _continuations; private int _continuationIndex; + private int _pendingContinuation; + private object _pendingValue; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")] @@ -47,6 +50,7 @@ internal sealed class InterpretedFrame public readonly StrongBox[] Closure; public int StackIndex; + public int InstructionIndex; internal InterpretedFrame(Interpreter interpreter, StrongBox[] closure) @@ -291,6 +295,7 @@ internal void PopPendingContinuation() } private static MethodInfo s_goto; + private static MethodInfo s_voidGoto; internal static MethodInfo GotoMethod diff --git a/src/System.Management.Automation/engine/interpreter/Interpreter.cs b/src/System.Management.Automation/engine/interpreter/Interpreter.cs index 8afdfe69b3d..127cbbe29b4 100644 --- a/src/System.Management.Automation/engine/interpreter/Interpreter.cs +++ b/src/System.Management.Automation/engine/interpreter/Interpreter.cs @@ -39,9 +39,11 @@ internal sealed class Interpreter internal readonly int _compilationThreshold; internal readonly object[] _objects; + internal readonly RuntimeLabel[] _labels; internal readonly string _name; + internal readonly DebugInfo[] _debugInfos; internal Interpreter(string name, LocalVariables locals, HybridReferenceDictionary labelMapping, diff --git a/src/System.Management.Automation/engine/interpreter/LabelInfo.cs b/src/System.Management.Automation/engine/interpreter/LabelInfo.cs index a8518099824..b4fd9757224 100644 --- a/src/System.Management.Automation/engine/interpreter/LabelInfo.cs +++ b/src/System.Management.Automation/engine/interpreter/LabelInfo.cs @@ -276,13 +276,18 @@ internal enum LabelScopeKind // these correspond to the node of the same name Block, + Switch, + Lambda, + Try, // these correspond to the part of the try block we're in Catch, + Finally, + Filter, // the catch-all value for any other expression type @@ -305,7 +310,9 @@ internal enum LabelScopeKind internal sealed class LabelScopeInfo { private HybridReferenceDictionary _labels; // lazily allocated, we typically use this only once every 6th-7th block + internal readonly LabelScopeKind Kind; + internal readonly LabelScopeInfo Parent; internal LabelScopeInfo(LabelScopeInfo parent, LabelScopeKind kind) diff --git a/src/System.Management.Automation/engine/interpreter/LightCompiler.cs b/src/System.Management.Automation/engine/interpreter/LightCompiler.cs index e05965cb8ff..8496f7d7ec9 100644 --- a/src/System.Management.Automation/engine/interpreter/LightCompiler.cs +++ b/src/System.Management.Automation/engine/interpreter/LightCompiler.cs @@ -30,10 +30,15 @@ namespace System.Management.Automation.Interpreter internal sealed class ExceptionHandler { public readonly Type ExceptionType; + public readonly int StartIndex; + public readonly int EndIndex; + public readonly int LabelIndex; + public readonly int HandlerStartIndex; + public readonly int HandlerEndIndex; internal TryCatchFinallyHandler Parent = null; @@ -103,9 +108,13 @@ public override string ToString() internal sealed class TryCatchFinallyHandler { internal readonly int TryStartIndex = Instruction.UnknownInstrIndex; + internal readonly int TryEndIndex = Instruction.UnknownInstrIndex; + internal readonly int FinallyStartIndex = Instruction.UnknownInstrIndex; + internal readonly int FinallyEndIndex = Instruction.UnknownInstrIndex; + internal readonly int GotoEndTargetIndex = Instruction.UnknownInstrIndex; private readonly ExceptionHandler[] _handlers; @@ -187,9 +196,13 @@ internal class DebugInfo // TODO: readonly public int StartLine, EndLine; + public int Index; + public string FileName; + public bool IsClear; + private static readonly DebugInfoComparer s_debugComparer = new DebugInfoComparer(); private class DebugInfoComparer : IComparer @@ -272,10 +285,13 @@ internal sealed class LightCompiler private readonly int _compilationThreshold; private readonly InstructionList _instructions; + private readonly LocalVariables _locals = new LocalVariables(); private readonly List _debugInfos = new List(); + private readonly HybridReferenceDictionary _treeLabels = new HybridReferenceDictionary(); + private LabelScopeInfo _labelBlock = new LabelScopeInfo(null, LabelScopeKind.Lambda); private readonly Stack _exceptionForRethrowStack = new Stack(); diff --git a/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs b/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs index 5c96d2f6870..83a32ca5fe7 100644 --- a/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs +++ b/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs @@ -31,11 +31,14 @@ internal sealed class LightDelegateCreator { // null if we are forced to compile private readonly Interpreter _interpreter; + private readonly Expression _lambda; // Adaptive compilation support: private Type _compiledDelegateType; + private Delegate _compiled; + private readonly object _compileLock = new object(); internal LightDelegateCreator(Interpreter interpreter, LambdaExpression lambda) diff --git a/src/System.Management.Automation/engine/interpreter/LightLambda.cs b/src/System.Management.Automation/engine/interpreter/LightLambda.cs index 3bf38da35b9..d660bb9458b 100644 --- a/src/System.Management.Automation/engine/interpreter/LightLambda.cs +++ b/src/System.Management.Automation/engine/interpreter/LightLambda.cs @@ -43,12 +43,16 @@ internal LightLambdaCompileEventArgs(Delegate compiled) internal partial class LightLambda { private readonly StrongBox[] _closure; + private readonly Interpreter _interpreter; + private static readonly CacheDict> s_runCache = new CacheDict>(100); // Adaptive compilation support private readonly LightDelegateCreator _delegateCreator; + private Delegate _compiled; + private int _compilationThreshold; /// diff --git a/src/System.Management.Automation/engine/interpreter/LightLambdaClosureVisitor.cs b/src/System.Management.Automation/engine/interpreter/LightLambdaClosureVisitor.cs index 00fe0b95c77..85665388fc9 100644 --- a/src/System.Management.Automation/engine/interpreter/LightLambdaClosureVisitor.cs +++ b/src/System.Management.Automation/engine/interpreter/LightLambdaClosureVisitor.cs @@ -252,6 +252,7 @@ protected override Expression VisitExtension(Expression node) private sealed class MergedRuntimeVariables : IRuntimeVariables { private readonly IRuntimeVariables _first; + private readonly IRuntimeVariables _second; // For reach item, the index into the first or second list diff --git a/src/System.Management.Automation/engine/interpreter/LocalVariables.cs b/src/System.Management.Automation/engine/interpreter/LocalVariables.cs index 97908c8b2b6..e5461b9ce1a 100644 --- a/src/System.Management.Automation/engine/interpreter/LocalVariables.cs +++ b/src/System.Management.Automation/engine/interpreter/LocalVariables.cs @@ -28,9 +28,11 @@ namespace System.Management.Automation.Interpreter internal sealed class LocalVariable { private const int IsBoxedFlag = 1; + private const int InClosureFlag = 2; public readonly int Index; + private int _flags; public bool IsBoxed @@ -81,6 +83,7 @@ public override string ToString() internal struct LocalDefinition { private readonly int _index; + private readonly ParameterExpression _parameter; internal LocalDefinition(int localIndex, ParameterExpression parameter) @@ -140,6 +143,7 @@ public override int GetHashCode() internal sealed class LocalVariables { private readonly HybridReferenceDictionary _variables = new HybridReferenceDictionary(); + private Dictionary _closureVariables; private int _localCount, _maxLocalCount; @@ -309,9 +313,13 @@ internal LocalVariable AddClosureVariable(ParameterExpression variable) private sealed class VariableScope { public readonly int Start; + public int Stop = Int32.MaxValue; + public readonly LocalVariable Variable; + public readonly VariableScope Parent; + public List ChildScopes; public VariableScope(LocalVariable variable, int start, VariableScope parent) diff --git a/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs b/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs index 6ff0e36f5c3..5b437b02cfa 100644 --- a/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs +++ b/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs @@ -48,12 +48,17 @@ public override string ToString() } private readonly ParameterExpression _frameDataVar; + private readonly ParameterExpression _frameClosureVar; + private readonly ParameterExpression _frameVar; + private readonly LabelTarget _returnLabel; // locals and closure variables defined outside the loop private readonly Dictionary _outerVariables, _closureVariables; + private readonly PowerShellLoopExpression _loop; + private List _temps; // tracks variables that flow in and flow out for initialization and private readonly Dictionary _loopVariables; @@ -61,7 +66,9 @@ public override string ToString() private HashSet _loopLocals; private readonly HybridReferenceDictionary _labelMapping; + private readonly int _loopStartInstructionIndex; + private readonly int _loopEndInstructionIndex; internal LoopCompiler(PowerShellLoopExpression loop, diff --git a/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs b/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs index 926f558a72b..68f0977d2a8 100644 --- a/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs +++ b/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs @@ -18,6 +18,7 @@ namespace System.Management.Automation.Interpreter internal class UpdatePositionInstruction : Instruction { private readonly int _sequencePoint; + private readonly bool _checkBreakpoints; private UpdatePositionInstruction(bool checkBreakpoints, int sequencePoint) diff --git a/src/System.Management.Automation/engine/interpreter/TypeOperations.cs b/src/System.Management.Automation/engine/interpreter/TypeOperations.cs index 190e89d6e0b..d3582933e64 100644 --- a/src/System.Management.Automation/engine/interpreter/TypeOperations.cs +++ b/src/System.Management.Automation/engine/interpreter/TypeOperations.cs @@ -57,6 +57,7 @@ public override int Run(InterpretedFrame frame) internal sealed class NewInstruction : Instruction { private readonly ConstructorInfo _constructor; + private readonly int _argCount; public NewInstruction(ConstructorInfo constructor) diff --git a/src/System.Management.Automation/engine/interpreter/Utilities.cs b/src/System.Management.Automation/engine/interpreter/Utilities.cs index 2ff8dbf9790..f2d56521004 100644 --- a/src/System.Management.Automation/engine/interpreter/Utilities.cs +++ b/src/System.Management.Automation/engine/interpreter/Utilities.cs @@ -237,9 +237,11 @@ internal static object BooleanToObject(bool b) } internal static readonly MethodInfo BooleanToObjectMethod = typeof(ScriptingRuntimeHelpers).GetMethod("BooleanToObject"); + internal static readonly MethodInfo Int32ToObjectMethod = typeof(ScriptingRuntimeHelpers).GetMethod("Int32ToObject"); internal static readonly object True = true; + internal static readonly object False = false; internal static object GetPrimitiveDefaultValue(Type type) @@ -373,7 +375,9 @@ private static bool TryGetAssociatedStackTraces(Exception e, out List where TKey : class { private KeyValuePair[] _keysAndValues; + private Dictionary _dict; + private int _count; private const int _arraySize = 10; @@ -580,7 +584,9 @@ public TValue this[TKey key] internal class CacheDict { private readonly Dictionary _dict = new Dictionary(); + private readonly LinkedList _list = new LinkedList(); + private readonly int _maxSize; /// @@ -671,6 +677,7 @@ public TValue this[TKey key] private struct KeyInfo { internal readonly TValue Value; + internal readonly LinkedListNode List; internal KeyInfo(TValue value, LinkedListNode list) @@ -684,7 +691,9 @@ internal KeyInfo(TValue value, LinkedListNode list) internal class ThreadLocal { private StorageInfo[] _stores; // array of storage indexed by managed thread ID + private static readonly StorageInfo[] s_updating = Array.Empty(); // a marker used when updating the array + private readonly bool _refCounted; public ThreadLocal() @@ -886,6 +895,7 @@ private StorageInfo CreateStorageInfo() internal sealed class StorageInfo { internal readonly Thread Thread; // the thread that owns the StorageInfo + public T Value; // the current value for the owning thread internal StorageInfo(Thread curThread) @@ -949,8 +959,11 @@ public static void NotEmpty(string str) internal enum ExpressionAccess { None = 0, + Read = 1, + Write = 2, + ReadWrite = Read | Write, } diff --git a/src/System.Management.Automation/engine/lang/interface/PSParser.cs b/src/System.Management.Automation/engine/lang/interface/PSParser.cs index 2b6886dbce6..f66ffb3d272 100644 --- a/src/System.Management.Automation/engine/lang/interface/PSParser.cs +++ b/src/System.Management.Automation/engine/lang/interface/PSParser.cs @@ -76,6 +76,7 @@ private PSParser() #region Parsing Logic private readonly List _tokenList = new List(); + private Language.ParseError[] _errors; private void Parse(string script) diff --git a/src/System.Management.Automation/engine/lang/parserutils.cs b/src/System.Management.Automation/engine/lang/parserutils.cs index 6a3a533b121..09ab9675ba3 100644 --- a/src/System.Management.Automation/engine/lang/parserutils.cs +++ b/src/System.Management.Automation/engine/lang/parserutils.cs @@ -277,11 +277,15 @@ static ParserOps() } private const int _MinCache = -100; + private const int _MaxCache = 1000; private static readonly object[] s_integerCache = new object[_MaxCache - _MinCache]; + private static readonly string[] s_chars = new string[255]; + internal static readonly object _TrueObject = (object)true; + internal static readonly object _FalseObject = (object)false; internal static string CharToString(char ch) @@ -424,6 +428,7 @@ internal static object ImplicitOp(object lval, object rval, string op, IScriptEx private enum SplitImplOptions { None = 0x00, + TrimContent = 0x01, } diff --git a/src/System.Management.Automation/engine/lang/scriptblock.cs b/src/System.Management.Automation/engine/lang/scriptblock.cs index 539be28fe2d..8a54e09208c 100644 --- a/src/System.Management.Automation/engine/lang/scriptblock.cs +++ b/src/System.Management.Automation/engine/lang/scriptblock.cs @@ -619,7 +619,9 @@ internal void InvokeAsMemberFunction(object instance, object[] args) internal enum ErrorHandlingBehavior { WriteToCurrentErrorPipe = 1, + WriteToExternalErrorPipe = 2, + SwallowErrors = 3, } @@ -1115,7 +1117,9 @@ internal SteppablePipeline(ExecutionContext context, PipelineProcessor pipeline) } private PipelineProcessor _pipeline; + private ExecutionContext _context; + private bool _expectInput; /// @@ -1448,13 +1452,21 @@ internal ScriptBlockInvocationEventArgs( } internal ScriptBlock ScriptBlock { get; set; } + internal bool UseLocalScope { get; set; } + internal ScriptBlock.ErrorHandlingBehavior ErrorHandlingBehavior { get; set; } + internal object DollarUnder { get; set; } + internal object Input { get; set; } + internal object ScriptThis { get; set; } + internal Pipe OutputPipe { get; set; } + internal InvocationInfo InvocationInfo { get; set; } + internal object[] Args { get; set; } /// diff --git a/src/System.Management.Automation/engine/parser/AstVisitor.cs b/src/System.Management.Automation/engine/parser/AstVisitor.cs index 4d24dcf55a3..4a1b1433f26 100644 --- a/src/System.Management.Automation/engine/parser/AstVisitor.cs +++ b/src/System.Management.Automation/engine/parser/AstVisitor.cs @@ -407,8 +407,11 @@ protected AstSearcher(Func callback, bool stopOnFirst, bool searchNes } private readonly Func _callback; + private readonly bool _stopOnFirst; + private readonly bool _searchNestedScriptBlocks; + protected readonly List Results; protected AstVisitAction Check(Ast ast) diff --git a/src/System.Management.Automation/engine/parser/CharTraits.cs b/src/System.Management.Automation/engine/parser/CharTraits.cs index fc45f017afd..7143640f01d 100644 --- a/src/System.Management.Automation/engine/parser/CharTraits.cs +++ b/src/System.Management.Automation/engine/parser/CharTraits.cs @@ -7,20 +7,29 @@ internal static class SpecialChars { // Uncommon whitespace internal const char NoBreakSpace = (char)0x00a0; + internal const char NextLine = (char)0x0085; // Special dashes internal const char EnDash = (char)0x2013; + internal const char EmDash = (char)0x2014; + internal const char HorizontalBar = (char)0x2015; // Special quotes internal const char QuoteSingleLeft = (char)0x2018; // left single quotation mark + internal const char QuoteSingleRight = (char)0x2019; // right single quotation mark + internal const char QuoteSingleBase = (char)0x201a; // single low-9 quotation mark + internal const char QuoteReversed = (char)0x201b; // single high-reversed-9 quotation mark + internal const char QuoteDoubleLeft = (char)0x201c; // left double quotation mark + internal const char QuoteDoubleRight = (char)0x201d; // right double quotation mark + internal const char QuoteLowDoubleLeft = (char)0x201E; // low double left quote used in german. } diff --git a/src/System.Management.Automation/engine/parser/Compiler.cs b/src/System.Management.Automation/engine/parser/Compiler.cs index 25cee9e73e8..753f4a02c76 100644 --- a/src/System.Management.Automation/engine/parser/Compiler.cs +++ b/src/System.Management.Automation/engine/parser/Compiler.cs @@ -29,8 +29,11 @@ internal static class CachedReflectionInfo { // ReSharper disable InconsistentNaming internal const BindingFlags InstanceFlags = BindingFlags.Instance | BindingFlags.NonPublic; + internal const BindingFlags StaticFlags = BindingFlags.Static | BindingFlags.NonPublic; + internal const BindingFlags StaticPublicFlags = BindingFlags.Static | BindingFlags.Public; + internal const BindingFlags InstancePublicFlags = BindingFlags.Instance | BindingFlags.Public; internal static readonly ConstructorInfo ObjectList_ctor = @@ -646,25 +649,45 @@ internal static class CachedReflectionInfo internal static class ExpressionCache { internal static readonly Expression NullConstant = Expression.Constant(null); + internal static readonly Expression NullExecutionContext = Expression.Constant(null, typeof(ExecutionContext)); + internal static readonly Expression NullPSObject = Expression.Constant(null, typeof(PSObject)); + internal static readonly Expression NullEnumerator = Expression.Constant(null, typeof(IEnumerator)); + internal static readonly Expression NullExtent = Expression.Constant(null, typeof(IScriptExtent)); + internal static readonly Expression NullTypeTable = Expression.Constant(null, typeof(TypeTable)); + internal static readonly Expression NullFormatProvider = Expression.Constant(null, typeof(IFormatProvider)); + internal static readonly Expression NullObjectArray = Expression.Constant(null, typeof(object[])); + internal static readonly Expression AutomationNullConstant = Expression.Constant(AutomationNull.Value, typeof(object)); + internal static readonly Expression NullCommandRedirections = Expression.Constant(null, typeof(CommandRedirection[][])); + internal static readonly Expression NullTypeArray = Expression.Constant(null, typeof(Type[])); + internal static readonly Expression NullType = Expression.Constant(null, typeof(Type)); + internal static readonly Expression NullDelegateArray = Expression.Constant(null, typeof(Action[])); + internal static readonly Expression NullPipe = Expression.Constant(new Pipe { NullPipe = true }); + internal static readonly Expression ConstEmptyString = Expression.Constant(string.Empty); + internal static readonly Expression CompareOptionsIgnoreCase = Expression.Constant(CompareOptions.IgnoreCase); + internal static readonly Expression CompareOptionsNone = Expression.Constant(CompareOptions.None); + internal static readonly Expression Ordinal = Expression.Constant(StringComparison.Ordinal); + internal static readonly Expression InvariantCulture = Expression.Constant(CultureInfo.InvariantCulture); + internal static readonly Expression OrdinalIgnoreCaseComparer = Expression.Constant(StringComparer.OrdinalIgnoreCase, typeof(StringComparer)); + internal static readonly Expression CatchAllType = Expression.Constant(typeof(ExceptionHandlingOps.CatchAll), typeof(Type)); // Empty expression is used at the end of blocks to give them the void expression result internal static readonly Expression Empty = Expression.Empty(); @@ -673,6 +696,7 @@ internal static class ExpressionCache Expression.Call(CachedReflectionInfo.LocalPipeline_GetExecutionContextFromTLS); internal static readonly Expression BoxedTrue = Expression.Field(null, typeof(Boxed).GetField("True", BindingFlags.Static | BindingFlags.NonPublic)); + internal static readonly Expression BoxedFalse = Expression.Field(null, typeof(Boxed).GetField("False", BindingFlags.Static | BindingFlags.NonPublic)); private static readonly Expression[] s_intConstants = new Expression[102]; @@ -696,6 +720,7 @@ internal static Expression Constant(int i) } internal static readonly Expression TrueConstant = Expression.Constant(true); + internal static readonly Expression FalseConstant = Expression.Constant(false); internal static Expression Constant(bool b) @@ -771,17 +796,29 @@ internal static string ToDebugString(this Expression expr) internal class FunctionContext { internal ScriptBlock _scriptBlock; + internal string _file; + internal bool _debuggerHidden; + internal bool _debuggerStepThrough; + internal IScriptExtent[] _sequencePoints; + internal ExecutionContext _executionContext; + internal Pipe _outputPipe; + internal BitArray _breakPoints; + internal List _boundBreakpoints; + internal int _currentSequencePointIndex; + internal MutableTuple _localsTuple; + internal List[], Type[]>> _traps = new List[], Type[]>>(); + internal string _functionName; internal IScriptExtent CurrentPosition @@ -803,17 +840,27 @@ internal void PopTrapHandlers() internal class Compiler : ICustomAstVisitor2 { internal static readonly ParameterExpression s_executionContextParameter; + internal static readonly ParameterExpression s_functionContext; + private static readonly ParameterExpression s_returnPipe; + private static readonly Expression s_notDollarQuestion; + private static readonly Expression s_getDollarQuestion; + private static readonly Expression s_setDollarQuestionToTrue; + private static readonly Expression s_callCheckForInterrupts; + private static readonly Expression s_getCurrentPipe; + private static readonly Expression s_currentExceptionBeingHandled; + private static readonly CatchBlock s_catchFlowControl; private static readonly CatchBlock[] s_stmtCatchHandlers; + internal static readonly Type DottedLocalsTupleType = MutableTuple.MakeTupleType(SpecialVariables.AutomaticVariableTypes); internal static readonly Dictionary DottedLocalsNameIndexMap = @@ -904,15 +951,25 @@ internal Compiler() internal ParameterExpression LocalVariablesParameter { get; private set; } private SymbolDocumentInfo _debugSymbolDocument; + internal TypeDefinitionAst _memberFunctionType; + private bool _compilingTrap; + private bool _compilingSingleExpression; + private bool _compilingScriptCmdlet; + private string _currentFunctionName; + private int _switchTupleIndex = VariableAnalysis.Unanalyzed; + private int _foreachTupleIndex = VariableAnalysis.Unanalyzed; + private readonly List _sequencePoints; + private readonly Dictionary _sequencePointIndexMap; + private int _stmtCount; internal bool CompilingMemberFunction { get; set; } @@ -1257,6 +1314,7 @@ internal static RuntimeDefinedParameterDictionary GetParameterMetaData(ReadOnlyC } private static readonly Dictionary s_attributeGeneratorCache = new Dictionary(); + private static readonly Dictionary> s_builtinAttributeGenerator = new Dictionary>(10); private static Delegate GetAttributeGenerator(CallInfo callInfo) @@ -1905,7 +1963,9 @@ internal class DefaultValueExpressionWrapper internal ExpressionAst Expression { get; set; } private Func _delegate; + private IScriptExtent[] _sequencePoints; + private Type LocalsTupleType; internal object GetValue(ExecutionContext context, SessionStateInternal sessionStateInternal, IDictionary usingValues = null) @@ -2204,19 +2264,27 @@ internal LoopGotoTargets(string label, LabelTarget breakLabel, LabelTarget conti } private LabelTarget _returnTarget; + private Expression> _dynamicParamBlockLambda; + private Expression> _beginBlockLambda; + private Expression> _processBlockLambda; + private Expression> _endBlockLambda; private readonly List _loopTargets = new List(); + private bool _generatingWhileOrDoLoop; private enum CaptureAstContext { Condition, + Enumerable, + AssignmentWithResultPreservation, + AssignmentWithoutResultPreservation } @@ -5145,8 +5213,11 @@ public object VisitCatchClause(CatchClauseAst catchClauseAst) private class AutomaticVarSaver { private readonly Compiler _compiler; + private readonly int _automaticVar; + private readonly VariablePath _autoVarPath; + private ParameterExpression _oldValue; internal AutomaticVarSaver(Compiler compiler, VariablePath autoVarPath, int automaticVar) @@ -6649,7 +6720,9 @@ internal class InvokeMemberAssignableValue : IAssignableValue internal InvokeMemberExpressionAst InvokeMemberExpressionAst { get; set; } private ParameterExpression _targetExprTemp; + private ParameterExpression _memberNameExprTemp; + private IEnumerable _argExprTemps; private Expression GetTargetExpr(Compiler compiler) @@ -6728,6 +6801,7 @@ internal class IndexAssignableValue : IAssignableValue internal IndexExpressionAst IndexExpressionAst { get; set; } private ParameterExpression _targetExprTemp; + private ParameterExpression _indexExprTemp; private PSMethodInvocationConstraints GetInvocationConstraints() @@ -6947,8 +7021,11 @@ internal class UpdatePositionExpr : Expression, Interpreter.IInstructionProvider public override ExpressionType NodeType { get { return ExpressionType.Extension; } } private readonly IScriptExtent _extent; + private readonly SymbolDocumentInfo _debugSymbolDocument; + private readonly int _sequencePoint; + private readonly bool _checkBreakpoints; public UpdatePositionExpr(IScriptExtent extent, int sequencePoint, SymbolDocumentInfo debugSymbolDocument, bool checkBreakpoints) diff --git a/src/System.Management.Automation/engine/parser/ConstantValues.cs b/src/System.Management.Automation/engine/parser/ConstantValues.cs index ab01c61a651..c6018c259a5 100644 --- a/src/System.Management.Automation/engine/parser/ConstantValues.cs +++ b/src/System.Management.Automation/engine/parser/ConstantValues.cs @@ -53,7 +53,9 @@ public static bool IsConstant(Ast ast, out object constantValue, bool forAttribu } internal bool CheckingAttributeArgument { get; set; } + internal bool CheckingClassAttributeArguments { get; set; } + internal bool CheckingRequiresArgument { get; set; } public object VisitErrorStatement(ErrorStatementAst errorStatementAst) { return false; } @@ -324,6 +326,7 @@ public object VisitParenExpression(ParenExpressionAst parenExpressionAst) internal class ConstantValueVisitor : ICustomAstVisitor2 { internal bool AttributeArgument { get; set; } + internal bool RequiresArgument { get; set; } [Conditional("DEBUG")] diff --git a/src/System.Management.Automation/engine/parser/PSType.cs b/src/System.Management.Automation/engine/parser/PSType.cs index 1064e7a0d10..ef0ca515cf6 100644 --- a/src/System.Management.Automation/engine/parser/PSType.cs +++ b/src/System.Management.Automation/engine/parser/PSType.cs @@ -17,6 +17,7 @@ namespace System.Management.Automation.Language internal class TypeDefiner { internal const string DynamicClassAssemblyName = "PowerShell Class Assembly"; + internal const string DynamicClassAssemblyFullNamePrefix = "PowerShell Class Assembly,"; private static int s_globalCounter = 0; @@ -25,6 +26,7 @@ internal class TypeDefiner new CustomAttributeBuilder(typeof(HiddenAttribute).GetConstructor(Type.EmptyTypes), Array.Empty()); private static readonly string s_sessionStateKeeperFieldName = "__sessionStateKeeper"; + internal static readonly string SessionStateFieldName = "__sessionState"; private static readonly MethodInfo s_sessionStateKeeper_GetSessionState = @@ -268,16 +270,27 @@ internal static void DefineCustomAttributes(EnumBuilder member, ReadOnlyCollecti private class DefineTypeHelper { private readonly Parser _parser; + internal readonly TypeDefinitionAst _typeDefinitionAst; + internal readonly TypeBuilder _typeBuilder; + internal readonly FieldBuilder _sessionStateField; + internal readonly FieldBuilder _sessionStateKeeperField; + internal readonly ModuleBuilder _moduleBuilder; + internal readonly TypeBuilder _staticHelpersTypeBuilder; + private readonly Dictionary _definedProperties; + private readonly Dictionary>> _definedMethods; + private HashSet> _interfaceProperties; + internal readonly List<(string fieldName, IParameterMetadataProvider bodyAst, bool isStatic)> _fieldsToInitForMemberFunctions; + private bool _baseClassHasDefaultCtor; /// @@ -1011,8 +1024,11 @@ private void DefineMethodBody( private class DefineEnumHelper { private readonly Parser _parser; + private readonly TypeDefinitionAst _enumDefinitionAst; + private readonly ModuleBuilder _moduleBuilder; + private readonly string _typeName; internal DefineEnumHelper(Parser parser, ModuleBuilder module, TypeDefinitionAst enumDefinitionAst, string typeName) diff --git a/src/System.Management.Automation/engine/parser/Parser.cs b/src/System.Management.Automation/engine/parser/Parser.cs index 6f13b768509..78a0d608797 100644 --- a/src/System.Management.Automation/engine/parser/Parser.cs +++ b/src/System.Management.Automation/engine/parser/Parser.cs @@ -22,6 +22,7 @@ namespace System.Management.Automation.Language internal enum ParseMode { Default = 0, + ModuleAnalysis = 1 } @@ -32,10 +33,15 @@ internal enum ParseMode public sealed class Parser { private readonly Tokenizer _tokenizer; + internal Token _ungotToken; + private bool _disableCommaOperator; + private bool _savingTokens; + private bool _inConfiguration; + private ParseMode _parseMode; internal string _fileName; @@ -43,6 +49,7 @@ public sealed class Parser internal bool ProduceV2Tokens { get; set; } internal const string VERBATIM_ARGUMENT = "--%"; + internal const string VERBATIM_PARAMETERNAME = "-%"; // Same as VERBATIM_ARGUMENT w/o the first '-'. internal Parser() @@ -300,6 +307,7 @@ internal static ExpressionAst ScanString(string str) } private string _previousFirstTokenText; + private string _previousLastTokenText; private static bool IgnoreTokenWhenUpdatingPreviousFirstLast(Token token) @@ -6220,9 +6228,13 @@ private ExpressionAst GetSingleCommandArgument(CommandArgumentContext context) private enum CommandArgumentContext { CommandName = 0x01, + CommandNameAfterInvocationOperator = 0x02 | CommandName, + FileName = 0x04, + CommandArgument = 0x08, + SwitchCondition = 0x10, } diff --git a/src/System.Management.Automation/engine/parser/Position.cs b/src/System.Management.Automation/engine/parser/Position.cs index e9f273fed14..3de96f265d0 100644 --- a/src/System.Management.Automation/engine/parser/Position.cs +++ b/src/System.Management.Automation/engine/parser/Position.cs @@ -688,6 +688,7 @@ public ScriptPosition( public sealed class ScriptExtent : IScriptExtent { private ScriptPosition _startPosition; + private ScriptPosition _endPosition; private ScriptExtent() diff --git a/src/System.Management.Automation/engine/parser/SafeValues.cs b/src/System.Management.Automation/engine/parser/SafeValues.cs index 37320de83d1..28e5b78ae13 100644 --- a/src/System.Management.Automation/engine/parser/SafeValues.cs +++ b/src/System.Management.Automation/engine/parser/SafeValues.cs @@ -66,6 +66,7 @@ internal bool IsAstSafe(Ast ast) private uint _visitCount = 0; private const uint MaxVisitCount = 5000; + private const int MaxHashtableKeyCount = 500; // Used to determine if we are being called within a GetPowerShell() context, @@ -361,7 +362,9 @@ internal class GetSafeValueVisitor : ICustomAstVisitor2 internal enum SafeValueContext { Default, + GetPowerShell, + ModuleAnalysis } diff --git a/src/System.Management.Automation/engine/parser/SemanticChecks.cs b/src/System.Management.Automation/engine/parser/SemanticChecks.cs index b7d3bdb8bc8..020085f7cfb 100644 --- a/src/System.Management.Automation/engine/parser/SemanticChecks.cs +++ b/src/System.Management.Automation/engine/parser/SemanticChecks.cs @@ -31,6 +31,7 @@ internal class SemanticChecks : AstVisitor2, IAstPostVisitHandler }; private readonly Stack _memberScopeStack; + private readonly Stack _scopeStack; internal static void CheckAst(Parser parser, ScriptBlockAst ast) @@ -1752,9 +1753,13 @@ private static void CheckKey(Parser parser, PropertyMemberAst propertyMemberAst, internal class RestrictedLanguageChecker : AstVisitor { private readonly Parser _parser; + private readonly IEnumerable _allowedCommands; + private readonly IEnumerable _allowedVariables; + private readonly bool _allVariablesAreAllowed; + private readonly bool _allowEnvironmentVariables; internal RestrictedLanguageChecker(Parser parser, IEnumerable allowedCommands, IEnumerable allowedVariables, bool allowEnvironmentVariables) diff --git a/src/System.Management.Automation/engine/parser/SymbolResolver.cs b/src/System.Management.Automation/engine/parser/SymbolResolver.cs index 42091ba2e7b..891dc65bd41 100644 --- a/src/System.Management.Automation/engine/parser/SymbolResolver.cs +++ b/src/System.Management.Automation/engine/parser/SymbolResolver.cs @@ -17,8 +17,11 @@ namespace System.Management.Automation.Language internal enum ScopeType { Type, // class or enum + Method, // class method + Function, // function + ScriptBlock // script or anonymous script block } @@ -30,6 +33,7 @@ public TypeLookupResult(TypeDefinitionAst type = null) } public TypeDefinitionAst Type { get; set; } + public List ExternalNamespaces { get; set; } public bool IsAmbiguous() @@ -41,12 +45,14 @@ public bool IsAmbiguous() internal class Scope { internal Ast _ast; + internal ScopeType _scopeType; /// /// TypeTable maps namespace (currently it's module name) to the types under this namespace. /// For the types defined in the current namespace (module) we use CURRENT_NAMESPACE as a namespace. /// private readonly Dictionary _typeTable; + private readonly Dictionary _variableTable; internal Scope(IParameterMetadataProvider ast, ScopeType scopeType) @@ -163,6 +169,7 @@ public Ast LookupVariable(VariablePath variablePath) internal class SymbolTable { internal readonly List _scopes; + internal readonly Parser _parser; internal SymbolTable(Parser parser) @@ -277,8 +284,11 @@ public bool IsInMethodScope() internal class SymbolResolver : AstVisitor2, IAstPostVisitHandler { private readonly SymbolResolvePostActionVisitor _symbolResolvePostActionVisitor; + internal readonly SymbolTable _symbolTable; + internal readonly Parser _parser; + internal readonly TypeResolutionState _typeResolutionState; [ThreadStatic] diff --git a/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs b/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs index f49c1fe5cd3..44452439743 100644 --- a/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs +++ b/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs @@ -125,6 +125,7 @@ public int GetHashCode(PSTypeName obj) internal class TypeInferenceContext { public static readonly PSTypeName[] EmptyPSTypeNameArray = Array.Empty(); + private readonly PowerShell _powerShell; public TypeInferenceContext() : this(PowerShell.Create(RunspaceMode.CurrentRunspace)) diff --git a/src/System.Management.Automation/engine/parser/TypeResolver.cs b/src/System.Management.Automation/engine/parser/TypeResolver.cs index 24c949960d1..a653f3e2232 100644 --- a/src/System.Management.Automation/engine/parser/TypeResolver.cs +++ b/src/System.Management.Automation/engine/parser/TypeResolver.cs @@ -519,13 +519,19 @@ internal static Type ResolveType(string strTypeName, out Exception exception) internal class TypeResolutionState { internal static readonly string[] systemNamespace = { "System" }; + internal static readonly Assembly[] emptyAssemblies = Array.Empty(); + internal static readonly TypeResolutionState UsingSystem = new TypeResolutionState(); internal readonly string[] namespaces; + internal readonly Assembly[] assemblies; + private readonly HashSet _typesDefined; + internal readonly int genericArgumentCount; + internal readonly bool attribute; private TypeResolutionState() diff --git a/src/System.Management.Automation/engine/parser/VariableAnalysis.cs b/src/System.Management.Automation/engine/parser/VariableAnalysis.cs index 8b0ab3249df..cf38447d694 100644 --- a/src/System.Management.Automation/engine/parser/VariableAnalysis.cs +++ b/src/System.Management.Automation/engine/parser/VariableAnalysis.cs @@ -25,12 +25,19 @@ internal VariableAnalysisDetails() } public int BitIndex { get; set; } + public int LocalTupleIndex { get; set; } + public Type Type { get; set; } + public string Name { get; set; } + public bool Automatic { get; set; } + public bool PreferenceVariable { get; set; } + public bool Assigned { get; set; } + public List AssociatedAsts { get; private set; } } @@ -350,11 +357,15 @@ internal LoopGotoTargets(string label, Block breakTarget, Block continueTarget) private class Block { internal readonly List _asts = new List(); + private readonly List _successors = new List(); + internal readonly List _predecessors = new List(); internal object _visitData; + internal bool _throws; + internal bool _returns; internal bool _unreachable { get; private set; } @@ -435,7 +446,9 @@ private static void VisitDepthFirstOrder(Block block, List visitData) private class AssignmentTarget : Ast { internal readonly ExpressionAst _targetAst; + internal readonly string _variableName; + internal readonly Type _type; public AssignmentTarget(ExpressionAst targetExpressionAst) @@ -499,11 +512,17 @@ internal static bool AnyVariablesCouldBeAllScope(Dictionary variabl } private Dictionary _variables; + private Block _entryBlock; + private Block _exitBlock; + private Block _currentBlock; + private bool _disableOptimizations; + private readonly List _loopTargets = new List(); + private int _localsAllocated; // Used to analyze an expression that is invoked separately, i.e. a default argument. diff --git a/src/System.Management.Automation/engine/parser/ast.cs b/src/System.Management.Automation/engine/parser/ast.cs index 79d74b9edef..e6eb477f0e3 100644 --- a/src/System.Management.Automation/engine/parser/ast.cs +++ b/src/System.Management.Automation/engine/parser/ast.cs @@ -53,8 +53,11 @@ internal interface IAssignableValue internal interface IParameterMetadataProvider { bool HasAnyScriptBlockAttributes(); + RuntimeDefinedParameterDictionary GetParameterMetadata(bool automaticPositions, ref bool usesCmdletBinding); + IEnumerable GetScriptBlockAttributes(); + IEnumerable GetExperimentalAttributes(); bool UsesCmdletBinding(); @@ -286,6 +289,7 @@ internal void ClearParent() } internal abstract object Accept(ICustomAstVisitor visitor); + internal abstract AstVisitAction InternalVisit(AstVisitor visitor); internal static readonly PSTypeName[] EmptyPSTypeNameArray = Array.Empty(); @@ -770,6 +774,7 @@ public class ScriptBlockAst : Ast, IParameterMetadataProvider Utils.EmptyReadOnlyCollection(); internal bool HadErrors { get; set; } + internal bool IsConfiguration { get; private set; } internal bool PostParseChecksPerformed { get; set; } @@ -3457,7 +3462,9 @@ internal Type GetReturnType() internal enum SpecialMemberFunctionType { None, + DefaultConstructor, + StaticConstructor, } @@ -6463,7 +6470,9 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor) #region Internal methods/properties internal Token LCurlyToken { get; set; } + internal Token ConfigurationToken { get; set; } + internal IEnumerable CustomAttributes { get; set; } /// @@ -6945,10 +6954,15 @@ internal DynamicKeyword Keyword private DynamicKeyword _keyword; internal Token LCurly { get; set; } + internal Token FunctionName { get; set; } + internal ExpressionAst InstanceName { get; set; } + internal ExpressionAst OriginalInstanceName { get; set; } + internal ExpressionAst BodyExpression { get; set; } + internal string ElementName { get; set; } private PipelineAst _commandCallPipelineAst; @@ -8168,8 +8182,11 @@ internal interface ISupportsTypeCaching public sealed class TypeName : ITypeName, ISupportsTypeCaching { internal readonly string _name; + internal Type _type; + internal readonly IScriptExtent _extent; + internal TypeDefinitionAst _typeDefinitionAst; /// @@ -8435,6 +8452,7 @@ Type ISupportsTypeCaching.CachedType public sealed class GenericTypeName : ITypeName, ISupportsTypeCaching { private string _cachedFullName; + private Type _cachedType; /// @@ -8737,6 +8755,7 @@ Type ISupportsTypeCaching.CachedType public sealed class ArrayTypeName : ITypeName, ISupportsTypeCaching { private string _cachedFullName; + private Type _cachedType; /// @@ -9239,6 +9258,7 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor) internal int TupleIndex { get; set; } = VariableAnalysis.Unanalyzed; internal bool Automatic { get; set; } + internal bool Assigned { get; set; } IAssignableValue ISupportsAssignment.GetAssignableValue() diff --git a/src/System.Management.Automation/engine/parser/token.cs b/src/System.Management.Automation/engine/parser/token.cs index bfe7ddbd6a5..e225277e6fe 100644 --- a/src/System.Management.Automation/engine/parser/token.cs +++ b/src/System.Management.Automation/engine/parser/token.cs @@ -1204,7 +1204,9 @@ public static string Text(this TokenKind kind) public class Token { private TokenKind _kind; + private TokenFlags _tokenFlags; + private readonly InternalScriptExtent _scriptExtent; internal Token(InternalScriptExtent scriptExtent, TokenKind kind, TokenFlags tokenFlags) @@ -1294,6 +1296,7 @@ internal override string ToDebugString(int indent) public class ParameterToken : Token { private readonly string _parameterName; + private readonly bool _usedColon; internal ParameterToken(InternalScriptExtent scriptExtent, string parameterName, bool usedColon) diff --git a/src/System.Management.Automation/engine/parser/tokenizer.cs b/src/System.Management.Automation/engine/parser/tokenizer.cs index 3d15ebf4d81..a1cf62d776f 100644 --- a/src/System.Management.Automation/engine/parser/tokenizer.cs +++ b/src/System.Management.Automation/engine/parser/tokenizer.cs @@ -483,8 +483,11 @@ public class DynamicKeywordParameter : DynamicKeywordProperty internal enum TokenizerMode { Command, + Expression, + TypeName, + Signature, // i.e. class or method declaration } @@ -576,12 +579,19 @@ internal enum NumberFormat internal class TokenizerState { internal int NestedTokensAdjustment; + internal string Script; + internal int TokenStart; + internal int CurrentIndex; + internal Token FirstToken; + internal Token LastToken; + internal BitArray SkippedCharOffsets; + internal List TokenList; } @@ -595,10 +605,13 @@ private static readonly Dictionary s_operatorTable = new Dictionary(StringComparer.OrdinalIgnoreCase); private static readonly char s_invalidChar = char.MaxValue; + private static readonly int s_maxNumberOfUnicodeHexDigits = 6; private readonly Parser _parser; + private PositionHelper _positionHelper; + private int _nestedTokensAdjustment; // This BitArray is used to help ensure we get the correct extent in a corner case that looks something like: @@ -610,8 +623,11 @@ private static readonly Dictionary s_operatorTable private BitArray _skippedCharOffsets; private string _script; + private int _tokenStart; + private int _currentIndex; + private InternalScriptExtent _beginSignatureExtent; #region Tables for initialization @@ -721,6 +737,7 @@ internal Tokenizer(Parser parser) } internal TokenizerMode Mode { get; set; } + internal bool AllowSignedNumbers { get; set; } // TODO: use auto-properties when making 'ternary operator' an official feature. @@ -733,8 +750,11 @@ internal bool ForceEndNumberOnTernaryOpChars } internal bool WantSimpleName { get; set; } + internal bool InWorkflowContext { get; set; } + internal List TokenList { get; set; } + internal Token FirstToken { get; private set; } internal Token LastToken { get; private set; } @@ -1990,11 +2010,17 @@ internal ScriptRequirements GetScriptRequirements() } private const string shellIDToken = "shellid"; + private const string PSSnapinToken = "pssnapin"; + private const string versionToken = "version"; + private const string editionToken = "psedition"; + private const string assemblyToken = "assembly"; + private const string modulesToken = "modules"; + private const string elevationToken = "runasadministrator"; private void HandleRequiresParameter(CommandParameterAst parameter, diff --git a/src/System.Management.Automation/engine/pipeline.cs b/src/System.Management.Automation/engine/pipeline.cs index f6c779282a9..cc508039068 100644 --- a/src/System.Management.Automation/engine/pipeline.cs +++ b/src/System.Management.Automation/engine/pipeline.cs @@ -30,17 +30,25 @@ internal class PipelineProcessor : IDisposable #region private_members private List _commands = new List(); + private List _redirectionPipes; + private PipelineReader _externalInputPipe; + private PipelineWriter _externalSuccessOutput; + private PipelineWriter _externalErrorOutput; + private bool _executionStarted = false; + private bool _stopping = false; + private SessionStateScope _executionScope; private ExceptionDispatchInfo _firstTerminatingError = null; private bool _linkedSuccessOutput = false; + private bool _linkedErrorOutput = false; #if !CORECLR // Impersonation Not Supported On CSS @@ -1453,7 +1461,9 @@ internal void ForgetFailure() // Only this InternalCommand from this Thread is allowed to call // WriteObject/WriteError internal InternalCommand _permittedToWrite = null; + internal bool _permittedToWriteToPipeline = false; + internal System.Threading.Thread _permittedToWriteThread = null; #endregion private_methods @@ -1590,9 +1600,13 @@ internal SessionStateScope ExecutionScope internal enum PipelineExecutionStatus { Started, + ParameterBinding, + Complete, + Error, + PipelineComplete } } diff --git a/src/System.Management.Automation/engine/regex.cs b/src/System.Management.Automation/engine/regex.cs index c867f355158..bf0df34eaac 100644 --- a/src/System.Management.Automation/engine/regex.cs +++ b/src/System.Management.Automation/engine/regex.cs @@ -749,6 +749,7 @@ internal static WildcardPatternException NewWildcardPatternException(string inva internal class WildcardPatternToRegexParser : WildcardPatternParser { private StringBuilder _regexPattern; + private RegexOptions _regexOptions; private const string regexChars = "()[.?*{}^$+|\\"; // ']' is missing on purpose @@ -922,6 +923,7 @@ public static Regex Parse(WildcardPattern wildcardPattern) internal class WildcardPatternMatcher { private readonly PatternElement[] _patternElements; + private readonly CharacterNormalizer _characterNormalizer; internal WildcardPatternMatcher(WildcardPattern wildcardPattern) @@ -1008,6 +1010,7 @@ private class PatternPositionsVisitor : IDisposable private readonly int[] _isPatternPositionVisitedMarker; private readonly int[] _patternPositionsForFurtherProcessing; + private int _patternPositionsForFurtherProcessingCount; public PatternPositionsVisitor(int lengthOfPattern) @@ -1200,8 +1203,11 @@ public override void ProcessEndOfString( private class MyWildcardPatternParser : WildcardPatternParser { private readonly List _patternElements = new List(); + private CharacterNormalizer _characterNormalizer; + private RegexOptions _regexOptions; + private StringBuilder _bracketExpressionBuilder; public static PatternElement[] Parse( @@ -1267,6 +1273,7 @@ protected override void EndBracketExpression() private struct CharacterNormalizer { private readonly CultureInfo _cultureInfo; + private readonly bool _caseInsensitive; public CharacterNormalizer(WildcardOptions options) diff --git a/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs b/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs index 092eb224e04..3ebad3573ee 100644 --- a/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs +++ b/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs @@ -912,22 +912,37 @@ private void HandleRobustConnectionNotification( #region Protected Members protected ObjectStreamBase inputstream; + protected ObjectStreamBase errorstream; + protected PSInformationalBuffers informationalBuffers; + protected PowerShell shell; + protected Guid clientRunspacePoolId; + protected bool noInput; + protected PSInvocationSettings settings; + protected ObjectStreamBase outputstream; + protected string computerName; + protected ClientPowerShellDataStructureHandler dataStructureHandler; + protected bool stopCalled = false; + protected PSHost hostToUse; + protected RemoteRunspacePoolInternal runspacePool; protected const string WRITE_DEBUG_LINE = "WriteDebugLine"; + protected const string WRITE_VERBOSE_LINE = "WriteVerboseLine"; + protected const string WRITE_WARNING_LINE = "WriteWarningLine"; + protected const string WRITE_PROGRESS = "WriteProgress"; protected bool initialized = false; @@ -978,11 +993,17 @@ protected void Dispose(bool disposing) internal enum PSConnectionRetryStatus { None = 0, + NetworkFailureDetected = 1, + ConnectionRetryAttempt = 2, + ConnectionRetrySucceeded = 3, + AutoDisconnectStarting = 4, + AutoDisconnectSucceeded = 5, + InternalErrorAbort = 6 }; @@ -992,10 +1013,15 @@ internal enum PSConnectionRetryStatus internal sealed class PSConnectionRetryStatusEventArgs : EventArgs { internal const string FQIDNetworkFailureDetected = "PowerShellNetworkFailureDetected"; + internal const string FQIDConnectionRetryAttempt = "PowerShellConnectionRetryAttempt"; + internal const string FQIDConnectionRetrySucceeded = "PowerShellConnectionRetrySucceeded"; + internal const string FQIDAutoDisconnectStarting = "PowerShellNetworkFailedStartDisconnect"; + internal const string FQIDAutoDisconnectSucceeded = "PowerShellAutoDisconnectSucceeded"; + internal const string FQIDNetworkOrDisconnectFailed = "PowerShellNetworkOrDisconnectFailed"; internal PSConnectionRetryStatusEventArgs( diff --git a/src/System.Management.Automation/engine/remoting/client/Job.cs b/src/System.Management.Automation/engine/remoting/client/Job.cs index 814b547b3df..864120c8a54 100644 --- a/src/System.Management.Automation/engine/remoting/client/Job.cs +++ b/src/System.Management.Automation/engine/remoting/client/Job.cs @@ -523,24 +523,41 @@ internal static string GetCommandTextFromInvocationInfo(InvocationInfo invocatio private ManualResetEvent _finished = new ManualResetEvent(false); private string _name; + private IList _childJobs; + internal readonly object syncObject = new object(); // object used for synchronization // ISSUE: Should Result be public property private PSDataCollection _results = new PSDataCollection(); + private bool _resultsOwner = true; + private PSDataCollection _error = new PSDataCollection(); + private bool _errorOwner = true; + private PSDataCollection _progress = new PSDataCollection(); + private bool _progressOwner = true; + private PSDataCollection _verbose = new PSDataCollection(); + private bool _verboseOwner = true; + private PSDataCollection _warning = new PSDataCollection(); + private bool _warningOwner = true; + private PSDataCollection _debug = new PSDataCollection(); + private bool _debugOwner = true; + private PSDataCollection _information = new PSDataCollection(); + private bool _informationOwner = true; + private PSDataCollection _output = new PSDataCollection(); + private bool _outputOwner = true; /// @@ -3841,6 +3858,7 @@ private void HandleRunspaceAvailabilityChanged(object sender, RunspaceAvailabili protected object SyncObject = new object(); private ThrottleManager _throttleManager; + private bool _stopIsCalled = false; private volatile Debugger _jobDebugger; @@ -3861,7 +3879,9 @@ internal sealed class RemotingJobDebugger : Debugger #region Members private Debugger _wrappedDebugger; + private Runspace _runspace; + private string _jobName; #endregion @@ -4183,10 +4203,13 @@ internal class PSInvokeExpressionSyncJob : PSRemotingChildJob #region Private Members private List _helpers = new List(); + private ThrottleManager _throttleManager; + private Dictionary _powershells = new Dictionary(); private int _pipelineFinishedCount; + private int _pipelineDisconnectedCount; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/client/Job2.cs b/src/System.Management.Automation/engine/remoting/client/Job2.cs index ed9e133059e..6f154be05d6 100644 --- a/src/System.Management.Automation/engine/remoting/client/Job2.cs +++ b/src/System.Management.Automation/engine/remoting/client/Job2.cs @@ -65,9 +65,13 @@ public abstract class Job2 : Job private readonly object _syncobject = new object(); private const int StartJobOperation = 1; + private const int StopJobOperation = 2; + private const int SuspendJobOperation = 3; + private const int ResumeJobOperation = 4; + private const int UnblockJobOperation = 5; private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); @@ -504,10 +508,13 @@ public sealed class ContainerParentJob : Job2 private const string TraceClassName = "ContainerParentJob"; private bool _moreData = true; + private readonly object _syncObject = new object(); + private int _isDisposed = 0; private const int DisposedTrue = 1; + private const int DisposedFalse = 0; // This variable is set to true if atleast one child job failed. @@ -530,6 +537,7 @@ public sealed class ContainerParentJob : Job2 private int _stoppedChildJobsCount = 0; private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); + private readonly PSDataCollection _executionError = new PSDataCollection(); private PSEventManager _eventManager; diff --git a/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs b/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs index 8c35c5f948f..5ba2e1d6e65 100644 --- a/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs +++ b/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs @@ -692,6 +692,7 @@ internal override void PropagateApplicationPrivateData(Runspace runspace) } private PSPrimitiveDictionary _applicationPrivateData; + private ManualResetEvent _applicationPrivateDataReceived = new ManualResetEvent(false); /// @@ -1902,13 +1903,17 @@ private void WaitAndRaiseConnectEventsProc(object state) private RunspacePoolAsyncResult _closeAsyncResult; // async result object generated by // BeginClose private Exception _closingReason; // reason for a Closing state transition + private RunspacePoolAsyncResult _disconnectAsyncResult; // async result object generated on CoreDisconnect + private RunspacePoolAsyncResult _reconnectAsyncResult; // async result object generated on CoreReconnect + private bool _isDisposed; private DispatchTable DispatchTable { get; } private bool _canReconnect; + private string _friendlyName = string.Empty; private System.Collections.Concurrent.ConcurrentStack _runningPowerShells; diff --git a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs index 99a21bd90eb..54c578ad232 100644 --- a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs +++ b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs @@ -869,12 +869,19 @@ private void HandleSessionCreateCompleted(object sender, CreateCompleteEventArgs #region Private Members private Guid _clientRunspacePoolId; + private object _syncObject = new object(); + private bool _createRunspaceCalled = false; + private Exception _closingReason; + private int _minRunspaces; + private int _maxRunspaces; + private PSHost _host; + private PSPrimitiveDictionary _applicationArguments; private Dictionary _associatedPowerShellDSHandlers @@ -1476,6 +1483,7 @@ internal void ProcessRobustConnectionNotification( #region Protected Members protected Guid clientRunspacePoolId; + protected Guid clientPowerShellId; #endregion Protected Members diff --git a/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs b/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs index acf5d8cee8c..e14468c83fb 100644 --- a/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs +++ b/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs @@ -23,8 +23,11 @@ internal class RunspaceRef /// Runspace ref. /// private ObjectRef _runspaceRef; + private bool _stopInvoke; + private object _localSyncObject; + private static RobustConnectionProgress s_RCProgress = new RobustConnectionProgress(); /// diff --git a/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs b/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs index eb3ad0d20f8..bf629adfe70 100644 --- a/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs +++ b/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs @@ -72,8 +72,11 @@ protected override void Dispose(bool disposing) #region Support for progress reporting private readonly DateTime _progressStartTime = DateTime.UtcNow; + private readonly int _progressActivityId; + private readonly object _progressLock = new object(); + private DateTime _progressReportLastTime = DateTime.MinValue; internal int GetProgressActivityId() @@ -200,6 +203,7 @@ internal enum ChildJobFlags } private bool _ownerWontSubmitNewChildJobs = false; + private readonly HashSet _setOfChildJobsThatCanAddMoreChildJobs = new HashSet(); private bool IsEndOfChildJobs @@ -231,7 +235,9 @@ private bool IsThrottlingJobCompleted private int _countOfBlockedChildJobs; private int _countOfFailedChildJobs; + private int _countOfStoppedChildJobs; + private int _countOfSuccessfullyCompletedChildJobs; private int CountOfFinishedChildJobs @@ -451,6 +457,7 @@ private void childJob_ResultsAdded(object sender, DataAddedEventArgs e) } private readonly object _alreadyWroteFlowControlBuffersHighMemoryUsageWarningLock = new object(); + private bool _alreadyWroteFlowControlBuffersHighMemoryUsageWarning; private const long FlowControlBuffersHighMemoryUsageThreshold = 30000; @@ -487,14 +494,23 @@ private void WriteWarningAboutHighUsageOfFlowControlBuffers(long currentCount) internal event EventHandler ChildJobAdded; private int _maximumConcurrentChildJobs; + private int _extraCapacityForRunningQueryJobs; + private int _extraCapacityForRunningAllJobs; + private bool _inBoostModeToPreventQueryJobDeadlock; + private Queue _readyToRunQueryJobs; + private Queue _readyToRunRegularJobs; + private Queue _actionsForUnblockingChildAdditions; + private int _maxReadyToRunJobs; + private readonly SemaphoreSlim _jobResultsThrottlingSemaphore; + private long _jobResultsCurrentCount; private static readonly int s_maximumReadyToRunJobs = 10000; @@ -684,6 +700,7 @@ public override void StopJob() } private bool _isStopping; + private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); private void childJob_StateChanged(object sender, JobStateEventArgs e) @@ -870,10 +887,13 @@ private class ForwardingHelper : IDisposable private readonly ThrottlingJob _throttlingJob; private readonly object _myLock; + private readonly BlockingCollection _aggregatedResults; + private readonly HashSet _monitoredJobs; private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); + private bool _disposed; private ForwardingHelper(ThrottlingJob throttlingJob) diff --git a/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs b/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs index ec55f22fc22..2bbba0a08f8 100644 --- a/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs +++ b/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs @@ -39,6 +39,7 @@ internal class ClientRemoteSessionDSHandlerStateMachine /// [State,Event]=>Action. /// private EventHandler[,] _stateMachineHandle; + private Queue _clientRemoteSessionStateChangeQueue; /// diff --git a/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs b/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs index a711c7dd8f2..92a97d1df46 100644 --- a/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs +++ b/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs @@ -20,17 +20,29 @@ internal class RemotePipeline : Pipeline #region Private Members private PowerShell _powershell; + private bool _addToHistory; + private bool _isNested; + private bool _isSteppable; + private Runspace _runspace; + private object _syncRoot = new object(); + private bool _disposed = false; + private string _historyString; + private PipelineStateInfo _pipelineStateInfo = new PipelineStateInfo(PipelineState.NotStarted); + private CommandCollection _commands = new CommandCollection(); + private string _computerName; + private Guid _runspaceId; + private ConnectCommandInfo _connectCmdInfo = null; /// @@ -52,7 +64,9 @@ public ExecutionEventQueueItem(PipelineStateInfo pipelineStateInfo, RunspaceAvai } public PipelineStateInfo PipelineStateInfo; + public RunspaceAvailability CurrentRunspaceAvailability; + public RunspaceAvailability NewRunspaceAvailability; } @@ -363,10 +377,15 @@ public bool AddToHistory // a corresponding collection to support // streaming behavior of the pipeline. private PSDataCollection _outputCollection; + private PSDataCollectionStream _outputStream; + private PSDataCollection _errorCollection; + private PSDataCollectionStream _errorStream; + private PSDataCollection _inputCollection; + private PSDataCollectionStream _inputStream; /// diff --git a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs index 751969d6f82..ef51141dde7 100644 --- a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs +++ b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs @@ -33,11 +33,17 @@ internal class RemoteRunspace : Runspace, IDisposable #region Private Members private List _runningPipelines = new List(); + private object _syncRoot = new object(); + private RunspaceStateInfo _runspaceStateInfo = new RunspaceStateInfo(RunspaceState.BeforeOpen); + private bool _bSessionStateProxyCallInProgress = false; + private RunspaceConnectionInfo _connectionInfo; + private RemoteDebugger _remoteDebugger; + private PSPrimitiveDictionary _applicationPrivateData; private bool _disposed = false; @@ -45,6 +51,7 @@ internal class RemoteRunspace : Runspace, IDisposable // the following two variables have been added for supporting // the Invoke-Command | Invoke-Command scenario private InvokeCommandCommand _currentInvokeCommand = null; + private long _currentLocalPipelineId = 0; /// @@ -67,7 +74,9 @@ public RunspaceEventQueueItem(RunspaceStateInfo runspaceStateInfo, RunspaceAvail } public RunspaceStateInfo RunspaceStateInfo; + public RunspaceAvailability CurrentRunspaceAvailability; + public RunspaceAvailability NewRunspaceAvailability; } @@ -1805,20 +1814,31 @@ internal sealed class RemoteDebugger : Debugger, IDisposable #region Members private RemoteRunspace _runspace; + private PowerShell _psDebuggerCommand; + private bool _remoteDebugSupported; + private bool _isActive; + private int _breakpointCount; + private RemoteDebuggingCapability _remoteDebuggingCapability; + private bool? _remoteBreakpointManagementIsSupported; + private volatile bool _handleDebuggerStop; + private bool _isDebuggerSteppingEnabled; + private UnhandledBreakpointProcessingMode _unhandledBreakpointMode; + private bool _detachCommand; #if !UNIX // Windows impersonation flow private WindowsIdentity _identityToPersonate; + private bool _identityPersonationChecked; #endif @@ -1834,9 +1854,13 @@ internal sealed class RemoteDebugger : Debugger, IDisposable // Remote debugger settings public const string DebugModeSetting = "DebugMode"; + public const string DebugStopState = "DebugStop"; + public const string DebugBreakpointCount = "DebugBreakpointCount"; + public const string BreakAllSetting = "BreakAll"; + public const string UnhandledBreakpointModeSetting = "UnhandledBreakpointMode"; #endregion @@ -2954,7 +2978,9 @@ internal RemoteSessionStateProxy(RemoteRunspace runspace) } private Exception _isInNoLanguageModeException = null; + private Exception _getVariableCommandNotFoundException = null; + private Exception _setVariableCommandNotFoundException = null; /// diff --git a/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs b/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs index bfabb23b7b7..bd7ceadaf79 100644 --- a/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs +++ b/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs @@ -21,14 +21,21 @@ internal class ClientRemoteSessionDSHandlerImpl : ClientRemoteSessionDataStructu private const string resBaseName = "remotingerroridstrings"; private BaseClientSessionTransportManager _transportManager; + private ClientRemoteSessionDSHandlerStateMachine _stateMachine; + private ClientRemoteSession _session; + private RunspaceConnectionInfo _connectionInfo; // used for connection redirection. private Uri _redirectUri; + private int _maxUriRedirectionCount; + private bool _isCloseCalled; + private object _syncObject = new object(); + private PSRemotingCryptoHelper _cryptoHelper; private ClientRemoteSession.URIDirectionReported _uriRedirectionHandler; diff --git a/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs b/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs index 452a6b10b75..48b14142069 100644 --- a/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs +++ b/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs @@ -53,7 +53,9 @@ public class ConnectPSSessionCommand : PSRunspaceCmdlet, IDisposable #region Parameters private const string ComputerNameGuidParameterSet = "ComputerNameGuid"; + private const string ConnectionUriParameterSet = "ConnectionUri"; + private const string ConnectionUriGuidParameterSet = "ConnectionUriGuid"; /// @@ -475,11 +477,17 @@ protected override void StopProcessing() private class ConnectRunspaceOperation : IThrottleOperation { private PSSession _session; + private PSSession _oldSession; + private ObjectStream _writeStream; + private Collection _retryList; + private PSHost _host; + private QueryRunspaces _queryRunspaces; + private static object s_LockObject = new object(); internal ConnectRunspaceOperation( @@ -1101,6 +1109,7 @@ private void Dispose(bool disposing) // Support for connection retry on failure. private ThrottleManager _retryThrottleManager = new ThrottleManager(); + private Collection _failedSessions = new Collection(); #endregion diff --git a/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs b/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs index dde4422de45..397d5bc6747 100644 --- a/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs +++ b/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs @@ -314,10 +314,13 @@ function Register-PSSessionConfiguration {2}"; private const string privateDataFormat = @"{0}"; + private const string securityElementFormat = ""; + private const string SessionConfigDataFormat = @"{0}"; private string _gmsaAccount; + private string _configTableSDDL; // true if there are errors running the wsman's configuration @@ -1575,9 +1578,13 @@ internal static string ComputeSDDLFromConfiguration( #region SDDL Update private const char OpenParenChar = '('; + private const char CloseParenChar = ')'; + private const char ACESeparatorChar = ';'; + private const string ACESeparator = ";"; + private const string ConditionalACEPrefix = "X"; /// @@ -1729,9 +1736,13 @@ private static Collection ParseDACLACEs( #region Conditional ACE private const string AndOperator = "And"; + private const string OrOperator = "Or"; + private const string AndCondition = " && "; + private const string OrCondition = " || "; + private const string MemberOfFormat = "Member_of {{SID({0})}}"; /// @@ -1903,14 +1914,18 @@ public class PSSessionConfigurationCommandBase : PSCmdlet #region Private Data internal const string NameParameterSetName = "NameParameterSet"; + internal const string AssemblyNameParameterSetName = "AssemblyNameParameterSet"; + internal const string SessionConfigurationFileParameterSetName = "SessionConfigurationFile"; // Deny network access but allow local access private const string localSDDL = "O:NSG:BAD:P(D;;GA;;;NU)(A;;GA;;;BA)(A;;GA;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"; + private const string localSDDL_Win8 = "O:NSG:BAD:P(D;;GA;;;NU)(A;;GA;;;BA)(A;;GA;;;RM)(A;;GA;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"; // Win8+ only private const string remoteSDDL = "O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"; + private const string remoteSDDL_Win8 = "O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)(A;;GA;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"; // Win8 only // Win8 only SID for Remote Management Users group. @@ -1973,6 +1988,7 @@ public string AssemblyName } internal string assemblyName; + internal bool isAssemblyNameSpecified; /// @@ -1995,6 +2011,7 @@ public string ApplicationBase } internal string applicationBase; + internal bool isApplicationBaseSpecified; /// @@ -2015,6 +2032,7 @@ public string ConfigurationTypeName } internal string configurationTypeName; + internal bool isConfigurationTypeNameSpecified; /// @@ -2036,6 +2054,7 @@ public PSCredential RunAsCredential } internal PSCredential runAsCredential; + internal bool isRunAsCredentialSpecified; /// @@ -2096,6 +2115,7 @@ public PSSessionConfigurationAccessMode AccessMode } private PSSessionConfigurationAccessMode _accessMode = PSSessionConfigurationAccessMode.Remote; + internal bool accessModeSpecified = false; /// @@ -2117,6 +2137,7 @@ public SwitchParameter UseSharedProcess } private bool _useSharedProcess; + internal bool isUseSharedProcessSpecified; /// @@ -2135,6 +2156,7 @@ public string StartupScript } internal string configurationScript; + internal bool isConfigurationScriptSpecified; /// @@ -2163,6 +2185,7 @@ public double? MaximumReceivedDataSizePerCommandMB } internal double? maxCommandSizeMB; + internal bool isMaxCommandSizeMBSpecified; /// @@ -2190,6 +2213,7 @@ public double? MaximumReceivedObjectSizeMB } internal double? maxObjectSizeMB; + internal bool isMaxObjectSizeMBSpecified; /// @@ -2221,6 +2245,7 @@ public string SecurityDescriptorSddl } internal string sddl; + internal bool isSddlSpecified; /// @@ -2239,6 +2264,7 @@ public SwitchParameter ShowSecurityDescriptorUI } private bool _showUI; + internal bool showUISpecified; /// @@ -2296,6 +2322,7 @@ public Version PSVersion } internal Version psVersion; + internal bool isPSVersionSpecified; /// @@ -2394,6 +2421,7 @@ public object[] ModulesToImport } internal object[] modulesToImport; + internal bool modulePathSpecified = false; /// @@ -2524,6 +2552,7 @@ function Unregister-PSSessionConfiguration "; private static readonly ScriptBlock s_removePluginSb; + private bool _isErrorReported; #endregion @@ -2916,8 +2945,11 @@ public sealed class SetPSSessionConfigurationCommand : PSSessionConfigurationCom // To Escape " -- "" private const string getSessionTypeFormat = @"(get-item 'WSMan::localhost\Plugin\{0}\InitializationParameters\sessiontype' -ErrorAction SilentlyContinue).Value"; + private const string getCurrentIdleTimeoutmsFormat = @"(Get-Item 'WSMan:\localhost\Plugin\{0}\Quotas\IdleTimeoutms').Value"; + private const string getAssemblyNameDataFormat = @"(Get-Item 'WSMan:\localhost\Plugin\{0}\InitializationParameters\assemblyname').Value"; + private const string getSessionConfigurationDataSbFormat = @"(Get-Item 'WSMan:\localhost\Plugin\{0}\InitializationParameters\SessionConfigurationData').Value"; private const string setSessionConfigurationDataSbFormat = @" @@ -3187,11 +3219,13 @@ function Set-RunAsCredential{{ "; private const string initParamFormat = @""; + private const string privateDataFormat = @"{0}"; private const string SessionConfigDataFormat = @"{0}"; private const string UseSharedProcessToken = "UseSharedProcess"; + private const string AllowRemoteAccessToken = "Enabled"; private static readonly ScriptBlock s_setPluginSb; @@ -3213,9 +3247,11 @@ function Set-RunAsCredential{{ private bool _isErrorReported; private Hashtable _configTable; + private string _configFilePath; private string _gmsaAccount; + private string _configSddl; #endregion @@ -4301,6 +4337,7 @@ public string SecurityDescriptorSddl } internal string sddl; + internal bool isSddlSpecified; /// diff --git a/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs b/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs index 979912619f2..a35408df6d9 100644 --- a/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs +++ b/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs @@ -31,8 +31,11 @@ public sealed class DebugJobCommand : PSCmdlet #region Strings private const string JobParameterSet = "JobParameterSet"; + private const string JobNameParameterSet = "JobNameParameterSet"; + private const string JobIdParameterSet = "JobIdParameterSet"; + private const string JobInstanceIdParameterSet = "JobInstanceIdParameterSet"; #endregion @@ -40,7 +43,9 @@ public sealed class DebugJobCommand : PSCmdlet #region Private members private Job _job; + private Debugger _debugger; + private PSDataCollection _debugCollection; #endregion diff --git a/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs b/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs index dd4f153ca1d..3c5903f870e 100644 --- a/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs +++ b/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs @@ -395,6 +395,7 @@ private string GetLocalhostWithNetworkAccessEnabled(Dictionary private class DisconnectRunspaceOperation : IThrottleOperation { private PSSession _remoteSession; + private ObjectStream _writeStream; internal DisconnectRunspaceOperation(PSSession session, ObjectStream stream) diff --git a/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs b/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs index 3cf54997e5d..307e9d62954 100644 --- a/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs @@ -32,14 +32,19 @@ public sealed class EnterPSHostProcessCommand : PSCmdlet #region Members private IHostSupportsInteractiveSession _interactiveHost; + private RemoteRunspace _connectingRemoteRunspace; #region Strings private const string ProcessParameterSet = "ProcessParameterSet"; + private const string ProcessNameParameterSet = "ProcessNameParameterSet"; + private const string ProcessIdParameterSet = "ProcessIdParameterSet"; + private const string PipeNameParameterSet = "PipeNameParameterSet"; + private const string PSHostProcessInfoParameterSet = "PSHostProcessInfoParameterSet"; private const string NamedPipeRunspaceName = "PSAttachRunspace"; @@ -486,7 +491,9 @@ public sealed class GetPSHostProcessInfoCommand : PSCmdlet #region Strings private const string ProcessParameterSet = "ProcessParameterSet"; + private const string ProcessIdParameterSet = "ProcessIdParameterSet"; + private const string ProcessNameParameterSet = "ProcessNameParameterSet"; #if UNIX diff --git a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs index bd7729acbd4..b99a5ee592c 100644 --- a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs @@ -1987,6 +1987,7 @@ private void PreProcessStreamObject(PSStreamObject streamObject) private ThrottleManager _throttleManager = new ThrottleManager(); // throttle manager for handling all throttling operations private ManualResetEvent _operationsComplete = new ManualResetEvent(true); + private ManualResetEvent _disconnectComplete; // the initial state is true because when no // operations actually take place as in case of a @@ -2000,18 +2001,27 @@ private void PreProcessStreamObject(PSStreamObject streamObject) private SteppablePipeline _steppablePipeline; private bool _pipelineinvoked = false; // if pipeline has been invoked + private bool _inputStreamClosed = false; private const string InProcParameterSet = "InProcess"; private PSDataCollection _input = new PSDataCollection(); + private bool _needToCollect = false; + private bool _needToStartSteppablePipelineOnServer = false; + private bool _clearInvokeCommandOnRunspace = false; + private List _inputWriters = new List(); + private object _jobSyncObject = new object(); + private bool _nojob = false; + private Guid _instanceId = Guid.NewGuid(); + private bool _propagateErrors = false; private static RobustConnectionProgress s_RCProgress = new RobustConnectionProgress(); @@ -2094,14 +2104,23 @@ namespace System.Management.Automation.Internal internal class RobustConnectionProgress { private System.Management.Automation.Host.PSHost _psHost; + private string _activity; + private string _status; + private int _secondsTotal; + private int _secondsRemaining; + private ProgressRecord _progressRecord; + private long _sourceId; + private bool _progressIsRunning; + private object _syncObject; + private Timer _updateTimer; /// diff --git a/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs b/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs index d06eabf25a3..ebe52f84545 100644 --- a/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs +++ b/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs @@ -133,7 +133,9 @@ internal Dictionary Dictionary #region Private Members private Dictionary _repository = new Dictionary(); + private object _syncObject = new object(); // object for synchronization + private string _identifier; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs index 8a7a9b88b88..9c9fbcc67fa 100644 --- a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs +++ b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs @@ -324,6 +324,7 @@ public PSLanguageMode LanguageMode } private PSLanguageMode _languageMode = PSLanguageMode.NoLanguage; + private bool _isLanguageModeSpecified; /// diff --git a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationOptionCommand.cs b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationOptionCommand.cs index c1b3b3b7326..c0b772010d5 100644 --- a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationOptionCommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationOptionCommand.cs @@ -15,56 +15,67 @@ namespace Microsoft.PowerShell.Commands public class WSManConfigurationOption : PSTransportOption { private const string Token = " {0}='{1}'"; + private const string QuotasToken = ""; internal const string AttribOutputBufferingMode = "OutputBufferingMode"; internal static readonly System.Management.Automation.Runspaces.OutputBufferingMode? DefaultOutputBufferingMode = System.Management.Automation.Runspaces.OutputBufferingMode.Block; + private System.Management.Automation.Runspaces.OutputBufferingMode? _outputBufferingMode = null; private const string AttribProcessIdleTimeout = "ProcessIdleTimeoutSec"; internal static readonly int? DefaultProcessIdleTimeout_ForPSRemoting = 0; // in seconds + private int? _processIdleTimeoutSec = null; internal const string AttribMaxIdleTimeout = "MaxIdleTimeoutms"; internal static readonly int? DefaultMaxIdleTimeout = int.MaxValue; + private int? _maxIdleTimeoutSec = null; internal const string AttribIdleTimeout = "IdleTimeoutms"; internal static readonly int? DefaultIdleTimeout = 7200; // 2 hours in seconds + private int? _idleTimeoutSec = null; private const string AttribMaxConcurrentUsers = "MaxConcurrentUsers"; internal static readonly int? DefaultMaxConcurrentUsers = int.MaxValue; + private int? _maxConcurrentUsers = null; private const string AttribMaxProcessesPerSession = "MaxProcessesPerShell"; internal static readonly int? DefaultMaxProcessesPerSession = int.MaxValue; + private int? _maxProcessesPerSession = null; private const string AttribMaxMemoryPerSessionMB = "MaxMemoryPerShellMB"; internal static readonly int? DefaultMaxMemoryPerSessionMB = int.MaxValue; + private int? _maxMemoryPerSessionMB = null; private const string AttribMaxSessions = "MaxShells"; internal static readonly int? DefaultMaxSessions = int.MaxValue; + private int? _maxSessions = null; private const string AttribMaxSessionsPerUser = "MaxShellsPerUser"; internal static readonly int? DefaultMaxSessionsPerUser = int.MaxValue; + private int? _maxSessionsPerUser = null; private const string AttribMaxConcurrentCommandsPerSession = "MaxConcurrentCommandsPerShell"; internal static readonly int? DefaultMaxConcurrentCommandsPerSession = int.MaxValue; + private int? _maxConcurrentCommandsPerSession = null; /// diff --git a/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs b/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs index 0abb3c24837..25e46a9c017 100644 --- a/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs +++ b/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs @@ -281,9 +281,13 @@ protected string ResolveAppName(string appName) internal struct SSHConnection { public string ComputerName; + public string UserName; + public string KeyFilePath; + public int Port; + public string Subsystem; } @@ -844,11 +848,17 @@ internal static void ValidateSpecifiedAuthentication(PSCredential credential, st #region SSH Connection Strings private const string ComputerNameParameter = "ComputerName"; + private const string HostNameAlias = "HostName"; + private const string UserNameParameter = "UserName"; + private const string KeyFilePathParameter = "KeyFilePath"; + private const string IdentityFilePathAlias = "IdentityFilePath"; + private const string PortParameter = "Port"; + private const string SubsystemParameter = "Subsystem"; #endregion @@ -1997,10 +2007,13 @@ private void WriteErrorCreateRemoteRunspaceFailed(Exception e, Uri uri) /// PS version of the remote server. /// private const string PSv5OrLater = "PSv5OrLater"; + private const string PSv3Orv4 = "PSv3Orv4"; + private const string PSv2 = "PSv2"; private System.Management.Automation.PowerShell _powershellV2; + private System.Management.Automation.PowerShell _powershellV3; /// @@ -4218,6 +4231,7 @@ internal static TypeTable BuiltInTypesTable private bool _stopProcessing; private static readonly object s_SyncObject = new object(); + private static TypeTable s_TypeTable; #endregion diff --git a/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs b/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs index a7751e0138d..f94012b1af0 100644 --- a/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs @@ -29,7 +29,9 @@ public class EnterPSSessionCommand : PSRemotingBaseCmdlet #region Strings private const string InstanceIdParameterSet = "InstanceId"; + private const string IdParameterSet = "Id"; + private const string NameParameterSet = "Name"; #endregion @@ -42,6 +44,7 @@ public class EnterPSSessionCommand : PSRemotingBaseCmdlet public new int ThrottleLimit { set { } get { return 0; } } private ObjectStream _stream; + private RemoteRunspace _tempRunspace; #endregion diff --git a/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs b/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs index aa804f68691..880a7e32d56 100644 --- a/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs +++ b/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs @@ -303,20 +303,35 @@ public SwitchParameter WriteJobInResults } private bool _autoRemoveJob; + private bool _writeStateChangedEvents; + private bool _wait; + private bool _isStopping; + private bool _isDisposed; + private readonly ReaderWriterLockSlim _resultsReaderWriterLock = new ReaderWriterLockSlim(); + private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); + private readonly ManualResetEvent _writeExistingData = new ManualResetEvent(true); + private readonly PSDataCollection _results = new PSDataCollection(); + private bool _holdingResultsRef; + private readonly List _jobsBeingAggregated = new List(); + private readonly List _jobsSpecifiedInParameters = new List(); + private readonly object _syncObject = new object(); + private bool _outputJobFirst; + private OutputProcessingState _outputProcessingNotification; + private bool _processingOutput; private const string ClassNameTrace = "ReceiveJobCommand"; diff --git a/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs b/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs index e36fb633783..b6be0124150 100644 --- a/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs +++ b/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs @@ -71,10 +71,15 @@ public class ReceivePSSessionCommand : PSRemotingCmdlet #region Parameters private const string IdParameterSet = "Id"; + private const string InstanceIdParameterSet = "InstanceId"; + private const string NameParameterSet = "SessionName"; + private const string ComputerSessionNameParameterSet = "ComputerSessionName"; // Computer name and session Name. + private const string ConnectionUriSessionNameParameterSet = "ConnectionUriSessionName"; + private const string ConnectionUriInstanceIdParameterSet = "ConnectionUriInstanceId"; /// @@ -1300,9 +1305,13 @@ private void WriteInvalidArgumentError(PSRemotingErrorId errorId, string resourc #region Private Members private bool _stopProcessing; + private RemotePipeline _remotePipeline; + private Job _job; + private ManualResetEvent _stopPipelineReceive; + private object _syncObject = new object(); #endregion diff --git a/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs b/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs index 2eed427a6ff..ff277db6084 100644 --- a/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs +++ b/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs @@ -23,20 +23,32 @@ public class JobCmdletBase : PSRemotingCmdlet // Parametersets used by job cmdlets internal const string JobParameterSet = "JobParameterSet"; + internal const string InstanceIdParameterSet = "InstanceIdParameterSet"; + internal const string SessionIdParameterSet = "SessionIdParameterSet"; + internal const string NameParameterSet = "NameParameterSet"; + internal const string StateParameterSet = "StateParameterSet"; + internal const string CommandParameterSet = "CommandParameterSet"; + internal const string FilterParameterSet = "FilterParameterSet"; // common parameter names internal const string JobParameter = "Job"; + internal const string InstanceIdParameter = "InstanceId"; + internal const string SessionIdParameter = "SessionId"; + internal const string NameParameter = "Name"; + internal const string StateParameter = "State"; + internal const string CommandParameter = "Command"; + internal const string FilterParameter = "Filter"; #endregion Strings @@ -1012,12 +1024,14 @@ private void HandleStopJobCompleted(object sender, AsyncCompletedEventArgs event #region Private Members private HashSet _pendingJobs = new HashSet(); + private readonly ManualResetEvent _waitForJobs = new ManualResetEvent(false); private readonly Dictionary> _cleanUpActions = new Dictionary>(); private readonly object _syncObject = new object(); + private bool _needToCheckForWaitingJobs; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/commands/StopJob.cs b/src/System.Management.Automation/engine/remoting/commands/StopJob.cs index 7890bdc54f0..6c18b79dadc 100644 --- a/src/System.Management.Automation/engine/remoting/commands/StopJob.cs +++ b/src/System.Management.Automation/engine/remoting/commands/StopJob.cs @@ -252,15 +252,18 @@ var e in #region Private Members private readonly HashSet _pendingJobs = new HashSet(); + private readonly ManualResetEvent _waitForJobs = new ManualResetEvent(false); private readonly Dictionary> _cleanUpActions = new Dictionary>(); private readonly List _allJobsToStop = new List(); + private readonly List _errorsToWrite = new List(); private readonly object _syncObject = new object(); + private bool _needToCheckForWaitingJobs; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs b/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs index dd04519eb19..50abc77d2f9 100644 --- a/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs +++ b/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs @@ -77,7 +77,9 @@ public int Timeout #region Coordinating how different events (timeout, stopprocessing, job finished, job blocked) affect what happens in EndProcessing private readonly object _endProcessingActionLock = new object(); + private Action _endProcessingAction; + private readonly ManualResetEventSlim _endProcessingActionIsReady = new ManualResetEventSlim(false); private void SetEndProcessingAction(Action endProcessingAction) @@ -121,8 +123,11 @@ private void CleanUpEndProcessing() #region Support for triggering EndProcessing when jobs are finished or blocked private readonly HashSet _finishedJobs = new HashSet(); + private readonly HashSet _blockedJobs = new HashSet(); + private readonly List _jobsToWaitFor = new List(); + private readonly object _jobTrackingLock = new object(); private void HandleJobStateChangedEvent(object source, JobStateEventArgs eventArgs) @@ -256,6 +261,7 @@ private Job GetOneBlockedJob() #region Support for triggering EndProcessing when timing out private Timer _timer; + private readonly object _timerLock = new object(); private void StartTimeoutTracking(int timeoutInSeconds) @@ -432,7 +438,9 @@ private void Dispose(bool disposing) } private bool _isDisposed; + private readonly object _disposableLock = new object(); + private bool _warnNotTerminal = false; #endregion IDisposable Members diff --git a/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs b/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs index 2a3c92dfcf3..d3aef70e007 100644 --- a/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs @@ -49,6 +49,7 @@ public class GetPSSessionCommand : PSRunspaceCmdlet, IDisposable #region Parameters private const string ConnectionUriParameterSet = "ConnectionUri"; + private const string ConnectionUriInstanceIdParameterSet = "ConnectionUriInstanceId"; /// diff --git a/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs b/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs index a20b6163495..c64a34b5e64 100644 --- a/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs @@ -1276,6 +1276,7 @@ private void WriteErrorCreateRemoteRunspaceFailed(Exception e, Uri uri) #region Private Members private ThrottleManager _throttleManager = new ThrottleManager(); + private ObjectStream _stream = new ObjectStream(); // event that signals that all operations are // complete (including closing if any) @@ -1310,6 +1311,7 @@ internal class OpenRunspaceOperation : IThrottleOperation, IDisposable // Member variables to ensure that the ThrottleManager gets StartComplete // or StopComplete called only once per Start or Stop operation. private bool _startComplete; + private bool _stopComplete; private object _syncObject = new object(); diff --git a/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs b/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs index 5eb9c5fc338..8926709b501 100644 --- a/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs +++ b/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs @@ -12,15 +12,25 @@ namespace System.Management.Automation.Internal internal enum PSKeyword : ulong { Runspace = 0x1, + Pipeline = 0x2, + Protocol = 0x4, + Transport = 0x8, + Host = 0x10, + Cmdlets = 0x20, + Serializer = 0x40, + Session = 0x80, + ManagedPlugin = 0x100, + UseAlwaysOperational = 0x8000000000000000, + UseAlwaysAnalytic = 0x4000000000000000, } @@ -30,11 +40,17 @@ internal enum PSKeyword : ulong internal enum PSLevel : byte { LogAlways = 0x0, + Critical = 0x1, + Error = 0x2, + Warning = 0x3, + Informational = 0x4, + Verbose = 0x5, + Debug = 0x14 } @@ -44,22 +60,39 @@ internal enum PSLevel : byte internal enum PSOpcode : byte { WinStart = 0x1, + WinStop = 0x2, + Open = 0xA, + Close = 0xB, + Connect = 0xC, + Disconnect = 0xD, + Negotiate = 0xE, + Create = 0xF, + Constructor = 0x10, + Dispose = 0x11, + EventHandler = 0x12, + Exception = 0x13, + Method = 0x14, + Send = 0x15, + Receive = 0x16, + Rehydration = 0x17, + SerializationSettings = 0x18, + ShuttingDown = 0x19, } @@ -72,125 +105,219 @@ internal enum PSOpcode : byte internal enum PSEventId : int { HostNameResolve = 0x1001, + SchemeResolve = 0x1002, + ShellResolve = 0x1003, + RunspaceConstructor = 0x2001, + RunspacePoolConstructor = 0x2002, + RunspacePoolOpen = 0x2003, + OperationalTransferEventRunspacePool = 0x2004, + RunspaceStateChange = 0x2005, + RetrySessionCreation = 0x2006, + Port = 0x2F01, + AppName = 0x2F02, + ComputerName = 0x2F03, + Scheme = 0x2F04, + TestAnalytic = 0x2F05, + WSManConnectionInfoDump = 0x2F06, + AnalyticTransferEventRunspacePool = 0x2F07, // Start: Transport related events TransportReceivedObject = 0x8001, + TransportSendingData = 0x8002, + TransportReceivedData = 0x8003, + AppDomainUnhandledException_Analytic = 0x8007, + TransportError_Analytic = 0x8008, + AppDomainUnhandledException = 0x8009, + TransportError = 0x8010, + WSManCreateShell = 0x8011, + WSManCreateShellCallbackReceived = 0x8012, + WSManCloseShell = 0x8013, + WSManCloseShellCallbackReceived = 0x8014, + WSManSendShellInputEx = 0x8015, + WSManSendShellInputExCallbackReceived = 0x8016, + WSManReceiveShellOutputEx = 0x8017, + WSManReceiveShellOutputExCallbackReceived = 0x8018, + WSManCreateCommand = 0x8019, + WSManCreateCommandCallbackReceived = 0x8020, + WSManCloseCommand = 0x8021, + WSManCloseCommandCallbackReceived = 0x8022, + WSManSignal = 0x8023, + WSManSignalCallbackReceived = 0x8024, + URIRedirection = 0x8025, + ServerSendData = 0x8051, + ServerCreateRemoteSession = 0x8052, + ReportContext = 0x8053, + ReportOperationComplete = 0x8054, + ServerCreateCommandSession = 0x8055, + ServerStopCommand = 0x8056, + ServerReceivedData = 0x8057, + ServerClientReceiveRequest = 0x8058, + ServerCloseOperation = 0x8059, + LoadingPSCustomShellAssembly = 0x8061, + LoadingPSCustomShellType = 0x8062, + ReceivedRemotingFragment = 0x8063, + SentRemotingFragment = 0x8064, + WSManPluginShutdown = 0x8065, // End: Transport related events // Start: Serialization related events Serializer_RehydrationSuccess = 0x7001, + Serializer_RehydrationFailure = 0x7002, + Serializer_DepthOverride = 0x7003, + Serializer_ModeOverride = 0x7004, + Serializer_ScriptPropertyWithoutRunspace = 0x7005, + Serializer_PropertyGetterFailed = 0x7006, + Serializer_EnumerationFailed = 0x7007, + Serializer_ToStringFailed = 0x7008, + Serializer_MaxDepthWhenSerializing = 0x700A, + Serializer_XmlExceptionWhenDeserializing = 0x700B, + Serializer_SpecificPropertyMissing = 0x700C, // End: Serialization related events // Start: Perftrack related events Perftrack_ConsoleStartupStart = 0xA001, + Perftrack_ConsoleStartupStop = 0xA002, // End: Preftrack related events Command_Health = 0x1004, + Engine_Health = 0x1005, + Provider_Health = 0x1006, + Pipeline_Detail = 0x1007, + ScriptBlock_Compile_Detail = 0x1008, + ScriptBlock_Invoke_Start_Detail = 0x1009, + ScriptBlock_Invoke_Complete_Detail = 0x100A, + Command_Lifecycle = 0x1F01, + Engine_Lifecycle = 0x1F02, + Provider_Lifecycle = 0x1F03, + Settings = 0x1F04, + Engine_Trace = 0x1F06, // Experimental Features ExperimentalFeature_InvalidName = 0x3001, + ExperimentalFeature_ReadConfig_Error = 0x3002, // Scheduled Jobs ScheduledJob_Start = 0xD001, + ScheduledJob_Complete = 0xD002, + ScheduledJob_Error = 0xD003, // PowerShell IPC Named Pipe Connection NamedPipeIPC_ServerListenerStarted = 0xD100, + NamedPipeIPC_ServerListenerEnded = 0xD101, + NamedPipeIPC_ServerListenerError = 0xD102, + NamedPipeIPC_ServerConnect = 0xD103, + NamedPipeIPC_ServerDisconnect = 0xD104, // Start: ISE related events ISEExecuteScript = 0x6001, + ISEExecuteSelection = 0x6002, + ISEStopCommand = 0x6003, + ISEResumeDebugger = 0x6004, + ISEStopDebugger = 0x6005, + ISEDebuggerStepInto = 0x6006, + ISEDebuggerStepOver = 0x6007, + ISEDebuggerStepOut = 0x6008, + ISEEnableAllBreakpoints = 0x6010, + ISEDisableAllBreakpoints = 0x6011, + ISERemoveAllBreakpoints = 0x6012, + ISESetBreakpoint = 0x6013, + ISERemoveBreakpoint = 0x6014, + ISEEnableBreakpoint = 0x6015, + ISEDisableBreakpoint = 0x6016, + ISEHitBreakpoint = 0x6017, // End: ISE related events } @@ -215,6 +342,7 @@ internal enum PSChannel : byte internal enum PSChannel : byte { Operational = 0x10, + Analytic = 0x11 } #endif @@ -225,20 +353,35 @@ internal enum PSChannel : byte internal enum PSTask : int { None = 0x0, + CreateRunspace = 0x1, + ExecuteCommand = 0x2, + Serialization = 0x3, + PowershellConsoleStartup = 0x4, + EngineStart = 0x64, + EngineStop = 0x65, + CommandStart = 0x66, + CommandStop = 0x67, + ProviderStart = 0x68, + ProviderStop = 0x69, + ExecutePipeline = 0x6A, + ExperimentalFeature = 0x6B, + ScheduledJob = 0x6E, + NamedPipe = 0x6F, + ISEOperation = 0x78 } @@ -265,7 +408,9 @@ public PSETWBinaryBlob(byte[] blob, int offset, int length) } public readonly byte[] blob; + public readonly int offset; + public readonly int length; } } diff --git a/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs b/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs index 12bd7e1ad63..0f7aaf9a74d 100644 --- a/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs +++ b/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs @@ -18,10 +18,13 @@ internal class HyperVSocketEndPoint : EndPoint #region Members private System.Net.Sockets.AddressFamily _addressFamily; + private Guid _vmId; + private Guid _serviceId; public const System.Net.Sockets.AddressFamily AF_HYPERV = (System.Net.Sockets.AddressFamily)34; + public const int HYPERV_SOCK_ADDR_SIZE = 36; #endregion @@ -138,6 +141,7 @@ internal sealed class RemoteSessionHyperVSocketServer : IDisposable #region Members private readonly object _syncObject; + private PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); #endregion @@ -337,6 +341,7 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable #region Members private readonly object _syncObject; + private PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); private static ManualResetEvent s_connectDone = @@ -347,6 +352,7 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable #region constants in hvsocket.h public const int HV_PROTOCOL_RAW = 1; + public const int HVSOCKET_CONTAINER_PASSTHRU = 2; #endregion diff --git a/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs b/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs index e8c546ff5e1..3f8de26bcd2 100644 --- a/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs +++ b/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs @@ -35,6 +35,7 @@ internal static class NamedPipeUtils internal const string NamedPipeNamePrefixSearch = "CoreFxPipe_PSHost*"; #else internal const string DefaultAppDomainName = "DefaultAppDomain"; + internal const string NamedPipeNamePrefixSearch = "PSHost*"; #endif // On non-Windows, .NET named pipes are limited to up to 104 characters @@ -166,46 +167,74 @@ internal static class NamedPipeNative // Pipe open modes internal const uint PIPE_ACCESS_DUPLEX = 0x00000003; + internal const uint PIPE_ACCESS_OUTBOUND = 0x00000002; + internal const uint PIPE_ACCESS_INBOUND = 0x00000001; // Pipe modes internal const uint PIPE_TYPE_BYTE = 0x00000000; + internal const uint PIPE_TYPE_MESSAGE = 0x00000004; + internal const uint FILE_FLAG_OVERLAPPED = 0x40000000; + internal const uint FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000; + internal const uint PIPE_WAIT = 0x00000000; + internal const uint PIPE_NOWAIT = 0x00000001; + internal const uint PIPE_READMODE_BYTE = 0x00000000; + internal const uint PIPE_READMODE_MESSAGE = 0x00000002; + internal const uint PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000; + internal const uint PIPE_REJECT_REMOTE_CLIENTS = 0x00000008; // Pipe errors internal const uint ERROR_FILE_NOT_FOUND = 2; + internal const uint ERROR_BROKEN_PIPE = 109; + internal const uint ERROR_PIPE_BUSY = 231; + internal const uint ERROR_NO_DATA = 232; + internal const uint ERROR_MORE_DATA = 234; + internal const uint ERROR_PIPE_CONNECTED = 535; + internal const uint ERROR_IO_INCOMPLETE = 996; + internal const uint ERROR_IO_PENDING = 997; // File function constants internal const uint GENERIC_READ = 0x80000000; + internal const uint GENERIC_WRITE = 0x40000000; + internal const uint GENERIC_EXECUTE = 0x20000000; + internal const uint GENERIC_ALL = 0x10000000; internal const uint CREATE_NEW = 1; + internal const uint CREATE_ALWAYS = 2; + internal const uint OPEN_EXISTING = 3; + internal const uint OPEN_ALWAYS = 4; + internal const uint TRUNCATE_EXISTING = 5; internal const uint SECURITY_IMPERSONATIONLEVEL_ANONYMOUS = 0; + internal const uint SECURITY_IMPERSONATIONLEVEL_IDENTIFICATION = 1; + internal const uint SECURITY_IMPERSONATIONLEVEL_IMPERSONATION = 2; + internal const uint SECURITY_IMPERSONATIONLEVEL_DELEGATION = 3; // Infinite timeout @@ -350,16 +379,22 @@ public sealed class RemoteSessionNamedPipeServer : IDisposable #region Members private readonly object _syncObject; + private PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); private const string _threadName = "IPC Listener Thread"; + private const int _namedPipeBufferSizeForRemoting = 32768; + private const int _maxPipePathLengthLinux = 108; + private const int _maxPipePathLengthMacOS = 104; // Singleton server. private static object s_syncObject; + internal static RemoteSessionNamedPipeServer IPCNamedPipeServer; + internal static bool IPCNamedPipeServerEnabled; // Optional custom server. @@ -1019,6 +1054,7 @@ internal class NamedPipeClientBase : IDisposable #region Members private NamedPipeClientStream _clientPipeStream; + private PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource(); protected string _pipeName; diff --git a/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs b/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs index b3159a0e557..73c2849a59b 100644 --- a/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs +++ b/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs @@ -234,7 +234,9 @@ public int OpenTimeout private int _openTimeout = DefaultOpenTimeout; internal const int DefaultOpenTimeout = 3 * 60 * 1000; // 3 minutes + internal const int DefaultTimeout = -1; + internal const int InfiniteTimeout = 0; /// @@ -1322,13 +1324,21 @@ private void UpdateUri(Uri uri) #region Private Members private string _scheme = HttpScheme; + private string _computerName = DefaultComputerName; + private string _appName = s_defaultAppName; + private Uri _connectionUri = new Uri(LocalHostUriString); // uri of this connection + private PSCredential _credential; // credentials to be used for this connection + private string _shellUri = DefaultShellUri; // shell thats specified by the user + private string _thumbPrint; + private AuthenticationMechanism _proxyAuthentication; + private PSCredential _proxyCredential; #endregion Private Members @@ -1362,6 +1372,7 @@ internal bool UseDefaultWSManPort } #else private const string DefaultScheme = HttpScheme; + private const string DefaultSslScheme = HttpsScheme; /// /// Default appname. This is empty as WSMan configuration has support @@ -1498,6 +1509,7 @@ internal sealed class NewProcessConnectionInfo : RunspaceConnectionInfo #region Private Data private PSCredential _credential; + private AuthenticationMechanism _authMechanism; #endregion @@ -1644,7 +1656,9 @@ public sealed class NamedPipeConnectionInfo : RunspaceConnectionInfo #region Private Data private PSCredential _credential; + private AuthenticationMechanism _authMechanism; + private string _appDomainName = string.Empty; private const int _defaultOpenTimeout = 60000; /* 60 seconds. */ @@ -2487,6 +2501,7 @@ private static int StartSSHProcessImpl( // Process creation flags private const int CREATE_NEW_PROCESS_GROUP = 0x00000200; + private const int CREATE_SUSPENDED = 0x00000004; /// @@ -2705,6 +2720,7 @@ public sealed class VMConnectionInfo : RunspaceConnectionInfo #region Private Data private AuthenticationMechanism _authMechanism; + private PSCredential _credential; private const int _defaultOpenTimeout = 20000; /* 20 seconds. */ @@ -2835,6 +2851,7 @@ public sealed class ContainerConnectionInfo : RunspaceConnectionInfo #region Private Data private AuthenticationMechanism _authMechanism; + private PSCredential _credential; private const int _defaultOpenTimeout = 20000; /* 20 seconds. */ @@ -3002,8 +3019,11 @@ internal class ContainerProcess #region Private Data private const uint NoError = 0; + private const uint InvalidContainerId = 1; + private const uint ContainersFeatureNotEnabled = 2; + private const uint OtherError = 9999; private const uint FileNotFoundHResult = 0x80070002; diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs index 85ba02b2e7b..df4c97a0fda 100644 --- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs +++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs @@ -76,8 +76,11 @@ internal static class RemotingConstants internal static readonly Version HostVersion = new Version(1, 0, 0, 0); internal static readonly Version ProtocolVersionWin7RC = new Version(2, 0); + internal static readonly Version ProtocolVersionWin7RTM = new Version(2, 1); + internal static readonly Version ProtocolVersionWin8RTM = new Version(2, 2); + internal static readonly Version ProtocolVersionWin10RTM = new Version(2, 3); // Minor will be incremented for each change in PSRP client/server stack and new versions will be @@ -87,18 +90,27 @@ internal static class RemotingConstants // 2.103 to 2.2 - Final ship protocol version value, no change to protocol // 2.2 to 2.3 - Enabling informational stream internal static readonly Version ProtocolVersionCurrent = new Version(2, 3); + internal static readonly Version ProtocolVersion = ProtocolVersionCurrent; // Used by remoting commands to add remoting specific note properties. internal static readonly string ComputerNameNoteProperty = "PSComputerName"; + internal static readonly string RunspaceIdNoteProperty = "RunspaceId"; + internal static readonly string ShowComputerNameNoteProperty = "PSShowComputerName"; + internal static readonly string SourceJobInstanceId = "PSSourceJobInstanceId"; + internal static readonly string EventObject = "PSEventObject"; // used by Custom Shell related cmdlets. internal const string PSSessionConfigurationNoun = "PSSessionConfiguration"; + internal const string PSRemotingNoun = "PSRemoting"; + internal const string PSPluginDLLName = "pwrshplugin.dll"; + internal const string DefaultShellName = "Microsoft.PowerShell"; + internal const string MaxIdleTimeoutMS = "2147483647"; } @@ -109,13 +121,19 @@ internal static class RemotingConstants internal static class RemoteDataNameStrings { internal const string Destination = "Destination"; + internal const string RemotingTargetInterface = "RemotingTargetInterface"; + internal const string ClientRunspacePoolId = "ClientRunspacePoolId"; + internal const string ClientPowerShellId = "ClientPowerShellId"; + internal const string Action = "Action"; + internal const string DataType = "DataType"; // used by negotiation algorithm to figure out client's timezone. internal const string TimeZone = "TimeZone"; + internal const string SenderInfoPreferenceVariable = "PSSenderInfo"; // used by negotiation algorithm to figure out if the negotiation // request (from client) must comply. @@ -355,21 +373,31 @@ internal static class RemoteDataNameStrings #region Host Related Strings internal const string CallId = "ci"; + internal const string MethodId = "mi"; + internal const string MethodParameters = "mp"; + internal const string MethodReturnValue = "mr"; + internal const string MethodException = "me"; internal const string PS_STARTUP_PROTOCOL_VERSION_NAME = "protocolversion"; + internal const string PublicKeyAsXml = "PublicKeyAsXml"; + internal const string PSVersion = "PSVersion"; + internal const string SerializationVersion = "SerializationVersion"; internal const string MethodArrayElementType = "mat"; + internal const string MethodArrayLengths = "mal"; + internal const string MethodArrayElements = "mae"; internal const string ObjectType = "T"; + internal const string ObjectValue = "V"; #endregion @@ -377,10 +405,15 @@ internal static class RemoteDataNameStrings #region Command discovery pipeline internal const string DiscoveryName = "Name"; + internal const string DiscoveryType = "CommandType"; + internal const string DiscoveryModule = "Namespace"; + internal const string DiscoveryFullyQualifiedModule = "FullyQualifiedModule"; + internal const string DiscoveryArgumentList = "ArgumentList"; + internal const string DiscoveryCount = "Count"; #endregion @@ -388,29 +421,51 @@ internal static class RemoteDataNameStrings #region PowerShell internal const string PSInvocationSettings = "PSInvocationSettings"; + internal const string ApartmentState = "ApartmentState"; + internal const string RemoteStreamOptions = "RemoteStreamOptions"; + internal const string AddToHistory = "AddToHistory"; internal const string PowerShell = "PowerShell"; + internal const string IsNested = "IsNested"; + internal const string HistoryString = "History"; + internal const string RedirectShellErrorOutputPipe = "RedirectShellErrorOutputPipe"; + internal const string Commands = "Cmds"; + internal const string ExtraCommands = "ExtraCmds"; + internal const string CommandText = "Cmd"; + internal const string IsScript = "IsScript"; + internal const string UseLocalScopeNullable = "UseLocalScope"; + internal const string MergeUnclaimedPreviousCommandResults = "MergePreviousResults"; + internal const string MergeMyResult = "MergeMyResult"; + internal const string MergeToResult = "MergeToResult"; + internal const string MergeError = "MergeError"; + internal const string MergeWarning = "MergeWarning"; + internal const string MergeVerbose = "MergeVerbose"; + internal const string MergeDebug = "MergeDebug"; + internal const string MergeInformation = "MergeInformation"; + internal const string Parameters = "Args"; + internal const string ParameterName = "N"; + internal const string ParameterValue = "V"; internal const string NoInput = "NoInput"; @@ -440,12 +495,19 @@ internal static class RemoteDataNameStrings /// Properties used for serialization of PSEventArgs. /// internal const string PSEventArgsComputerName = "PSEventArgs.ComputerName"; + internal const string PSEventArgsRunspaceId = "PSEventArgs.RunspaceId"; + internal const string PSEventArgsEventIdentifier = "PSEventArgs.EventIdentifier"; + internal const string PSEventArgsSourceIdentifier = "PSEventArgs.SourceIdentifier"; + internal const string PSEventArgsTimeGenerated = "PSEventArgs.TimeGenerated"; + internal const string PSEventArgsSender = "PSEventArgs.Sender"; + internal const string PSEventArgsSourceArgs = "PSEventArgs.SourceArgs"; + internal const string PSEventArgsMessageData = "PSEventArgs.MessageData"; #endregion PSEventArgs @@ -453,14 +515,23 @@ internal static class RemoteDataNameStrings #region RunspacePool internal const string MinRunspaces = "MinRunspaces"; + internal const string MaxRunspaces = "MaxRunspaces"; + internal const string ThreadOptions = "PSThreadOptions"; + internal const string HostInfo = "HostInfo"; + internal const string RunspacePoolOperationResponse = "SetMinMaxRunspacesResponse"; + internal const string AvailableRunspaces = "AvailableRunspaces"; + internal const string PublicKey = "PublicKey"; + internal const string EncryptedSessionKey = "EncryptedSessionKey"; + internal const string ApplicationArguments = "ApplicationArguments"; + internal const string ApplicationPrivateData = "ApplicationPrivateData"; #endregion RunspacePool @@ -468,12 +539,19 @@ internal static class RemoteDataNameStrings #region ProgressRecord internal const string ProgressRecord_Activity = "Activity"; + internal const string ProgressRecord_ActivityId = "ActivityId"; + internal const string ProgressRecord_CurrentOperation = "CurrentOperation"; + internal const string ProgressRecord_ParentActivityId = "ParentActivityId"; + internal const string ProgressRecord_PercentComplete = "PercentComplete"; + internal const string ProgressRecord_Type = "Type"; + internal const string ProgressRecord_SecondsRemaining = "SecondsRemaining"; + internal const string ProgressRecord_StatusDescription = "StatusDescription"; #endregion @@ -486,8 +564,11 @@ internal static class RemoteDataNameStrings internal enum RemotingDestination : uint { InvalidDestination = 0x0, + Client = 0x1, + Server = 0x2, + Listener = 0x4, } @@ -501,8 +582,11 @@ internal enum RemotingDestination : uint internal enum RemotingTargetInterface : int { InvalidTargetInterface = 0, + Session = 1, + RunspacePool = 2, + PowerShell = 3, } @@ -529,45 +613,73 @@ internal enum RemotingDataType : uint // Session messages SessionCapability = 0x00010002, + CloseSession = 0x00010003, + CreateRunspacePool = 0x00010004, + PublicKey = 0x00010005, + EncryptedSessionKey = 0x00010006, + PublicKeyRequest = 0x00010007, + ConnectRunspacePool = 0x00010008, // Runspace Pool messages SetMaxRunspaces = 0x00021002, + SetMinRunspaces = 0x00021003, + RunspacePoolOperationResponse = 0x00021004, + RunspacePoolStateInfo = 0x00021005, + CreatePowerShell = 0x00021006, + AvailableRunspaces = 0x00021007, + PSEventArgs = 0x00021008, + ApplicationPrivateData = 0x00021009, + GetCommandMetadata = 0x0002100A, + RunspacePoolInitData = 0x0002100B, + ResetRunspaceState = 0x0002100C, // Runspace host messages RemoteHostCallUsingRunspaceHost = 0x00021100, + RemoteRunspaceHostResponseData = 0x00021101, // PowerShell messages PowerShellInput = 0x00041002, + PowerShellInputEnd = 0x00041003, + PowerShellOutput = 0x00041004, + PowerShellErrorRecord = 0x00041005, + PowerShellStateInfo = 0x00041006, + PowerShellDebug = 0x00041007, + PowerShellVerbose = 0x00041008, + PowerShellWarning = 0x00041009, + PowerShellProgress = 0x00041010, + PowerShellInformationStream = 0x00041011, + StopPowerShell = 0x00041012, // PowerShell host messages RemoteHostCallUsingPowerShellHost = 0x00041100, + RemotePowerShellHostResponseData = 0x00041101, } diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs index 8314337b77a..8778c0e0b79 100644 --- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs +++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs @@ -94,18 +94,25 @@ internal static class RemoteDebuggingCommands // Commands related to debugger stop events internal const string GetDebuggerStopArgs = "__Get-PSDebuggerStopArgs"; + internal const string SetDebuggerAction = "__Set-PSDebuggerAction"; // Miscellaneous debug commands internal const string SetDebuggerStepMode = "__Set-PSDebuggerStepMode"; + internal const string SetDebugMode = "__Set-PSDebugMode"; + internal const string SetUnhandledBreakpointMode = "__Set-PSUnhandledBreakpointMode"; // Breakpoint commands internal const string GetBreakpoint = "__Get-PSBreakpoint"; + internal const string SetBreakpoint = "__Set-PSBreakpoint"; + internal const string EnableBreakpoint = "__Enable-PSBreakpoint"; + internal const string DisableBreakpoint = "__Disable-PSBreakpoint"; + internal const string RemoveBreakpoint = "__Remove-PSBreakpoint"; #endregion diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs index bc5d47c8a83..1e867d9dd8f 100644 --- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs +++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs @@ -22,10 +22,15 @@ internal class RemoteSessionCapability #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private Version _psversion; + private Version _serversion; + private Version _protocolVersion; + private RemotingDestination _remotingDestination; + private static byte[] _timeZoneInByteFormat; + private TimeZoneInfo _timeZone; #endregion @@ -155,14 +160,23 @@ internal TimeZoneInfo TimeZone internal enum HostDefaultDataId { ForegroundColor, + BackgroundColor, + CursorPosition, + WindowPosition, + CursorSize, + BufferSize, + WindowSize, + MaxWindowSize, + MaxPhysicalWindowSize, + WindowTitle, } @@ -381,6 +395,7 @@ internal bool IsHostUINull #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell private readonly HostDefaultData _hostDefaultData; + private bool _useRunspaceHost; #endregion diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs index 664c2a91ae0..81bcb75e550 100644 --- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs +++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs @@ -17,13 +17,19 @@ internal class RemoteDataObject #region Private Members private const int destinationOffset = 0; + private const int dataTypeOffset = 4; + private const int rsPoolIdOffset = 8; + private const int psIdOffset = 24; + private const int headerLength = 4 + 4 + 16 + 16; private const int SessionMask = 0x00010000; + private const int RunspacePoolMask = 0x00021000; + private const int PowerShellMask = 0x00041000; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/common/fragmentor.cs b/src/System.Management.Automation/engine/remoting/common/fragmentor.cs index 2ebe434ea04..e6aa02ebcd0 100644 --- a/src/System.Management.Automation/engine/remoting/common/fragmentor.cs +++ b/src/System.Management.Automation/engine/remoting/common/fragmentor.cs @@ -29,6 +29,7 @@ namespace System.Management.Automation.Remoting internal class FragmentedRemoteObject { private byte[] _blob; + private int _blobLength; /// @@ -437,12 +438,17 @@ internal class SerializedDataStream : Stream, IDisposable #region Private Data private bool _isEntered; + private FragmentedRemoteObject _currentFragment; + private long _fragmentId; private int _fragmentSize; + private object _syncObject; + private bool _isDisposed; + private bool _notifyOnWriteFragmentImmediately; // MemoryStream does not dynamically resize as data is read. This will waste @@ -451,10 +457,15 @@ internal class SerializedDataStream : Stream, IDisposable // is created..so after data is sent the MemoryStream is disposed there by // clearing resources. private Queue _queuedStreams; + private MemoryStream _writeStream; + private MemoryStream _readStream; + private int _writeOffset; + private int _readOffSet; + private long _length; /// @@ -963,6 +974,7 @@ internal class Fragmentor #endregion private int _fragmentSize; + private SerializationContext _serializationContext; #region Constructor diff --git a/src/System.Management.Automation/engine/remoting/common/misc.cs b/src/System.Management.Automation/engine/remoting/common/misc.cs index e5b1f1edc04..2ee92f4ffb6 100644 --- a/src/System.Management.Automation/engine/remoting/common/misc.cs +++ b/src/System.Management.Automation/engine/remoting/common/misc.cs @@ -226,37 +226,69 @@ internal enum RemoteSessionState internal enum RemoteSessionEvent { InvalidEvent = 0, + CreateSession = 1, + ConnectSession = 2, + NegotiationSending = 3, + NegotiationSendingOnConnect = 4, + NegotiationSendCompleted = 5, + NegotiationReceived = 6, + NegotiationCompleted = 7, + NegotiationPending = 8, + Close = 9, + CloseCompleted = 10, + CloseFailed = 11, + ConnectFailed = 12, + NegotiationFailed = 13, + NegotiationTimeout = 14, + SendFailed = 15, + ReceiveFailed = 16, + FatalError = 17, + MessageReceived = 18, + KeySent = 19, + KeySendFailed = 20, + KeyReceived = 21, + KeyReceiveFailed = 22, + KeyRequested = 23, + KeyRequestFailed = 24, + DisconnectStart = 25, + DisconnectCompleted = 26, + DisconnectFailed = 27, + ReconnectStart = 28, + ReconnectCompleted = 29, + ReconnectFailed = 30, + RCDisconnectStarted = 31, + MaxEvent = 32 } diff --git a/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs b/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs index fa1bcb7da86..ba0202c7ec8 100644 --- a/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs +++ b/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs @@ -75,7 +75,9 @@ public class PSStreamObject /// /// public PSStreamObjectType ObjectType { get; set; } + internal object Value { get; set; } + internal Guid Id { get; set; } internal PSStreamObject(PSStreamObjectType objectType, object value, Guid id) diff --git a/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs b/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs index 72f404bce10..b373be93b43 100644 --- a/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs +++ b/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs @@ -17,86 +17,151 @@ internal enum PSRemotingErrorId : uint { // OS related 1-9 DefaultRemotingExceptionMessage = 0, + OutOfMemory = 1, // Pipeline related range: 10-99 PipelineIdsDoNotMatch = 10, + PipelineNotFoundOnServer = 11, + PipelineStopped = 12, // Runspace, Host, UI and RawUI related range: 200-299 RunspaceAlreadyExists = 200, + RunspaceIdsDoNotMatch = 201, + RemoteRunspaceOpenFailed = 202, + RunspaceCannotBeFound = 203, + ResponsePromptIdCannotBeFound = 204, + RemoteHostCallFailed = 205, + RemoteHostMethodNotImplemented = 206, + RemoteHostDataEncodingNotSupported = 207, + RemoteHostDataDecodingNotSupported = 208, + NestedPipelineNotSupported = 209, + RelativeUriForRunspacePathNotSupported = 210, + RemoteHostDecodingFailed = 211, + MustBeAdminToOverrideThreadOptions = 212, + RemoteHostPromptForCredentialModifiedCaption = 213, + RemoteHostPromptForCredentialModifiedMessage = 214, + RemoteHostReadLineAsSecureStringPrompt = 215, + RemoteHostGetBufferContents = 216, + RemoteHostPromptSecureStringPrompt = 217, + WinPERemotingNotSupported = 218, // reserved range: 300-399 // Encoding/Decoding and fragmentation related range: 400-499 ReceivedUnsupportedRemoteHostCall = 400, + ReceivedUnsupportedAction = 401, + ReceivedUnsupportedDataType = 402, + MissingDestination = 403, + MissingTarget = 404, + MissingRunspaceId = 405, + MissingDataType = 406, + MissingCallId = 407, + MissingMethodName = 408, + MissingIsStartFragment = 409, + MissingProperty = 410, + ObjectIdsNotMatching = 411, + FragmentIdsNotInSequence = 412, + ObjectIsTooBig = 413, + MissingIsEndFragment = 414, + DeserializedObjectIsNull = 415, + BlobLengthNotInRange = 416, + DecodingErrorForErrorRecord = 417, + DecodingErrorForPipelineStateInfo = 418, + DecodingErrorForRunspaceStateInfo = 419, + ReceivedUnsupportedRemotingTargetInterfaceType = 420, + UnknownTargetClass = 421, + MissingTargetClass = 422, + DecodingErrorForRunspacePoolStateInfo = 423, + DecodingErrorForMinRunspaces = 424, + DecodingErrorForMaxRunspaces = 425, + DecodingErrorForPowerShellStateInfo = 426, + DecodingErrorForThreadOptions = 427, + CantCastPropertyToExpectedType = 428, + CantCastRemotingDataToPSObject = 429, + CantCastCommandToPSObject = 430, + CantCastParameterToPSObject = 431, + ObjectIdCannotBeLessThanZero = 432, + NotEnoughHeaderForRemoteDataObject = 433, // reserved range: 500-599 // Remote Session related range: 600-699 RemotingDestinationNotForMe = 600, + ClientNegotiationTimeout = 601, + ClientNegotiationFailed = 602, + ServerRequestedToCloseSession = 603, + ServerNegotiationFailed = 604, + ServerNegotiationTimeout = 605, + ClientRequestedToCloseSession = 606, + FatalErrorCausingClose = 607, + ClientKeyExchangeFailed = 608, + ServerKeyExchangeFailed = 609, + ClientNotFoundCapabilityProperties = 610, + ServerNotFoundCapabilityProperties = 611, // reserved range: 700-799 @@ -104,54 +169,95 @@ internal enum PSRemotingErrorId : uint // Transport related range: 800-899 ConnectFailed = 801, + CloseIsCalled = 802, + ForceClosed = 803, + CloseFailed = 804, + CloseCompleted = 805, + UnsupportedWaitHandleType = 806, + ReceivedDataStreamIsNotStdout = 807, + StdInIsNotOpen = 808, + NativeWriteFileFailed = 809, + NativeReadFileFailed = 810, + InvalidSchemeValue = 811, + ClientReceiveFailed = 812, + ClientSendFailed = 813, + CommandHandleIsNull = 814, + StdInCannotBeSetToNoWait = 815, + PortIsOutOfRange = 816, + ServerProcessExited = 817, + CannotGetStdInHandle = 818, + CannotGetStdOutHandle = 819, + CannotGetStdErrHandle = 820, + CannotSetStdInHandle = 821, + CannotSetStdOutHandle = 822, + CannotSetStdErrHandle = 823, + InvalidConfigurationName = 824, + ConnectSkipCheckFailed = 825, // Error codes added to support new WSMan Fan-In Model API CreateSessionFailed = 851, + CreateExFailed = 853, + ConnectExCallBackError = 854, + SendExFailed = 855, + SendExCallBackError = 856, + ReceiveExFailed = 857, + ReceiveExCallBackError = 858, + RunShellCommandExFailed = 859, + RunShellCommandExCallBackError = 860, + CommandSendExFailed = 861, + CommandSendExCallBackError = 862, + CommandReceiveExFailed = 863, + CommandReceiveExCallBackError = 864, + CloseExCallBackError = 866, // END: Error codes added to support new WSMan Fan-In Model API // BEGIN: Error IDs introduced for URI redirection RedirectedURINotWellFormatted = 867, + URIEndPointNotResolved = 868, // END: Error IDs introduced for URI redirection // BEGIN: Error IDs introduced for Quota Management ReceivedObjectSizeExceededMaximumClient = 869, + ReceivedDataSizeExceededMaximumClient = 870, + ReceivedObjectSizeExceededMaximumServer = 871, + ReceivedDataSizeExceededMaximumServer = 872, // END: Error IDs introduced for Quota Management // BEGIN: Error IDs introduced for startup script @@ -160,96 +266,170 @@ internal enum PSRemotingErrorId : uint TroubleShootingHelpTopic = 874, // BEGIN: Error IDs introduced for disconnect/reconnect DisconnectShellExFailed = 875, + DisconnectShellExCallBackErrr = 876, + ReconnectShellExFailed = 877, + ReconnectShellExCallBackErrr = 878, // END: Error IDs introduced for disconnect/reconnect // Cmdlets related range: 900-999 RemoteRunspaceInfoHasDuplicates = 900, + RemoteRunspaceInfoLimitExceeded = 901, + RemoteRunspaceOpenUnknownState = 902, + UriSpecifiedNotValid = 903, + RemoteRunspaceClosed = 904, + RemoteRunspaceNotAvailableForSpecifiedComputer = 905, + RemoteRunspaceNotAvailableForSpecifiedRunspaceId = 906, + StopPSJobWhatIfTarget = 907, + InvalidJobStateGeneral = 909, + JobWithSpecifiedNameNotFound = 910, + JobWithSpecifiedInstanceIdNotFound = 911, + JobWithSpecifiedSessionIdNotFound = 912, + JobWithSpecifiedNameNotCompleted = 913, + JobWithSpecifiedSessionIdNotCompleted = 914, + JobWithSpecifiedInstanceIdNotCompleted = 915, + RemovePSJobWhatIfTarget = 916, + ComputerNameParamNotSupported = 917, + RunspaceParamNotSupported = 918, + RemoteRunspaceNotAvailableForSpecifiedName = 919, + RemoteRunspaceNotAvailableForSpecifiedSessionId = 920, + ItemNotFoundInRepository = 921, + CannotRemoveJob = 922, + NewRunspaceAmbiguousAuthentication = 923, + WildCardErrorFilePathParameter = 924, + FilePathNotFromFileSystemProvider = 925, + FilePathShouldPS1Extension = 926, + PSSessionConfigurationName = 927, + PSSessionAppName = 928, // Custom Shell commands CSCDoubleParameterOutOfRange = 929, + URIRedirectionReported = 930, + NoMoreInputWrites = 931, + InvalidComputerName = 932, + ProxyAmbiguousAuthentication = 933, + ProxyCredentialWithoutAccess = 934, // Start-PSSession related error codes. PushedRunspaceMustBeOpen = 951, + HostDoesNotSupportPushRunspace = 952, + RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId = 953, + RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId = 954, + RemoteRunspaceHasMultipleMatchesForSpecifiedName = 955, + RemoteRunspaceDoesNotSupportPushRunspace = 956, + HostInNestedPrompt = 957, + InvalidVMId = 959, + InvalidVMNameNoVM = 960, + InvalidVMNameMultipleVM = 961, + HyperVModuleNotAvailable = 962, + InvalidUsername = 963, + InvalidCredential = 964, + VMSessionConnectFailed = 965, + InvalidContainerId = 966, + CannotCreateProcessInContainer = 967, + CannotTerminateProcessInContainer = 968, + ContainersFeatureNotEnabled = 969, + RemoteSessionHyperVSocketServerConstructorFailure = 970, + ContainerSessionConnectFailed = 973, + RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure = 974, + InvalidVMState = 975, // Invoke-Command related error codes. InvalidVMIdNotSingle = 981, + InvalidVMNameNotSingle = 982, // SessionState Description related messages WsmanMaxRedirectionCountVariableDescription = 1001, + PSDefaultSessionOptionDescription = 1002, + PSSenderInfoDescription = 1004, // IPC for Background jobs related errors: 2000 IPCUnknownNodeType = 2001, + IPCInsufficientDataforElement = 2002, + IPCWrongAttributeCountForDataElement = 2003, + IPCOnlyTextExpectedInDataElement = 2004, + IPCWrongAttributeCountForElement = 2005, + IPCUnknownElementReceived = 2006, + IPCSupportsOnlyDefaultAuth = 2007, + IPCWowComponentNotPresent = 2008, + IPCServerProcessReportedError = 2100, + IPCServerProcessExited = 2101, + IPCErrorProcessingServerData = 2102, + IPCUnknownCommandGuid = 2103, + IPCNoSignalForSession = 2104, + IPCSignalTimedOut = 2105, + IPCCloseTimedOut = 2106, + IPCExceptionLaunchingProcess = 2107, } @@ -385,6 +565,7 @@ private void SetDefaultErrorRecord() public class PSRemotingTransportException : RuntimeException { private int _errorCode; + private string _transportMessage; #region Constructors diff --git a/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs b/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs index 571ec3225d5..a5a9c834d33 100644 --- a/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs +++ b/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs @@ -630,6 +630,7 @@ private void RaiseThrottleManagerEvents() private object _syncObject; private bool _submitComplete = false; // to check if operations have been submitComplete + private bool _stopping = false; // if stop is in process #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs index e8a780543bc..c31f092955e 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs @@ -36,17 +36,29 @@ namespace System.Management.Automation.Remoting internal enum TransportMethodEnum { CreateShellEx = 0, + RunShellCommandEx = 1, + SendShellInputEx = 2, + ReceiveShellOutputEx = 3, + CloseShellOperationEx = 4, + CommandInputEx = 5, + ReceiveCommandOutputEx = 6, + DisconnectShellEx = 7, + ReconnectShellEx = 8, + ConnectShellEx = 9, + ReconnectShellCommandEx = 10, + ConnectShellCommandEx = 11, + Unknown = 12, } @@ -92,10 +104,15 @@ internal TransportErrorOccuredEventArgs(PSRemotingTransportException e, internal enum ConnectionStatus { NetworkFailureDetected = 1, + ConnectionRetryAttempt = 2, + ConnectionRetrySucceeded = 3, + AutoDisconnectStarting = 4, + AutoDisconnectSucceeded = 5, + InternalErrorAbort = 6 }; @@ -152,12 +169,14 @@ internal abstract class BaseTransportManager : IDisposable // This is due to the WinRM implementation on the Listener. // So We added a 1 minute network delay to count for this. internal const int ServerDefaultKeepAliveTimeoutMs = 4 * 60 * 1000; // milliseconds = 4 minutes + internal const int ClientDefaultOperationTimeoutMs = 3 * 60 * 1000; // milliseconds = 3 minutes // Close timeout: to prevent unbounded close operation, we set a 1 minute bound. internal const int ClientCloseTimeoutMs = 60 * 1000; // This value instructs the server to use whatever setting it has for idle timeout. internal const int UseServerDefaultIdleTimeout = -1; + internal const uint UseServerDefaultIdleTimeoutUInt = UInt32.MaxValue; // Minimum allowed idle timeout time is 60 seconds. @@ -167,10 +186,12 @@ internal abstract class BaseTransportManager : IDisposable // Quota related consts and session variables. internal const int MaximumReceivedDataSize = 50 << 20; // 50MB + internal const int MaximumReceivedObjectSize = 10 << 20; // 10MB // Session variables supporting powershell quotas. internal const string MAX_RECEIVED_DATA_PER_COMMAND_MB = "PSMaximumReceivedDataSizePerCommandMB"; + internal const string MAX_RECEIVED_OBJECT_SIZE_MB = "PSMaximumReceivedObjectSizeMB"; #endregion @@ -417,13 +438,19 @@ internal abstract class BaseClientTransportManager : BaseTransportManager, IDisp #region Data protected bool isClosed; + protected object syncObject = new object(); + protected PrioritySendDataCollection dataToBeSent; // used to handle callbacks from the server..these are used to synchronize received callbacks private Queue _callbackNotificationQueue; + private ReceiveDataCollection.OnDataAvailableCallback _onDataAvailableCallback; + private bool _isServicingCallbacks; + private bool _suspendQueueServicing; + private bool _isDebuggerSuspend; // this is used log crimson messages. @@ -923,6 +950,7 @@ internal class CallbackNotificationInformation // only one of the following 2 should be present.. // anyway transportException takes precedence over remoteObject. internal RemoteDataObject remoteObject; + internal TransportErrorOccuredEventArgs transportError; // Used by ServicePendingCallbacks to give the control to derived classes for // processing data that the base class does not understand. @@ -1108,7 +1136,9 @@ internal abstract class BaseClientCommandTransportManager : BaseClientTransportM // pipeline in the form cmd1 | cmd2.. this is used by authz module for early validation. protected StringBuilder cmdText; + protected SerializedDataStream serializedPipeline; + protected Guid powershellInstanceId; protected Guid PowershellInstanceId @@ -1222,13 +1252,19 @@ internal abstract class AbstractServerTransportManager : BaseTransportManager private SerializedDataStream.OnDataAvailableCallback _onDataAvailable; // the following variable are used by onDataAvailableCallback. private bool _shouldFlushData; + private bool _reportAsPending; + private Guid _runspacePoolInstanceId; + private Guid _powerShellInstanceId; + private RemotingDataType _dataType; + private RemotingTargetInterface _targetInterface; // End: the following variable are used by onDataAvailableCallback. private Queue> _dataToBeSentQueue; + private bool _isSerializing; #endregion diff --git a/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs b/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs index 174cad6743b..becd6721ea0 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs @@ -33,25 +33,45 @@ internal class ConfigurationDataFromXML #region Config XML Constants internal const string INITPARAMETERSTOKEN = "InitializationParameters"; + internal const string PARAMTOKEN = "Param"; + internal const string NAMETOKEN = "Name"; + internal const string VALUETOKEN = "Value"; + internal const string APPBASETOKEN = "applicationbase"; + internal const string ASSEMBLYTOKEN = "assemblyname"; + internal const string SHELLCONFIGTYPETOKEN = "pssessionconfigurationtypename"; + internal const string STARTUPSCRIPTTOKEN = "startupscript"; + internal const string MAXRCVDOBJSIZETOKEN = "psmaximumreceivedobjectsizemb"; + internal const string MAXRCVDOBJSIZETOKEN_CamelCase = "PSMaximumReceivedObjectSizeMB"; + internal const string MAXRCVDCMDSIZETOKEN = "psmaximumreceiveddatasizepercommandmb"; + internal const string MAXRCVDCMDSIZETOKEN_CamelCase = "PSMaximumReceivedDataSizePerCommandMB"; + internal const string THREADOPTIONSTOKEN = "pssessionthreadoptions"; + internal const string THREADAPTSTATETOKEN = "pssessionthreadapartmentstate"; + internal const string SESSIONCONFIGTOKEN = "sessionconfigurationdata"; + internal const string PSVERSIONTOKEN = "PSVersion"; + internal const string MAXPSVERSIONTOKEN = "MaxPSVersion"; + internal const string MODULESTOIMPORT = "ModulesToImport"; + internal const string HOSTMODE = "hostmode"; + internal const string CONFIGFILEPATH = "configfilepath"; + internal const string CONFIGFILEPATH_CamelCase = "ConfigFilePath"; #endregion @@ -59,16 +79,25 @@ internal class ConfigurationDataFromXML internal string StartupScript; // this field is used only by an Out-Of-Process (IPC) server process internal string InitializationScriptForOutOfProcessRunspace; + internal string ApplicationBase; + internal string AssemblyName; + internal string EndPointConfigurationTypeName; + internal Type EndPointConfigurationType; + internal int? MaxReceivedObjectSizeMB; + internal int? MaxReceivedCommandSizeMB; // Used to set properties on the RunspacePool created for this shell. internal PSThreadOptions? ShellThreadOptions; + internal ApartmentState? ShellThreadApartmentState; + internal PSSessionConfigurationData SessionConfigurationData; + internal string ConfigFilePath; /// @@ -782,7 +811,9 @@ private static string } private const string configProvidersKeyName = "PSConfigurationProviders"; + private const string configProviderApplicationBaseKeyName = "ApplicationBase"; + private const string configProviderAssemblyNameKeyName = "AssemblyName"; private static Dictionary s_ssnStateProviders = @@ -885,6 +916,7 @@ internal class ConfigTypeEntry internal delegate bool TypeValidationCallback(string key, object obj, PSCmdlet cmdlet, string path); internal string Key; + internal TypeValidationCallback ValidationCallback; /// @@ -904,48 +936,91 @@ internal ConfigTypeEntry(string key, TypeValidationCallback callback) internal static class ConfigFileConstants { internal static readonly string AliasDefinitions = "AliasDefinitions"; + internal static readonly string AliasDescriptionToken = "Description"; + internal static readonly string AliasNameToken = "Name"; + internal static readonly string AliasOptionsToken = "Options"; + internal static readonly string AliasValueToken = "Value"; + internal static readonly string AssembliesToLoad = "AssembliesToLoad"; + internal static readonly string Author = "Author"; + internal static readonly string CompanyName = "CompanyName"; + internal static readonly string Copyright = "Copyright"; + internal static readonly string Description = "Description"; + internal static readonly string EnforceInputParameterValidation = "EnforceInputParameterValidation"; + internal static readonly string EnvironmentVariables = "EnvironmentVariables"; + internal static readonly string ExecutionPolicy = "ExecutionPolicy"; + internal static readonly string FormatsToProcess = "FormatsToProcess"; + internal static readonly string FunctionDefinitions = "FunctionDefinitions"; + internal static readonly string FunctionNameToken = "Name"; + internal static readonly string FunctionOptionsToken = "Options"; + internal static readonly string FunctionValueToken = "ScriptBlock"; + internal static readonly string GMSAAccount = "GroupManagedServiceAccount"; + internal static readonly string Guid = "GUID"; + internal static readonly string LanguageMode = "LanguageMode"; + internal static readonly string ModulesToImport = "ModulesToImport"; + internal static readonly string MountUserDrive = "MountUserDrive"; + internal static readonly string PowerShellVersion = "PowerShellVersion"; + internal static readonly string RequiredGroups = "RequiredGroups"; + internal static readonly string RoleDefinitions = "RoleDefinitions"; + internal static readonly string SchemaVersion = "SchemaVersion"; + internal static readonly string ScriptsToProcess = "ScriptsToProcess"; + internal static readonly string SessionType = "SessionType"; + internal static readonly string RoleCapabilities = "RoleCapabilities"; + internal static readonly string RoleCapabilityFiles = "RoleCapabilityFiles"; + internal static readonly string RunAsVirtualAccount = "RunAsVirtualAccount"; + internal static readonly string RunAsVirtualAccountGroups = "RunAsVirtualAccountGroups"; + internal static readonly string TranscriptDirectory = "TranscriptDirectory"; + internal static readonly string TypesToProcess = "TypesToProcess"; + internal static readonly string UserDriveMaxSize = "UserDriveMaximumSize"; + internal static readonly string VariableDefinitions = "VariableDefinitions"; + internal static readonly string VariableNameToken = "Name"; + internal static readonly string VariableValueToken = "Value"; + internal static readonly string VisibleAliases = "VisibleAliases"; + internal static readonly string VisibleCmdlets = "VisibleCmdlets"; + internal static readonly string VisibleFunctions = "VisibleFunctions"; + internal static readonly string VisibleProviders = "VisibleProviders"; + internal static readonly string VisibleExternalCommands = "VisibleExternalCommands"; internal static readonly ConfigTypeEntry[] ConfigFileKeys = new ConfigTypeEntry[] { @@ -1687,6 +1762,7 @@ internal static void ValidateRoleDefinitions(IDictionary roleDefinitions) internal sealed class DISCPowerShellConfiguration : PSSessionConfiguration { private string _configFile; + private Hashtable _configHash; /// diff --git a/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs index 4c3961748eb..a15c608d660 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs @@ -39,15 +39,25 @@ internal static class OutOfProcessUtils #region Helper Fields internal const string PS_OUT_OF_PROC_DATA_TAG = "Data"; + internal const string PS_OUT_OF_PROC_DATA_ACK_TAG = "DataAck"; + internal const string PS_OUT_OF_PROC_STREAM_ATTRIBUTE = "Stream"; + internal const string PS_OUT_OF_PROC_PSGUID_ATTRIBUTE = "PSGuid"; + internal const string PS_OUT_OF_PROC_CLOSE_TAG = "Close"; + internal const string PS_OUT_OF_PROC_CLOSE_ACK_TAG = "CloseAck"; + internal const string PS_OUT_OF_PROC_COMMAND_TAG = "Command"; + internal const string PS_OUT_OF_PROC_COMMAND_ACK_TAG = "CommandAck"; + internal const string PS_OUT_OF_PROC_SIGNAL_TAG = "Signal"; + internal const string PS_OUT_OF_PROC_SIGNAL_ACK_TAG = "SignalAck"; + internal const int EXITCODE_UNHANDLED_EXCEPTION = 0x0FA0; internal static XmlReaderSettings XmlReaderSettings; @@ -144,23 +154,37 @@ private static string CreatePSGuidPacket(string element, Guid psGuid) #region Packet Processing Helper Methods / Delegates internal delegate void DataPacketReceived(byte[] rawData, string stream, Guid psGuid); + internal delegate void DataAckPacketReceived(Guid psGuid); + internal delegate void CommandCreationPacketReceived(Guid psGuid); + internal delegate void CommandCreationAckReceived(Guid psGuid); + internal delegate void ClosePacketReceived(Guid psGuid); + internal delegate void CloseAckPacketReceived(Guid psGuid); + internal delegate void SignalPacketReceived(Guid psGuid); + internal delegate void SignalAckPacketReceived(Guid psGuid); internal struct DataProcessingDelegates { internal DataPacketReceived DataPacketReceived; + internal DataAckPacketReceived DataAckPacketReceived; + internal CommandCreationPacketReceived CommandCreationPacketReceived; + internal CommandCreationAckReceived CommandCreationAckReceived; + internal SignalPacketReceived SignalPacketReceived; + internal SignalAckPacketReceived SignalAckPacketReceived; + internal ClosePacketReceived ClosePacketReceived; + internal CloseAckPacketReceived CloseAckPacketReceived; } @@ -403,7 +427,9 @@ internal class OutOfProcessTextWriter #region Private Data private TextWriter _writer; + private bool _isStopped; + private object _syncObject = new object(); #endregion @@ -465,13 +491,19 @@ internal abstract class OutOfProcessClientSessionTransportManagerBase : BaseClie #region Data private readonly BlockingCollection _sessionMessageQueue; + private readonly BlockingCollection _commandMessageQueue; + private PrioritySendDataCollection.OnDataAvailableCallback _onDataAvailableToSendCallback; + private OutOfProcessUtils.DataProcessingDelegates _dataProcessingCallbacks; + private Dictionary _cmdTransportManagers; + private Timer _closeTimeOutTimer; protected OutOfProcessTextWriter stdInWriter; + protected PowerShellTraceSource _tracer; #endregion @@ -1055,8 +1087,11 @@ internal class OutOfProcessClientSessionTransportManager : OutOfProcessClientSes #region Private Data private Process _serverProcess; + private NewProcessConnectionInfo _connectionInfo; + private bool _processCreated = true; + private PowerShellProcessInstance _processInstance; #endregion @@ -1427,8 +1462,11 @@ internal sealed class VMHyperVSocketClientSessionTransportManager : HyperVSocket #region Private Data private Guid _vmGuid; + private string _configurationName; + private VMConnectionInfo _connectionInfo; + private NetworkCredential _networkCredential; #endregion @@ -1513,6 +1551,7 @@ internal sealed class ContainerHyperVSocketClientSessionTransportManager : Hyper #region Private Data private Guid _targetGuid; // currently this is the utility vm guid in HyperV container scenario + private ContainerConnectionInfo _connectionInfo; #endregion @@ -1572,10 +1611,15 @@ internal sealed class SSHClientSessionTransportManager : OutOfProcessClientSessi #region Data private SSHConnectionInfo _connectionInfo; + private int _sshProcessId; + private StreamWriter _stdInWriter; + private StreamReader _stdOutReader; + private StreamReader _stdErrReader; + private bool _connectionEstablished; private const string _threadName = "SSHTransport Reader Thread"; @@ -1861,7 +1905,9 @@ internal abstract class NamedPipeClientSessionTransportManagerBase : OutOfProces #region Data private RunspaceConnectionInfo _connectionInfo; + protected NamedPipeClientBase _clientPipe = new NamedPipeClientBase(); + private string _threadName; #endregion @@ -2125,7 +2171,9 @@ internal class OutOfProcessClientCommandTransportManager : BaseClientCommandTran #region Private Data private OutOfProcessTextWriter _stdInWriter; + private PrioritySendDataCollection.OnDataAvailableCallback _onDataAvailableToSendCallback; + private Timer _signalTimeOutTimer; #endregion @@ -2426,8 +2474,11 @@ internal class OutOfProcessServerSessionTransportManager : AbstractServerSession #region Private Data private OutOfProcessTextWriter _stdOutWriter; + private OutOfProcessTextWriter _stdErrWriter; + private Dictionary _cmdTransportManagers; + private object _syncObject = new object(); #endregion @@ -2524,8 +2575,11 @@ internal class OutOfProcessServerTransportManager : AbstractServerTransportManag #region Private Data private OutOfProcessTextWriter _stdOutWriter; + private OutOfProcessTextWriter _stdErrWriter; + private Guid _powershellInstanceId; + private bool _isDataAckSendPending; #endregion diff --git a/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs b/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs index 17aac7adfdf..10571074cb3 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs @@ -150,6 +150,7 @@ internal static PSSessionConfigurationData Create(string configurationData) #region Private Members private List _modulesToImport; + private List _modulesToImportInternal; private string _privateData; @@ -227,11 +228,17 @@ private void CreateCollectionIfNecessary() } private const string SessionConfigToken = "SessionConfigurationData"; + internal const string ModulesToImportToken = "modulestoimport"; + internal const string PrivateDataToken = "PrivateData"; + internal const string InProcActivityToken = "InProcActivity"; + private const string ParamToken = "Param"; + private const string NameToken = "Name"; + private const string ValueToken = "Value"; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs b/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs index 6c2b64479f4..de8458c1dcd 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs @@ -55,8 +55,11 @@ internal class PrioritySendDataCollection // these callbacks are used to notify when data becomes available under // suc circumstances. private OnDataAvailableCallback _onDataAvailableCallback; + private SerializedDataStream.OnDataAvailableCallback _onSendCollectionDataAvailable; + private bool _isHandlingCallback; + private object _readSyncObject = new object(); /// @@ -306,11 +309,15 @@ internal class ReceiveDataCollection : IDisposable // 1 whole object may contain any number of fragments. blob from // each fragment is written to this stream. private MemoryStream _dataToProcessStream; + private long _currentObjectId; + private long _currentFrgId; // max deserialized object size in bytes private int? _maxReceivedObjectSize; + private int _totalReceivedObjectSizeSoFar; + private bool _isCreateByClientTM; // this indicates if any off sync fragments can be ignored @@ -320,6 +327,7 @@ internal class ReceiveDataCollection : IDisposable // objects need to cleanly release resources without // locking entire processing logic. private object _syncObject; + private bool _isDisposed; // holds the number of threads that are currently in // ProcessRawData method. This might happen only for @@ -739,7 +747,9 @@ internal class PriorityReceiveDataCollection : IDisposable #region Private Data private Fragmentor _defragmentor; + private ReceiveDataCollection[] _recvdData; + private bool _isCreateByClientTM; #endregion diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs index 1b1fe2b2163..231e75301fa 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs @@ -13,15 +13,25 @@ namespace System.Management.Automation.Remoting.Client internal static class WSManNativeApi { internal const uint INFINITE = 0xFFFFFFFF; + internal const string PS_CREATION_XML_TAG = "creationXml"; + internal const string PS_CONNECT_XML_TAG = "connectXml"; + internal const string PS_CONNECTRESPONSE_XML_TAG = "connectResponseXml"; + internal const string PS_XML_NAMESPACE = "http://schemas.microsoft.com/powershell"; + internal const string WSMAN_STREAM_ID_STDOUT = "stdout"; + internal const string WSMAN_STREAM_ID_PROMPTRESPONSE = "pr"; + internal const string WSMAN_STREAM_ID_STDIN = "stdin"; + internal const string ResourceURIPrefix = @"http://schemas.microsoft.com/powershell/"; + internal const string NoProfile = "WINRS_NOPROFILE"; + internal const string CodePage = "WINRS_CODEPAGE"; internal static readonly Version WSMAN_STACK_VERSION = new Version(3, 0); @@ -309,6 +319,7 @@ internal struct WSManUserNameCredentialStruct } private WSManUserNameCredentialStruct _cred; + private MarshalledObject _data; /// @@ -608,9 +619,13 @@ internal enum WSManShellFlag : int internal enum WSManDataType : uint { WSMAN_DATA_NONE = 0, + WSMAN_DATA_TYPE_TEXT = 1, + WSMAN_DATA_TYPE_BINARY = 2, + WSMAN_DATA_TYPE_WS_XML_READER = 3, + WSMAN_DATA_TYPE_DWORD = 4 }; @@ -618,6 +633,7 @@ internal enum WSManDataType : uint internal class WSManDataStruct { internal uint type; + internal WSManBinaryOrTextDataStruct binaryOrTextData; } @@ -886,6 +902,7 @@ internal static WSManData_UnToMan UnMarshal(IntPtr unmanagedData) internal struct WSManDataDWord { private WSManDataType _type; + private WSManDWordDataInternal _dwordData; /// @@ -918,6 +935,7 @@ internal MarshalledObject Marshal() private struct WSManDWordDataInternal { internal int number; + internal IntPtr reserved; } } @@ -944,6 +962,7 @@ internal struct WSManStreamIDSetStruct internal struct WSManStreamIDSet_ManToUn { private WSManStreamIDSetStruct _streamSetInfo; + private MarshalledObject _data; /// @@ -1008,6 +1027,7 @@ public static implicit operator IntPtr(WSManStreamIDSet_ManToUn obj) internal class WSManStreamIDSet_UnToMan { internal string[] streamIDs; + internal int streamIDsCount; /// @@ -1104,6 +1124,7 @@ internal struct WSManOptionSet : IDisposable #region Managed to Unmanaged private WSManOptionSetStruct _optionSet; + private MarshalledObject _data; /// @@ -1164,7 +1185,9 @@ public static implicit operator IntPtr(WSManOptionSet optionSet) #region Unmanaged to Managed internal int optionsCount; + internal WSManOption[] options; + internal bool optionsMustUnderstand; /// @@ -1289,6 +1312,7 @@ public static implicit operator IntPtr(WSManCommandArgSet obj) #region Unmanaged to Managed internal string[] args; + internal int argsCount; /// @@ -1340,6 +1364,7 @@ private struct WSManShellDisconnectInfoInternal } private WSManShellDisconnectInfoInternal _internalInfo; + internal MarshalledObject data; #region Constructor / Other methods @@ -1413,6 +1438,7 @@ internal struct WSManShellStartupInfoStruct internal struct WSManShellStartupInfo_ManToUn : IDisposable { private WSManShellStartupInfoStruct _internalInfo; + internal MarshalledObject data; #region Constructor / Other methods @@ -1471,10 +1497,15 @@ public static implicit operator IntPtr(WSManShellStartupInfo_ManToUn startupInfo internal class WSManShellStartupInfo_UnToMan { internal WSManStreamIDSet_UnToMan inputStreamSet; + internal WSManStreamIDSet_UnToMan outputStreamSet; + internal uint idleTimeoutMS; + internal string workingDirectory; + internal WSManEnvironmentVariableSet environmentVariableSet; + internal string name; /// @@ -1511,6 +1542,7 @@ internal static WSManShellStartupInfo_UnToMan UnMarshal(IntPtr unmanagedData) internal class WSManEnvironmentVariableSet { internal uint varsCount; + internal WSManEnvironmentVariableInternal[] vars; /// @@ -1552,6 +1584,7 @@ internal static WSManEnvironmentVariableSet UnMarshal(IntPtr unmanagedData) private struct WSManEnvironmentVariableSetInternal { internal uint varsCount; + internal IntPtr vars; // Array of WSManEnvironmentVariableInternal structs } @@ -1575,6 +1608,7 @@ internal class WSManProxyInfo : IDisposable private struct WSManProxyInfoInternal { public int proxyAccessType; + public WSManUserNameAuthenticationCredentials.WSManUserNameCredentialStruct proxyAuthCredentialsStruct; } @@ -1766,10 +1800,12 @@ internal class WSManShellAsync internal struct WSManShellAsyncInternal { internal IntPtr operationContext; + internal IntPtr asyncCallback; } private MarshalledObject _data; + private WSManShellAsyncInternal _internalData; internal WSManShellAsync(IntPtr context, WSManShellAsyncCallback callback) @@ -1863,6 +1899,7 @@ internal static WSManCreateShellDataResult UnMarshal(IntPtr unmanagedData) private struct WSManDataStruct { internal uint type; + internal WSManTextDataInternal textData; } @@ -1870,6 +1907,7 @@ private struct WSManDataStruct private struct WSManTextDataInternal { internal int textLength; + internal IntPtr text; } } @@ -1906,6 +1944,7 @@ internal static WSManConnectDataResult UnMarshal(IntPtr unmanagedData) private struct WSManDataStruct { internal uint type; + internal WSManTextDataInternal textData; } @@ -1913,6 +1952,7 @@ private struct WSManDataStruct private struct WSManTextDataInternal { internal int textLength; + internal IntPtr text; } } @@ -1989,6 +2029,7 @@ private struct WSManReceiveDataResultInternal private struct WSManDataStruct { internal uint type; + internal WSManBinaryDataInternal binaryData; } @@ -1996,6 +2037,7 @@ private struct WSManDataStruct private struct WSManBinaryDataInternal { internal int bufferLength; + internal IntPtr buffer; } } @@ -2013,7 +2055,9 @@ internal class WSManPluginRequest /// Unmarshaled WSMAN_SENDER_DETAILS struct. /// internal WSManSenderDetails senderDetails; + internal string locale; + internal string resourceUri; /// /// Unmarshaled WSMAN_OPERATION_INFO struct. @@ -2094,7 +2138,9 @@ private struct WSManPluginRequestInternal /// WSManOperationInfo. /// internal IntPtr operationInfo; + internal bool shutdownNotification; + internal IntPtr shutdownNotificationHandle; } } @@ -2102,9 +2148,13 @@ private struct WSManPluginRequestInternal internal class WSManSenderDetails { internal string senderName; + internal string authenticationMechanism; + internal WSManCertificateDetails certificateDetails; + internal IntPtr clientToken; // TODO: How should this be marshaled????? + internal string httpUrl; /// @@ -2146,6 +2196,7 @@ private struct WSManSenderDetailsInternal /// WSManCertificateDetails. /// internal IntPtr certificateDetails; + internal IntPtr clientToken; [MarshalAs(UnmanagedType.LPWStr)] @@ -2156,8 +2207,11 @@ private struct WSManSenderDetailsInternal internal class WSManCertificateDetails { internal string subject; + internal string issuerName; + internal string issuerThumbprint; + internal string subjectName; /// @@ -2205,8 +2259,11 @@ private struct WSManCertificateDetailsInternal internal class WSManOperationInfo { internal WSManFragmentInternal fragment; + internal WSManFilterInternal filter; + internal WSManSelectorSet selectorSet; + internal WSManOptionSet optionSet; /// @@ -2240,8 +2297,11 @@ internal static WSManOperationInfo UnMarshal(IntPtr unmanagedData) private struct WSManOperationInfoInternal { internal WSManFragmentInternal fragment; + internal WSManFilterInternal filter; + internal WSManSelectorSet.WSManSelectorSetStruct selectorSet; + internal WSManOptionSetStruct optionSet; } @@ -2275,6 +2335,7 @@ internal struct WSManFilterInternal internal class WSManSelectorSet { internal int numberKeys; + internal WSManKeyStruct[] keys; /// @@ -2338,6 +2399,7 @@ internal struct WSManKeyStruct #if !UNIX internal const string WSManClientApiDll = @"WsmSvc.dll"; + internal const string WSManProviderApiDll = @"WsmSvc.dll"; #else internal const string WSManClientApiDll = @"libpsrpclient"; @@ -2957,8 +3019,11 @@ internal enum WSManFlagReceive : int } internal const string WSMAN_SHELL_NAMESPACE = "http://schemas.microsoft.com/wbem/wsman/1/windows/shell"; + internal const string WSMAN_COMMAND_STATE_DONE = WSMAN_SHELL_NAMESPACE + "/CommandState/Done"; + internal const string WSMAN_COMMAND_STATE_PENDING = WSMAN_SHELL_NAMESPACE + "/CommandState/Pending"; + internal const string WSMAN_COMMAND_STATE_RUNNING = WSMAN_SHELL_NAMESPACE + "/CommandState/Running"; /// diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs index 77c30d4d43e..b5f6df30d6f 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs @@ -27,6 +27,7 @@ namespace System.Management.Automation.Remoting internal static class WSManPluginConstants { internal const int ExitCodeSuccess = 0x00000000; + internal const int ExitCodeFailure = 0x00000001; internal const string CtrlCSignal = "powershell/signal/crtl_c"; @@ -35,13 +36,19 @@ internal static class WSManPluginConstants // see WSManNativeApi.cs. These are duplicated here to save on // Marshalling time. internal const string SupportedInputStream = "stdin"; + internal const string SupportedOutputStream = "stdout"; + internal const string SupportedPromptResponseStream = "pr"; + internal const string PowerShellStartupProtocolVersionName = "protocolversion"; + internal const string PowerShellStartupProtocolVersionValue = "2.0"; + internal const string PowerShellOptionPrefix = "PS_"; internal const int WSManPluginParamsGetRequestedLocale = 5; + internal const int WSManPluginParamsGetRequestedDataLocale = 6; } @@ -53,31 +60,51 @@ internal static class WSManPluginConstants internal enum WSManPluginErrorCodes : int { NullPluginContext = -2141976624, // 0x805407D0 + PluginContextNotFound = -2141976623, // 0x805407D1 NullInvalidInput = -2141975624, // 0x80540BB8 + NullInvalidStreamSets = -2141975623, // 0x80540BB9 + SessionCreationFailed = -2141975622, // 0x80540BBA + NullShellContext = -2141975621, // 0x80540BBB + InvalidShellContext = -2141975620, // 0x80540BBC + InvalidCommandContext = -2141975619, // 0x80540BBD + InvalidInputStream = -2141975618, // 0x80540BBE + InvalidInputDatatype = -2141975617, // 0x80540BBF + InvalidOutputStream = -2141975616, // 0x80540BC0 + InvalidSenderDetails = -2141975615, // 0x80540BC1 + ShutdownRegistrationFailed = -2141975614, // 0x80540BC2 + ReportContextFailed = -2141975613, // 0x80540BC3 + InvalidArgSet = -2141975612, // 0x80540BC4 + ProtocolVersionNotMatch = -2141975611, // 0x80540BC5 + OptionNotUnderstood = -2141975610, // 0x80540BC6 + ProtocolVersionNotFound = -2141975609, // 0x80540BC7 ManagedException = -2141974624, // 0x80540FA0 + PluginOperationClose = -2141974623, // 0x80540FA1 + PluginConnectNoNegotiationData = -2141974622, // 0x80540FA2 + PluginConnectOperationFailed = -2141974621, // 0x80540FA3 NoError = 0, + OutOfMemory = -2147024882 // 0x8007000E } @@ -94,9 +121,13 @@ internal class WSManPluginOperationShutdownContext // TODO: Rename to OperationS #region Internal Members internal IntPtr pluginContext; + internal IntPtr shellContext; + internal IntPtr commandContext; + internal bool isReceiveOperation; + internal bool isShuttingDown; #endregion @@ -128,7 +159,9 @@ internal class WSManPluginInstance #region Private Members private Dictionary _activeShellSessions; + private object _syncObject; + private static Dictionary s_activePlugins = new Dictionary(); /// diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs index ed5bf0a4a3e..ae85516048e 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs @@ -183,14 +183,23 @@ internal WSManPluginEntryDelegatesInternal UnmanagedStruct /// GC handle which prevents garbage collector from collecting this delegate. /// private GCHandle _pluginShellGCHandle; + private GCHandle _pluginReleaseShellContextGCHandle; + private GCHandle _pluginCommandGCHandle; + private GCHandle _pluginReleaseCommandContextGCHandle; + private GCHandle _pluginSendGCHandle; + private GCHandle _pluginReceiveGCHandle; + private GCHandle _pluginSignalGCHandle; + private GCHandle _pluginConnectGCHandle; + private GCHandle _shutdownPluginGCHandle; + private GCHandle _WSMPluginOperationShutdownGCHandle; #endregion diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs index 035288443a2..10b6fcb5fd7 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs @@ -27,6 +27,7 @@ internal abstract class WSManPluginServerSession : IDisposable private object _syncObject; protected bool isClosed; + protected bool isContextReported; // used to keep track of last error..this will be used // for reporting operation complete to WSMan. @@ -36,11 +37,14 @@ internal abstract class WSManPluginServerSession : IDisposable internal WSManNativeApi.WSManPluginRequest creationRequestDetails; // request context passed by WSMan while sending Plugin data. internal WSManNativeApi.WSManPluginRequest sendRequestDetails; + internal WSManPluginOperationShutdownContext shutDownContext; // tracker used in conjunction with WSMan API to identify a particular // shell context. internal RegisteredWaitHandle registeredShutDownWaitHandle; + internal WSManPluginServerTransportManager transportMgr; + internal int registeredShutdownNotification; // event that gets raised when session is closed.."source" will provide @@ -402,6 +406,7 @@ internal class WSManPluginShellSession : WSManPluginServerSession #region Private Members private Dictionary _activeCommandSessions; + private ServerRemoteSession _remoteSession; #endregion diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginTransportManager.cs index 2c963a69d16..8fb08061131 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginTransportManager.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginTransportManager.cs @@ -22,9 +22,13 @@ internal class WSManPluginServerTransportManager : AbstractServerSessionTranspor // the following variables are used to block thread from sending // data to the client until the client sends a receive request. private bool _isRequestPending; + private object _syncObject; + private ManualResetEvent _waitHandle; + private Dictionary _activeCmdTransportManagers; + private bool _isClosed; // used to keep track of last error..this will be used // for reporting operation complete to WSMan. @@ -387,6 +391,7 @@ internal void PerformStop() internal class WSManPluginCommandTransportManager : WSManPluginServerTransportManager { private WSManPluginServerTransportManager _serverTransportMgr; + private System.Guid _cmdId; // Create Cmd Transport Manager for this sessn transport manager diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs index 39999788162..f4b68493360 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs @@ -342,14 +342,20 @@ internal CompletionEventArgs(CompletionNotification notification) // instance callback handlers private WSManNativeApi.WSManShellAsync _createSessionCallback; + private WSManNativeApi.WSManShellAsync _receivedFromRemote; + private WSManNativeApi.WSManShellAsync _sendToRemoteCompleted; + private WSManNativeApi.WSManShellAsync _disconnectSessionCompleted; + private WSManNativeApi.WSManShellAsync _reconnectSessionCompleted; + private WSManNativeApi.WSManShellAsync _connectSessionCallback; // TODO: This GCHandle is required as it seems WSMan is calling create callback // after we call Close. This seems wrong. Opened bug on WSMan to track this. private GCHandle _createSessionCallbackGCHandle; + private WSManNativeApi.WSManShellAsync _closeSessionCompleted; // used by WSManCreateShell call to send additional data (like negotiation) @@ -358,6 +364,7 @@ internal CompletionEventArgs(CompletionNotification notification) // By default WSMan compresses data sent on the network..use this flag to not do // this. private bool _noCompression; + private bool _noMachineProfile; private int _connectionRetryCount; @@ -443,11 +450,17 @@ private void ProcessShellData(string data) // static callback delegate private static WSManNativeApi.WSManShellAsyncCallback s_sessionCreateCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionCloseCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionReceiveCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionSendCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionDisconnectCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionReconnectCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_sessionConnectCallback; // This dictionary maintains active session transport managers to be used from various @@ -500,6 +513,7 @@ private static bool TryGetSessionTransportManager(IntPtr operationContext, #region SHIM: Redirection delegates for test purposes private static Delegate s_sessionSendRedirect = null; + private static Delegate s_protocolVersionRedirect = null; #endregion @@ -2642,9 +2656,11 @@ internal class WSManAPIDataCommon : IDisposable private IntPtr _handle; // if any private WSManNativeApi.WSManStreamIDSet_ManToUn _inputStreamSet; + private WSManNativeApi.WSManStreamIDSet_ManToUn _outputStreamSet; // Dispose private bool _isDisposed; + private object _syncObject = new object(); #if !UNIX private WindowsIdentity _identityToImpersonate; @@ -2805,27 +2821,38 @@ internal sealed class WSManClientCommandTransportManager : BaseClientCommandTran // bools used to track and send stop signal only after Create is completed. private bool _isCreateCallbackReceived; + private bool _isStopSignalPending; + private bool _isDisconnectPending; + private bool _isSendingInput; + private bool _isDisconnectedOnInvoke; // callbacks private WSManNativeApi.WSManShellAsync _createCmdCompleted; + private WSManNativeApi.WSManShellAsync _receivedFromRemote; + private WSManNativeApi.WSManShellAsync _sendToRemoteCompleted; + private WSManNativeApi.WSManShellAsync _reconnectCmdCompleted; + private WSManNativeApi.WSManShellAsync _connectCmdCompleted; // TODO: This GCHandle is required as it seems WSMan is calling create callback // after we call Close. This seems wrong. Opened bug on WSMan to track this. private GCHandle _createCmdCompletedGCHandle; + private WSManNativeApi.WSManShellAsync _closeCmdCompleted; + private WSManNativeApi.WSManShellAsync _signalCmdCompleted; // this is the chunk that got delivered on onDataAvailableToSendCallback // will be sent during subsequent SendOneItem() private SendDataChunk _chunkToSend; private string _cmdLine; + private readonly WSManClientSessionTransportManager _sessnTm; private class SendDataChunk @@ -2847,11 +2874,17 @@ public SendDataChunk(byte[] data, DataPriorityType type) // static callback delegate private static WSManNativeApi.WSManShellAsyncCallback s_cmdCreateCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdCloseCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdReceiveCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdSendCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdSignalCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdReconnectCallback; + private static WSManNativeApi.WSManShellAsyncCallback s_cmdConnectCallback; static WSManClientCommandTransportManager() diff --git a/src/System.Management.Automation/engine/remoting/host/RemoteHostMethodInfo.cs b/src/System.Management.Automation/engine/remoting/host/RemoteHostMethodInfo.cs index 63185ebc13f..5ab7d98ec99 100644 --- a/src/System.Management.Automation/engine/remoting/host/RemoteHostMethodInfo.cs +++ b/src/System.Management.Automation/engine/remoting/host/RemoteHostMethodInfo.cs @@ -16,73 +16,120 @@ internal enum RemoteHostMethodId { // Host read-only properties. GetName = 1, + GetVersion = 2, + GetInstanceId = 3, + GetCurrentCulture = 4, + GetCurrentUICulture = 5, // Host methods. SetShouldExit = 6, + EnterNestedPrompt = 7, + ExitNestedPrompt = 8, + NotifyBeginApplication = 9, + NotifyEndApplication = 10, // Host UI methods. ReadLine = 11, + ReadLineAsSecureString = 12, + Write1 = 13, + Write2 = 14, + WriteLine1 = 15, + WriteLine2 = 16, + WriteLine3 = 17, + WriteErrorLine = 18, + WriteDebugLine = 19, + WriteProgress = 20, + WriteVerboseLine = 21, + WriteWarningLine = 22, + Prompt = 23, + PromptForCredential1 = 24, + PromptForCredential2 = 25, + PromptForChoice = 26, // Host Raw UI read-write properties. GetForegroundColor = 27, + SetForegroundColor = 28, + GetBackgroundColor = 29, + SetBackgroundColor = 30, + GetCursorPosition = 31, + SetCursorPosition = 32, + GetWindowPosition = 33, + SetWindowPosition = 34, + GetCursorSize = 35, + SetCursorSize = 36, + GetBufferSize = 37, + SetBufferSize = 38, + GetWindowSize = 39, + SetWindowSize = 40, + GetWindowTitle = 41, + SetWindowTitle = 42, // Host Raw UI read-only properties. GetMaxWindowSize = 43, + GetMaxPhysicalWindowSize = 44, + GetKeyAvailable = 45, // Host Raw UI methods. ReadKey = 46, + FlushInputBuffer = 47, + SetBufferContents1 = 48, + SetBufferContents2 = 49, + GetBufferContents = 50, + ScrollBufferContents = 51, // IHostSupportsInteractiveSession methods. PushRunspace = 52, + PopRunspace = 53, // IHostSupportsInteractiveSession read-only properties. GetIsRunspacePushed = 54, + GetRunspace = 55, // IHostSupportsMultipleChoiceSelection diff --git a/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs b/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs index a89f1a9d285..7937df7db7f 100644 --- a/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs +++ b/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs @@ -19,14 +19,21 @@ internal abstract class OutOfProcessMediatorBase #region Protected Data protected TextReader originalStdIn; + protected OutOfProcessTextWriter originalStdOut; + protected OutOfProcessTextWriter originalStdErr; + protected OutOfProcessServerSessionTransportManager sessionTM; + protected OutOfProcessUtils.DataProcessingDelegates callbacks; protected static object SyncObject = new object(); + protected object _syncObject = new object(); + protected string _initialCommand; + protected ManualResetEvent allcmdsClosedEvent; #if !UNIX diff --git a/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs index b71da3cb5e7..7d228d07ad6 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs @@ -37,6 +37,7 @@ internal class ServerPowerShellDriver // there is no input when this driver was created private bool _noInput; + private bool _addToHistory; // the server remote host instance diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs index 921f9f456f1..083a8b48f2c 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs @@ -278,7 +278,9 @@ internal class ServerDriverRemoteHost : ServerRemoteHost #region Private Members private RemoteRunspace _pushedRunspace; + private ServerRemoteDebugger _debugger; + private bool _hostSupportsPSEdit; #endregion diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs index 5c63ab47008..164e44b683b 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs @@ -436,9 +436,13 @@ internal class ServerPowerShellDataStructureHandler // powershell driver handles all client // communication private AbstractServerTransportManager _transportManager; + private Guid _clientRunspacePoolId; + private Guid _clientPowerShellId; + private RemoteStreamOptions _streamSerializationOptions; + private Runspace _rsUsedToInvokePowerShell; #endregion Private Members diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs index 13223ae1a41..b4ad73a38f3 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs @@ -31,7 +31,9 @@ namespace System.Management.Automation internal interface IRSPDriverInvoke { void EnterNestedPipeline(); + void ExitNestedPipeline(); + bool HandleStopSignal(); } @@ -71,10 +73,12 @@ private Dictionary _associatedShells // server capability reported to the client during negotiation (not the actual capability) private RemoteSessionCapability _serverCapability; + private Runspace _rsToUseForSteppablePipeline; // steppable pipeline event subscribers exist per-session private ServerSteppablePipelineSubscriber _eventSubscriber = new ServerSteppablePipelineSubscriber(); + private PSDataCollection _inputCollection; // PowerShell driver input collection // Object to invoke nested PowerShell drivers on single pipeline worker thread. @@ -954,6 +958,7 @@ private void HandleCreateAndInvokePowerShell(object _, RemoteDataEventArgs _driverInvokeQueue; + private ManualResetEvent _processDrivers; + private object _syncObject; + private bool _stopPump; + private bool _isDisposed; public InvokePump() @@ -1814,14 +1823,21 @@ internal sealed class ServerRemoteDebugger : Debugger, IDisposable #region Private Members private IRSPDriverInvoke _driverInvoker; + private Runspace _runspace; + private ObjectRef _wrappedDebugger; + private bool _inDebugMode; + private DebuggerStopEventArgs _debuggerStopEventArgs; private ManualResetEventSlim _nestedDebugStopCompleteEvent; + private bool _nestedDebugging; + private ManualResetEventSlim _processCommandCompleteEvent; + private ThreadCommandProcessing _threadCommandProcessing; private bool _raiseStopEventLocally; @@ -2260,10 +2276,15 @@ private sealed class ThreadCommandProcessing { // Members private ManualResetEventSlim _commandCompleteEvent; + private Debugger _wrappedDebugger; + private PSCommand _command; + private PSDataCollection _output; + private DebuggerCommandResults _results; + private Exception _exception; #if !UNIX private WindowsIdentity _identityToImpersonate; diff --git a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs index 9b86ac8c5ca..f6f58b56dd9 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs @@ -17,7 +17,9 @@ namespace System.Management.Automation internal class ExecutionContextForStepping : IDisposable { private ExecutionContext _executionContext; + private PSInformationalBuffers _originalInformationalBuffers; + private PSHost _originalHost; private ExecutionContextForStepping(ExecutionContext ctxt) @@ -78,6 +80,7 @@ internal class ServerSteppablePipelineDriver // pipeline that runs the actual command. private ServerSteppablePipelineSubscriber _eventSubscriber; + private PSDataCollection _powershellInput; // input collection of the PowerShell pipeline #endregion diff --git a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs index 850993cf162..8e55f8699d7 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs @@ -30,9 +30,13 @@ internal class ServerSteppablePipelineSubscriber #region Private data private object _syncObject = new object(); + private bool _initialized = false; + private PSLocalEventManager _eventManager; + private PSEventSubscriber _startSubscriber; + private PSEventSubscriber _processSubscriber; #endregion @@ -62,6 +66,7 @@ internal void SubscribeEvents(ServerSteppablePipelineDriver driver) #region Events and Handlers public event EventHandler StartSteppablePipeline; + public event EventHandler RunProcessRecord; /// diff --git a/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs b/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs index a5e018408de..98055097a83 100644 --- a/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs +++ b/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs @@ -73,16 +73,22 @@ internal class ServerRemoteSession : RemoteSession private static PSTraceSource s_trace = PSTraceSource.GetTracer("ServerRemoteSession", "ServerRemoteSession"); private PSSenderInfo _senderInfo; + private string _configProviderId; + private string _initParameters; + private string _initScriptForOutOfProcRS; + private PSSessionConfiguration _sessionConfigProvider; // used to apply quotas on command and session transportmanagers. private int? _maxRecvdObjectSize; + private int? _maxRecvdDataSizeCommand; private ServerRunspacePoolDriver _runspacePoolDriver; + private PSRemotingCryptoHelperServer _cryptoHelper; // Specifies an optional endpoint configuration for out-of-proc session use. diff --git a/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs b/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs index b943444dd0a..61689d6af1c 100644 --- a/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs +++ b/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs @@ -35,6 +35,7 @@ internal class ServerRemoteSessionDSHandlerStateMachine private static PSTraceSource s_trace = PSTraceSource.GetTracer("ServerRemoteSessionDSHandlerStateMachine", "ServerRemoteSessionDSHandlerStateMachine"); private ServerRemoteSession _session; + private object _syncObject; private Queue _processPendingEventsQueue @@ -48,6 +49,7 @@ private Queue _processPendingEventsQueue private bool _eventsInProcess = false; private EventHandler[,] _stateMachineHandle; + private RemoteSessionState _state; /// diff --git a/src/System.Management.Automation/engine/remoting/server/serverremotingprotocolimplementation.cs b/src/System.Management.Automation/engine/remoting/server/serverremotingprotocolimplementation.cs index 1e72be279c7..a53acc62345 100644 --- a/src/System.Management.Automation/engine/remoting/server/serverremotingprotocolimplementation.cs +++ b/src/System.Management.Automation/engine/remoting/server/serverremotingprotocolimplementation.cs @@ -13,7 +13,9 @@ namespace System.Management.Automation.Remoting internal class ServerRemoteSessionDSHandlerImpl : ServerRemoteSessionDataStructureHandler { private AbstractServerSessionTransportManager _transportManager; + private ServerRemoteSessionDSHandlerStateMachine _stateMachine; + private ServerRemoteSession _session; internal override AbstractServerSessionTransportManager TransportManager diff --git a/src/System.Management.Automation/engine/runtime/Binding/Binders.cs b/src/System.Management.Automation/engine/runtime/Binding/Binders.cs index cc5dcad1805..7c03ec41728 100644 --- a/src/System.Management.Automation/engine/runtime/Binding/Binders.cs +++ b/src/System.Management.Automation/engine/runtime/Binding/Binders.cs @@ -929,6 +929,7 @@ private static void AutomationNullRule(CallSite site, object obj, Pipe pipe, Exe internal class PSArrayAssignmentRHSBinder : DynamicMetaObjectBinder { private static readonly List s_binders = new List(); + private readonly int _elements; internal static PSArrayAssignmentRHSBinder Get(int i) @@ -1213,9 +1214,13 @@ internal static PSInvokeDynamicMemberBinder Get(CallInfo callInfo, TypeDefinitio } private readonly CallInfo _callInfo; + private readonly bool _static; + private readonly bool _propertySetter; + private readonly PSMethodInvocationConstraints _constraints; + private readonly Type _classScope; private PSInvokeDynamicMemberBinder(CallInfo callInfo, bool @static, bool propertySetter, PSMethodInvocationConstraints constraints, Type classScope) @@ -1305,6 +1310,7 @@ internal static PSGetDynamicMemberBinder Get(TypeDefinitionAst classScope, bool } private readonly bool _static; + private readonly Type _classScope; private PSGetDynamicMemberBinder(Type classScope, bool @static) @@ -1415,6 +1421,7 @@ internal static PSSetDynamicMemberBinder Get(TypeDefinitionAst classScope, bool } private readonly bool _static; + private readonly Type _classScope; private PSSetDynamicMemberBinder(Type classScope, bool @static) @@ -1490,6 +1497,7 @@ internal class PSSwitchClauseEvalBinder : DynamicMetaObjectBinder // - Influences evaluation of switch elements // - Is commonly used private static readonly PSSwitchClauseEvalBinder[] s_binderCache = new PSSwitchClauseEvalBinder[32]; + private readonly SwitchFlags _flags; internal static PSSwitchClauseEvalBinder Get(SwitchFlags flags) @@ -1861,6 +1869,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje internal class PSVariableAssignmentBinder : DynamicMetaObjectBinder { private static readonly PSVariableAssignmentBinder s_binder = new PSVariableAssignmentBinder(); + internal static int s_mutableValueWithInstanceMemberVersion; internal static PSVariableAssignmentBinder Get() @@ -2132,7 +2141,9 @@ internal static PSBinaryOperationBinder Get(ExpressionType operation, bool ignor } private readonly bool _ignoreCase; + private readonly bool _scalarCompare; + internal int _version; private PSBinaryOperationBinder(ExpressionType operation, bool ignoreCase, bool scalarCompare) @@ -3406,10 +3417,15 @@ private DynamicMetaObject BinaryComparisonCommon(DynamicMetaObject targetAsEnume internal class PSUnaryOperationBinder : UnaryOperationBinder { private static PSUnaryOperationBinder s_notBinder; + private static PSUnaryOperationBinder s_bnotBinder; + private static PSUnaryOperationBinder s_unaryMinus; + private static PSUnaryOperationBinder s_unaryPlusBinder; + private static PSUnaryOperationBinder s_incrementBinder; + private static PSUnaryOperationBinder s_decrementBinder; internal static PSUnaryOperationBinder Get(ExpressionType operation) @@ -3722,6 +3738,7 @@ private DynamicMetaObject IncrDecr(DynamicMetaObject target, int valueToAdd, Dyn internal class PSConvertBinder : ConvertBinder { private static readonly Dictionary s_binderCache = new Dictionary(); + internal int _version; public static PSConvertBinder Get(Type type) @@ -3924,7 +3941,9 @@ private static readonly Dictionary, PSGetIndexBinder>(); private readonly PSMethodInvocationConstraints _constraints; + private readonly bool _allowSlicing; + internal int _version; public static PSGetIndexBinder Get(int argCount, PSMethodInvocationConstraints constraints, bool allowSlicing = true) @@ -4515,6 +4534,7 @@ private static readonly Dictionary, PSSetIndexBinder>(); private readonly PSMethodInvocationConstraints _constraints; + internal int _version; public static PSSetIndexBinder Get(int argCount, PSMethodInvocationConstraints constraints = null) @@ -4965,8 +4985,11 @@ static PSGetMemberBinder() } private readonly bool _static; + private readonly bool _nonEnumerating; + private readonly Type _classScope; + internal int _version; private bool _hasInstanceMember; @@ -5952,7 +5975,9 @@ private static readonly Dictionary = new Dictionary(new KeyComparer()); private readonly bool _static; + private readonly Type _classScope; + private readonly PSGetMemberBinder _getMemberBinder; public static PSSetMemberBinder Get(string memberName, TypeDefinitionAst classScopeAst, bool @static) @@ -6503,9 +6528,13 @@ internal class PSInvokeMemberBinder : InvokeMemberBinder internal enum MethodInvocationType { Ordinary, + Setter, + Getter, + BaseCtor, + NonVirtual, } @@ -6539,6 +6568,7 @@ private static readonly Dictionary s_binderCache = new Dictionary(new KeyComparer()); internal readonly PSMethodInvocationConstraints _invocationConstraints; + internal readonly PSGetMemberBinder _getMemberBinder; private PSInvokeMemberBinder GetNonEnumeratingBinder() @@ -6571,8 +6601,11 @@ private static PSInvokeMemberBinder Get(string memberName, Type classScope, Call } private readonly bool _static; + private readonly bool _propertySetter; + private readonly bool _nonEnumerating; + private readonly Type _classScope; private PSInvokeMemberBinder(string name, @@ -7495,8 +7528,11 @@ internal static void InvalidateCache() internal class PSCreateInstanceBinder : CreateInstanceBinder { private readonly CallInfo _callInfo; + private readonly PSMethodInvocationConstraints _constraints; + private readonly bool _publicTypeOnly; + private int _version; private class KeyComparer : IEqualityComparer> @@ -7675,6 +7711,7 @@ internal static string GetTargetTypeName(object target) internal class PSInvokeBaseCtorBinder : InvokeMemberBinder { private readonly CallInfo _callInfo; + private readonly PSMethodInvocationConstraints _constraints; private class KeyComparer : IEqualityComparer> diff --git a/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs b/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs index 2662254b877..e9f1b798cd7 100644 --- a/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs +++ b/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs @@ -26,15 +26,20 @@ namespace System.Management.Automation internal enum CompileInterpretChoice { NeverCompile, + AlwaysCompile, + CompileOnDemand } internal enum ScriptBlockClauseToInvoke { Begin, + Process, + End, + ProcessBlockOnly, } @@ -310,36 +315,57 @@ private IParameterMetadataProvider DelayParseScriptText() } internal Type LocalsMutableTupleType { get; set; } + internal Type UnoptimizedLocalsMutableTupleType { get; set; } + internal Func LocalsMutableTupleCreator { get; set; } + internal Func UnoptimizedLocalsMutableTupleCreator { get; set; } + internal Dictionary NameToIndexMap { get; set; } internal Action DynamicParamBlock { get; set; } + internal Action UnoptimizedDynamicParamBlock { get; set; } + internal Action BeginBlock { get; set; } + internal Action UnoptimizedBeginBlock { get; set; } + internal Action ProcessBlock { get; set; } + internal Action UnoptimizedProcessBlock { get; set; } + internal Action EndBlock { get; set; } + internal Action UnoptimizedEndBlock { get; set; } internal IScriptExtent[] SequencePoints { get; set; } private RuntimeDefinedParameterDictionary _runtimeDefinedParameterDictionary; + private Attribute[] _attributes; + private bool _usesCmdletBinding; + private bool _compiledOptimized; + private bool _compiledUnoptimized; + private bool _hasSuspiciousContent; + private bool? _isProductCode; internal bool DebuggerHidden { get; set; } + internal bool DebuggerStepThrough { get; set; } + internal Guid Id { get; private set; } internal bool HasLogged { get; set; } + internal bool SkipLogging { get; set; } + internal bool IsFilter { get; private set; } internal bool IsProductCode @@ -1718,8 +1744,11 @@ private static bool GetAndValidateEncryptionRecipients( } private static object s_syncObject = new object(); + private static string s_lastSeenCertificate = string.Empty; + private static bool s_hasProcessedCertificate = false; + private static CmsMessageRecipient[] s_encryptionRecipients = null; private static Lazy s_sbLoggingSettingCache = new Lazy( @@ -2182,14 +2211,23 @@ public virtual void GetObjectData(SerializationInfo info, StreamingContext conte internal sealed class PSScriptCmdlet : PSCmdlet, IDynamicParameters, IDisposable { private readonly ArrayList _input = new ArrayList(); + private readonly ScriptBlock _scriptBlock; + private readonly bool _fromScriptFile; + private readonly bool _useLocalScope; + private readonly bool _runOptimized; + private bool _rethrowExitException; + private MshCommandRuntime _commandRuntime; + private readonly MutableTuple _localsTuple; + private bool _exitWasCalled; + private readonly FunctionContext _functionContext; public PSScriptCmdlet(ScriptBlock scriptBlock, bool useNewScope, bool fromScriptFile, ExecutionContext context) diff --git a/src/System.Management.Automation/engine/runtime/MutableTuple.cs b/src/System.Management.Automation/engine/runtime/MutableTuple.cs index de923e2df8b..fed739bc33d 100644 --- a/src/System.Management.Automation/engine/runtime/MutableTuple.cs +++ b/src/System.Management.Automation/engine/runtime/MutableTuple.cs @@ -34,7 +34,9 @@ internal abstract class MutableTuple private static readonly Dictionary s_sizeDict = new Dictionary(); private int _size; + protected BitArray _valuesSet; + private Dictionary _nameToIndexMap; internal bool IsValueSet(int index) @@ -149,6 +151,7 @@ public void SetValue(int index, object value) } protected abstract object GetValueImpl(int index); + protected abstract void SetValueImpl(int index, object value); /// diff --git a/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs b/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs index 7077ebeacbe..1b350ca772c 100644 --- a/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs +++ b/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs @@ -1290,6 +1290,7 @@ internal static void DefineFunction(ExecutionContext context, internal class ScriptBlockExpressionWrapper { private ScriptBlock _scriptBlock; + private readonly IParameterMetadataProvider _ast; internal ScriptBlockExpressionWrapper(IParameterMetadataProvider ast) @@ -1386,8 +1387,11 @@ internal HandlerSearchResult() } internal int Handler; + internal int Rank; + internal Exception ExceptionToPass; + internal ErrorRecord ErrorRecordToPass; } @@ -3273,6 +3277,7 @@ internal static IEnumerator Create(object obj) } private object _obj; + private IEnumerator _realEnumerator; bool IEnumerator.MoveNext() diff --git a/src/System.Management.Automation/engine/runtime/Operations/NumericOps.cs b/src/System.Management.Automation/engine/runtime/Operations/NumericOps.cs index f5670899c23..423c209555c 100644 --- a/src/System.Management.Automation/engine/runtime/Operations/NumericOps.cs +++ b/src/System.Management.Automation/engine/runtime/Operations/NumericOps.cs @@ -9,6 +9,7 @@ namespace System.Management.Automation internal static class Boxed { internal static readonly object True = (object)true; + internal static readonly object False = (object)false; } diff --git a/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs b/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs index e2409eba626..1e25ee9a385 100644 --- a/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs +++ b/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs @@ -16,6 +16,7 @@ internal class ScriptBlockToPowerShellChecker : AstVisitor private readonly HashSet _validVariables = new HashSet(StringComparer.OrdinalIgnoreCase); internal ScriptBlockAst ScriptBeingConverted { get; set; } + internal bool UsesParameter { get; private set; } internal bool HasUsingExpr { get; private set; } @@ -206,8 +207,11 @@ public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast internal class ScriptBlockToPowerShellConverter { private readonly PowerShell _powershell; + private ExecutionContext _context; + private Dictionary _usingValueMap; + private bool? _createLocalScope; private ScriptBlockToPowerShellConverter() diff --git a/src/System.Management.Automation/engine/serialization.cs b/src/System.Management.Automation/engine/serialization.cs index 31ec2e348d2..bc12cabd94e 100644 --- a/src/System.Management.Automation/engine/serialization.cs +++ b/src/System.Management.Automation/engine/serialization.cs @@ -33,10 +33,15 @@ namespace System.Management.Automation internal enum SerializationOptions { None = 0, + UseDepthFromTypes = 1, + NoRootElement = 2, + NoNamespace = 4, + NoObjectRefIds = 8, + PreserveSerializationSettingOfOriginal = 16, RemotingOptions = UseDepthFromTypes | NoRootElement | NoNamespace | PreserveSerializationSettingOfOriginal, @@ -73,7 +78,9 @@ internal SerializationContext(int depth, SerializationOptions options, PSRemotin } internal readonly int depth; + internal readonly SerializationOptions options; + internal readonly PSRemotingCryptoHelper cryptoHelper; internal readonly CimClassSerializationCache cimClassSerializationIdCache = new CimClassSerializationCache(); @@ -297,8 +304,11 @@ internal void Stop() internal enum DeserializationOptions { None = 0, + NoRootElement = 256, // I start at 256 to try not to overlap + NoNamespace = 512, // with SerializationOptions and to catch bugs early + DeserializeScriptBlocks = 1024, RemotingOptions = NoRootElement | NoNamespace, @@ -353,9 +363,11 @@ internal void LogExtraMemoryUsage(int amountOfExtraMemory) private int _totalDataProcessedSoFar; internal readonly DeserializationOptions options; + internal readonly PSRemotingCryptoHelper cryptoHelper; internal static readonly int MaxItemsInCimClassCache = 100; + internal readonly CimClassDeserializationCache cimClassSerializationIdCache = new CimClassDeserializationCache(); } @@ -457,7 +469,9 @@ internal class Deserializer #region constructor private readonly XmlReader _reader; + private readonly InternalDeserializer _deserializer; + private readonly DeserializationContext _context; /// @@ -786,10 +800,15 @@ internal static Collection MaskDeserializationPrefix(Collection internal enum ContainerType { Dictionary, + Queue, + Stack, + List, + Enumerable, + None }; @@ -826,6 +845,7 @@ internal class InternalSerializer private const int MaxDepthBelowTopLevel = 50; private readonly ReferenceIdHandlerForSerializer _objectRefIdHandler; + private readonly ReferenceIdHandlerForSerializer _typeRefIdHandler; internal InternalSerializer(XmlWriter writer, SerializationContext context) @@ -2985,6 +3005,7 @@ private bool DuplicateRefIdsAllowed private const int MaxDepthBelowTopLevel = 50; private readonly ReferenceIdHandlerForDeserializer _objectRefIdHandler; + private readonly ReferenceIdHandlerForDeserializer _typeRefIdHandler; /// @@ -3189,12 +3210,19 @@ private void CheckIfStopping() } internal const string CimInstanceMetadataProperty = "__InstanceMetadata"; + internal const string CimModifiedProperties = "Modified"; + internal const string CimClassMetadataProperty = "__ClassMetadata"; + internal const string CimClassNameProperty = "ClassName"; + internal const string CimNamespaceProperty = "Namespace"; + internal const string CimServerNameProperty = "ServerName"; + internal const string CimHashCodeProperty = "Hash"; + internal const string CimMiXmlProperty = "MiXml"; private bool RehydrateCimInstanceProperty( @@ -5680,6 +5708,7 @@ public int GetHashCode(WeakReference obj) } private readonly IEqualityComparer _weakEqualityComparer; + private Dictionary _dictionary; public WeakReferenceDictionary() @@ -6823,10 +6852,13 @@ public override object ConvertTo(PSObject sourceValue, Type destinationType, IFo internal enum RehydrationFlags { NullValueBad = 0, + NullValueOk = 0x1, + NullValueMeansEmptyList = 0x3, MissingPropertyBad = 0, + MissingPropertyOk = 0x4, } diff --git a/src/System.Management.Automation/help/CabinetAPI.cs b/src/System.Management.Automation/help/CabinetAPI.cs index eb407f2ec62..b5531a79b03 100644 --- a/src/System.Management.Automation/help/CabinetAPI.cs +++ b/src/System.Management.Automation/help/CabinetAPI.cs @@ -81,6 +81,7 @@ internal abstract class ICabinetExtractorLoader internal class CabinetExtractorFactory { private static ICabinetExtractorLoader s_cabinetLoader; + internal static readonly ICabinetExtractor EmptyExtractor = new EmptyCabinetExtractor(); /// diff --git a/src/System.Management.Automation/help/CabinetNativeApi.cs b/src/System.Management.Automation/help/CabinetNativeApi.cs index 4b19861e473..07004c2f712 100644 --- a/src/System.Management.Automation/help/CabinetNativeApi.cs +++ b/src/System.Management.Automation/help/CabinetNativeApi.cs @@ -14,20 +14,35 @@ internal class CabinetExtractor : ICabinetExtractor /// GC handle which prevents garbage collector from collecting this delegate. /// private CabinetNativeApi.FdiAllocDelegate _allocDelegate; + private GCHandle _fdiAllocHandle; + private CabinetNativeApi.FdiFreeDelegate _freeDelegate; + private GCHandle _fdiFreeHandle; + private CabinetNativeApi.FdiOpenDelegate _openDelegate; + private GCHandle _fdiOpenHandle; + private CabinetNativeApi.FdiReadDelegate _readDelegate; + private GCHandle _fdiReadHandle; + private CabinetNativeApi.FdiWriteDelegate _writeDelegate; + private GCHandle _fdiWriteHandle; + private CabinetNativeApi.FdiCloseDelegate _closeDelegate; + private GCHandle _fdiCloseHandle; + private CabinetNativeApi.FdiSeekDelegate _seekDelegate; + private GCHandle _fdiSeekHandle; + private CabinetNativeApi.FdiNotifyDelegate _notifyDelegate; + private GCHandle _fdiNotifyHandle; internal CabinetNativeApi.FdiContextHandle fdiContext; // HFDI @@ -170,7 +185,9 @@ private void CleanUpDelegates() internal class CabinetExtractorLoader : ICabinetExtractorLoader { private static CabinetExtractor s_extractorInstance; + private static CabinetExtractorLoader s_instance; + private static double s_created = 0; internal static CabinetExtractorLoader GetInstance() @@ -550,7 +567,9 @@ internal static FileShare ConvertPermissionModeToFileShare(int pmode) internal enum PermissionMode : int { None = 0x0000, + Write = 0x0080, + Read = 0x0100 } @@ -558,18 +577,26 @@ internal enum PermissionMode : int internal enum OpFlags : int { RdOnly = 0x0000, + WrOnly = 0x0001, + RdWr = 0x0002, + Append = 0x0008, + Create = 0x0100, + Truncate = 0x0200, + Excl = 0x0400 } internal enum FdiCreateCpuType : int { CpuUnknown = -1, + Cpu80286 = 0, + Cpu80386 = 1 } @@ -577,27 +604,44 @@ internal enum FdiCreateCpuType : int internal class FdiNotification { internal int cb; // LONG + internal string psz1; // char FAR * + internal string psz2; // char FAR * + internal string psz3; // char FAR * + internal IntPtr pv; // void FAR * // In this case, it is the destination path + internal IntPtr hf; // INT_PTR + internal short date; // USHORT + internal short time; // USHORT + internal short attribs; // USHORT + internal short setID; // USHORT + internal short iCabinet; // USHORT + internal short iFolder; // USHORT + internal int fdie; // FDIERROR }; internal enum FdiNotificationType : int { FdintCABINET_INFO = 0x0, + FdintPARTIAL_FILE = 0x1, + FdintCOPY_FILE = 0x2, + FdintCLOSE_FILE_INFO = 0x3, + FdintNEXT_CABINET = 0x4, + FdintENUMERATE = 0x5 } @@ -605,7 +649,9 @@ internal enum FdiNotificationType : int internal class FdiERF { internal int erfOper; + internal int erfType; + internal bool fError; }; diff --git a/src/System.Management.Automation/help/HelpCommands.cs b/src/System.Management.Automation/help/HelpCommands.cs index 852db86c267..022a9205fc4 100644 --- a/src/System.Management.Automation/help/HelpCommands.cs +++ b/src/System.Management.Automation/help/HelpCommands.cs @@ -32,8 +32,11 @@ public sealed class GetHelpCommand : PSCmdlet internal enum HelpView { Default = 0x00, // Default View + DetailedView = 0x01, + FullView = 0x02, + ExamplesView = 0x03 } @@ -204,6 +207,7 @@ public SwitchParameter Online #if !UNIX private GraphicalHostReflectionWrapper graphicalHostReflectionWrapper; + private bool showWindow; /// diff --git a/src/System.Management.Automation/help/HelpCommentsParser.cs b/src/System.Management.Automation/help/HelpCommentsParser.cs index 77347527ab4..e8407a2d97e 100644 --- a/src/System.Management.Automation/help/HelpCommentsParser.cs +++ b/src/System.Management.Automation/help/HelpCommentsParser.cs @@ -54,24 +54,39 @@ private HelpCommentsParser(CommandInfo commandInfo, List parameterDescri } private readonly Language.CommentHelpInfo _sections = new Language.CommentHelpInfo(); + private readonly Dictionary _parameters = new Dictionary(); + private readonly List _examples = new List(); + private readonly List _inputs = new List(); + private readonly List _outputs = new List(); + private readonly List _links = new List(); + internal bool isExternalHelpSet = false; private ScriptBlock _scriptBlock; + private CommandMetadata _commandMetadata; + private string _commandName; + private List _parameterDescriptions; + private XmlDocument _doc; + internal static readonly string mshURI = "http://msh"; + internal static readonly string mamlURI = "http://schemas.microsoft.com/maml/2004/10"; + internal static readonly string commandURI = "http://schemas.microsoft.com/maml/dev/command/2004/10"; + internal static readonly string devURI = "http://schemas.microsoft.com/maml/dev/2004/10"; private const string directive = @"^\s*\.(\w+)(\s+(\S.*))?\s*$"; + private const string blankline = @"^\s*$"; // Although "http://msh" is the default namespace, it still must be explicitly qualified with non-empty prefix, // because XPath 1.0 will associate empty prefix with "null" namespace (not with "default") and query will fail. diff --git a/src/System.Management.Automation/help/HelpFileHelpInfo.cs b/src/System.Management.Automation/help/HelpFileHelpInfo.cs index 1df1b70411b..a4edb4c8c39 100644 --- a/src/System.Management.Automation/help/HelpFileHelpInfo.cs +++ b/src/System.Management.Automation/help/HelpFileHelpInfo.cs @@ -51,6 +51,7 @@ private HelpFileHelpInfo(string name, string text, string filename) internal override string Name { get; } = string.Empty; private string _filename = string.Empty; + private string _synopsis = string.Empty; /// /// Synopsis for the help info. diff --git a/src/System.Management.Automation/help/HelpSystem.cs b/src/System.Management.Automation/help/HelpSystem.cs index fb92ed1c19c..31384589c65 100644 --- a/src/System.Management.Automation/help/HelpSystem.cs +++ b/src/System.Management.Automation/help/HelpSystem.cs @@ -805,7 +805,9 @@ internal void ClearScriptBlockTokenCache() internal class HelpProgressInfo { internal bool Completed; + internal string Activity; + internal int PercentComplete; } @@ -815,7 +817,9 @@ internal class HelpProgressInfo internal class HelpProviderInfo { internal string AssemblyName = string.Empty; + internal string ClassName = string.Empty; + internal HelpCategory HelpCategory = HelpCategory.None; /// diff --git a/src/System.Management.Automation/help/ProviderContext.cs b/src/System.Management.Automation/help/ProviderContext.cs index 184ad5526fa..cbbdfe1cd5a 100644 --- a/src/System.Management.Automation/help/ProviderContext.cs +++ b/src/System.Management.Automation/help/ProviderContext.cs @@ -18,7 +18,9 @@ internal class ProviderContext /// Requested path. /// private readonly string _requestedPath; + private readonly ExecutionContext _executionContext; + private readonly PathIntrinsics _pathIntrinsics; /// diff --git a/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs b/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs index 16ac4f2a58e..df3cc04a3cb 100644 --- a/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs +++ b/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs @@ -24,13 +24,17 @@ namespace Microsoft.PowerShell.Commands public class UpdatableHelpCommandBase : PSCmdlet { internal const string PathParameterSetName = "Path"; + internal const string LiteralPathParameterSetName = "LiteralPath"; internal UpdatableHelpCommandType _commandType; + internal UpdatableHelpSystem _helpSystem; + internal bool _stopping; internal int activityId; + private Dictionary _exceptions; #region Parameters diff --git a/src/System.Management.Automation/help/UpdatableHelpSystem.cs b/src/System.Management.Automation/help/UpdatableHelpSystem.cs index 0a45b9a7605..d04d28010ad 100644 --- a/src/System.Management.Automation/help/UpdatableHelpSystem.cs +++ b/src/System.Management.Automation/help/UpdatableHelpSystem.cs @@ -165,7 +165,9 @@ internal string GetExceptionMessage(UpdatableHelpCommandType commandType) internal enum UpdatableHelpCommandType { UnknownCommand = 0, + UpdateHelpCommand = 1, + SaveHelpCommand = 2 } @@ -234,10 +236,15 @@ internal UpdatableHelpProgressEventArgs(string moduleName, UpdatableHelpCommandT internal class UpdatableHelpSystem : IDisposable { private TimeSpan _defaultTimeout; + private Collection _progressEvents; + private bool _stopping; + private object _syncObject; + private UpdatableHelpCommandBase _cmdlet; + private CancellationTokenSource _cancelTokenSource; internal WebClient WebClient { get; } @@ -512,6 +519,7 @@ private string ResolveUri(string baseUri, bool verbose) "; private const string HelpInfoXmlNamespace = "http://schemas.microsoft.com/powershell/help/2010/05"; + private const string HelpInfoXmlValidationFailure = "HelpInfoXmlValidationFailure"; /// @@ -1580,6 +1588,7 @@ private void HandleDownloadProgressChanged(object sender, DownloadProgressChange internal class UpdatableHelpSystemDrive : IDisposable { private string _driveName; + private PSCmdlet _cmdlet; /// diff --git a/src/System.Management.Automation/logging/LogProvider.cs b/src/System.Management.Automation/logging/LogProvider.cs index a46f181b262..586534c490a 100644 --- a/src/System.Management.Automation/logging/LogProvider.cs +++ b/src/System.Management.Automation/logging/LogProvider.cs @@ -120,21 +120,37 @@ private static class Strings // The strings are stored in a different class to defer loading the resources until as late // as possible, e.g. if logging is never on, these strings won't be loaded. internal static readonly string LogContextSeverity = EtwLoggingStrings.LogContextSeverity; + internal static readonly string LogContextHostName = EtwLoggingStrings.LogContextHostName; + internal static readonly string LogContextHostVersion = EtwLoggingStrings.LogContextHostVersion; + internal static readonly string LogContextHostId = EtwLoggingStrings.LogContextHostId; + internal static readonly string LogContextHostApplication = EtwLoggingStrings.LogContextHostApplication; + internal static readonly string LogContextEngineVersion = EtwLoggingStrings.LogContextEngineVersion; + internal static readonly string LogContextRunspaceId = EtwLoggingStrings.LogContextRunspaceId; + internal static readonly string LogContextPipelineId = EtwLoggingStrings.LogContextPipelineId; + internal static readonly string LogContextCommandName = EtwLoggingStrings.LogContextCommandName; + internal static readonly string LogContextCommandType = EtwLoggingStrings.LogContextCommandType; + internal static readonly string LogContextScriptName = EtwLoggingStrings.LogContextScriptName; + internal static readonly string LogContextCommandPath = EtwLoggingStrings.LogContextCommandPath; + internal static readonly string LogContextSequenceNumber = EtwLoggingStrings.LogContextSequenceNumber; + internal static readonly string LogContextUser = EtwLoggingStrings.LogContextUser; + internal static readonly string LogContextConnectedUser = EtwLoggingStrings.LogContextConnectedUser; + internal static readonly string LogContextTime = EtwLoggingStrings.LogContextTime; + internal static readonly string LogContextShellId = EtwLoggingStrings.LogContextShellId; } diff --git a/src/System.Management.Automation/logging/MshLog.cs b/src/System.Management.Automation/logging/MshLog.cs index 23c687b58ee..863fd33632e 100644 --- a/src/System.Management.Automation/logging/MshLog.cs +++ b/src/System.Management.Automation/logging/MshLog.cs @@ -64,6 +64,7 @@ internal static class MshLog new ConcurrentDictionary>(); private const string _crimsonLogProviderAssemblyName = "MshCrimsonLog"; + private const string _crimsonLogProviderTypeName = "System.Management.Automation.Logging.CrimsonLogProvider"; private static Collection s_ignoredCommands = new Collection(); diff --git a/src/System.Management.Automation/namespaces/FileSystemContentStream.cs b/src/System.Management.Automation/namespaces/FileSystemContentStream.cs index 5ee65158233..5cf9b944ec2 100644 --- a/src/System.Management.Automation/namespaces/FileSystemContentStream.cs +++ b/src/System.Management.Automation/namespaces/FileSystemContentStream.cs @@ -45,33 +45,50 @@ internal class FileSystemContentReaderWriter : IContentReader, IContentWriter #endregion tracer private string _path; + private string _streamName; + private FileMode _mode; + private FileAccess _access; + private FileShare _share; + private Encoding _encoding; + private CmdletProvider _provider; private FileStream _stream; + private StreamReader _reader; + private StreamWriter _writer; + private bool _usingByteEncoding; private const char DefaultDelimiter = '\n'; private string _delimiter = $"{DefaultDelimiter}"; + private int[] _offsetDictionary; + private bool _usingDelimiter; + private StringBuilder _currentLineContent; + private bool _waitForChanges; + private bool _isRawStream; + private long _fileOffset; private FileAttributes _oldAttributes; + private bool _haveOldAttributes; // The reader to read file content backward private FileStreamBackReader _backReader; + private bool _alreadyDetectEncoding = false; // False to add a newline to the end of the output string, true if not. @@ -1153,20 +1170,29 @@ internal FileStreamBackReader(FileStream fileStream, Encoding encoding) } private readonly FileStream _stream; + private readonly Encoding _currentEncoding; + private readonly Encoding _oemEncoding; + private readonly Encoding _defaultAnsiEncoding; private const int BuffSize = 4096; private readonly byte[] _byteBuff = new byte[BuffSize]; + private readonly char[] _charBuff = new char[BuffSize]; + private int _byteCount = 0; + private int _charCount = 0; + private long _currentPosition = 0; + private bool? _singleByteCharSet = null; private const byte BothTopBitsSet = 0xC0; + private const byte TopBitUnset = 0x80; /// @@ -1502,6 +1528,7 @@ private static class NativeMethods { // Default values private const int MAX_DEFAULTCHAR = 2; + private const int MAX_LEADBYTES = 12; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] diff --git a/src/System.Management.Automation/namespaces/FileSystemProvider.cs b/src/System.Management.Automation/namespaces/FileSystemProvider.cs index cbe492db2cf..07e135c8cd3 100644 --- a/src/System.Management.Automation/namespaces/FileSystemProvider.cs +++ b/src/System.Management.Automation/namespaces/FileSystemProvider.cs @@ -2698,10 +2698,15 @@ private static bool WinCreateJunction(string path, string strTargetPath) private enum ItemType { Unknown, + File, + Directory, + SymbolicLink, + Junction, + HardLink }; @@ -7290,10 +7295,15 @@ internal enum SymbolicLinkFlags internal static extern sbyte RtlSetProcessPlaceholderCompatibilityMode(sbyte pcm); internal const sbyte PHCM_APPLICATION_DEFAULT = 0; + internal const sbyte PHCM_DISGUISE_PLACEHOLDER = 1; + internal const sbyte PHCM_EXPOSE_PLACEHOLDERS = 2; + internal const sbyte PHCM_MAX = 2; + internal const sbyte PHCM_ERROR_INVALID_PARAMETER = -1; + internal const sbyte PHCM_ERROR_NO_TEB = -2; #endif } @@ -7305,8 +7315,11 @@ internal enum SymbolicLinkFlags private struct NetResource { public int Scope; + public int Type; + public int DisplayType; + public int Usage; [MarshalAs(UnmanagedType.LPWStr)] @@ -7800,9 +7813,13 @@ public static class InternalSymbolicLinkLinkCodeMethods internal enum FileDesiredAccess : uint { GenericZero = 0, + GenericRead = 0x80000000, + GenericWrite = 0x40000000, + GenericExecute = 0x20000000, + GenericAll = 0x10000000, } @@ -7811,8 +7828,11 @@ internal enum FileDesiredAccess : uint internal enum FileShareMode : uint { None = 0x00000000, + Read = 0x00000001, + Write = 0x00000002, + Delete = 0x00000004, } @@ -7820,9 +7840,13 @@ internal enum FileShareMode : uint internal enum FileCreationDisposition : uint { New = 1, + CreateAlways = 2, + OpenExisting = 3, + OpenAlways = 4, + TruncateExisting = 5, } @@ -7831,21 +7855,37 @@ internal enum FileCreationDisposition : uint internal enum FileAttributes : uint { Readonly = 0x00000001, + Hidden = 0x00000002, + System = 0x00000004, + Archive = 0x00000020, + Encrypted = 0x00004000, + Write_Through = 0x80000000, + Overlapped = 0x40000000, + NoBuffering = 0x20000000, + RandomAccess = 0x10000000, + SequentialScan = 0x08000000, + DeleteOnClose = 0x04000000, + BackupSemantics = 0x02000000, + PosixSemantics = 0x01000000, + OpenReparsePoint = 0x00200000, + OpenNoRecall = 0x00100000, + SessionAware = 0x00800000, + Normal = 0x00000080 } @@ -7853,12 +7893,19 @@ internal enum FileAttributes : uint private struct REPARSE_DATA_BUFFER_SYMBOLICLINK { public uint ReparseTag; + public ushort ReparseDataLength; + public ushort Reserved; + public ushort SubstituteNameOffset; + public ushort SubstituteNameLength; + public ushort PrintNameOffset; + public ushort PrintNameLength; + public uint Flags; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x3FF0)] @@ -7869,11 +7916,17 @@ private struct REPARSE_DATA_BUFFER_SYMBOLICLINK private struct REPARSE_DATA_BUFFER_MOUNTPOINT { public uint ReparseTag; + public ushort ReparseDataLength; + public ushort Reserved; + public ushort SubstituteNameOffset; + public ushort SubstituteNameLength; + public ushort PrintNameOffset; + public ushort PrintNameLength; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x3FF0)] @@ -7884,8 +7937,11 @@ private struct REPARSE_DATA_BUFFER_MOUNTPOINT private struct REPARSE_DATA_BUFFER_APPEXECLINK { public uint ReparseTag; + public ushort ReparseDataLength; + public ushort Reserved; + public uint StringCount; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x3FF0)] @@ -7896,14 +7952,23 @@ private struct REPARSE_DATA_BUFFER_APPEXECLINK private struct BY_HANDLE_FILE_INFORMATION { public uint FileAttributes; + public System.Runtime.InteropServices.ComTypes.FILETIME CreationTime; + public System.Runtime.InteropServices.ComTypes.FILETIME LastAccessTime; + public System.Runtime.InteropServices.ComTypes.FILETIME LastWriteTime; + public uint VolumeSerialNumber; + public uint FileSizeHigh; + public uint FileSizeLow; + public uint NumberOfLinks; + public uint FileIndexHigh; + public uint FileIndexLow; } @@ -7911,7 +7976,9 @@ private struct BY_HANDLE_FILE_INFORMATION private struct GUID { public uint Data1; + public ushort Data2; + public ushort Data3; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] @@ -7922,8 +7989,11 @@ private struct GUID private struct REPARSE_GUID_DATA_BUFFER { public uint ReparseTag; + public ushort ReparseDataLength; + public ushort Reserved; + public GUID ReparseGuid; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_REPARSE_SIZE)] @@ -7973,15 +8043,20 @@ protected override bool ReleaseHandle() internal enum FINDEX_INFO_LEVELS : uint { FindExInfoStandard = 0x0u, + FindExInfoBasic = 0x1u, + FindExInfoMaxInfoLevel = 0x2u, } internal enum FINDEX_SEARCH_OPS : uint { FindExSearchNameMatch = 0x0u, + FindExSearchLimitToDirectories = 0x1u, + FindExSearchLimitToDevices = 0x2u, + FindExSearchMaxSearchOp = 0x3u, } @@ -7989,14 +8064,23 @@ internal enum FINDEX_SEARCH_OPS : uint internal unsafe struct WIN32_FIND_DATA { internal uint dwFileAttributes; + internal System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime; + internal System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime; + internal System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime; + internal uint nFileSizeHigh; + internal uint nFileSizeLow; + internal uint dwReserved0; + internal uint dwReserved1; + internal fixed char cFileName[MAX_PATH]; + internal fixed char cAlternateFileName[14]; } @@ -8755,7 +8839,9 @@ internal class AlternateStreamNativeData internal static class CopyFileRemoteUtils { private const string functionToken = "function "; + private const string nameToken = "Name"; + private const string definitionToken = "Definition"; #region PSCopyToSessionHelper @@ -8763,7 +8849,9 @@ internal static class CopyFileRemoteUtils internal const string PSCopyToSessionHelperName = @"PSCopyToSessionHelper"; private static string s_driveMaxSizeErrorFormatString = FileSystemProviderStrings.DriveMaxSizeError; + private static string s_PSCopyToSessionHelperDefinition = StringUtil.Format(PSCopyToSessionHelperDefinitionFormat, @"[ValidateNotNullOrEmpty()]", s_driveMaxSizeErrorFormatString); + private static string s_PSCopyToSessionHelperDefinitionRestricted = StringUtil.Format(PSCopyToSessionHelperDefinitionFormat, @"[ValidateUserDrive()]", s_driveMaxSizeErrorFormatString); private const string PSCopyToSessionHelperDefinitionFormat = @" @@ -9231,6 +9319,7 @@ function PSCreateDirectoryOnRemoteSession internal const string PSCopyFromSessionHelperName = @"PSCopyFromSessionHelper"; private static string s_PSCopyFromSessionHelperDefinition = StringUtil.Format(PSCopyFromSessionHelperDefinitionFormat, @"[ValidateNotNullOrEmpty()]"); + private static string s_PSCopyFromSessionHelperDefinitionRestricted = StringUtil.Format(PSCopyFromSessionHelperDefinitionFormat, @"[ValidateUserDrive()]"); private const string PSCopyFromSessionHelperDefinitionFormat = @" @@ -9722,6 +9811,7 @@ PSGetPathDirAndFiles @params internal const string PSCopyRemoteUtilsName = @"PSCopyRemoteUtils"; internal static readonly string PSCopyRemoteUtilsDefinition = StringUtil.Format(PSCopyRemoteUtilsDefinitionFormat, @"[ValidateNotNullOrEmpty()]", PSValidatePathFunction); + private static string s_PSCopyRemoteUtilsDefinitionRestricted = StringUtil.Format(PSCopyRemoteUtilsDefinitionFormat, @"[ValidateUserDrive()]", PSValidatePathFunction); private const string PSCopyRemoteUtilsDefinitionFormat = @" diff --git a/src/System.Management.Automation/namespaces/PathInfo.cs b/src/System.Management.Automation/namespaces/PathInfo.cs index cd91845f84c..53ade7fe179 100644 --- a/src/System.Management.Automation/namespaces/PathInfo.cs +++ b/src/System.Management.Automation/namespaces/PathInfo.cs @@ -78,6 +78,7 @@ public string ProviderPath } private string _providerPath; + private SessionState _sessionState; /// @@ -92,7 +93,9 @@ public string Path } private PSDriveInfo _drive; + private ProviderInfo _provider; + private string _path = string.Empty; /// diff --git a/src/System.Management.Automation/namespaces/RegistryWrapper.cs b/src/System.Management.Automation/namespaces/RegistryWrapper.cs index 6f0c3e3d66f..aecb7f51a09 100644 --- a/src/System.Management.Automation/namespaces/RegistryWrapper.cs +++ b/src/System.Management.Automation/namespaces/RegistryWrapper.cs @@ -20,21 +20,33 @@ namespace Microsoft.PowerShell.Commands internal interface IRegistryWrapper { void SetValue(string name, object value); + void SetValue(string name, object value, RegistryValueKind valueKind); + string[] GetValueNames(); + void DeleteValue(string name); + string[] GetSubKeyNames(); + IRegistryWrapper CreateSubKey(string subkey); + IRegistryWrapper OpenSubKey(string name, bool writable); + void DeleteSubKeyTree(string subkey); + object GetValue(string name); + object GetValue(string name, object defaultValue, RegistryValueOptions options); + RegistryValueKind GetValueKind(string name); object RegistryKey { get; } void SetAccessControl(ObjectSecurity securityDescriptor); + ObjectSecurity GetAccessControl(AccessControlSections includeSections); + void Close(); string Name { get; } @@ -247,6 +259,7 @@ public ObjectSecurity GetAccessControl(AccessControlSections includeSections) internal class TransactedRegistryWrapper : IRegistryWrapper { private TransactedRegistryKey _txRegKey; + private CmdletProvider _provider; internal TransactedRegistryWrapper(TransactedRegistryKey txRegKey, CmdletProvider provider) diff --git a/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs b/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs index 33b043ce919..a6994e2d1e6 100644 --- a/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs +++ b/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs @@ -1117,6 +1117,7 @@ internal SessionStateProviderBaseContentReaderWriter(string path, SessionStatePr } private string _path; + private SessionStateProviderBase _provider; /// diff --git a/src/System.Management.Automation/namespaces/Win32Native.cs b/src/System.Management.Automation/namespaces/Win32Native.cs index 41638e9b969..8552b574603 100644 --- a/src/System.Management.Automation/namespaces/Win32Native.cs +++ b/src/System.Management.Automation/namespaces/Win32Native.cs @@ -47,34 +47,58 @@ internal static class Win32Native internal enum TOKEN_INFORMATION_CLASS { TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids, + TokenSessionId, + TokenGroupsAndPrivileges, + TokenSessionReference, + TokenSandBoxInert, + TokenAuditPolicy, + TokenOrigin } internal enum SID_NAME_USE { SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer } @@ -86,6 +110,7 @@ internal enum SID_NAME_USE internal struct SID_AND_ATTRIBUTES { internal IntPtr Sid; + internal uint Attributes; } diff --git a/src/System.Management.Automation/security/CatalogHelper.cs b/src/System.Management.Automation/security/CatalogHelper.cs index 74a239a2ccd..79c862b5312 100644 --- a/src/System.Management.Automation/security/CatalogHelper.cs +++ b/src/System.Management.Automation/security/CatalogHelper.cs @@ -80,7 +80,9 @@ internal static class CatalogHelper // Hash Algorithms supported by Windows Catalog private static string HashAlgorithmSHA1 = "SHA1"; + private static string HashAlgorithmSHA256 = "SHA256"; + private static PSCmdlet _cmdlet = null; /// diff --git a/src/System.Management.Automation/security/MshSignature.cs b/src/System.Management.Automation/security/MshSignature.cs index df20f7d0e63..69c27cfb1a3 100644 --- a/src/System.Management.Automation/security/MshSignature.cs +++ b/src/System.Management.Automation/security/MshSignature.cs @@ -13,14 +13,23 @@ namespace System.Management.Automation internal static class Win32Errors { internal const DWORD NO_ERROR = 0; + internal const DWORD E_FAIL = 0x80004005; + internal const DWORD TRUST_E_NOSIGNATURE = 0x800b0100; + internal const DWORD TRUST_E_BAD_DIGEST = 0x80096010; + internal const DWORD TRUST_E_PROVIDER_UNKNOWN = 0x800b0001; + internal const DWORD TRUST_E_SUBJECT_FORM_UNKNOWN = 0x800B0003; + internal const DWORD CERT_E_UNTRUSTEDROOT = 0x800b0109; + internal const DWORD TRUST_E_EXPLICIT_DISTRUST = 0x800B0111; + internal const DWORD CRYPT_E_BAD_MSG = 0x8009200d; + internal const DWORD NTE_BAD_ALGID = 0x80090008; } @@ -102,10 +111,15 @@ public enum SignatureType public sealed class Signature { private string _path; + private SignatureStatus _status = SignatureStatus.UnknownError; + private DWORD _win32Error; + private X509Certificate2 _signerCert; + private string _statusMessage = string.Empty; + private X509Certificate2 _timeStamperCert; // private DateTime signedOn = new DateTime(0); diff --git a/src/System.Management.Automation/security/SecureStringHelper.cs b/src/System.Management.Automation/security/SecureStringHelper.cs index e6180dc39b7..6a5db46ad81 100644 --- a/src/System.Management.Automation/security/SecureStringHelper.cs +++ b/src/System.Management.Automation/security/SecureStringHelper.cs @@ -420,6 +420,7 @@ internal EncryptionResult(string encrypted, string IV) internal enum DataProtectionScope { CurrentUser = 0x00, + LocalMachine = 0x01 } @@ -595,15 +596,18 @@ public static byte[] Unprotect(byte[] encryptedData, byte[] optionalEntropy, Dat internal static class CAPI { internal const uint CRYPTPROTECT_UI_FORBIDDEN = 0x1; + internal const uint CRYPTPROTECT_LOCAL_MACHINE = 0x4; internal const int E_FILENOTFOUND = unchecked((int)0x80070002); // File not found + internal const int ERROR_FILE_NOT_FOUND = 2; // File not found [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] internal struct CRYPTOAPI_BLOB { internal uint cbData; + internal IntPtr pbData; } diff --git a/src/System.Management.Automation/security/SecurityManager.cs b/src/System.Management.Automation/security/SecurityManager.cs index a5140ea8b19..cc7f202be16 100644 --- a/src/System.Management.Automation/security/SecurityManager.cs +++ b/src/System.Management.Automation/security/SecurityManager.cs @@ -56,9 +56,13 @@ public sealed class PSAuthorizationManager : AuthorizationManager internal enum RunPromptDecision { NeverRun = 0, + DoNotRun = 1, + RunOnce = 2, + AlwaysRun = 3, + Suspend = 4 } diff --git a/src/System.Management.Automation/security/SecuritySupport.cs b/src/System.Management.Automation/security/SecuritySupport.cs index 64ed73a99d9..5986956594e 100644 --- a/src/System.Management.Automation/security/SecuritySupport.cs +++ b/src/System.Management.Automation/security/SecuritySupport.cs @@ -859,12 +859,17 @@ private string AppendFilter( } private CertificatePurpose _purpose = 0; + private bool _sslServerAuthentication = false; + private string _dnsName = null; + private string[] _eku = null; + private int _expiringInDays = -1; internal const string CodeSigningOid = "1.3.6.1.5.5.7.3.3"; + internal const string szOID_PKIX_KP_SERVER_AUTH = "1.3.6.1.5.5.7.3.1"; // The OID arc 1.3.6.1.4.1.311.80 is assigned to PowerShell. If we need @@ -962,9 +967,11 @@ internal static string Encrypt(byte[] contentBytes, CmsMessageRecipient[] recipi } internal static readonly string BEGIN_CMS_SIGIL = "-----BEGIN CMS-----"; + internal static readonly string END_CMS_SIGIL = "-----END CMS-----"; internal static readonly string BEGIN_CERTIFICATE_SIGIL = "-----BEGIN CERTIFICATE-----"; + internal static readonly string END_CERTIFICATE_SIGIL = "-----END CERTIFICATE-----"; /// @@ -1564,6 +1571,7 @@ internal static void CurrentDomain_ProcessExit(object sender, EventArgs e) private static IntPtr s_amsiSession = IntPtr.Zero; private static bool s_amsiInitFailed = false; + private static object s_amsiLockObject = new object(); /// @@ -1629,7 +1637,9 @@ internal static void WinUninitialize() } public static bool AmsiUninitializeCalled = false; + public static bool AmsiInitialized = false; + public static bool AmsiCleanedUp = false; internal class AmsiNativeMethods @@ -1644,6 +1654,7 @@ internal enum AMSI_RESULT /// Certain policies set by administrator blocked this content on this machine AMSI_RESULT_BLOCKED_BY_ADMIN_BEGIN = 0x4000, + AMSI_RESULT_BLOCKED_BY_ADMIN_END = 0x4fff, /// AMSI_RESULT_DETECTED -> 32768 diff --git a/src/System.Management.Automation/security/nativeMethods.cs b/src/System.Management.Automation/security/nativeMethods.cs index 7cda5b88260..5784ba293da 100644 --- a/src/System.Management.Automation/security/nativeMethods.cs +++ b/src/System.Management.Automation/security/nativeMethods.cs @@ -17,7 +17,9 @@ namespace System.Management.Automation.Security internal partial class NativeConstants { internal const int CRYPT_OID_INFO_OID_KEY = 1; + internal const int CRYPT_OID_INFO_NAME_KEY = 2; + internal const int CRYPT_OID_INFO_CNG_ALGID_KEY = 5; } @@ -187,10 +189,15 @@ IntPtr CertFindCertificateInStore( internal enum CertFindType { // pvFindPara: CERT_COMPARE_ANY = 0 << 16, // null + CERT_FIND_ISSUER_STR = (8 << 16) | 4, // substring + CERT_FIND_SUBJECT_STR = (8 << 16) | 7, // substring + CERT_FIND_CROSS_CERT_DIST_POINTS = 17 << 16, // null + CERT_FIND_SUBJECT_INFO_ACCESS = 19 << 16, // null + CERT_FIND_HASH_STR = 20 << 16, // thumbprint } @@ -203,12 +210,19 @@ internal static extern internal enum CertStoreFlags { CERT_SYSTEM_STORE_CURRENT_USER = 1 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE = 2 << 16, + CERT_SYSTEM_STORE_CURRENT_SERVICE = 4 << 16, + CERT_SYSTEM_STORE_SERVICES = 5 << 16, + CERT_SYSTEM_STORE_USERS = 6 << 16, + CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 7 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 8 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 9 << 16, } @@ -232,28 +246,49 @@ IntPtr CertOpenStore(CertOpenStoreProvider storeProvider, internal enum CertOpenStoreFlags { CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001, + CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002, + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004, + CERT_STORE_DELETE_FLAG = 0x00000010, + CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020, + CERT_STORE_SHARE_STORE_FLAG = 0x00000040, + CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080, + CERT_STORE_MANIFOLD_FLAG = 0x00000100, + CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200, + CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400, + CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800, + CERT_STORE_READONLY_FLAG = 0x00008000, + CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000, + CERT_STORE_CREATE_NEW_FLAG = 0x00002000, + CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000, CERT_SYSTEM_STORE_CURRENT_USER = 1 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE = 2 << 16, + CERT_SYSTEM_STORE_CURRENT_SERVICE = 4 << 16, + CERT_SYSTEM_STORE_SERVICES = 5 << 16, + CERT_SYSTEM_STORE_USERS = 6 << 16, + CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 7 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 8 << 16, + CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 9 << 16, } @@ -261,7 +296,9 @@ internal enum CertOpenStoreFlags internal enum CertOpenStoreProvider { CERT_STORE_PROV_MEMORY = 2, + CERT_STORE_PROV_SYSTEM = 10, + CERT_STORE_PROV_SYSTEM_REGISTRY = 13, } @@ -283,7 +320,9 @@ bool CertControlStore( internal enum CertControlStoreType : uint { CERT_STORE_CTRL_RESYNC = 1, + CERT_STORE_CTRL_COMMIT = 3, + CERT_STORE_CTRL_AUTO_RESYNC = 4, } @@ -291,11 +330,17 @@ internal enum CertControlStoreType : uint internal enum AddCertificateContext : uint { CERT_STORE_ADD_NEW = 1, + CERT_STORE_ADD_USE_EXISTING = 2, + CERT_STORE_ADD_REPLACE_EXISTING = 3, + CERT_STORE_ADD_ALWAYS = 4, + CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5, + CERT_STORE_ADD_NEWER = 6, + CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7 } @@ -303,9 +348,13 @@ internal enum AddCertificateContext : uint internal enum CertPropertyId { CERT_KEY_PROV_HANDLE_PROP_ID = 1, + CERT_KEY_PROV_INFO_PROP_ID = 2, // CRYPT_KEY_PROV_INFO + CERT_SHA1_HASH_PROP_ID = 3, + CERT_MD5_HASH_PROP_ID = 4, + CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID = 102, } @@ -313,6 +362,7 @@ internal enum CertPropertyId internal enum NCryptDeletKeyFlag { NCRYPT_MACHINE_KEY_FLAG = 0x00000020, // same as CAPI CRYPT_MACHINE_KEYSET + NCRYPT_SILENT_FLAG = 0x00000040, // same as CAPI CRYPT_SILENT } @@ -320,9 +370,13 @@ internal enum NCryptDeletKeyFlag internal enum ProviderFlagsEnum : uint { CRYPT_VERIFYCONTEXT = 0xF0000000, + CRYPT_NEWKEYSET = 0x00000008, + CRYPT_DELETEKEYSET = 0x00000010, + CRYPT_MACHINE_KEYSET = 0x00000020, + CRYPT_SILENT = 0x00000040, } @@ -565,18 +619,21 @@ internal enum CryptUIFlags internal struct CRYPTUI_WIZ_DIGITAL_SIGN_INFO { internal DWORD dwSize; + internal DWORD dwSubjectChoice; [MarshalAs(UnmanagedType.LPWStr)] internal string pwszFileName; internal DWORD dwSigningCertChoice; + internal IntPtr pSigningCertContext; // PCCERT_CONTEXT [MarshalAs(UnmanagedType.LPWStr)] internal string pwszTimestampURL; internal DWORD dwAdditionalCertChoice; + internal IntPtr pSignExtInfo; // PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO }; @@ -599,6 +656,7 @@ internal enum SignInfoCertChoice internal enum SignInfoAdditionalCertChoice { CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN = 1, + CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT = 2 }; @@ -606,6 +664,7 @@ internal enum SignInfoAdditionalCertChoice internal struct CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO { internal DWORD dwSize; + internal DWORD dwAttrFlagsNotUsed; [MarshalAs(UnmanagedType.LPWStr)] @@ -618,8 +677,11 @@ internal struct CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO internal string pszHashAlg; internal IntPtr pwszSigningCertDisplayStringNotUsed; // LPCWSTR + internal IntPtr hAdditionalCertStoreNotUsed; // HCERTSTORE + internal IntPtr psAuthenticatedNotUsed; // PCRYPT_ATTRIBUTES + internal IntPtr psUnauthenticatedNotUsed; // PCRYPT_ATTRIBUTES }; @@ -714,9 +776,13 @@ internal struct CRYPT_DATA_BLOB internal struct CERT_CONTEXT { public int dwCertEncodingType; + public IntPtr pbCertEncoded; + public int cbCertEncoded; + public IntPtr pCertInfo; + public IntPtr hCertStore; } @@ -807,6 +873,7 @@ internal struct WINTRUST_FILE_INFO internal string pcwszFilePath; // LPCWSTR internal IntPtr hFileNotUsed; // optional, HANDLE to pcwszFilePath + internal IntPtr pgKnownSubjectNotUsed; // optional: GUID* : fill if the // subject type is known }; @@ -871,8 +938,11 @@ internal static WINTRUST_BLOB_INFO InitWintrustBlobInfoStruct(string fileName, s internal enum WintrustUIChoice { WTD_UI_ALL = 1, + WTD_UI_NONE = 2, + WTD_UI_NOBAD = 3, + WTD_UI_NOGOOD = 4 }; @@ -890,17 +960,29 @@ internal enum WintrustUnionChoice internal enum WintrustProviderFlags { WTD_PROV_FLAGS_MASK = 0x0000FFFF, + WTD_USE_IE4_TRUST_FLAG = 0x00000001, + WTD_NO_IE4_CHAIN_FLAG = 0x00000002, + WTD_NO_POLICY_USAGE_FLAG = 0x00000004, + WTD_REVOCATION_CHECK_NONE = 0x00000010, + WTD_REVOCATION_CHECK_END_CERT = 0x00000020, + WTD_REVOCATION_CHECK_CHAIN = 0x00000040, + WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x00000080, + WTD_SAFER_FLAG = 0x00000100, + WTD_HASH_ONLY_FLAG = 0x00000200, + WTD_USE_DEFAULT_OSVER_CHECK = 0x00000400, + WTD_LIFETIME_SIGNING_FLAG = 0x00000800, + WTD_CACHE_ONLY_URL_RETRIEVAL = 0x00001000 }; @@ -908,9 +990,13 @@ internal enum WintrustProviderFlags internal enum WintrustAction { WTD_STATEACTION_IGNORE = 0x00000000, + WTD_STATEACTION_VERIFY = 0x00000001, + WTD_STATEACTION_CLOSE = 0x00000002, + WTD_STATEACTION_AUTO_CACHE = 0x00000003, + WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004 }; @@ -1092,19 +1178,33 @@ internal static DWORD DestroyWintrustDataStruct(WINTRUST_DATA wtd) internal struct CRYPT_PROVIDER_CERT { private DWORD _cbStruct; + internal IntPtr pCert; // PCCERT_CONTEXT + private BOOL _fCommercial; + private BOOL _fTrustedRoot; + private BOOL _fSelfSigned; + private BOOL _fTestCert; + private DWORD _dwRevokedReason; + private DWORD _dwConfidence; + private DWORD _dwError; + private IntPtr _pTrustListContext; // CTL_CONTEXT* + private BOOL _fTrustListSignerCert; + private IntPtr _pCtlContext; // PCCTL_CONTEXT + private DWORD _dwCtlError; + private BOOL _fIsCyclic; + private IntPtr _pChainElement; // PCERT_CHAIN_ELEMENT }; @@ -1112,14 +1212,23 @@ internal struct CRYPT_PROVIDER_CERT internal struct CRYPT_PROVIDER_SGNR { private DWORD _cbStruct; + private FILETIME _sftVerifyAsOf; + private DWORD _csCertChain; + private IntPtr _pasCertChain; // CRYPT_PROVIDER_CERT* + private DWORD _dwSignerType; + private IntPtr _psSigner; // CMSG_SIGNER_INFO* + private DWORD _dwError; + internal DWORD csCounterSigners; + internal IntPtr pasCounterSigners; // CRYPT_PROVIDER_SGNR* + private IntPtr _pChainContext; // PCCERT_CHAIN_CONTEXT }; @@ -1441,26 +1550,38 @@ internal struct CERT_EXTENSION internal static partial class NativeMethods { internal const int CRYPT_E_NOT_FOUND = unchecked((int)0x80092004); + internal const int E_INVALID_DATA = unchecked((int)0x8007000d); + internal const int NTE_NOT_SUPPORTED = unchecked((int)0x80090029); internal enum AltNameType : uint { CERT_ALT_NAME_OTHER_NAME = 1, + CERT_ALT_NAME_RFC822_NAME = 2, + CERT_ALT_NAME_DNS_NAME = 3, + CERT_ALT_NAME_X400_ADDRESS = 4, + CERT_ALT_NAME_DIRECTORY_NAME = 5, + CERT_ALT_NAME_EDI_PARTY_NAME = 6, + CERT_ALT_NAME_URL = 7, + CERT_ALT_NAME_IP_ADDRESS = 8, + CERT_ALT_NAME_REGISTERED_ID = 9, } internal enum CryptDecodeFlags : uint { CRYPT_DECODE_ENABLE_PUNYCODE_FLAG = 0x02000000, + CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG = 0x04000000, + CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG = (CRYPT_DECODE_ENABLE_PUNYCODE_FLAG | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG), } } @@ -1616,9 +1737,11 @@ internal static partial class NativeMethods // namespace = Microsoft.PowerShell.Commands.Internal.Win32Native // internal const uint ERROR_SUCCESS = 0; + internal const uint ERROR_NO_TOKEN = 0x3f0; internal const uint STATUS_SUCCESS = 0; + internal const uint STATUS_INVALID_PARAMETER = 0xC000000D; internal const uint ACL_REVISION = 2; @@ -1626,53 +1749,88 @@ internal static partial class NativeMethods internal const uint SYSTEM_SCOPED_POLICY_ID_ACE_TYPE = 0x13; internal const uint SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3; + internal const uint INHERIT_ONLY_ACE = 0x8; internal const uint TOKEN_ASSIGN_PRIMARY = 0x0001; + internal const uint TOKEN_DUPLICATE = 0x0002; + internal const uint TOKEN_IMPERSONATE = 0x0004; + internal const uint TOKEN_QUERY = 0x0008; + internal const uint TOKEN_QUERY_SOURCE = 0x0010; + internal const uint TOKEN_ADJUST_PRIVILEGES = 0x0020; + internal const uint TOKEN_ADJUST_GROUPS = 0x0040; + internal const uint TOKEN_ADJUST_DEFAULT = 0x0080; + internal const uint TOKEN_ADJUST_SESSIONID = 0x0100; internal const uint SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001; + internal const uint SE_PRIVILEGE_ENABLED = 0x00000002; + internal const uint SE_PRIVILEGE_REMOVED = 0X00000004; + internal const uint SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; internal enum SeObjectType : uint { SE_UNKNOWN_OBJECT_TYPE = 0, + SE_FILE_OBJECT = 1, + SE_SERVICE = 2, + SE_PRINTER = 3, + SE_REGISTRY_KEY = 4, + SE_LMSHARE = 5, + SE_KERNEL_OBJECT = 6, + SE_WINDOW_OBJECT = 7, + SE_DS_OBJECT = 8, + SE_DS_OBJECT_ALL = 9, + SE_PROVIDER_DEFINED_OBJECT = 10, + SE_WMIGUID_OBJECT = 11, + SE_REGISTRY_WOW64_32KEY = 12 } internal enum SecurityInformation : uint { OWNER_SECURITY_INFORMATION = 0x00000001, + GROUP_SECURITY_INFORMATION = 0x00000002, + DACL_SECURITY_INFORMATION = 0x00000004, + SACL_SECURITY_INFORMATION = 0x00000008, + LABEL_SECURITY_INFORMATION = 0x00000010, + ATTRIBUTE_SECURITY_INFORMATION = 0x00000020, + SCOPE_SECURITY_INFORMATION = 0x00000040, + BACKUP_SECURITY_INFORMATION = 0x00010000, + PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000, + PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000, + UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000, + UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000 } @@ -1680,6 +1838,7 @@ internal enum SecurityInformation : uint internal struct LUID { internal uint LowPart; + internal uint HighPart; } @@ -1687,6 +1846,7 @@ internal struct LUID internal struct LUID_AND_ATTRIBUTES { internal LUID Luid; + internal uint Attributes; } @@ -1694,6 +1854,7 @@ internal struct LUID_AND_ATTRIBUTES internal struct TOKEN_PRIVILEGE { internal uint PrivilegeCount; + internal LUID_AND_ATTRIBUTES Privilege; } @@ -1701,9 +1862,13 @@ internal struct TOKEN_PRIVILEGE internal struct ACL { internal byte AclRevision; + internal byte Sbz1; + internal ushort AclSize; + internal ushort AceCount; + internal ushort Sbz2; } @@ -1711,7 +1876,9 @@ internal struct ACL internal struct ACE_HEADER { internal byte AceType; + internal byte AceFlags; + internal ushort AceSize; } @@ -1719,7 +1886,9 @@ internal struct ACE_HEADER internal struct SYSTEM_AUDIT_ACE { internal ACE_HEADER Header; + internal uint Mask; + internal uint SidStart; } @@ -1727,7 +1896,9 @@ internal struct SYSTEM_AUDIT_ACE internal struct LSA_UNICODE_STRING { internal ushort Length; + internal ushort MaximumLength; + internal IntPtr Buffer; } @@ -1735,11 +1906,17 @@ internal struct LSA_UNICODE_STRING internal struct CENTRAL_ACCESS_POLICY { internal IntPtr CAPID; + internal LSA_UNICODE_STRING Name; + internal LSA_UNICODE_STRING Description; + internal LSA_UNICODE_STRING ChangeId; + internal uint Flags; + internal uint CAPECount; + internal IntPtr CAPEs; } @@ -1845,16 +2022,27 @@ internal static extern bool AdjustTokenPrivileges( internal static extern IntPtr LocalFree(IntPtr hMem); internal const uint DONT_RESOLVE_DLL_REFERENCES = 0x00000001; + internal const uint LOAD_LIBRARY_AS_DATAFILE = 0x00000002; + internal const uint LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008; + internal const uint LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010; + internal const uint LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020; + internal const uint LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040; + internal const uint LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x00000080; + internal const uint LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x00000100; + internal const uint LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200; + internal const uint LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400; + internal const uint LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800; + internal const uint LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000; [DllImport(PinvokeDllNames.LoadLibraryEx, CharSet = CharSet.Unicode, SetLastError = true)] @@ -1953,7 +2141,9 @@ internal struct CRYPT_ATTRIBUTE_TYPE_VALUE internal struct SIP_INDIRECT_DATA { internal CRYPT_ATTRIBUTE_TYPE_VALUE Data; + internal CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm; + internal CRYPT_ATTR_BLOB Digest; } @@ -1961,9 +2151,13 @@ internal struct SIP_INDIRECT_DATA internal struct CRYPTCATCDF { private DWORD _cbStruct; + private IntPtr _hFile; + private DWORD _dwCurFilePos; + private DWORD _dwLastMemberOffset; + private BOOL _fEOF; [MarshalAs(UnmanagedType.LPWStr)] @@ -1984,12 +2178,19 @@ internal struct CRYPTCATMEMBER internal string pwszFileName; internal Guid gSubjectType; + internal DWORD fdwMemberFlags; + internal IntPtr pIndirectData; + internal DWORD dwCertVersion; + internal DWORD dwReserved; + internal IntPtr hReserved; + internal CRYPT_ATTR_BLOB sEncodedIndirectData; + internal CRYPT_ATTR_BLOB sEncodedMemberInfo; }; @@ -2002,8 +2203,11 @@ internal struct CRYPTCATATTRIBUTE internal string pwszReferenceTag; private DWORD _dwAttrTypeAndAction; + internal DWORD cbValue; + internal System.IntPtr pbValue; + private DWORD _dwReserved; }; @@ -2011,17 +2215,24 @@ internal struct CRYPTCATATTRIBUTE internal struct CRYPTCATSTORE { private DWORD _cbStruct; + internal DWORD dwPublicVersion; [MarshalAs(UnmanagedType.LPWStr)] internal string pwszP7File; private IntPtr _hProv; + private DWORD _dwEncodingType; + private DWORD _fdwStoreFlags; + private IntPtr _hReserved; + private IntPtr _hAttrs; + private IntPtr _hCryptMsg; + private IntPtr _hSorted; }; diff --git a/src/System.Management.Automation/security/wldpNativeMethods.cs b/src/System.Management.Automation/security/wldpNativeMethods.cs index 608503b932f..f8d5be5c9e1 100644 --- a/src/System.Management.Automation/security/wldpNativeMethods.cs +++ b/src/System.Management.Automation/security/wldpNativeMethods.cs @@ -63,7 +63,9 @@ public static SystemEnforcementMode GetSystemLockdownPolicy() } private static object s_systemLockdownPolicyLock = new object(); + private static SystemEnforcementMode? s_systemLockdownPolicy = null; + private static bool s_allowDebugOverridePolicy = false; /// @@ -175,6 +177,7 @@ private static SystemEnforcementMode GetWldpPolicy(string path, SafeHandle handl private static SystemEnforcementMode? s_cachedWldpSystemPolicy = null; private const string AppLockerTestFileName = "__PSScriptPolicyTest_"; + private const string AppLockerTestFileContents = "# PowerShell test file to determine AppLocker lockdown mode "; private static SystemEnforcementMode GetAppLockerPolicy(string path, SafeHandle handle) @@ -514,10 +517,15 @@ internal class WldpNativeConstants internal const uint WLDP_HOST_INFORMATION_REVISION = 0x00000001; internal const uint WLDP_LOCKDOWN_UNDEFINED = 0; + internal const uint WLDP_LOCKDOWN_DEFINED_FLAG = 0x80000000; + internal const uint WLDP_LOCKDOWN_SECUREBOOT_FLAG = 1; + internal const uint WLDP_LOCKDOWN_DEBUGPOLICY_FLAG = 2; + internal const uint WLDP_LOCKDOWN_UMCIENFORCE_FLAG = 4; + internal const uint WLDP_LOCKDOWN_UMCIAUDIT_FLAG = 8; } @@ -527,12 +535,19 @@ internal class WldpNativeConstants internal enum WLDP_HOST_ID { WLDP_HOST_ID_UNKNOWN = 0, + WLDP_HOST_ID_GLOBAL = 1, + WLDP_HOST_ID_VBA = 2, + WLDP_HOST_ID_WSH = 3, + WLDP_HOST_ID_POWERSHELL = 4, + WLDP_HOST_ID_IE = 5, + WLDP_HOST_ID_MSI = 6, + WLDP_HOST_ID_MAX = 7, } diff --git a/src/System.Management.Automation/singleshell/config/MshSnapinInfo.cs b/src/System.Management.Automation/singleshell/config/MshSnapinInfo.cs index 927bf963332..f9cb049162f 100644 --- a/src/System.Management.Automation/singleshell/config/MshSnapinInfo.cs +++ b/src/System.Management.Automation/singleshell/config/MshSnapinInfo.cs @@ -36,9 +36,13 @@ internal static class RegistryStrings // Name for various values under PSEngine internal const string MonadEngine_ApplicationBase = "ApplicationBase"; + internal const string MonadEngine_ConsoleHostAssemblyName = "ConsoleHostAssemblyName"; + internal const string MonadEngine_ConsoleHostModuleName = "ConsoleHostModuleName"; + internal const string MonadEngine_RuntimeVersion = "RuntimeVersion"; + internal const string MonadEngine_MonadVersion = "PowerShellVersion"; /// @@ -48,23 +52,38 @@ internal static class RegistryStrings // Name of various values for each mshsnapin internal const string MshSnapin_ApplicationBase = "ApplicationBase"; + internal const string MshSnapin_AssemblyName = "AssemblyName"; + internal const string MshSnapin_ModuleName = "ModuleName"; + internal const string MshSnapin_MonadVersion = "PowerShellVersion"; + internal const string MshSnapin_BuiltInTypes = "Types"; + internal const string MshSnapin_BuiltInFormats = "Formats"; + internal const string MshSnapin_Description = "Description"; + internal const string MshSnapin_Version = "Version"; + internal const string MshSnapin_Vendor = "Vendor"; + internal const string MshSnapin_DescriptionResource = "DescriptionIndirect"; + internal const string MshSnapin_VendorResource = "VendorIndirect"; + internal const string MshSnapin_LogPipelineExecutionDetails = "LogPipelineExecutionDetails"; // Name of default mshsnapins internal const string CoreMshSnapinName = "Microsoft.PowerShell.Core"; + internal const string HostMshSnapinName = "Microsoft.PowerShell.Host"; + internal const string ManagementMshSnapinName = "Microsoft.PowerShell.Management"; + internal const string SecurityMshSnapinName = "Microsoft.PowerShell.Security"; + internal const string UtilityMshSnapinName = "Microsoft.PowerShell.Utility"; } @@ -263,7 +282,9 @@ internal string AbsoluteModulePath public Collection Formats { get; } private string _descriptionIndirect; + private string _descriptionFallback = string.Empty; + private string _description; /// /// Description of mshsnapin. @@ -282,7 +303,9 @@ public string Description } private string _vendorIndirect; + private string _vendorFallback = string.Empty; + private string _vendor; /// /// Vendor of mshsnapin. @@ -1263,9 +1286,13 @@ private struct DefaultPSSnapInInformation { // since this is a private structure..making it as simple as possible public string PSSnapInName; + public string AssemblyName; + public string Description; + public string DescriptionIndirect; + public string VendorIndirect; public DefaultPSSnapInInformation(string sName, @@ -1335,6 +1362,7 @@ private static IList DefaultMshSnapins } private static IList s_defaultMshSnapins = null; + private static object s_syncObject = new object(); #endregion diff --git a/src/System.Management.Automation/singleshell/config/MshSnapinLoadException.cs b/src/System.Management.Automation/singleshell/config/MshSnapinLoadException.cs index 9ee9588be65..a4846aab495 100644 --- a/src/System.Management.Automation/singleshell/config/MshSnapinLoadException.cs +++ b/src/System.Management.Automation/singleshell/config/MshSnapinLoadException.cs @@ -119,6 +119,7 @@ private void CreateErrorRecord() private bool _warning = false; private ErrorRecord _errorRecord; + private bool _isErrorRecordOriginallyNull; /// @@ -147,6 +148,7 @@ public override ErrorRecord ErrorRecord } private string _PSSnapin = string.Empty; + private string _reason = string.Empty; /// diff --git a/src/System.Management.Automation/utils/CommandDiscoveryExceptions.cs b/src/System.Management.Automation/utils/CommandDiscoveryExceptions.cs index 2dc15062394..4f07dafa862 100644 --- a/src/System.Management.Automation/utils/CommandDiscoveryExceptions.cs +++ b/src/System.Management.Automation/utils/CommandDiscoveryExceptions.cs @@ -154,6 +154,7 @@ public string CommandName #region Private private string _errorId = "CommandNotFoundException"; + private ErrorCategory _errorCategory = ErrorCategory.ObjectNotFound; private static string BuildMessage( diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 8206b5cf8a3..686974df388 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -13,17 +13,29 @@ namespace System.Management.Automation internal static class EncodingConversion { internal const string Unknown = "unknown"; + internal const string String = "string"; + internal const string Unicode = "unicode"; + internal const string BigEndianUnicode = "bigendianunicode"; + internal const string BigEndianUtf32 = "bigendianutf32"; + internal const string Ascii = "ascii"; + internal const string Utf8 = "utf8"; + internal const string Utf8NoBom = "utf8NoBOM"; + internal const string Utf8Bom = "utf8BOM"; + internal const string Utf7 = "utf7"; + internal const string Utf32 = "utf32"; + internal const string Default = "default"; + internal const string OEM = "oem"; internal static readonly string[] TabCompletionResults = { diff --git a/src/System.Management.Automation/utils/ExecutionExceptions.cs b/src/System.Management.Automation/utils/ExecutionExceptions.cs index 2b7fcd7cff4..f247772a4d3 100644 --- a/src/System.Management.Automation/utils/ExecutionExceptions.cs +++ b/src/System.Management.Automation/utils/ExecutionExceptions.cs @@ -735,6 +735,7 @@ public override void GetObjectData(SerializationInfo info, StreamingContext cont #region Private Data private readonly Exception _wrapperException; + private string _message; #endregion diff --git a/src/System.Management.Automation/utils/FormatAndTypeDataHelper.cs b/src/System.Management.Automation/utils/FormatAndTypeDataHelper.cs index db68073deb4..efa068c709d 100644 --- a/src/System.Management.Automation/utils/FormatAndTypeDataHelper.cs +++ b/src/System.Management.Automation/utils/FormatAndTypeDataHelper.cs @@ -67,10 +67,15 @@ internal PSSnapInTypeAndFormatErrors(string psSnapinName, ExtendedTypeDefinition internal static class FormatAndTypeDataHelper { private const string FileNotFound = "FileNotFound"; + private const string CannotFindRegistryKey = "CannotFindRegistryKey"; + private const string CannotFindRegistryKeyPath = "CannotFindRegistryKeyPath"; + private const string EntryShouldBeMshXml = "EntryShouldBeMshXml"; + private const string DuplicateFile = "DuplicateFile"; + internal const string ValidationException = "ValidationException"; private static string GetBaseFolder(Collection independentErrors) @@ -206,6 +211,7 @@ internal static void ThrowExceptionOnError( internal enum Category { Types, + Formats, } } diff --git a/src/System.Management.Automation/utils/MetadataExceptions.cs b/src/System.Management.Automation/utils/MetadataExceptions.cs index 21f9a9b842c..b63ac1e206b 100644 --- a/src/System.Management.Automation/utils/MetadataExceptions.cs +++ b/src/System.Management.Automation/utils/MetadataExceptions.cs @@ -14,6 +14,7 @@ namespace System.Management.Automation public class MetadataException : RuntimeException { internal const string MetadataMemberInitialization = "MetadataMemberInitialization"; + internal const string BaseName = "Metadata"; /// @@ -70,32 +71,51 @@ internal MetadataException(string errorId, Exception innerException, string reso public class ValidationMetadataException : MetadataException { internal const string ValidateRangeElementType = "ValidateRangeElementType"; + internal const string ValidateRangePositiveFailure = "ValidateRangePositiveFailure"; + internal const string ValidateRangeNonNegativeFailure = "ValidateRangeNonNegativeFailure"; + internal const string ValidateRangeNegativeFailure = "ValidateRangeNegativeFailure"; + internal const string ValidateRangeNonPositiveFailure = "ValidateRangeNonPositiveFailure"; + internal const string ValidateRangeMinRangeMaxRangeType = "ValidateRangeMinRangeMaxRangeType"; + internal const string ValidateRangeNotIComparable = "ValidateRangeNotIComparable"; + internal const string ValidateRangeMaxRangeSmallerThanMinRange = "ValidateRangeMaxRangeSmallerThanMinRange"; + internal const string ValidateRangeGreaterThanMaxRangeFailure = "ValidateRangeGreaterThanMaxRangeFailure"; + internal const string ValidateRangeSmallerThanMinRangeFailure = "ValidateRangeSmallerThanMinRangeFailure"; internal const string ValidateFailureResult = "ValidateFailureResult"; internal const string ValidatePatternFailure = "ValidatePatternFailure"; + internal const string ValidateScriptFailure = "ValidateScriptFailure"; internal const string ValidateCountNotInArray = "ValidateCountNotInArray"; + internal const string ValidateCountMaxLengthSmallerThanMinLength = "ValidateCountMaxLengthSmallerThanMinLength"; + internal const string ValidateCountMinLengthFailure = "ValidateCountMinLengthFailure"; + internal const string ValidateCountMaxLengthFailure = "ValidateCountMaxLengthFailure"; internal const string ValidateLengthMaxLengthSmallerThanMinLength = "ValidateLengthMaxLengthSmallerThanMinLength"; + internal const string ValidateLengthNotString = "ValidateLengthNotString"; + internal const string ValidateLengthMinLengthFailure = "ValidateLengthMinLengthFailure"; + internal const string ValidateLengthMaxLengthFailure = "ValidateLengthMaxLengthFailure"; + internal const string ValidateSetFailure = "ValidateSetFailure"; + internal const string ValidateVersionFailure = "ValidateVersionFailure"; + internal const string InvalidValueFailure = "InvalidValueFailure"; /// diff --git a/src/System.Management.Automation/utils/MshArgumentException.cs b/src/System.Management.Automation/utils/MshArgumentException.cs index 26980059c00..8ef7ab2c87d 100644 --- a/src/System.Management.Automation/utils/MshArgumentException.cs +++ b/src/System.Management.Automation/utils/MshArgumentException.cs @@ -137,6 +137,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "Argument"; /// diff --git a/src/System.Management.Automation/utils/MshArgumentNullException.cs b/src/System.Management.Automation/utils/MshArgumentNullException.cs index 03ab45654a3..3d42d6bb904 100644 --- a/src/System.Management.Automation/utils/MshArgumentNullException.cs +++ b/src/System.Management.Automation/utils/MshArgumentNullException.cs @@ -135,6 +135,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "ArgumentNull"; /// diff --git a/src/System.Management.Automation/utils/MshArgumentOutOfRangeException.cs b/src/System.Management.Automation/utils/MshArgumentOutOfRangeException.cs index a6bb0dfd3ff..2a9798a76e7 100644 --- a/src/System.Management.Automation/utils/MshArgumentOutOfRangeException.cs +++ b/src/System.Management.Automation/utils/MshArgumentOutOfRangeException.cs @@ -133,6 +133,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "ArgumentOutOfRange"; } } diff --git a/src/System.Management.Automation/utils/MshInvalidOperationException.cs b/src/System.Management.Automation/utils/MshInvalidOperationException.cs index 0889fee33df..a322f2ce036 100644 --- a/src/System.Management.Automation/utils/MshInvalidOperationException.cs +++ b/src/System.Management.Automation/utils/MshInvalidOperationException.cs @@ -131,6 +131,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "InvalidOperation"; internal void SetErrorId(string errorId) @@ -139,6 +140,7 @@ internal void SetErrorId(string errorId) } private ErrorCategory _errorCategory = ErrorCategory.InvalidOperation; + private object _target = null; } } diff --git a/src/System.Management.Automation/utils/MshNotImplementedException.cs b/src/System.Management.Automation/utils/MshNotImplementedException.cs index e6a1128a38d..085895a530c 100644 --- a/src/System.Management.Automation/utils/MshNotImplementedException.cs +++ b/src/System.Management.Automation/utils/MshNotImplementedException.cs @@ -114,6 +114,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "NotImplemented"; } } diff --git a/src/System.Management.Automation/utils/MshNotSupportedException.cs b/src/System.Management.Automation/utils/MshNotSupportedException.cs index e6847ba6d16..bb1da0f9018 100644 --- a/src/System.Management.Automation/utils/MshNotSupportedException.cs +++ b/src/System.Management.Automation/utils/MshNotSupportedException.cs @@ -114,6 +114,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "NotSupported"; } } diff --git a/src/System.Management.Automation/utils/MshObjectDisposedException.cs b/src/System.Management.Automation/utils/MshObjectDisposedException.cs index 93cf76100bb..a336d133511 100644 --- a/src/System.Management.Automation/utils/MshObjectDisposedException.cs +++ b/src/System.Management.Automation/utils/MshObjectDisposedException.cs @@ -120,6 +120,7 @@ public ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "ObjectDisposed"; } } diff --git a/src/System.Management.Automation/utils/ObjectStream.cs b/src/System.Management.Automation/utils/ObjectStream.cs index eccfdfad901..a73fe834cd1 100644 --- a/src/System.Management.Automation/utils/ObjectStream.cs +++ b/src/System.Management.Automation/utils/ObjectStream.cs @@ -1552,14 +1552,23 @@ internal sealed class PSDataCollectionStream : ObjectStreamBase #region Private Fields private PSDataCollection _objects; + private Guid _psInstanceId; + private bool _isOpen; + private PipelineWriter _writer; + private PipelineReader _objectReader; + private PipelineReader _psobjectReader; + private PipelineReader _objectReaderForPipeline; + private PipelineReader _psobjectReaderForPipeline; + private object _syncObject = new object(); + private bool _disposed = false; #endregion diff --git a/src/System.Management.Automation/utils/ParameterBinderExceptions.cs b/src/System.Management.Automation/utils/ParameterBinderExceptions.cs index df08765bb2f..d60c30efd3f 100644 --- a/src/System.Management.Automation/utils/ParameterBinderExceptions.cs +++ b/src/System.Management.Automation/utils/ParameterBinderExceptions.cs @@ -487,7 +487,9 @@ public InvocationInfo CommandInvocation #region private private string _resourceString; + private object[] _args = Array.Empty(); + private string _commandName; private string BuildMessage() diff --git a/src/System.Management.Automation/utils/PlatformInvokes.cs b/src/System.Management.Automation/utils/PlatformInvokes.cs index 8e99cdff4b0..11c9e7e780b 100644 --- a/src/System.Management.Automation/utils/PlatformInvokes.cs +++ b/src/System.Management.Automation/utils/PlatformInvokes.cs @@ -16,6 +16,7 @@ internal class PlatformInvokes internal class FILETIME { internal uint dwLowDateTime; + internal uint dwHighDateTime; internal FILETIME() @@ -41,8 +42,11 @@ public long ToTicks() internal enum FileDesiredAccess : uint { GenericRead = 0x80000000, + GenericWrite = 0x40000000, + GenericExecute = 0x20000000, + GenericAll = 0x10000000, } @@ -51,8 +55,11 @@ internal enum FileDesiredAccess : uint internal enum FileShareMode : uint { None = 0x00000000, + Read = 0x00000001, + Write = 0x00000002, + Delete = 0x00000004, } @@ -60,9 +67,13 @@ internal enum FileShareMode : uint internal enum FileCreationDisposition : uint { New = 1, + CreateAlways = 2, + OpenExisting = 3, + OpenAlways = 4, + TruncateExisting = 5, } @@ -71,25 +82,45 @@ internal enum FileCreationDisposition : uint internal enum FileAttributes : uint { ReadOnly = 0x00000001, + Hidden = 0x00000002, + System = 0x00000004, + Directory = 0x00000010, + Archive = 0x00000020, + Normal = 0x00000080, + Temporary = 0x00000100, + Offline = 0x00001000, + NotContentIndexed = 0x00002000, + Encrypted = 0x00004000, + Write_Through = 0x80000000, + Overlapped = 0x40000000, + NoBuffering = 0x20000000, + RandomAccess = 0x10000000, + SequentialScan = 0x08000000, + DeleteOnClose = 0x04000000, + BackupSemantics = 0x02000000, + PosixSemantics = 0x01000000, + OpenReparsePoint = 0x00200000, + OpenNoRecall = 0x00100000, + SessionAware = 0x00800000 } @@ -97,7 +128,9 @@ internal enum FileAttributes : uint internal class SecurityAttributes { internal int nLength; + internal SafeLocalMemHandle lpSecurityDescriptor; + internal bool bInheritHandle; internal SecurityAttributes() @@ -455,6 +488,7 @@ internal static extern bool AdjustTokenPrivileges(IntPtr tokenHandler, bool disa internal struct TOKEN_PRIVILEGE { internal uint PrivilegeCount; + internal LUID_AND_ATTRIBUTES Privilege; } @@ -462,6 +496,7 @@ internal struct TOKEN_PRIVILEGE internal struct LUID { internal uint LowPart; + internal uint HighPart; } @@ -469,6 +504,7 @@ internal struct LUID internal struct LUID_AND_ATTRIBUTES { internal LUID Luid; + internal uint Attributes; } @@ -476,7 +512,9 @@ internal struct LUID_AND_ATTRIBUTES internal struct PRIVILEGE_SET { internal uint PrivilegeCount; + internal uint Control; + internal LUID_AND_ATTRIBUTES Privilege; } @@ -517,8 +555,11 @@ internal struct PRIVILEGE_SET internal const int TOKEN_ALL_ACCESS = 0x001f01ff; internal const uint SE_PRIVILEGE_DISABLED = 0x00000000; + internal const uint SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001; + internal const uint SE_PRIVILEGE_ENABLED = 0x00000002; + internal const uint SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; internal const int ERROR_SUCCESS = 0x0; @@ -529,21 +570,32 @@ internal struct PRIVILEGE_SET // Fields internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); + internal static readonly UInt32 GENERIC_READ = 0x80000000; + internal static readonly UInt32 GENERIC_WRITE = 0x40000000; + internal static readonly UInt32 FILE_ATTRIBUTE_NORMAL = 0x80000000; + internal static readonly UInt32 CREATE_ALWAYS = 2; + internal static readonly UInt32 FILE_SHARE_WRITE = 0x00000002; + internal static readonly UInt32 FILE_SHARE_READ = 0x00000001; + internal static readonly UInt32 OF_READWRITE = 0x00000002; + internal static readonly UInt32 OPEN_EXISTING = 3; [StructLayout(LayoutKind.Sequential)] internal class PROCESS_INFORMATION { public IntPtr hProcess; + public IntPtr hThread; + public int dwProcessId; + public int dwThreadId; public PROCESS_INFORMATION() @@ -587,22 +639,39 @@ private void Dispose(bool disposing) internal class STARTUPINFO { public int cb; + public IntPtr lpReserved; + public IntPtr lpDesktop; + public IntPtr lpTitle; + public int dwX; + public int dwY; + public int dwXSize; + public int dwYSize; + public int dwXCountChars; + public int dwYCountChars; + public int dwFillAttribute; + public int dwFlags; + public short wShowWindow; + public short cbReserved2; + public IntPtr lpReserved2; + public SafeFileHandle hStdInput; + public SafeFileHandle hStdOutput; + public SafeFileHandle hStdError; public STARTUPINFO() @@ -651,7 +720,9 @@ public void Dispose() internal class SECURITY_ATTRIBUTES { public int nLength; + public SafeLocalMemHandle lpSecurityDescriptor; + public bool bInheritHandle; public SECURITY_ATTRIBUTES() @@ -702,7 +773,9 @@ public static extern System.IntPtr CreateFileW( internal enum StandardHandleId : uint { Error = unchecked((uint)-12), + Output = unchecked((uint)-11), + Input = unchecked((uint)-10), } diff --git a/src/System.Management.Automation/utils/PowerShellETWTracer.cs b/src/System.Management.Automation/utils/PowerShellETWTracer.cs index 0dc4b2f08f8..67c72ba2591 100644 --- a/src/System.Management.Automation/utils/PowerShellETWTracer.cs +++ b/src/System.Management.Automation/utils/PowerShellETWTracer.cs @@ -809,6 +809,7 @@ public sealed class PowerShellChannelWriter : BaseChannelWriter private static readonly EventProvider _provider = new EventProvider(PSEtwLogProvider.ProviderGuid); private bool disposed; + private PowerShellTraceKeywords _keywords; /// diff --git a/src/System.Management.Automation/utils/PsUtils.cs b/src/System.Management.Automation/utils/PsUtils.cs index 5866e3d52f9..ff454ceea57 100644 --- a/src/System.Management.Automation/utils/PsUtils.cs +++ b/src/System.Management.Automation/utils/PsUtils.cs @@ -78,6 +78,7 @@ internal static ProcessModule GetMainModule(Process targetProcess) // Cache of the current process' parentId private static int? s_currentParentProcessId; + private static readonly int s_currentProcessId = Process.GetCurrentProcess().Id; /// @@ -402,7 +403,9 @@ internal static Hashtable EvaluatePowerShellDataFile( #endregion EvaluatePowerShellDataFile internal static readonly string[] ManifestModuleVersionPropertyName = new[] { "ModuleVersion" }; + internal static readonly string[] ManifestGuidPropertyName = new[] { "GUID" }; + internal static readonly string[] ManifestPrivateDataPropertyName = new[] { "PrivateData" }; internal static readonly string[] FastModuleManifestAnalysisPropertyNames = new[] diff --git a/src/System.Management.Automation/utils/RuntimeException.cs b/src/System.Management.Automation/utils/RuntimeException.cs index fe5a6c3b4be..7653029d018 100644 --- a/src/System.Management.Automation/utils/RuntimeException.cs +++ b/src/System.Management.Automation/utils/RuntimeException.cs @@ -167,8 +167,11 @@ public virtual ErrorRecord ErrorRecord } private ErrorRecord _errorRecord; + private string _errorId = "RuntimeException"; + private ErrorCategory _errorCategory = ErrorCategory.NotSpecified; + private object _targetObject = null; /// diff --git a/src/System.Management.Automation/utils/SessionStateExceptions.cs b/src/System.Management.Automation/utils/SessionStateExceptions.cs index acf3d9b8306..170c75d543c 100644 --- a/src/System.Management.Automation/utils/SessionStateExceptions.cs +++ b/src/System.Management.Automation/utils/SessionStateExceptions.cs @@ -537,6 +537,7 @@ public SessionStateCategory SessionStateCategory #region Private private string _errorId = "SessionStateException"; + private ErrorCategory _errorCategory = ErrorCategory.InvalidArgument; private static string BuildMessage( diff --git a/src/System.Management.Automation/utils/Verbs.cs b/src/System.Management.Automation/utils/Verbs.cs index aeb6a3ee530..76019311994 100644 --- a/src/System.Management.Automation/utils/Verbs.cs +++ b/src/System.Management.Automation/utils/Verbs.cs @@ -1312,6 +1312,7 @@ static Verbs() } private static Dictionary s_validVerbs = new Dictionary(StringComparer.OrdinalIgnoreCase); + private static Dictionary s_recommendedAlternateVerbs = new Dictionary(StringComparer.OrdinalIgnoreCase); internal static bool IsStandard(string verb) diff --git a/src/System.Management.Automation/utils/tracing/EtwActivity.cs b/src/System.Management.Automation/utils/tracing/EtwActivity.cs index 2bd8a57fbeb..5f0b03720e4 100644 --- a/src/System.Management.Automation/utils/tracing/EtwActivity.cs +++ b/src/System.Management.Automation/utils/tracing/EtwActivity.cs @@ -104,13 +104,16 @@ public abstract class EtwActivity private class CorrelatedCallback { private CallbackNoParameter callbackNoParam; + private CallbackWithState callbackWithState; + private AsyncCallback asyncCallback; /// /// ParentActivityId. /// protected readonly Guid parentActivityId; + private readonly EtwActivity tracer; /// @@ -260,6 +263,7 @@ public void Callback(IAsyncResult asyncResult) } private static Dictionary providers = new Dictionary(); + private static object syncLock = new object(); private static EventDescriptor _WriteTransferEvent = new EventDescriptor(0x1f05, 0x1, 0x11, 0x5, 0x14, 0x0, (long)0x4000000000000000); diff --git a/src/System.Management.Automation/utils/tracing/EtwActivityReverter.cs b/src/System.Management.Automation/utils/tracing/EtwActivityReverter.cs index fdff216e1c8..7930a4081da 100644 --- a/src/System.Management.Automation/utils/tracing/EtwActivityReverter.cs +++ b/src/System.Management.Automation/utils/tracing/EtwActivityReverter.cs @@ -29,6 +29,7 @@ internal class EtwActivityReverter : IEtwActivityReverter { private readonly IEtwEventCorrelator _correlator; + private readonly Guid _oldActivityId; private bool _isDisposed; diff --git a/src/System.Management.Automation/utils/tracing/EtwActivityReverterMethodInvoker.cs b/src/System.Management.Automation/utils/tracing/EtwActivityReverterMethodInvoker.cs index db63b2727d3..7b595145a28 100644 --- a/src/System.Management.Automation/utils/tracing/EtwActivityReverterMethodInvoker.cs +++ b/src/System.Management.Automation/utils/tracing/EtwActivityReverterMethodInvoker.cs @@ -12,6 +12,7 @@ internal class EtwActivityReverterMethodInvoker : #region Instance Data private readonly IEtwEventCorrelator _eventCorrelator; + private readonly Func _invoker; #endregion diff --git a/src/System.Management.Automation/utils/tracing/EtwEventCorrelator.cs b/src/System.Management.Automation/utils/tracing/EtwEventCorrelator.cs index 7e4e81abe06..0c312e4de45 100644 --- a/src/System.Management.Automation/utils/tracing/EtwEventCorrelator.cs +++ b/src/System.Management.Automation/utils/tracing/EtwEventCorrelator.cs @@ -50,6 +50,7 @@ public class EtwEventCorrelator : IEtwEventCorrelator { private readonly EventProvider _transferProvider; + private readonly EventDescriptor _transferEvent; /// diff --git a/src/System.Management.Automation/utils/tracing/PSEtwLogProvider.cs b/src/System.Management.Automation/utils/tracing/PSEtwLogProvider.cs index 173c5b8379a..e994b145375 100755 --- a/src/System.Management.Automation/utils/tracing/PSEtwLogProvider.cs +++ b/src/System.Management.Automation/utils/tracing/PSEtwLogProvider.cs @@ -15,7 +15,9 @@ namespace System.Management.Automation.Tracing internal class PSEtwLogProvider : LogProvider { private static EventProvider etwProvider; + internal static readonly Guid ProviderGuid = new Guid("F90714A8-5509-434A-BF6D-B1624C8A19A2"); + private static EventDescriptor _xferEventDescriptor = new EventDescriptor(0x1f05, 0x1, 0x11, 0x5, 0x14, 0x0, (long)0x4000000000000000); /// diff --git a/src/System.Management.Automation/utils/tracing/TracingGen.cs b/src/System.Management.Automation/utils/tracing/TracingGen.cs index ea369e4513a..4448ab85ed1 100644 --- a/src/System.Management.Automation/utils/tracing/TracingGen.cs +++ b/src/System.Management.Automation/utils/tracing/TracingGen.cs @@ -38,87 +38,169 @@ public sealed partial class Tracer : System.Management.Automation.Tracing.EtwAct public const long KeywordAll = 0xFFFFFFFF; private static Guid providerId = Guid.Parse("a0c1853b-5c40-4b15-8766-3cf1c58f985a"); + private static EventDescriptor WriteTransferEventEvent; + private static EventDescriptor DebugMessageEvent; + private static EventDescriptor M3PAbortingWorkflowExecutionEvent; + private static EventDescriptor M3PActivityExecutionFinishedEvent; + private static EventDescriptor M3PActivityExecutionQueuedEvent; + private static EventDescriptor M3PActivityExecutionStartedEvent; + private static EventDescriptor M3PBeginContainerParentJobExecutionEvent; + private static EventDescriptor M3PBeginCreateNewJobEvent; + private static EventDescriptor M3PBeginJobLogicEvent; + private static EventDescriptor M3PBeginProxyChildJobEventHandlerEvent; + private static EventDescriptor M3PBeginProxyJobEventHandlerEvent; + private static EventDescriptor M3PBeginProxyJobExecutionEvent; + private static EventDescriptor M3PBeginRunGarbageCollectionEvent; + private static EventDescriptor M3PBeginStartWorkflowApplicationEvent; + private static EventDescriptor M3PBeginWorkflowExecutionEvent; + private static EventDescriptor M3PCancellingWorkflowExecutionEvent; + private static EventDescriptor M3PChildWorkflowJobAdditionEvent; + private static EventDescriptor M3PEndContainerParentJobExecutionEvent; + private static EventDescriptor M3PEndCreateNewJobEvent; + private static EventDescriptor M3PEndJobLogicEvent; + private static EventDescriptor M3PEndpointDisabledEvent; + private static EventDescriptor M3PEndpointEnabledEvent; + private static EventDescriptor M3PEndpointModifiedEvent; + private static EventDescriptor M3PEndpointRegisteredEvent; + private static EventDescriptor M3PEndpointUnregisteredEvent; + private static EventDescriptor M3PEndProxyChildJobEventHandlerEvent; + private static EventDescriptor M3PEndProxyJobEventHandlerEvent; + private static EventDescriptor M3PEndProxyJobExecutionEvent; + private static EventDescriptor M3PEndRunGarbageCollectionEvent; + private static EventDescriptor M3PEndStartWorkflowApplicationEvent; + private static EventDescriptor M3PEndWorkflowExecutionEvent; + private static EventDescriptor M3PErrorImportingWorkflowFromXamlEvent; + private static EventDescriptor M3PForcedWorkflowShutdownErrorEvent; + private static EventDescriptor M3PForcedWorkflowShutdownFinishedEvent; + private static EventDescriptor M3PForcedWorkflowShutdownStartedEvent; + private static EventDescriptor M3PImportedWorkflowFromXamlEvent; + private static EventDescriptor M3PImportingWorkflowFromXamlEvent; + private static EventDescriptor M3PJobCreationCompleteEvent; + private static EventDescriptor M3PJobErrorEvent; + private static EventDescriptor M3PJobRemovedEvent; + private static EventDescriptor M3PJobRemoveErrorEvent; + private static EventDescriptor M3PJobStateChangedEvent; + private static EventDescriptor M3PLoadingWorkflowForExecutionEvent; + private static EventDescriptor M3POutOfProcessRunspaceStartedEvent; + private static EventDescriptor M3PParameterSplattingWasPerformedEvent; + private static EventDescriptor M3PParentJobCreatedEvent; + private static EventDescriptor M3PPersistenceStoreMaxSizeReachedEvent; + private static EventDescriptor M3PPersistingWorkflowEvent; + private static EventDescriptor M3PProxyJobRemoteJobAssociationEvent; + private static EventDescriptor M3PRemoveJobStartedEvent; + private static EventDescriptor M3PRunspaceAvailabilityChangedEvent; + private static EventDescriptor M3PRunspaceStateChangedEvent; + private static EventDescriptor M3PTrackingGuidContainerParentJobCorrelationEvent; + private static EventDescriptor M3PUnloadingWorkflowEvent; + private static EventDescriptor M3PWorkflowActivityExecutionFailedEvent; + private static EventDescriptor M3PWorkflowActivityValidatedEvent; + private static EventDescriptor M3PWorkflowActivityValidationFailedEvent; + private static EventDescriptor M3PWorkflowCleanupPerformedEvent; + private static EventDescriptor M3PWorkflowDeletedFromDiskEvent; + private static EventDescriptor M3PWorkflowEngineStartedEvent; + private static EventDescriptor M3PWorkflowExecutionAbortedEvent; + private static EventDescriptor M3PWorkflowExecutionCancelledEvent; + private static EventDescriptor M3PWorkflowExecutionErrorEvent; + private static EventDescriptor M3PWorkflowExecutionFinishedEvent; + private static EventDescriptor M3PWorkflowExecutionStartedEvent; + private static EventDescriptor M3PWorkflowJobCreatedEvent; + private static EventDescriptor M3PWorkflowLoadedForExecutionEvent; + private static EventDescriptor M3PWorkflowLoadedFromDiskEvent; + private static EventDescriptor M3PWorkflowManagerCheckpointEvent; + private static EventDescriptor M3PWorkflowPersistedEvent; + private static EventDescriptor M3PWorkflowPluginRequestedToShutdownEvent; + private static EventDescriptor M3PWorkflowPluginRestartedEvent; + private static EventDescriptor M3PWorkflowPluginStartedEvent; + private static EventDescriptor M3PWorkflowQuotaViolatedEvent; + private static EventDescriptor M3PWorkflowResumedEvent; + private static EventDescriptor M3PWorkflowResumingEvent; + private static EventDescriptor M3PWorkflowRunspacePoolCreatedEvent; + private static EventDescriptor M3PWorkflowStateChangedEvent; + private static EventDescriptor M3PWorkflowUnloadedEvent; + private static EventDescriptor M3PWorkflowValidationErrorEvent; + private static EventDescriptor M3PWorkflowValidationFinishedEvent; + private static EventDescriptor M3PWorkflowValidationStartedEvent; /// diff --git a/test/xUnit/csharp/test_FileSystemProvider.cs b/test/xUnit/csharp/test_FileSystemProvider.cs index 268dbddef42..ce3c242b3b4 100644 --- a/test/xUnit/csharp/test_FileSystemProvider.cs +++ b/test/xUnit/csharp/test_FileSystemProvider.cs @@ -25,6 +25,7 @@ namespace PSTests.Parallel public class FileSystemProviderTests : IDisposable { private string testPath; + private string testContent; public FileSystemProviderTests() diff --git a/test/xUnit/csharp/test_PSConfiguration.cs b/test/xUnit/csharp/test_PSConfiguration.cs index 45e057bea75..cdb7506a59c 100644 --- a/test/xUnit/csharp/test_PSConfiguration.cs +++ b/test/xUnit/csharp/test_PSConfiguration.cs @@ -20,17 +20,21 @@ public class PowerShellPolicyFixture : IDisposable private const string ConfigFileName = "powershell.config.json"; private readonly string systemWideConfigFile; + private readonly string currentUserConfigFile; private readonly string systemWideConfigBackupFile; + private readonly string currentUserConfigBackupFile; private readonly string systemWideConfigDirectory; + private readonly string currentUserConfigDirectory; private readonly JsonSerializer serializer; private readonly PowerShellPolicies systemWidePolicies; + private readonly PowerShellPolicies currentUserPolicies; private readonly bool originalTestHookValue; diff --git a/test/xUnit/csharp/test_Runspace.cs b/test/xUnit/csharp/test_Runspace.cs index 3a7a6278bf6..55821cc9040 100644 --- a/test/xUnit/csharp/test_Runspace.cs +++ b/test/xUnit/csharp/test_Runspace.cs @@ -14,6 +14,7 @@ namespace PSTests.Sequential public class RunspaceTests { private static int count = 1; + private static string script = string.Format($"get-command get-command"); [Fact]