diff --git a/dist/win/contrib/patchWebDAV.ps1 b/dist/win/contrib/patchWebDAV.ps1 index bab50cc63..51b063560 100644 --- a/dist/win/contrib/patchWebDAV.ps1 +++ b/dist/win/contrib/patchWebDAV.ps1 @@ -1,16 +1,61 @@ #Requires -RunAsAdministrator -$sysdir = [Environment]::SystemDirectory -$hostsFile = "$sysdir\drivers\etc\hosts" -$aliasLine = '127.0.0.1 cryptomator-vault' +# Adds for address 127.0.0.1 the 'cryptomator-vault' alias to the hosts file +function Add-AliasToHost { + $sysdir = [Environment]::SystemDirectory + $hostsFile = "$sysdir\drivers\etc\hosts" + $aliasLine = '127.0.0.1 cryptomator-vault' -foreach ($line in Get-Content $hostsFile) { - if ($line -eq $aliasLine){ - Write-Output 'No changes necessary' - exit 0 + foreach ($line in Get-Content $hostsFile) { + if ($line -eq $aliasLine){ + return + } } + + Add-Content -Path $hostsFile -Encoding ascii -Value "`r`n$aliasLine" } -Add-Content -Path $hostsFile -Encoding ascii -Value "`r`n$aliasLine" -Write-Output 'Added alias to hosts file' + +# Sets in the registry the webclient file size limit to the maximum value +function Set-WebDAVFileSizeLimit { + # Set variables to indicate value and key to set + $RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters' + $Name = 'FileSizeLimitInBytes' + $Value = '0xffffffff' + + # Create the key if it does not exist + If (-NOT (Test-Path $RegistryPath)) { + New-Item -Path $RegistryPath -Force | Out-Null + } + + # Now set the value + New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null +} + + +# Changes the network provider order such that the builtin Windows webclient is always first +function Edit-ProviderOrder { + $RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder' + $Name = 'ProviderOrder' + $WebClientString = 'webclient' + + $CurrentOrder = (Get-ItemProperty $RegistryPath $Name).$Name + + $OrderWithoutWebclientArray = $CurrentOrder -split ',' | Where-Object {$_ -ne $WebClientString} + $WebClientArray = @($WebClientString) + + $UpdatedOrder = ($WebClientArray + $OrderWithoutWebclientArray) -join "," + New-ItemProperty -Path $RegistryPath -Name $Name -Value $UpdatedOrder -PropertyType String -Force | Out-Null +} + + +Add-AliasToHost +Write-Output 'Ensured alias exists in hosts file' + +Set-WebDAVFileSizeLimit +Write-Output 'Set WebDAV file size limit' + +Edit-ProviderOrder +Write-Output 'Ensured correct provider order' + exit 0