From 273328d06f591296ae2548fcab38c17efc2466cb Mon Sep 17 00:00:00 2001 From: Sergei Vorobev Date: Tue, 12 Apr 2016 13:06:17 -0700 Subject: [PATCH] Update files from psl-monad source-depot [SD:695331] Corresponds to 1218e29752ba4 --- src/Modules/PSGet/PSGet.Format.ps1xml | 12 - src/Modules/PSGet/PSGet.Resource.psd1 | Bin 69704 -> 70822 bytes src/Modules/PSGet/PSModule.psm1 | 364 ++++++++++++------ .../DscSupport/CimDSCParser.cs | 5 +- .../engine/hostifaces/Connection.cs | 7 +- .../engine/remoting/client/remoterunspace.cs | 4 + .../server/ServerRunspacePoolDriver.cs | 5 +- .../security/nativeMethods.cs | 29 +- 8 files changed, 266 insertions(+), 160 deletions(-) diff --git a/src/Modules/PSGet/PSGet.Format.ps1xml b/src/Modules/PSGet/PSGet.Format.ps1xml index 54ff00a1fe..2908458c05 100644 --- a/src/Modules/PSGet/PSGet.Format.ps1xml +++ b/src/Modules/PSGet/PSGet.Format.ps1xml @@ -14,9 +14,6 @@ 35 - - 10 - 20 @@ -31,9 +28,6 @@ Name - - Type - Repository @@ -52,9 +46,6 @@ - - 25 - 25 @@ -69,9 +60,6 @@ Name - - PackageManagementProvider - InstallationPolicy diff --git a/src/Modules/PSGet/PSGet.Resource.psd1 b/src/Modules/PSGet/PSGet.Resource.psd1 index 5177bec6b84b495f13b5c0b5aa366aba6e0eaa08..7dfaf7c0e88032293afbb1da1b9aed26dc9fc261 100644 GIT binary patch delta 503 zcma)3&r1Sf5S^vPD7GJ@5F1FF6+|c`QFJMb3NolPmCjaQ?v_8oRa3fzw+O$HrO78oB;vZF<5$>4@P z#4GI@yGpLglcqTMYrnIrxuuu=_x+WVZbj>m{1j#t_{`zvk%2L144p-b#^<6_kD!{P z4b0d?l)y9_xu7hEg$`vgJ~gLW-BkmYu-RBuhf@$62f?Ckm=hGD2rWanG-p9Tnrsdq z>lgEi%CB$Jql>8h$>GWRo#N+@`r7!v@Q|zCVg^Mq#ef-U&7cypJXUJp r1R)CIJ-|6qE2c47cC|0mcxx - [CmdletBinding(PositionalBinding=$false, + [CmdletBinding(DefaultParameterSetName='NameParameterSet', HelpUri='http://go.microsoft.com/fwlink/?LinkID=517129')] Param ( - [Parameter(Mandatory=$true)] + [Parameter(Mandatory=$true, + Position=0, + ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [string] $Name, - [Parameter(Mandatory=$true)] + [Parameter(Mandatory=$true, + Position=1, + ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [Uri] $SourceLocation, - [Parameter()] + [Parameter(ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [Uri] $PublishLocation, - [Parameter()] + [Parameter(ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [Uri] $ScriptSourceLocation, - [Parameter()] + [Parameter(ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [Uri] $ScriptPublishLocation, + [Parameter(Mandatory=$true, + ParameterSetName='PSGalleryParameterSet')] + [Switch] + $Default, + [Parameter()] [ValidateSet('Trusted','Untrusted')] [string] $InstallationPolicy = 'Untrusted', - [Parameter()] + [Parameter(ParameterSetName='NameParameterSet')] [ValidateNotNullOrEmpty()] [string] $PackageManagementProvider @@ -3585,62 +3602,86 @@ function Register-PSRepository Process { - # Ping and resolve the specified location - $SourceLocation = Resolve-Location -Location (Get-LocationString -LocationUri $SourceLocation) ` - -LocationParameterName 'SourceLocation' ` - -CallerPSCmdlet $PSCmdlet - if(-not $SourceLocation) + if($PSCmdlet.ParameterSetName -eq 'PSGalleryParameterSet') { - # Above Resolve-Location function throws an error when it is not able to resolve a location - return - } + if(-not $Default) + { + return + } - if($InstallationPolicy -eq "Trusted") - { - $PSBoundParameters.Add("Trusted", $true) - } - - $providerName = $null - - if($PackageManagementProvider) - { - $providerName = $PackageManagementProvider - } - elseif($selctedProviderName) - { - $providerName = $selctedProviderName + $PSBoundParameters['Name'] = $Script:PSGalleryModuleSource + $null = $PSBoundParameters.Remove('Default') } else { - $providerName = Get-PackageManagementProviderName -Location $SourceLocation + if($Name -eq $Script:PSGalleryModuleSource) + { + $message = $LocalizedData.UseDefaultParameterSetOnRegisterPSRepository + ThrowError -ExceptionName "System.ArgumentException" ` + -ExceptionMessage $message ` + -ErrorId 'UseDefaultParameterSetOnRegisterPSRepository' ` + -CallerPSCmdlet $PSCmdlet ` + -ErrorCategory InvalidArgument ` + -ExceptionObject $Name + return + } + + # Ping and resolve the specified location + $SourceLocation = Resolve-Location -Location (Get-LocationString -LocationUri $SourceLocation) ` + -LocationParameterName 'SourceLocation' ` + -CallerPSCmdlet $PSCmdlet + if(-not $SourceLocation) + { + # Above Resolve-Location function throws an error when it is not able to resolve a location + return + } + + $providerName = $null + + if($PackageManagementProvider) + { + $providerName = $PackageManagementProvider + } + elseif($selctedProviderName) + { + $providerName = $selctedProviderName + } + else + { + $providerName = Get-PackageManagementProviderName -Location $SourceLocation + } + + if($providerName) + { + $PSBoundParameters[$script:PackageManagementProviderParam] = $providerName + } + + if($PublishLocation) + { + $PSBoundParameters[$script:PublishLocation] = Get-LocationString -LocationUri $PublishLocation + } + + if($ScriptPublishLocation) + { + $PSBoundParameters[$script:ScriptPublishLocation] = Get-LocationString -LocationUri $ScriptPublishLocation + } + + if($ScriptSourceLocation) + { + $PSBoundParameters[$script:ScriptSourceLocation] = Get-LocationString -LocationUri $ScriptSourceLocation + } + + $PSBoundParameters["Location"] = Get-LocationString -LocationUri $SourceLocation + $null = $PSBoundParameters.Remove("SourceLocation") } - if($providerName) + if($InstallationPolicy -eq "Trusted") { - $PSBoundParameters[$script:PackageManagementProviderParam] = $providerName + $PSBoundParameters['Trusted'] = $true } - - if($PublishLocation) - { - $PSBoundParameters[$script:PublishLocation] = Get-LocationString -LocationUri $PublishLocation - } - - if($ScriptPublishLocation) - { - $PSBoundParameters[$script:ScriptPublishLocation] = Get-LocationString -LocationUri $ScriptPublishLocation - } - - if($ScriptSourceLocation) - { - $PSBoundParameters[$script:ScriptSourceLocation] = Get-LocationString -LocationUri $ScriptSourceLocation - } - - $PSBoundParameters["Provider"] = $script:PSModuleProviderName - - $PSBoundParameters["Location"] = Get-LocationString -LocationUri $SourceLocation - $null = $PSBoundParameters.Remove("SourceLocation") $null = $PSBoundParameters.Remove("InstallationPolicy") + $PSBoundParameters["Provider"] = $script:PSModuleProviderName $PSBoundParameters["MessageResolver"] = $script:PackageManagementMessageResolverScriptBlock $null = PackageManagement\Register-PackageSource @PSBoundParameters @@ -3656,17 +3697,16 @@ function Set-PSRepository HelpUri='http://go.microsoft.com/fwlink/?LinkID=517128')] Param ( - [Parameter(Mandatory=$true)] + [Parameter(Mandatory=$true, Position=0)] [ValidateNotNullOrEmpty()] [string] $Name, - [Parameter()] + [Parameter(Position=1)] [ValidateNotNullOrEmpty()] [Uri] $SourceLocation, - [Parameter()] [ValidateNotNullOrEmpty()] [Uri] @@ -5925,6 +5965,50 @@ function Set-PSGetSettingsVariable } } +function Set-PSGalleryRepository +{ + [CmdletBinding()] + param([switch]$Trusted) + + $psgalleryLocation = Resolve-Location -Location $Script:PSGallerySourceUri ` + -LocationParameterName 'SourceLocation' ` + -ErrorAction SilentlyContinue ` + -WarningAction SilentlyContinue + + $scriptSourceLocation = Resolve-Location -Location $Script:PSGalleryScriptSourceUri ` + -LocationParameterName 'ScriptSourceLocation' ` + -ErrorAction SilentlyContinue ` + -WarningAction SilentlyContinue + if($psgalleryLocation) + { + $result = Ping-Endpoint -Endpoint $Script:PSGalleryPublishUri -AllowAutoRedirect:$false + if ($result.ContainsKey($Script:ResponseUri) -and $result[$Script:ResponseUri]) + { + $script:PSGalleryPublishUri = $result[$Script:ResponseUri] + } + + $repository = Microsoft.PowerShell.Utility\New-Object PSCustomObject -Property ([ordered]@{ + Name = $Script:PSGalleryModuleSource + SourceLocation = $psgalleryLocation + PublishLocation = $Script:PSGalleryPublishUri + ScriptSourceLocation = $scriptSourceLocation + ScriptPublishLocation = $Script:PSGalleryPublishUri + Trusted=$Trusted + Registered=$true + InstallationPolicy = if($Trusted) {'Trusted'} else {'Untrusted'} + PackageManagementProvider=$script:NuGetProviderName + ProviderOptions = @{} + }) + + $repository.PSTypeNames.Insert(0, "Microsoft.PowerShell.Commands.PSRepository") + $script:PSGetModuleSources[$Script:PSGalleryModuleSource] = $repository + + Save-ModuleSources + + return $repository + } +} + function Set-ModuleSourcesVariable { [CmdletBinding()] @@ -5943,39 +6027,7 @@ function Set-ModuleSourcesVariable if(-not $script:PSGetModuleSources.Contains($Script:PSGalleryModuleSource)) { - $isPersistRequired = $true - $psgalleryLocation = Resolve-Location -Location $Script:PSGallerySourceUri ` - -LocationParameterName 'SourceLocation' ` - -ErrorAction SilentlyContinue ` - -WarningAction SilentlyContinue - - $scriptSourceLocation = Resolve-Location -Location $Script:PSGalleryScriptSourceUri ` - -LocationParameterName 'ScriptSourceLocation' ` - -ErrorAction SilentlyContinue ` - -WarningAction SilentlyContinue - if($psgalleryLocation) - { - $result = Ping-Endpoint -Endpoint $Script:PSGalleryPublishUri -AllowAutoRedirect:$false - if ($result.ContainsKey($Script:ResponseUri) -and $result[$Script:ResponseUri]) - { - $script:PSGalleryPublishUri = $result[$Script:ResponseUri] - } - $moduleSource = Microsoft.PowerShell.Utility\New-Object PSCustomObject -Property ([ordered]@{ - Name = $Script:PSGalleryModuleSource - SourceLocation = $psgalleryLocation - PublishLocation = $Script:PSGalleryPublishUri - ScriptSourceLocation = $scriptSourceLocation - ScriptPublishLocation = $Script:PSGalleryPublishUri - Trusted=$false - Registered=$true - InstallationPolicy = 'Untrusted' - PackageManagementProvider=$script:NuGetProviderName - ProviderOptions = @{} - }) - - $moduleSource.PSTypeNames.Insert(0, "Microsoft.PowerShell.Commands.PSRepository") - $script:PSGetModuleSources.Add($Script:PSGalleryModuleSource, $moduleSource) - } + $null = Set-PSGalleryRepository } } @@ -7552,7 +7604,7 @@ function Publish-PSArtifactUtility Microsoft.PowerShell.Management\Remove-Item $NupkgPath -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue -Confirm:$false -WhatIf:$false Microsoft.PowerShell.Management\Remove-Item $NuspecPath -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue -Confirm:$false -WhatIf:$false - Microsoft.PowerShell.Management\Set-Content -Value $nuspec -Path $NuspecPath + Microsoft.PowerShell.Management\Set-Content -Value $nuspec -Path $NuspecPath -Force -Confirm:$false -WhatIf:$false # Create .nupkg file $output = & $script:NuGetExePath pack $NuspecPath -OutputDirectory $NugetPackageRoot @@ -7950,15 +8002,14 @@ function Get-DynamicOptions Write-Output -InputObject (New-DynamicOption -Category $category -Name $script:PackageManagementProviderParam -ExpectedType String -IsRequired $false) - Write-Output -InputObject (New-DynamicOption -Category $category ` - -Name $script:PSArtifactType ` - -ExpectedType String ` - -IsRequired $false ` - -PermittedValues @($script:PSArtifactTypeModule,$script:PSArtifactTypeScript, $script:All)) - switch($category) { Package { + Write-Output -InputObject (New-DynamicOption -Category $category ` + -Name $script:PSArtifactType ` + -ExpectedType String ` + -IsRequired $false ` + -PermittedValues @($script:PSArtifactTypeModule,$script:PSArtifactTypeScript, $script:All)) Write-Output -InputObject (New-DynamicOption -Category $category -Name $script:Filter -ExpectedType String -IsRequired $false) Write-Output -InputObject (New-DynamicOption -Category $category -Name $script:Tag -ExpectedType StringArray -IsRequired $false) Write-Output -InputObject (New-DynamicOption -Category $category -Name Includes -ExpectedType StringArray -IsRequired $false -PermittedValues $script:IncludeValidSet) @@ -7975,6 +8026,11 @@ function Get-DynamicOptions Install { + Write-Output -InputObject (New-DynamicOption -Category $category ` + -Name $script:PSArtifactType ` + -ExpectedType String ` + -IsRequired $false ` + -PermittedValues @($script:PSArtifactTypeModule,$script:PSArtifactTypeScript, $script:All)) Write-Output -InputObject (New-DynamicOption -Category $category -Name "Scope" -ExpectedType String -IsRequired $false -PermittedValues @("CurrentUser","AllUsers")) Write-Output -InputObject (New-DynamicOption -Category $category -Name "InstallUpdate" -ExpectedType Switch -IsRequired $false) Write-Output -InputObject (New-DynamicOption -Category $category -Name 'NoPathUpdate' -ExpectedType Switch -IsRequired $false) @@ -8001,6 +8057,11 @@ function Add-PackageSource Set-ModuleSourcesVariable -Force + if(-not $Name) + { + return + } + $IsNewModuleSource = $false $Options = $request.Options @@ -8047,6 +8108,17 @@ function Add-PackageSource $PublishLocation = $null if($Options.ContainsKey($script:PublishLocation)) { + if($Name -eq $Script:PSGalleryModuleSource) + { + $message = $LocalizedData.ParameterIsNotAllowedWithPSGallery -f ('PublishLocation') + ThrowError -ExceptionName "System.ArgumentException" ` + -ExceptionMessage $message ` + -ErrorId 'ParameterIsNotAllowedWithPSGallery' ` + -CallerPSCmdlet $PSCmdlet ` + -ErrorCategory InvalidArgument ` + -ExceptionObject $PublishLocation + } + $PublishLocation = $Options[$script:PublishLocation] if(-not (Microsoft.PowerShell.Management\Test-Path $PublishLocation) -and @@ -8079,6 +8151,17 @@ function Add-PackageSource $ScriptSourceLocation = $null if($Options.ContainsKey($script:ScriptSourceLocation)) { + if($Name -eq $Script:PSGalleryModuleSource) + { + $message = $LocalizedData.ParameterIsNotAllowedWithPSGallery -f ('ScriptSourceLocation') + ThrowError -ExceptionName "System.ArgumentException" ` + -ExceptionMessage $message ` + -ErrorId 'ParameterIsNotAllowedWithPSGallery' ` + -CallerPSCmdlet $PSCmdlet ` + -ErrorCategory InvalidArgument ` + -ExceptionObject $ScriptSourceLocation + } + $ScriptSourceLocation = $Options[$script:ScriptSourceLocation] if(-not (Microsoft.PowerShell.Management\Test-Path $ScriptSourceLocation) -and @@ -8111,6 +8194,17 @@ function Add-PackageSource $ScriptPublishLocation = $null if($Options.ContainsKey($script:ScriptPublishLocation)) { + if($Name -eq $Script:PSGalleryModuleSource) + { + $message = $LocalizedData.ParameterIsNotAllowedWithPSGallery -f ('ScriptPublishLocation') + ThrowError -ExceptionName "System.ArgumentException" ` + -ExceptionMessage $message ` + -ErrorId 'ParameterIsNotAllowedWithPSGallery' ` + -CallerPSCmdlet $PSCmdlet ` + -ErrorCategory InvalidArgument ` + -ExceptionObject $ScriptPublishLocation + } + $ScriptPublishLocation = $Options[$script:ScriptPublishLocation] if(-not (Microsoft.PowerShell.Management\Test-Path $ScriptPublishLocation) -and @@ -8140,10 +8234,53 @@ function Add-PackageSource } } - # Ping and resolve the specified location - $Location = Resolve-Location -Location $Location ` - -LocationParameterName 'Location' ` - -CallerPSCmdlet $PSCmdlet + $currentSourceObject = $null + + # Check if Name is already registered + if($script:PSGetModuleSources.Contains($Name)) + { + $currentSourceObject = $script:PSGetModuleSources[$Name] + } + + # Location is not allowed for PSGallery source + # However OneGet passes Location value during Set-PackageSource cmdlet, + # that's why ensuring that Location value is same as the current SourceLocation + # + if(($Name -eq $Script:PSGalleryModuleSource) -and + $Location -and + ((-not $IsUpdatePackageSource) -or ($currentSourceObject -and $currentSourceObject.SourceLocation -ne $Location))) + { + $message = $LocalizedData.ParameterIsNotAllowedWithPSGallery -f ('Location, NewLocation or SourceLocation') + ThrowError -ExceptionName "System.ArgumentException" ` + -ExceptionMessage $message ` + -ErrorId 'ParameterIsNotAllowedWithPSGallery' ` + -CallerPSCmdlet $PSCmdlet ` + -ErrorCategory InvalidArgument ` + -ExceptionObject $Location + } + + if($Name -eq $Script:PSGalleryModuleSource) + { + # Add or update the PSGallery repostory + $repository = Set-PSGalleryRepository -Trusted:$Trusted + + if($repository) + { + # return the package source object. + Write-Output -InputObject (New-PackageSourceFromModuleSource -ModuleSource $repository) + } + + return + } + + if($Location) + { + # Ping and resolve the specified location + $Location = Resolve-Location -Location $Location ` + -LocationParameterName 'Location' ` + -CallerPSCmdlet $PSCmdlet + } + if(-not $Location) { # Above Resolve-Location function throws an error when it is not able to resolve a location @@ -8204,14 +8341,6 @@ function Add-PackageSource -ErrorCategory InvalidArgument } - $currentSourceObject = $null - - # Check if Name is already registered - if($script:PSGetModuleSources.Contains($Name)) - { - $currentSourceObject = $script:PSGetModuleSources[$Name] - } - if(-not $PublishLocation -and $currentSourceObject -and $currentSourceObject.PublishLocation) { $PublishLocation = $currentSourceObject.PublishLocation @@ -10632,7 +10761,6 @@ function New-SoftwareIdentityFromPackage } $details.Add( "PackageManagementProvider" , $PackageManagementProviderName ) - $details.Add( "Type" , $Type ) if($InstalledLocation) { diff --git a/src/System.Management.Automation/DscSupport/CimDSCParser.cs b/src/System.Management.Automation/DscSupport/CimDSCParser.cs index 84700b601d..b3f25f10d6 100644 --- a/src/System.Management.Automation/DscSupport/CimDSCParser.cs +++ b/src/System.Management.Automation/DscSupport/CimDSCParser.cs @@ -2723,7 +2723,10 @@ namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal bool missingDefaultConstructor = false; if (type.GetTypeInfo().IsValueType) { - supported = true; + if (mapPrimitiveDotNetTypeToMof.ContainsKey(type)) + { + supported = true; + } } else if (!type.GetTypeInfo().IsAbstract) { diff --git a/src/System.Management.Automation/engine/hostifaces/Connection.cs b/src/System.Management.Automation/engine/hostifaces/Connection.cs index b1bdd7ab98..dd4404360e 100644 --- a/src/System.Management.Automation/engine/hostifaces/Connection.cs +++ b/src/System.Management.Automation/engine/hostifaces/Connection.cs @@ -471,7 +471,12 @@ namespace System.Management.Automation.Runspaces /// /// Runspace is based on a named pipe transport. /// - NamedPipeTransport = 0x2 + NamedPipeTransport = 0x2, + + /// + /// Runspace is based on a VM socket transport. + /// + VMSocketTransport = 0x4 } #endregion diff --git a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs index f1d3e8792a..f885af03fe 100644 --- a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs +++ b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs @@ -1000,6 +1000,10 @@ namespace System.Management.Automation { returnCaps |= RunspaceCapability.NamedPipeTransport; } + else if (_connectionInfo is VMConnectionInfo) + { + returnCaps |= RunspaceCapability.VMSocketTransport; + } else { ContainerConnectionInfo containerConnectionInfo = _connectionInfo as ContainerConnectionInfo; diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs index 3b28849117..ca48ef6f29 100644 --- a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs +++ b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs @@ -879,6 +879,7 @@ namespace System.Management.Automation data.RunspacePoolId, hostInfo, streamOptions, + noInput, addToHistory); return; @@ -1209,6 +1210,7 @@ namespace System.Management.Automation /// RunspacePool Id /// Host Info /// Remote stream options + /// False when input is provided /// Add to history private void StartPowerShellCommandOnPushedRunspace( PowerShell powershell, @@ -1216,6 +1218,7 @@ namespace System.Management.Automation Guid runspacePoolId, HostInfo hostInfo, RemoteStreamOptions streamOptions, + bool noInput, bool addToHistory) { Runspace runspace = this.remoteHost.PushedRunspace; @@ -1223,7 +1226,7 @@ namespace System.Management.Automation ServerPowerShellDriver driver = new ServerPowerShellDriver( powershell, null, - true, + noInput, powershellId, runspacePoolId, this, diff --git a/src/System.Management.Automation/security/nativeMethods.cs b/src/System.Management.Automation/security/nativeMethods.cs index e20e69953c..27c7693693 100644 --- a/src/System.Management.Automation/security/nativeMethods.cs +++ b/src/System.Management.Automation/security/nativeMethods.cs @@ -2144,33 +2144,8 @@ namespace System.Management.Automation.Security [DllImport("wintrust.dll", CharSet = CharSet.Unicode)] internal static extern IntPtr CryptCATStoreFromHandle( IntPtr hCatalog - ); - - [DllImport("wintrust.dll", CharSet = CharSet.Unicode)] - internal static extern bool CryptCATAdminAcquireContext2( - ref IntPtr phCatAdmin, - IntPtr pgSubsystem, - [MarshalAs(UnmanagedType.LPWStr)] - string pwszHashAlgorithm, - IntPtr pStrongHashPolicy, - DWORD dwFlags - ); - - [DllImport("wintrust.dll", CharSet = CharSet.Unicode)] - internal static extern bool CryptCATAdminReleaseContext( - IntPtr phCatAdmin, - DWORD dwFlags - ); - - [DllImport("wintrust.dll", CharSet = CharSet.Unicode)] - internal static extern bool CryptCATAdminCalcHashFromFileHandle2( - IntPtr hCatAdmin, - SafeFileHandle hFile, - [In, Out] ref DWORD pcbHash, - IntPtr pbHash, - DWORD dwFlags - ); - + ); + [DllImport("wintrust.dll", CharSet = CharSet.Unicode)] internal static extern IntPtr CryptCATEnumerateMember( IntPtr hCatalog,