private PSDriveInfo ValidateDriveWithProvider( DriveCmdletProvider driveProvider, PSDriveInfo drive, CmdletProviderContext context, bool resolvePathIfPossible) { Dbg.Diagnostics.Assert( drive != null, "drive should have been validated by the caller"); Dbg.Diagnostics.Assert( driveProvider != null, "driveProvider should have been validated by the caller"); // Mark the drive as being created so that the provider can modify the // root if necessary drive.DriveBeingCreated = true; // Only try to resolve the root as an MSH path if there is a current drive. if (CurrentDrive != null && resolvePathIfPossible) { string newRoot = GetProviderRootFromSpecifiedRoot(drive.Root, drive.Provider); if (newRoot != null) { drive.SetRoot(newRoot); } } PSDriveInfo result = null; try { result = driveProvider.NewDrive(drive, context); } catch (LoopFlowException) { throw; } catch (PipelineStoppedException) { throw; } catch (ActionPreferenceStopException) { throw; } catch (Exception e) // Catch-all OK, 3rd party callout { CommandProcessorBase.CheckForSevereException(e); ProviderInvocationException pie = NewProviderInvocationException( "NewDriveProviderException", SessionStateStrings.NewDriveProviderException, driveProvider.ProviderInfo, drive.Root, e); context.WriteError( new ErrorRecord( pie.ErrorRecord, pie)); } finally { drive.DriveBeingCreated = false; } return result; } // ValidateDriveWithProvider
private PSDriveInfo ValidateDriveWithProvider(DriveCmdletProvider driveProvider, PSDriveInfo drive, CmdletProviderContext context, bool resolvePathIfPossible) { drive.DriveBeingCreated = true; if ((this.CurrentDrive != null) && resolvePathIfPossible) { string providerRootFromSpecifiedRoot = this.GetProviderRootFromSpecifiedRoot(drive.Root, drive.Provider); if (providerRootFromSpecifiedRoot != null) { drive.SetRoot(providerRootFromSpecifiedRoot); } } PSDriveInfo info = null; try { info = driveProvider.NewDrive(drive, context); } catch (LoopFlowException) { throw; } catch (PipelineStoppedException) { throw; } catch (ActionPreferenceStopException) { throw; } catch (Exception exception) { CommandProcessorBase.CheckForSevereException(exception); ProviderInvocationException replaceParentContainsErrorRecordException = this.NewProviderInvocationException("NewDriveProviderException", SessionStateStrings.NewDriveProviderException, driveProvider.ProviderInfo, drive.Root, exception); context.WriteError(new ErrorRecord(replaceParentContainsErrorRecordException.ErrorRecord, replaceParentContainsErrorRecordException)); } finally { drive.DriveBeingCreated = false; } return info; }