Compare commits

..
Author SHA1 Message Date
Mounir IDRASSI 0d2b75ef0a Windows: add read-only recovery mount for interrupted non-system in-place volumes 2026-05-20 19:27:45 +09:00
Mounir IDRASSI b97b0f2c06 macOS: fix TC_VERSION extraction in makefiles 2026-05-20 08:38:42 +02:00
Mounir IDRASSI 21f773cd6d docs: fix Argon2id default PIM 2026-05-20 14:33:06 +09:00
Mounir IDRASSI aaffec8b5c Windows: support new Microsoft EFI CA bootloaders
Embed both Microsoft UEFI CA 2011 and 2023 signed DCS EFI sets and select the 2023 set only when the firmware db trusts the required 2023 third-party CAs.

Fall back to the 2011 EFI set when firmware db state cannot be determined, preserving pre-existing compatibility behavior and recording the reason in HKLM diagnostics.

Refresh installed ESP modules during PostOOBE repair, keep backups before replacing existing DCS modules, and use the selected EFI set when creating rescue media.

Record the selected EFI bootloader resource set and selection reason in HKLM, allow larger firmware db variables on systems with many Secure Boot certificates, and remove diagnostic registry keys on uninstall.

Fix MSI SetupDLL COM typelib version constants so unregister targets the current Main and Format COM typelib versions.

References: https://github.com/veracrypt/VeraCrypt/issues/1655
2026-05-20 14:07:47 +09:00
Mounir IDRASSI 4f71883ac1 Windows: Add new signed EFI bootloader files (2011CA and 2023CA) 2026-05-20 14:05:27 +09:00
Mounir IDRASSIandGitHub 964ecde6a1 Linux: add Arch package build support (#1740) 2026-05-20 09:38:38 +09:00
Thomas De RockerandGitHub 86082f3bf5 Update Language.nl.xml (#1741) 2026-05-19 18:33:06 +09:00
Marius KjærstadandGitHub 1f256ae3f2 Update to Norwegian Bokmål translation (#1738)
* Update to Norwegian Bokmål translation

* Issues found by Idrassi
2026-05-19 13:25:03 +09:00
55 changed files with 1292 additions and 283 deletions
+67 -67
View File
@@ -11,7 +11,7 @@
<entry lang="nb" key="IDC_BROWSE">Bla &amp;gjennom...</entry>
<entry lang="nb" key="IDC_DESKTOP_ICON">Legg til VeraCrypt-ikon på &amp;skrivebordet</entry>
<entry lang="nb" key="IDC_DONATE">Doner nå...</entry>
<entry lang="nb" key="IDC_FILE_TYPE">Assosier .hc-fil&amp;utvidelsen med VeraCrypt</entry>
<entry lang="nb" key="IDC_FILE_TYPE">Tilknytt .hc-filutvidelsen &amp;med VeraCrypt</entry>
<entry lang="nb" key="IDC_OPEN_CONTAINING_FOLDER">&amp;Åpne målplasseringen når ferdig</entry>
<entry lang="nb" key="IDC_PROG_GROUP">Legg til VeraCrypt i &amp;Start-menyen</entry>
<entry lang="nb" key="IDC_SYSTEM_RESTORE">Opprett system&amp;gjenopprettingspunkt</entry>
@@ -29,7 +29,7 @@
<entry lang="nb" key="IDC_CIPHER_TEST">&amp;Test</entry>
<entry lang="nb" key="IDC_DEVICE_TRANSFORM_MODE_FORMAT">Opprett kryptert volum og formater det</entry>
<entry lang="nb" key="IDC_DEVICE_TRANSFORM_MODE_INPLACE">Krypter partisjonen på plass</entry>
<entry lang="nb" key="IDC_DISPLAY_KEYS">Vis genererte nøkler (deres deler)</entry>
<entry lang="nb" key="IDC_DISPLAY_KEYS">Vis genererte nøkler (deler av dem)</entry>
<entry lang="nb" key="IDC_DISPLAY_POOL_CONTENTS">Vis poolinnhold</entry>
<entry lang="nb" key="IDC_DOWNLOAD_CD_BURN_SOFTWARE">Last ned CD/DVD-brenneprogramvare</entry>
<entry lang="nb" key="IDC_FILE_CONTAINER">Opprett en kryptert filbeholder</entry>
@@ -82,15 +82,15 @@
<entry lang="nb" key="IDT_FORMAT_OPTIONS">Alternativer</entry>
<entry lang="nb" key="IDT_HASH_ALGO">Hash-algoritme</entry>
<entry lang="nb" key="IDT_HEADER_KEY">Hodenøkkel:</entry>
<entry lang="nb" key="IDT_LEFT">Venstre</entry>
<entry lang="nb" key="IDT_LEFT">Gjenstår</entry>
<entry lang="nb" key="IDT_MASTER_KEY">Hovednøkkel:</entry>
<entry lang="nb" key="IDT_MULTI_BOOT">Velg dette alternativet hvis det er installert to eller flere operativsystemer på denne datamaskinen.\n\nFor eksempel:\n- Windows XP og Windows XP\n- Windows XP og Windows Vista\n- Windows og Mac OS X\n- Windows og Linux\n- Windows, Linux og Mac OS X</entry>
<entry lang="nb" key="IDT_NON_SYS_DEVICE">Krypterer en ikke-systempartisjon på en intern eller ekstern disk (f.eks. en minnepinne). Kan eventuelt opprette et skjult volum.</entry>
<entry lang="nb" key="IDT_PARTIAL_POOL_CONTENTS">Gjeldende poolinnhold (delvis)</entry>
<entry lang="nb" key="IDT_PASS">Bestått</entry>
<entry lang="nb" key="IDT_PASS">Runde</entry>
<entry lang="nb" key="IDT_PASSWORD">Passord:</entry>
<entry lang="nb" key="IDT_PIM">Volum PIM:</entry>
<entry lang="nb" key="IDT_OLD_PIM">Volum PIM:</entry>
<entry lang="nb" key="IDT_PIM">Volum-PIM:</entry>
<entry lang="nb" key="IDT_OLD_PIM">Volum-PIM:</entry>
<entry lang="nb" key="IDT_PROGRESS">Fremdrift:</entry>
<entry lang="nb" key="IDT_RANDOM_POOL">Tilfeldig pool:</entry>
<entry lang="nb" key="IDT_SINGLE_BOOT">Velg dette alternativet hvis det bare er ett operativsystem installert på denne datamaskinen (selv om det har flere brukere).</entry>
@@ -112,7 +112,7 @@
<entry lang="nb" key="IDC_BROWSE_FILES">Bla gjennom...</entry>
<entry lang="nb" key="IDC_CACHE">Mellomlagre passord og nøkkelfil&amp;er i minnet</entry>
<entry lang="nb" key="IDC_CLOSE_BKG_TASK_WHEN_NOVOL">Avslutt når det ikke er noen monterte volum</entry>
<entry lang="nb" key="IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT">&amp;Lukk token sesjon (logg ut) etter at et volum er montert</entry>
<entry lang="nb" key="IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT">&amp;Lukk tokensesjon (logg ut) etter at et volum er montert</entry>
<entry lang="nb" key="IDC_COPY_EXPANDER">Inkluder VeraCrypt Volume Expander</entry>
<entry lang="nb" key="IDC_COPY_WIZARD">Inkluder Veiviser for VeraCrypt-volumopprettelse</entry>
<entry lang="nb" key="IDC_CREATE">Opprett</entry>
@@ -123,10 +123,10 @@
<entry lang="nb" key="IDC_ENABLE_KEYFILES">Bruk nøkkelfiler</entry>
<entry lang="nb" key="IDC_ENABLE_NEW_KEYFILES">Bruk nøkkelfiler</entry>
<entry lang="nb" key="IDC_EXIT">A&amp;vslutt</entry>
<entry lang="nb" key="IDC_FAVORITES_HELP_LINK">Hjelp om favorittvolum</entry>
<entry lang="nb" key="IDC_FAVORITE_DISABLE_HOTKEY">Ikke monter valgt volum når hurtigtasten 'Monter Favorittvolumer' trykkes</entry>
<entry lang="nb" key="IDC_FAVORITES_HELP_LINK">Hjelp om favorittvolumer</entry>
<entry lang="nb" key="IDC_FAVORITE_DISABLE_HOTKEY">Ikke monter valgt volum når &amp;hurtigtasten 'Monter favorittvolumer' trykkes</entry>
<entry lang="nb" key="IDC_FAVORITE_MOUNT_ON_ARRIVAL">Monter valgt volum når dets vertsenhet blir &amp;tilkoblet</entry>
<entry lang="nb" key="IDC_FAVORITE_MOUNT_ON_LOGON">Monter valgt volum ved pålog&amp;ning</entry>
<entry lang="nb" key="IDC_FAVORITE_MOUNT_ON_LOGON">Monter valgt volum ved påloggi&amp;ng</entry>
<entry lang="nb" key="IDC_FAVORITE_MOUNT_READONLY">Monter valgt volum som skrivebeskytt&amp;et</entry>
<entry lang="nb" key="IDC_FAVORITE_MOUNT_REMOVABLE">Monter valgt volum som fjern&amp;bart medium</entry>
<entry lang="nb" key="IDC_FAVORITE_MOVE_DOWN">Flytt &amp;ned</entry>
@@ -135,8 +135,8 @@
<entry lang="nb" key="IDC_FAVORITE_REMOVE">&amp;Fjern</entry>
<entry lang="nb" key="IDC_FAVORITE_USE_LABEL_IN_EXPLORER">Bruk favorittetiketten som stasjonsetikett i Filutforsker</entry>
<entry lang="nb" key="IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX">Globale innstillinger</entry>
<entry lang="nb" key="IDC_HK_UNMOUNT_BALLOON_TOOLTIP">Vis ballongtips etter vellykket hurtigtast-demontering</entry>
<entry lang="nb" key="IDC_HK_UNMOUNT_PLAY_SOUND">Spill systemvarsellyd etter vellykket hurtigtast-demontering</entry>
<entry lang="nb" key="IDC_HK_UNMOUNT_BALLOON_TOOLTIP">Vis ballongtips etter vellykket demontering med hurtigtast</entry>
<entry lang="nb" key="IDC_HK_UNMOUNT_PLAY_SOUND">Spill systemvarsellyd etter vellykket demontering med hurtigtast</entry>
<entry lang="nb" key="IDC_HK_MOD_ALT">Alt</entry>
<entry lang="nb" key="IDC_HK_MOD_CTRL">Ctrl</entry>
<entry lang="nb" key="IDC_HK_MOD_SHIFT">Skift</entry>
@@ -174,19 +174,19 @@
<entry lang="nb" key="IDC_PRESERVE_TIMESTAMPS">Behold endringsdato på filbeholdere</entry>
<entry lang="nb" key="IDC_RESET_HOTKEYS">Nullstill</entry>
<entry lang="nb" key="IDC_SELECT_DEVICE">Velg en&amp;het...</entry>
<entry lang="nb" key="IDC_SELECT_FILE">Velg &amp;Fil...</entry>
<entry lang="nb" key="IDC_SELECT_PKCS11_MODULE">Velg &amp;Bibliotek...</entry>
<entry lang="nb" key="IDC_SELECT_FILE">Velg &amp;fil...</entry>
<entry lang="nb" key="IDC_SELECT_PKCS11_MODULE">Velg &amp;bibliotek...</entry>
<entry lang="nb" key="IDC_SHOW_PASSWORD_CHPWD_NEW">Vis passord</entry>
<entry lang="nb" key="IDC_SHOW_PASSWORD_CHPWD_ORI">Vis passord</entry>
<entry lang="nb" key="IDC_TRAVEL_OPEN_EXPLORER">Åpne &amp;Filutforsker-vindu for montert volum</entry>
<entry lang="nb" key="IDC_TRAV_CACHE_PASSWORDS">&amp;Mellomlagre passord i driverminne</entry>
<entry lang="nb" key="IDC_TRUECRYPT_MODE">&amp;TrueCrypt-modus</entry>
<entry lang="nb" key="IDC_UNMOUNTALL">Demonter &amp;Alle</entry>
<entry lang="nb" key="IDC_UNMOUNTALL">Demonter &amp;alle</entry>
<entry lang="nb" key="IDC_VOLUME_PROPERTIES">&amp;Volumegenskaper...</entry>
<entry lang="nb" key="IDC_VOLUME_TOOLS">&amp;Volumverktøy...</entry>
<entry lang="nb" key="IDC_WIPE_CACHE">&amp;Slett mellomlager</entry>
<entry lang="nb" key="IDD_DEFAULT_MOUNT_PARAMETERS">VeraCrypt monteringsparametere</entry>
<entry lang="nb" key="IDD_FAVORITE_VOLUMES">VeraCrypt favorittvolum</entry>
<entry lang="nb" key="IDD_FAVORITE_VOLUMES">VeraCrypt favorittvolumer</entry>
<entry lang="nb" key="IDD_HOTKEYS_DLG">VeraCrypt systemdekkende hurtigtaster</entry>
<entry lang="nb" key="IDD_MOUNT_DLG">VeraCrypt</entry>
<entry lang="nb" key="IDD_PASSWORDCHANGE_DLG">Endre passord eller nøkkelfiler</entry>
@@ -195,7 +195,7 @@
<entry lang="nb" key="IDD_PREFERENCES_DLG">VeraCrypt preferanser</entry>
<entry lang="nb" key="IDD_SYSENC_SETTINGS">VeraCrypt systemkrypteringsinnstillinger</entry>
<entry lang="nb" key="IDD_TOKEN_PREFERENCES">VeraCrypt preferanser for sikkerhetstoken</entry>
<entry lang="nb" key="IDD_TRAVELER_DLG">Oppsett for VeraCrypt reisedisk</entry>
<entry lang="nb" key="IDD_TRAVELER_DLG">Oppsett for VeraCrypt-reisedisk</entry>
<entry lang="nb" key="IDD_VOLUME_PROPERTIES">Egenskaper for VeraCrypt-volum</entry>
<entry lang="nb" key="IDM_ABOUT">Om</entry>
<entry lang="nb" key="IDM_ADD_REMOVE_VOL_KEYFILES">Legg til / fjern nøkkelfiler fra volum...</entry>
@@ -302,13 +302,13 @@
<entry lang="nb" key="IDT_TRAVEL_ROOT">Opprett reisediskfiler i (rotmappen til reisedisken):</entry>
<entry lang="nb" key="IDT_VOLUME">Volum</entry>
<entry lang="nb" key="IDT_WINDOWS_RELATED_SETTING">Windows</entry>
<entry lang="nb" key="IDC_ADD_KEYFILE_PATH">Legg til &amp;Sti...</entry>
<entry lang="nb" key="IDC_ADD_KEYFILE_PATH">Legg til &amp;sti...</entry>
<entry lang="nb" key="IDC_AUTO">&amp;Autotest alle</entry>
<entry lang="nb" key="IDC_CONTINUE">&amp;Fortsett</entry>
<entry lang="nb" key="IDC_DECRYPT">&amp;Dekrypter</entry>
<entry lang="nb" key="IDC_DELETE">&amp;Slett</entry>
<entry lang="nb" key="IDC_ENCRYPT">&amp;Krypter</entry>
<entry lang="nb" key="IDC_EXPORT">&amp;Eksport...</entry>
<entry lang="nb" key="IDC_EXPORT">&amp;Eksporter...</entry>
<entry lang="nb" key="IDC_GENERATE_AND_SAVE_KEYFILE">Generer og lagre nøkkelfil...</entry>
<entry lang="nb" key="IDC_GENERATE_KEYFILE">&amp;Generer tilfeldig nøkkelfil...</entry>
<entry lang="nb" key="IDC_GET_LANG_PACKS">Last ned språkpakke</entry>
@@ -428,7 +428,7 @@
<entry lang="nb" key="DEVICE_IN_USE_INFO">ADVARSEL: Noen av de monterte enhetene/partisjonene var allerede i bruk!\n\nÅ ignorere dette kan føre til uønskede resultater inkludert systemustabilitet.\n\nVi anbefaler sterkt at du lukker eventuelle programmer som kan bruke enhetene/partisjonene.</entry>
<entry lang="nb" key="DEVICE_PARTITIONS_ERR">Den valgte enheten inneholder partisjoner.\n\nFormatering av enheten kan føre til systemustabilitet og/eller datakorrupsjon. Velg en partisjon på enheten, eller fjern alle partisjoner på enheten for å la VeraCrypt formatere den sikkert.</entry>
<entry lang="nb" key="DEVICE_PARTITIONS_ERR_W_INPLACE_ENC_NOTE">Den valgte ikke-systemenheten inneholder partisjoner.\n\nKrypterte enhetsbaserte VeraCrypt-volum kan opprettes innenfor enheter som ikke inneholder noen partisjoner (inkludert harddisker og SSD-er). En enhet som inneholder partisjoner kan krypteres helt på plass (ved hjelp av en enkelt hovednøkkel) bare hvis det er disken der Windows er installert og hvorfra den starter.\n\nHvis du vil kryptere den valgte ikke-systemenheten ved hjelp av en enkel hovednøkkel, må du fjerne alle partisjoner på enheten først for å la VeraCrypt formatere den sikkert (formatering av en enhet som inneholder partisjoner kan føre til systemustabilitet og/eller datakorrupsjon). Alternativt kan du kryptere hver partisjon på disken individuelt (hver partisjon vil bli kryptert ved hjelp av en annen hovednøkkel).\n\nMerk: Hvis du vil fjerne alle partisjoner fra en GPT-disk, kan det hende du må konvertere den til en MBR-disk (ved bruk av f.eks. 'Datamaskinhåndtering'-verktøyet) for å fjerne skjulte partisjoner.</entry>
<entry lang="nb" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">Advarsel: Hvis du krypterer hele enheten (i motsetning til å kryptere bare en partisjon på den), vil operativsystemer betrakte enheten som ny, tom og uformatert (den vil ikke inneholde en partisjonstabell) og kan spontant initialisere enheten (eller spørre deg om du vil gjøre det), som kan skade volumet. Videre vil det ikke være mulig å montere volumet konsekvent som favoritt (f.eks. når drivenummeret endres) eller å tilordne en favorittvolumetikett til den.\n\nFor å unngå dette kan du vurdere å opprette en partisjon på enheten og kryptere partisjonen i stedet.\n\nEr du sikker på at du vil kryptere hele enheten?</entry>
<entry lang="nb" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">Advarsel: Hvis du krypterer hele enheten (i motsetning til å kryptere bare en partisjon på den), vil operativsystemer betrakte enheten som ny, tom og uformatert (den vil ikke inneholde en partisjonstabell) og kan spontant initialisere enheten (eller spørre deg om du vil gjøre det), som kan skade volumet. Videre vil det ikke være mulig å montere volumet konsekvent som favoritt (f.eks. når enhetsnummeret endres) eller å tilordne en favorittvolumetikett til den.\n\nFor å unngå dette kan du vurdere å opprette en partisjon på enheten og kryptere partisjonen i stedet.\n\nEr du sikker på at du vil kryptere hele enheten?</entry>
<entry lang="nb" key="AFTER_FORMAT_DRIVE_LETTER_WARN">VIKTIG: Vennligst husk at dette volumet IKKE kan monteres/tilgås ved å bruke stasjonsbokstaven %c:, som foreløpig er tildelt det!\n\nFor å montere dette volumet, klikk 'Automonter Enheter' i hovedvinduet til VeraCrypt (alternativt klikker du 'Velg Enhet' i hovedvinduet til VeraCrypt, velger denne partisjonen/enheten, og klikker 'Monter'). Volumet vil bli montert til en annen stasjonsbokstav, som du velger fra listen i hovedvinduet til VeraCrypt.\n\nDen opprinnelige stasjonsbokstaven %c: bør bare brukes i tilfelle du må fjerne krypteringen fra partisjonen/enheten (f.eks. hvis du ikke lenger trenger kryptering). I et slikt tilfelle, høyreklikk stasjonsbokstaven %c: i 'Datamaskin' (eller 'Min datamaskin')-listen og velg 'Formater'. Ellers bør stasjonsbokstaven %c: aldri brukes (med mindre du fjerner den, som beskrevet f.eks. i VeraCrypt FAQ, og tildeler den en annen partisjon/enhet).</entry>
<entry lang="nb" key="OS_NOT_SUPPORTED_FOR_NONSYS_INPLACE_ENC">På-plass-kryptering av ikke-systemvolum støttes ikke på versjonen av operativsystemet du bruker (det støttes bare på Windows Vista og senere versjoner av Windows).\n\nÅrsaken er at denne versjonen av Windows ikke støtter krymping av et filsystem (filsystemet må krympes for å gi plass til volummetadata og sikkerhetskopedata for volum).</entry>
<entry lang="nb" key="ONLY_NTFS_SUPPORTED_FOR_NONSYS_INPLACE_ENC">Den valgte partisjonen ser ikke ut til å inneholde et NTFS-filsystem. Bare partisjoner som inneholder et NTFS-filsystem kan krypteres på plass.\n\nMerk: Årsaken er at Windows ikke støtter krymping av andre typer filsystemer (filsystemet må krympes for å gi plass til volummetadata og sikkerhetskopidata for volum).</entry>
@@ -567,7 +567,7 @@
<entry lang="nb" key="MAX_HIDVOL_SIZE_GB">Maksimal mulig størrelse på skjult volum for dette volumet er %.2f GiB.</entry>
<entry lang="nb" key="MAX_HIDVOL_SIZE_TB">Maksimal mulig størrelse på skjult volum for dette volumet er %.2f TiB.</entry>
<entry lang="nb" key="MOUNTED_NOPWCHANGE">Volumpassord/nøkkelfiler kan ikke endres mens volumet er montert. Vennligst demonter volumet først.</entry>
<entry lang="nb" key="MOUNTED_NO_PKCS5_PRF_CHANGE">Hodenøkkel avledningsalgoritmen kan ikke endres mens volumet er montert. Vennligst demonter volumet først.</entry>
<entry lang="nb" key="MOUNTED_NO_PKCS5_PRF_CHANGE">Avledningsalgoritmen for hodenøkkelen kan ikke endres mens volumet er montert. Vennligst demonter volumet først.</entry>
<entry lang="nb" key="MOUNT_BUTTON">&amp;Monter</entry>
<entry lang="nb" key="NEW_VERSION_REQUIRED">En nyere versjon av VeraCrypt er nødvendig for å montere dette volumet.</entry>
<entry lang="nb" key="VOL_CREATION_WIZARD_NOT_FOUND">Feil: Klarte ikke å finne veiviser for volumopprettelse.\n\nVennligst forsikre deg om at filen 'VeraCrypt Format.exe' befinner seg i mappen der hovedapplikasjonen VeraCrypt (VeraCrypt.exe) er plassert. Hvis den ikke er det, vennligst reinstaller VeraCrypt, eller lokaliser 'VeraCrypt Format.exe' på disken og kjør den.</entry>
@@ -609,14 +609,14 @@
<entry lang="nb" key="IDD_PCDM_CHANGE_PKCS5_PRF">Angi hodenøkkel avledningsalgoritme</entry>
<entry lang="nb" key="IDD_PCDM_ADD_REMOVE_VOL_KEYFILES">Legg til/Fjern nøkkelfiler fra Volum</entry>
<entry lang="nb" key="IDD_PCDM_REMOVE_ALL_KEYFILES_FROM_VOL">Fjern alle nøkkelfiler fra volum</entry>
<entry lang="nb" key="PASSWORD_CHANGED">Passord, PIM og/eller nøkkelfil(er) er endret med suksess.\n\nVIKTIG: Vennligst sørg for at du har lest seksjonen 'Endring av Passord og Nøkkelfiler' i kapitlet 'Sikkerhetskrav og Forholdsregler' i VeraCrypt Brukerveiledning.</entry>
<entry lang="nb" key="PASSWORD_CHANGED">Passord, PIM og/eller nøkkelfil(er) er endret.\n\nVIKTIG: Vennligst sørg for at du har lest seksjonen 'Endring av passord og nøkkelfiler' i kapitlet 'Sikkerhetskrav og forholdsregler' i VeraCrypt-brukerveiledningen.</entry>
<entry lang="nb" key="FAVORITE_PIM_CHANGED">Dette volumet er registrert som et System Favoritt og dets PIM ble endret.\nVil du at VeraCrypt automatisk oppdaterer System Favoritt-konfigurasjonen (administratorrettigheter nødvendig)?\n\nVennligst merk at hvis du svarer nei, må du oppdatere System Favoritten manuelt.</entry>
<entry lang="nb" key="SYS_PASSWORD_CHANGED_ASK_RESCUE_DISK">VIKTIG: Hvis du ikke har ødelagt VeraCrypt Redningsdisken din, kan systempartisjonen/disken fremdeles dekrypteres ved hjelp av det gamle passordet (ved å starte VeraCrypt Redningsdisk og skrive inn det gamle passordet). Du bør opprette en ny VeraCrypt Redningsdisk og deretter ødelegge den gamle.\n\nVil du opprette en ny VeraCrypt Redningsdisk?</entry>
<entry lang="nb" key="SYS_HKD_ALGO_CHANGED_ASK_RESCUE_DISK">Merk at VeraCrypt Redningsdisk fortsatt bruker den forrige algoritmen. Hvis du anser den forrige algoritmen som usikker, bør du opprette en ny VeraCrypt Redningsdisk og deretter ødelegge den gamle.\n\nVil du opprette en ny VeraCrypt Redningsdisk?</entry>
<entry lang="nb" key="KEYFILES_NOTE">Merk at VeraCrypt aldri endrer nøkkelfilinnholdet. Du kan velge mer enn en nøkkelfil (rekkefølgen spiller ingen rolle). Hvis du legger til en mappe, vil alle ikke-skjulte filer som finnes i den bli brukt som nøkkelfiler. Klikk 'Legg til Tokenfiler' for å velge nøkkelfiler lagret på sikkerhetstokens eller smartkort (eller for å importere nøkkelfiler til sikkerhetstokens eller smartkort).</entry>
<entry lang="nb" key="KEYFILE_CHANGED">Nøkkelfil(er) er lagt til/fjernet med suksess.</entry>
<entry lang="nb" key="KEYFILE_EXPORTED">Nøkkelfil er eksportert.</entry>
<entry lang="nb" key="PKCS5_PRF_CHANGED">Hodenøkkel avledningsalgoritmen er satt med suksess.</entry>
<entry lang="nb" key="KEYFILE_CHANGED">Nøkkelfil(er) er lagt til/fjernet.</entry>
<entry lang="nb" key="KEYFILE_EXPORTED">Nøkkelfilen er eksportert.</entry>
<entry lang="nb" key="PKCS5_PRF_CHANGED">Avledningsalgoritmen for hodenøkkelen er endret.</entry>
<entry lang="nb" key="NONSYS_INPLACE_ENC_RESUME_PASSWORD_PAGE_HELP">Vennligst skriv inn passordet og/eller nøkkelfil(er) for det ikke-systemvolumet hvor du ønsker å gjenoppta prosessen med kryptering/dekryptering på plass.\n\nMerknad: Etter at du klikker Neste, vil VeraCrypt forsøke å finne alle ikke-systemvolumer der krypteringen/dekrypteringen har blitt avbrutt og der VeraCrypt volummeta-data kunne dekodes ved bruk av de oppgitte passordet og/eller nøkkelfilene. Hvis mer enn ett volum finnes, vil du måtte velge ett av dem i neste trinn.</entry>
<entry lang="nb" key="NONSYS_INPLACE_ENC_RESUME_VOL_SELECT_HELP">Vennligst velg ett av de oppførte volumene. Listen inneholder hvert tilgjengelige ikke-systemvolum hvor krypterings-/dekrypteringsprosessen har blitt avbrutt og hvor volummeta-dataen ble vellykket dekodet ved bruk av det oppgitte passordet og/eller nøkkelfilene.</entry>
<entry lang="nb" key="NONSYS_INPLACE_DEC_PASSWORD_PAGE_HELP">Vennligst skriv inn passordet og/eller nøkkelfil(er) for det ikke-system VeraCrypt volumet du ønsker å dekryptere.</entry>
@@ -631,7 +631,7 @@
<entry lang="nb" key="PASSWORD_HIDVOL_TITLE">Passord til skjult volum</entry>
<entry lang="nb" key="PASSWORD_HIDDEN_OS_TITLE">Passord for skjult operativsystem</entry>
<entry lang="nb" key="PASSWORD_LENGTH_WARNING">ADVARSEL: Korte passord er lette å knekke ved bruk av brute force-teknikker!\n\nVi anbefaler å velge et passord som består av 20 eller flere tegn. Er du sikker på at du vil bruke et kort passord?</entry>
<entry lang="nb" key="PASSWORD_TITLE">Volum passord</entry>
<entry lang="nb" key="PASSWORD_TITLE">Volumpassord</entry>
<entry lang="nb" key="PASSWORD_WRONG">Operasjonen mislyktes på grunn av en eller flere av følgende:\n - Feil passord.\n - Feil Volum PIM nummer.\n - Feil PRF (hash).\n - Ikke et gyldig volum.</entry>
<entry lang="nb" key="PASSWORD_OR_KEYFILE_WRONG">Operasjonen mislyktes på grunn av en eller flere av følgende:\n - Feil nøkkelfil(er).\n - Feil passord.\n - Feil Volum PIM nummer.\n - Feil PRF (hash).\n - Ikke et gyldig volum.</entry>
<entry lang="nb" key="PASSWORD_OR_MODE_WRONG">Operasjonen mislyktes på grunn av en eller flere av følgende:\n - Feil monteringsmodus.\n - Feil passord.\n - Feil Volum PIM nummer.\n - Feil PRF (hash).\n - Ikke et gyldig volum.</entry>
@@ -649,7 +649,7 @@
<entry lang="nb" key="PIM_LARGE_WARNING">Du har valgt en PIM-verdi som er større enn VeraCrypt standardverdi.\nVennligst merk at dette vil føre til mye langsommere montering/oppstart.</entry>
<entry lang="nb" key="PIM_SMALL_WARNING">Du har valgt en PIM (Personal Iterations Multiplier) som er mindre enn den standard VeraCrypt verdien. Vennligst merk at hvis passordet ditt ikke er sterkt nok, kan dette føre til redusert sikkerhet.\n\nBekrefter du at du bruker et sterkt passord?</entry>
<entry lang="nb" key="PIM_SYSENC_TOO_BIG">Maksimalverdi for PIM (Personal Iterations Multiplier) for systemkryptering er 65535.</entry>
<entry lang="nb" key="PIM_TITLE">Volum PIM</entry>
<entry lang="nb" key="PIM_TITLE">Volum-PIM</entry>
<entry lang="nb" key="HIDDEN_FILES_PRESENT_IN_KEYFILE_PATH">\n\nADVARSEL: Skjulte filer har blitt funnet i en nøkkelfilsøkesti. Slike skjulte filer kan ikke brukes som nøkkelfiler. Hvis du trenger å bruke dem som nøkkelfiler, fjern deres 'Skjult'-attributt (høyreklikk hver av dem, velg 'Egenskaper', fjern 'Skjult' og klikk OK). Merk: Skjulte filer er synlige bare hvis det tilsvarende alternativet er aktivert (Datamaskin > Organiser > 'Mappe- og søkealternativer' > Visning).</entry>
<entry lang="nb" key="HIDDEN_VOL_PROT_PASSWORD_US_KEYB_LAYOUT">Hvis du forsøker å beskytte et skjult volum som inneholder et skjult system, vennligst sørg for at du bruker det standard amerikanske tastaturoppsettet når du skriver inn passordet for det skjulte volumet. Dette kreves på grunn av at passordet må tastes inn i pre-boot-miljøet (før Windows starter) der ikke-amerikanske tastaturoppsett ikke er tilgjengelige.</entry>
<entry lang="nb" key="FOUND_NO_PARTITION_W_DEFERRED_INPLACE_ENC">VeraCrypt har ikke funnet noe volum hvor prosessen med kryptering/dekryptering på plass har blitt avbrutt og hvor volummeta-data kunne dekodes ved bruk av det oppgitte passordet og/eller nøkkelfiler.\n\nVennligst forsikre deg om at passordet og/eller nøkkelfilene er korrekte og at partisjonen/volumet ikke brukes av systemet eller applikasjoner (inkludert antivirusprogramvare).</entry>
@@ -688,8 +688,8 @@
<entry lang="nb" key="TWO_LAYER_CASCADE_HELP">To chiffer i en kaskade som opererer i XTS-modus. Hver blokk er først kryptert med %s (%d-bit nøkkel) og deretter med %s (%d- bit nøkkel). Hvert chiffer bruker sin egen nøkkel. Alle nøkler er gjensidig uavhengige.</entry>
<entry lang="nb" key="THREE_LAYER_CASCADE_HELP">Tre chiffer i en kaskade som opererer i XTS-modus. Hver blokk er først kryptert med %s (%d-bit nøkkel), deretter med %s (%d-bit nøkkel), og til slutt med %s (%d-bit nøkkel). Hvert chiffer bruker sin egen nøkkel. Alle nøkler er gjensidig uavhengige.</entry>
<entry lang="nb" key="AUTORUN_MAY_NOT_ALWAYS_WORK">Merk at, avhengig av operativsystemets konfigurasjon, kan disse autokjør- og automonteringsfunksjonene bare virke når reisediskfilene er opprettet på et ikke-skrivbart CD/DVD-lignende medium. Vær oppmerksom på at dette ikke er en feil i VeraCrypt (det er en begrensning i Windows).</entry>
<entry lang="nb" key="TRAVELER_DISK_CREATED">VeraCrypt reisedisk har blitt opprettet.\n\nMerk at du trenger administratortillatelser for å kjøre VeraCrypt i bærbar modus. Vær også oppmerksom på at, etter å ha undersøkt registerfilen, kan det være mulig å fastslå at VeraCrypt ble kjørt på et Windows-system selv om det kjøres i bærbar modus.</entry>
<entry lang="nb" key="TC_TRAVELER_DISK">VeraCrypt reisedisk</entry>
<entry lang="nb" key="TRAVELER_DISK_CREATED">VeraCrypt-reisedisken er opprettet.\n\nMerk at du trenger administratortillatelser for å kjøre VeraCrypt i bærbar modus. Vær også oppmerksom på at det, etter å ha undersøkt registerfilen, kan være mulig å fastslå at VeraCrypt ble kjørt på et Windows-system selv om det kjøres i bærbar modus.</entry>
<entry lang="nb" key="TC_TRAVELER_DISK">VeraCrypt-reisedisk</entry>
<entry lang="nb" key="TWOFISH_HELP">Designet av Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall og Niels Ferguson. Publisert i 1998. 256-bit nøkkel, 128-bit blokk. Operasjonsmodus er XTS. Twofish var en av AES-finalistene.</entry>
<entry lang="nb" key="MORE_INFO_ABOUT">Mer informasjon om %s</entry>
<entry lang="nb" key="UNKNOWN">Ukjent</entry>
@@ -838,7 +838,7 @@
<entry lang="nb" key="SETUP_FINISHED_TITLE_DON">VeraCrypt har blitt installert</entry>
<entry lang="nb" key="SETUP_FINISHED_UPGRADE_TITLE_DON">VeraCrypt har blitt oppgradert</entry>
<entry lang="nb" key="SETUP_FINISHED_INFO_DON">Vennligst vurdér å gi en donasjon. Du kan klikke Fullfør når som helst for å lukke installasjonsprogrammet.</entry>
<entry lang="nb" key="EXTRACTION_OPTIONS_TITLE">Pakk ut alternativer</entry>
<entry lang="nb" key="EXTRACTION_OPTIONS_TITLE">Alternativer for utpakking</entry>
<entry lang="nb" key="EXTRACTION_OPTIONS_INFO">Her kan du sette forskjellige alternativer for å kontrollere utpakkingsprosessen.</entry>
<entry lang="nb" key="EXTRACTION_PROGRESS_INFO">Vennligst vent mens filene blir pakket ut.</entry>
<entry lang="nb" key="EXTRACTION_FINISHED_TITLE_DON">Filer pakket ut</entry>
@@ -862,11 +862,11 @@
<entry lang="nb" key="CANT_VERIFY_PACKAGE_INTEGRITY">Kan ikke verifisere integriteten av denne distribusjonspakken.</entry>
<entry lang="nb" key="EXTRACTION_FAILED">Utpakking feilet.</entry>
<entry lang="nb" key="ROLLBACK">Installeringen har blitt rullet tilbake.</entry>
<entry lang="nb" key="INSTALL_OK">VeraCrypt har blitt installert.</entry>
<entry lang="nb" key="SETUP_UPDATE_OK">VeraCrypt har blitt oppdatert.</entry>
<entry lang="nb" key="UPGRADE_OK_REBOOT_REQUIRED">VeraCrypt har blitt oppgradert med suksess. Men før du kan begynne å bruke det, må datamaskinen startes på nytt.\n\nVil du starte den på nytt nå?</entry>
<entry lang="nb" key="INSTALL_OK">VeraCrypt er installert.</entry>
<entry lang="nb" key="SETUP_UPDATE_OK">VeraCrypt er oppdatert.</entry>
<entry lang="nb" key="UPGRADE_OK_REBOOT_REQUIRED">VeraCrypt er oppgradert. Før du kan begynne å bruke det, må datamaskinen startes på nytt.\n\nVil du starte den på nytt nå?</entry>
<entry lang="nb" key="SYS_ENC_UPGRADE_FAILED">Oppgradering av VeraCrypt mislyktes!\n\nVIKTIG: Før du slår av eller starter systemet på nytt, anbefaler vi sterkt at du bruker Systemgjenoppretting (Start-menyen > Alle programmer > Tilbehør > Systemverktøy > Systemgjenoppretting) for å gjenopprette systemet til gjenopprettingspunktet med navnet 'VeraCrypt-installering'. Hvis Systemgjenoppretting ikke er tilgjengelig, bør du prøve å installere den opprinnelige eller den nye versjonen av VeraCrypt igjen før du slår av eller starter systemet på nytt.</entry>
<entry lang="nb" key="UNINSTALL_OK">VeraCrypt har blitt avinstallert.\n\nKlikk 'Fullfør' for å fjerne VeraCrypt installasjonsprogrammet og mappen %s. Merk at mappen ikke vil bli fjernet hvis den inneholder filer som ikke ble installert av VeraCrypt installasjonsprogrammet eller opprettet av VeraCrypt.</entry>
<entry lang="nb" key="UNINSTALL_OK">VeraCrypt er avinstallert.\n\nKlikk 'Fullfør' for å fjerne VeraCrypt-installasjonsprogrammet og mappen %s. Merk at mappen ikke vil bli fjernet hvis den inneholder filer som ikke ble installert av VeraCrypt-installasjonsprogrammet eller opprettet av VeraCrypt.</entry>
<entry lang="nb" key="REMOVING_REG">Fjerner VeraCrypt registeroppføringer.</entry>
<entry lang="nb" key="ADDING_REG">Legger til registeroppføring.</entry>
<entry lang="nb" key="REMOVING_APPDATA">Fjern applikasjonsspesifikke data.</entry>
@@ -938,15 +938,15 @@
<entry lang="nb" key="ENTER_NORMAL_VOL_PASSWORD">Skriv inn passord for det normale/ytre volumet</entry>
<entry lang="nb" key="ENTER_HIDDEN_VOL_PASSWORD">Skriv inn passord for det skjulte volumet</entry>
<entry lang="nb" key="ENTER_HEADER_BACKUP_PASSWORD">Skriv inn passord for hodet lagret i sikkerhetskopifil</entry>
<entry lang="nb" key="KEYFILE_CREATED">Nøkkelfiler har blitt opprettet med suksess.</entry>
<entry lang="nb" key="KEYFILE_CREATED">Nøkkelfilene er opprettet.</entry>
<entry lang="nb" key="KEYFILE_INCORRECT_NUMBER">Antall nøkkelfiler du har oppgitt er ugyldig.</entry>
<entry lang="nb" key="KEYFILE_INCORRECT_SIZE">Nøkkelfilstørrelsen må være minst 64 byte.</entry>
<entry lang="nb" key="KEYFILE_EMPTY_BASE_NAME">Vennligst skriv inn et navn for nøkkelfilene som skal genereres</entry>
<entry lang="nb" key="KEYFILE_INVALID_BASE_NAME">Basisnavnet på nøkkelfilene er ugyldig</entry>
<entry lang="nb" key="KEYFILE_ALREADY_EXISTS">Nøkkelfilen '%s' eksisterer allerede.\nVil du overskrive den? Genereringsprosessen vil stoppes hvis du svarer Nei.</entry>
<entry lang="nb" key="HEADER_DAMAGED_AUTO_USED_HEADER_BAK">ADVARSEL: Hodet til dette volumet er skadet! VeraCrypt brukte automatisk sikkerhetskopien av volumhodet innebygd i volumet.\n\nDu bør reparere volumhodet ved å velge 'Verktøy' > 'Gjenopprett volumhodet'.</entry>
<entry lang="nb" key="VOL_HEADER_BACKED_UP">Volumhodet har blitt sikkerhetskopiert med suksess.\n\nVIKTIG: Å gjenopprette volumhodet ved bruk av denne sikkerhetskopifilen vil også gjenopprette gjeldende volumpassord. Dessuten, hvis nøkkelfil(er) er nødvendig for å montere volumet, vil de samme nøkkelfilene være nødvendige for å montere volumet igjen etter at volumhodet er gjenopprettet.\n\nADVARSEL: Denne sikkerhetskopien av volumhode kan bare brukes til å gjenopprette hodet til dette bestemte volumet. Hvis du bruker denne sikkerhetskopien av hodet for å gjenopprette hodet til et annet volum, vil du kunne montere volumet, men du vil IKKE kunne dekryptere noen data lagret i volumet (fordi du vil endre hovednøkkelen).</entry>
<entry lang="nb" key="VOL_HEADER_RESTORED">Volumhodet har blitt gjenopprettet med suksess.\n\nVIKTIG: Vennligst merk at et gammelt passord også kan ha blitt gjenopprettet. Dessuten, hvis nøkkelfil(er) var nødvendig for å montere volumet da sikkerhetskopien ble opprettet, vil de samme nøkkelfilene nå være nødvendige for å montere volumet igjen.</entry>
<entry lang="nb" key="VOL_HEADER_BACKED_UP">Volumhodet er sikkerhetskopiert.\n\nVIKTIG: Å gjenopprette volumhodet ved bruk av denne sikkerhetskopifilen vil også gjenopprette gjeldende volumpassord. Dessuten, hvis nøkkelfil(er) er nødvendig for å montere volumet, vil de samme nøkkelfilene være nødvendige for å montere volumet igjen etter at volumhodet er gjenopprettet.\n\nADVARSEL: Denne sikkerhetskopien av volumhodet kan bare brukes til å gjenopprette hodet til dette bestemte volumet. Hvis du bruker denne sikkerhetskopien for å gjenopprette hodet til et annet volum, vil du kunne montere volumet, men du vil IKKE kunne dekryptere data lagret i volumet (fordi du vil endre hovednøkkelen).</entry>
<entry lang="nb" key="VOL_HEADER_RESTORED">Volumhodet er gjenopprettet.\n\nVIKTIG: Vennligst merk at et gammelt passord også kan ha blitt gjenopprettet. Dessuten, hvis nøkkelfil(er) var nødvendig for å montere volumet da sikkerhetskopien ble opprettet, vil de samme nøkkelfilene nå være nødvendige for å montere volumet igjen.</entry>
<entry lang="nb" key="EXTERNAL_VOL_HEADER_BAK_FIRST_INFO">For sikkerhetsårsaker, må du skrive inn riktig passord (og/eller oppgi riktige nøkkelfiler) for volumet.\n\nMerk: Hvis volumet inneholder et skjult volum, må du først oppgi riktig passord (og/eller oppgi riktige nøkkelfiler) for det ytre volumet. Deretter, hvis du velger å sikkerhetskopiere hodet til det skjulte volumet, må du skrive inn riktig passord (og/eller oppgi riktige nøkkelfiler) for det skjulte volumet.</entry>
<entry lang="nb" key="CONFIRM_VOL_HEADER_BAK">Er du sikker på at du vil opprette sikkerhetskopi av volumhodet til %s?\n\nEtter å ha klikket Ja vil du bli bedt om å oppgi et filnavn for sikkerhetskopien av hodet.\n\nMerk: Både standard- og skjulte volumhoder vil bli kryptert med nytt salt og lagret i sikkerhetskopifilen. Hvis det ikke er noe skjult volum innenfor dette volumet, vil området reservert for det skjulte volumhodet i sikkerhetskopifilen bli fylt med tilfeldige data (for å beholde troverdig benektelse). Når du gjenoppretter volumhodet fra sikkerhetskopifilen, må du oppgi riktig passord (og/eller riktige nøkkelfiler) som var gyldig da sikkerhetskopien av volumhodet ble opprettet. Passordet (og/eller nøkkelfilene) vil også automatisk bestemme hvilken type volumhode som skal gjenopprettes, dvs. standard eller skjult (merk at VeraCrypt bestemmer typen gjennom prosessen med prøv-og-feil).</entry>
<entry lang="nb" key="CONFIRM_VOL_HEADER_RESTORE">Er du sikker på at du vil gjenopprette volumhodet til %s?\n\nADVARSEL: Å gjenopprette en volumhodet gjenoppretter også volumpassordet som var gyldig da sikkerhetskopien ble opprettet. Dessuten, hvis nøkkelfil(er) var nødvendig for å montere volumet da sikkerhetskopien ble opprettet, vil de samme nøkkelfilene være nødvendige for å montere volumet igjen etter at volumhodet er gjenopprettet.\n\nEtter å ha klikket Ja vil du velge sikkerhetskopifilen for hodet.</entry>
@@ -964,9 +964,9 @@
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CREATION_BURN">Redningsdisk-avbildningen har blitt opprettet og lagret i denne filen:\n%s\n\nNå må du brenne Redningsdisk-avbildningen til en CD eller DVD.\n\nVIKTIG: Merk at filen må brennes til CD/DVD som en ISO-diskavbildning (ikke som en individuell fil). For informasjon om hvordan du gjør dette, vennligst se dokumentasjonen til CD/DVD-brenningsprogramvaren din.\n\nEtter at du har brent Redningsdisken, velger du 'System' > 'Verifiser Redningsdisk' for å sikre at den har blitt brent riktig.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CREATION_WIN_ISOBURN">Redningsdisk-avbildningen har blitt opprettet og lagret i denne filen:\n%s\n\nNå må du brenne Redningsdisk-avbildningen til en CD eller DVD.\n\nVil du starte Microsoft Windows Disc Image Burner nå?\n\nMerk: Etter at du har brent Redningsdisken, velger du 'System' > 'Verifiser Redningsdisk' for å sikre at den har blitt brent riktig.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CHECK_INSERT">Vennligst sett inn din VeraCrypt Redningsdisk og klikk OK for å verifisere den.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CHECK_PASSED">VeraCrypt Redningsdisk har blitt verifisert med suksess.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CHECK_FAILED">Kunne ikke verifisere at Redningsdisken har blitt brent riktig.\n\nHvis du har brent Redningsdisken, vennligst fjern og sett inn CD/DVD på nytt og prøv igjen. Hvis dette ikke hjelper, vennligst prøv annen CD/DVD-brenningsprogramvare og/eller medium.\n\nHvis du forsøkte å verifisere en VeraCrypt Redningsdisk opprettet for en annen master nøkkel, passord, salt, osv., vil en slik Redningsdisk alltid mislykkes i denne verifiseringen. For å opprette en ny Redningsdisk som er fullt kompatibel med din nåværende konfigurasjon, velg 'System' > 'Opprett Redningsdisk'.</entry>
<entry lang="nb" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">VeraCrypt Redningsdisk avbildning har blitt verifisert med suksess.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CHECK_PASSED">VeraCrypt-redningsdisken er verifisert.</entry>
<entry lang="nb" key="RESCUE_DISK_NON_WIZARD_CHECK_FAILED">Kunne ikke verifisere at redningsdisken er korrekt brent.\n\nHvis du har brent redningsdisken, vennligst fjern og sett inn CD/DVD på nytt og prøv igjen. Hvis dette ikke hjelper, vennligst prøv en annen CD/DVD-brenningsprogramvare og/eller et annet medium.\n\nHvis du forsøkte å verifisere en VeraCrypt-redningsdisk opprettet for en annen hovednøkkel, passord, salt, osv., vil en slik redningsdisk alltid mislykkes i denne verifiseringen. For å opprette en ny redningsdisk som er fullt kompatibel med din nåværende konfigurasjon, velg 'System' &gt; 'Opprett redningsdisk'.</entry>
<entry lang="nb" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">VeraCrypt-redningsdiskbildet er verifisert.</entry>
<entry lang="nb" key="RESCUE_DISK_ISO_IMAGE_CHECK_FAILED">Verifiseringen av Redningsdisk-avbildningen mislyktes.\n\nHvis du forsøkte å verifisere en Redningsdisk-avbildning opprettet for en annen master nøkkel, passord, salt, osv., vil en slik Redningsdisk-avbildning alltid mislykkes i denne verifiseringen. For å opprette en ny Redningsdisk-avbildning fullt kompatibel med din nåværende konfigurasjon, velg 'System' > 'Opprett Redningsdisk'.</entry>
<entry lang="nb" key="ERROR_CREATING_RESCUE_DISK">Feil ved oppretting av VeraCrypt Redningsdisk.</entry>
<entry lang="nb" key="CANNOT_CREATE_RESCUE_DISK_ON_HIDDEN_OS">VeraCrypt Redningsdisk kan ikke opprettes når et skjult operativsystem kjører.\n\nFor å opprette en VeraCrypt Redningsdisk, start avledningsoperativsystemet og velg deretter 'System' > 'Opprett Redningsdisk'.</entry>
@@ -1011,9 +1011,9 @@
<entry lang="nb" key="HK_AUTOMOUNT_DEVICES">Automonter enheter</entry>
<entry lang="nb" key="HK_UNMOUNT_ALL">Demonter alle</entry>
<entry lang="nb" key="HK_WIPE_CACHE">Slett mellomlager</entry>
<entry lang="nb" key="HK_UNMOUNT_ALL_AND_WIPE">Demonter alle &amp; slett mellomlager</entry>
<entry lang="nb" key="HK_FORCE_UNMOUNT_ALL_AND_WIPE">Tving demontering av alle &amp; slett mellomlager</entry>
<entry lang="nb" key="HK_FORCE_UNMOUNT_ALL_AND_WIPE_AND_EXIT">Tving demontering av alle, slett mellomlager &amp; avslutt</entry>
<entry lang="nb" key="HK_UNMOUNT_ALL_AND_WIPE">Demonter alle og slett mellomlager</entry>
<entry lang="nb" key="HK_FORCE_UNMOUNT_ALL_AND_WIPE">Tving demontering av alle og slett mellomlager</entry>
<entry lang="nb" key="HK_FORCE_UNMOUNT_ALL_AND_WIPE_AND_EXIT">Tving demontering av alle, slett mellomlager og avslutt</entry>
<entry lang="nb" key="HK_MOUNT_FAVORITE_VOLUMES">Monter favorittvolumer</entry>
<entry lang="nb" key="HK_SHOW_HIDE_MAIN_WINDOW">Vis/skjul hovedvinduet til VeraCrypt</entry>
<entry lang="nb" key="PRESS_A_KEY_TO_ASSIGN">(Klikk her og trykk en tast)</entry>
@@ -1066,7 +1066,7 @@
<entry lang="nb" key="UNMOUNT_ALL_TC_VOLUMES">Demonter alle VeraCrypt-volumer</entry>
<entry lang="nb" key="UAC_INIT_ERROR">VeraCrypt klarte ikke å få administratorrettigheter.</entry>
<entry lang="nb" key="ERR_ACCESS_DENIED">Tilgang ble nektet av operativsystemet.\n\nMulig årsak: Operativsystemet krever at du har lese/skrive-tillatelser (eller administratorrettigheter) for visse mapper, filer og enheter, for at du skal få lov til å lese og skrive data til/fra dem. Normalt er en bruker uten administratorrettigheter tillatt å opprette, lese og endre filer i sin Dokumenter-mappe.</entry>
<entry lang="nb" key="SECTOR_SIZE_UNSUPPORTED">Feil: Enheten bruker en unsupported sektorstørrelse.\n\nFor øyeblikket er det ikke mulig å opprette partisjons-/enhetsbaserte volumer på enheter som bruker sektorer større enn 4096 byte. Merk imidlertid at du kan opprette filbaserte volumer (beholdere) på slike enheter.</entry>
<entry lang="nb" key="SECTOR_SIZE_UNSUPPORTED">Feil: Enheten bruker en sektorstørrelse som ikke støttes.\n\nFor øyeblikket er det ikke mulig å opprette partisjons-/enhetsbaserte volumer på enheter som bruker sektorer større enn 4096 byte. Merk imidlertid at du kan opprette filbaserte volumer (beholdere) på slike enheter.</entry>
<entry lang="nb" key="SYSENC_UNSUPPORTED_SECTOR_SIZE_BIOS">For øyeblikket er det ikke mulig å kryptere et system installert på en disk som bruker en sektorstørrelse annen enn 512 bytes.</entry>
<entry lang="nb" key="NO_SPACE_FOR_BOOT_LOADER">VeraCrypt Boot Loader krever minst 32 KibiBytes ledig plass i begynnelsen av systemdisken (VeraCrypt Boot Loader trenger å lagre i dette området). Dessverre oppfyller ikke disken din denne betingelsen.\n\nVennligst IKKE rapporter dette som en feil eller et problem i VeraCrypt. For å løse dette problemet, må du repartisjonere disken din og la de første 32 KibiBytes stå ledig (i de fleste tilfeller må du slette og gjenopprette den første partisjonen). Vi anbefaler at du bruker Microsoft partisjonssjefen som er tilgjengelig f.eks. når du installerer Windows.</entry>
<entry lang="nb" key="FEATURE_UNSUPPORTED_ON_CURRENT_OS">Funksjonen støttes ikke på den versjonen av operativsystemet du bruker.</entry>
@@ -1079,7 +1079,7 @@
<entry lang="nb" key="SYS_LOADER_RESTORE_FAILED">Kunne ikke gjenopprette den opprinnelige systemlasteren.\n\nVennligst bruk din VeraCrypt Redningsdisk ('Reparasjon' > 'Gjenopprett opprinnelig systemlaster') eller Windows installasjonsmedium for å erstatte VeraCrypt Boot Loader med Windows systemlaster.</entry>
<entry lang="nb" key="SYS_LOADER_UNAVAILABLE_FOR_RESCUE_DISK">Den opprinnelige systemlasteren blir ikke lagret på redningsdisken (sannsynlig årsak: manglende sikkerhetskopifil).</entry>
<entry lang="nb" key="ERROR_MBR_PROTECTED">Kunne ikke skrive til MBR-sektoren.\n\nDin BIOS kan være konfigurert til å beskytte MBR-sektoren. Sjekk BIOS-innstillingene dine (trykk F2, Delete, eller Esc, etter at du slår på datamaskinen) for MBR/viruskontroller.</entry>
<entry lang="nb" key="BOOT_LOADER_FINGERPRINT_CHECK_FAILED">ADVARSEL: Valideringen av VeraCrypt bootloader-fingeravtrykket mislyktes!\nDin disk kan ha blitt manipulert av en angriper ("Evil Maid" angrep).\n\nDenne advarselen kan også bli utløst hvis du gjenopprettet VeraCrypt oppstartslaster ved å bruke en redningsdisk generert med en annen versjon.\n\nDet anbefales at du endrer passordet umiddelbart, som også vil gjenopprette den korrekte VeraCrypt bootloader. Det anbefales å reinstallere VeraCrypt og å ta tiltak for å unngå tilgang til denne maskinen fra uvedkommende.</entry>
<entry lang="nb" key="BOOT_LOADER_FINGERPRINT_CHECK_FAILED">ADVARSEL: Valideringen av VeraCrypts oppstartslaster-fingeravtrykk mislyktes!\nDisken kan ha blitt manipulert av en angriper ("Evil Maid"-angrep).\n\nDenne advarselen kan også bli utløst hvis du gjenopprettet VeraCrypt-oppstartslasteren ved å bruke en redningsdisk generert med en annen versjon.\n\nDet anbefales at du endrer passordet umiddelbart, som også vil gjenopprette den korrekte VeraCrypt-oppstartslasteren. Det anbefales å reinstallere VeraCrypt og å ta tiltak for å unngå tilgang til denne maskinen fra uvedkommende.</entry>
<entry lang="nb" key="BOOT_LOADER_VERSION_INCORRECT_PREFERENCES">Den nødvendige versjonen av VeraCrypt Boot Loader er for øyeblikket ikke installert. Dette kan forhindre at noen av innstillingene blir lagret.</entry>
<entry lang="nb" key="CUSTOM_BOOT_LOADER_MESSAGE_HELP"> Merk: I noen situasjoner kan det hende du ønsker å hindre en person (motstander) som ser deg starte datamaskinen fra å vite at du bruker VeraCrypt. Ovennevnte alternativer lar deg gjøre det ved å tilpasse VeraCrypt boot loader-skjermbildet. Hvis du aktiverer det første alternativet, vil ingen tekster bli vist av boot loaderen (ikke engang når du skriver inn feil passord). Datamaskinen vil se ut til å være "frosset" mens du kan skrive inn passordet ditt. I tillegg kan en tilpasset melding bli vist for å villede motstanderen. For eksempel, falske feilmeldinger som "Manglende operativsystem" (som vanligvis vises av Windows boot loader hvis den ikke finner noen Windows boot partisjon). Det er imidlertid viktig å merke seg at hvis motstanderen kan analysere innholdet på harddisken, kan han/hun fortsatt finne ut at den inneholder VeraCrypt boot loaderen.</entry>
<entry lang="nb" key="CUSTOM_BOOT_LOADER_MESSAGE_PROMPT">ADVARSEL: Vennligst husk at hvis du aktiverer dette alternativet, vil VeraCrypt boot loader ikke vise noen tekster (ikke engang når du skriver inn feil passord). Datamaskinen vil se ut til å være "frosset" (responsløs) mens du kan skrive inn passordet ditt (markøren vil IKKE bevege seg og ingen stjerner vil bli vist når du trykker en tast).\n\nEr du sikker på at du vil aktivere dette alternativet?</entry>
@@ -1113,8 +1113,8 @@
<entry lang="nb" key="KEYB_LAYOUT_SYS_ENC_EXPLANATION">Merk: Passordet må skrives i pre-boot-miljøet (før Windows starter) hvor ikke-amerikanske Windows-tastaturoppsett ikke er tilgjengelige. Derfor må passordet alltid skrives ved bruk av det standard amerikanske tastaturoppsettet. Det er imidlertid viktig å merke seg at du IKKE trenger et ekte amerikansk tastatur. VeraCrypt sørger automatisk for at du trygt kan skrive passordet (akkurat nå og i pre-boot-miljøet) selv om du IKKE har et ekte amerikansk tastatur.</entry>
<entry lang="nb" key="RESCUE_DISK_INFO">Før du kan kryptere partisjonen/disken, må du opprette en VeraCrypt Rescue Disk (VRD), som tjener følgende formål:\n\n- Hvis VeraCrypt Boot Loader, hovednøkkel eller andre kritiske data blir skadet, tillater VRD deg å gjenopprette det (merk imidlertid at du fortsatt må oppgi riktig passord da).\n\n- Hvis Windows blir skadet og ikke kan starte, tillater VRD deg å permanent dekryptere partisjonen/disken før Windows starter.\n\n- VRD vil inneholde en sikkerhetskopi av det nåværende innholdet på den første disksporet (som vanligvis inneholder en systemloader eller oppstartsstyrer) og vil tillate deg å gjenopprette det hvis nødvendig.\n\nVeraCrypt Rescue Disk ISO-bilde vil bli opprettet i den angitte plasseringen nedenfor.</entry>
<entry lang="nb" key="RESCUE_DISK_WIN_ISOBURN_PRELAUNCH_NOTE">Etter at du klikker OK, vil Microsoft Windows Disk Image Burner bli startet. Vennligst bruk den til å brenne VeraCrypt Rescue Disk ISO-bildet til en CD eller DVD.\n\nEtter at du har gjort det, gå tilbake til veiviseren for opprettelse av VeraCrypt-volumer og følg instruksjonene.</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_INFO">Rescue Disk-bildet har blitt opprettet og lagret i filen:\n%s\n\nNå må du brenne det til en CD eller DVD.\n\n%lsEtter at du har brent Rescue Disk, klikk Neste for å verifisere at det har blitt riktig brent.</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_INFO_NO_CHECK">Rescue Disk-bildet har blitt opprettet og lagret i filen:\n%s\n\nNå bør du enten brenne bildet til en CD/DVD eller flytte det til en sikker plassering for senere bruk.\n\n%lsKlikk Neste for å fortsette.</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_INFO">Redningsdisk-bildet er opprettet og lagret i filen:\n%s\n\nNå må du brenne det til en CD eller DVD.\n\n%lsEtter at du har brent redningsdisken, klikk Neste for å verifisere at den ble korrekt brent.</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_INFO_NO_CHECK">Redningsdisk-bildet er opprettet og lagret i filen:\n%s\n\nNå bør du enten brenne bildet til en CD/DVD eller flytte det til en sikker plassering for senere bruk.\n\n%lsKlikk Neste for å fortsette.</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_INFO_NONWIN_ISO_BURNER">VIKTIG: Merk at filen må skrives til CD/DVD som et ISO-diskbilde (ikke som en individuell fil). For informasjon om hvordan du gjør det, vennligst referer til dokumentasjonen for CD/DVD-opptaksprogramvaren din. Hvis du ikke har noen CD/DVD-opptaksprogramvare som kan skrive ISO-diskbildet til en CD/DVD, klikk lenken nedenfor for å laste ned slik gratis programvare.\n\n</entry>
<entry lang="nb" key="LAUNCH_WIN_ISOBURN">Start Microsoft Windows Disk Image Burner</entry>
<entry lang="nb" key="RESCUE_DISK_BURN_NO_CHECK_WARN">ADVARSEL: Hvis du allerede opprettet en VeraCrypt Rescue Disk tidligere, kan den ikke gjenbrukes for denne systempartisjonen/disken fordi den ble opprettet for en annen hovednøkkel! Hver gang du krypterer en systempartisjon/disk, må du lage en ny VeraCrypt Rescue Disk for den selv om du bruker samme passord.</entry>
@@ -1173,11 +1173,11 @@
<entry lang="nb" key="CD_BURNER_NOT_PRESENT_WILL_CONNECT_LATER">Jeg vil koble til en CD/DVD-brenner til datamaskinen min senere. Avslutt prosessen nå.</entry>
<entry lang="nb" key="CD_BURNER_NOT_PRESENT_CONNECTED_NOW">En CD/DVD-brenner er tilkoblet datamaskinen min nå. Fortsett og skriv Rescue Disk.</entry>
<entry lang="nb" key="CD_BURNER_NOT_PRESENT_WILL_STORE_ISO_INFO">Vennligst følg disse trinnene:\n\n1) Koble til en flyttbar enhet, for eksempel en USB-minnepinne, til datamaskinen nå.\n\n2) Kopier filen for VeraCrypt Rescue Disk-bildet (%s) til den flyttbare enheten.\n\nHvis du trenger å bruke VeraCrypt Rescue Disk i fremtiden, vil du kunne koble den flyttbare enheten (som inneholder VeraCrypt Rescue Disk-bildet) til en datamaskin med en CD/DVD-brenner og opprette en oppstartbar VeraCrypt Rescue Disk ved å brenne bildet til en CD eller DVD. VIKTIG: Merk at filen for VeraCrypt Rescue Disk-bildet må skrives til CD/DVD som et ISO-diskbilde (ikke som en individuell fil).</entry>
<entry lang="nb" key="RESCUE_DISK_RECORDING_TITLE">Innspilling av Rescue Disk</entry>
<entry lang="nb" key="RESCUE_DISK_CREATED_TITLE">Rescue Disk opprettet</entry>
<entry lang="nb" key="RESCUE_DISK_RECORDING_TITLE">Brenning av redningsdisk</entry>
<entry lang="nb" key="RESCUE_DISK_CREATED_TITLE">Redningsdisk opprettet</entry>
<entry lang="nb" key="SYS_ENCRYPTION_PRETEST_TITLE">Systemkrypteringstest</entry>
<entry lang="nb" key="RESCUE_DISK_DISK_VERIFIED_TITLE">Rescue Disk verifisert</entry>
<entry lang="nb" key="RESCUE_DISK_VERIFIED_INFO">\nVeraCrypt Rescue Disk har blitt vellykket verifisert. Vennligst fjern den fra lagringsenheten nå og oppbevar den på et trygt sted.\n\nKlikk Neste for å fortsette.</entry>
<entry lang="nb" key="RESCUE_DISK_DISK_VERIFIED_TITLE">Redningsdisk verifisert</entry>
<entry lang="nb" key="RESCUE_DISK_VERIFIED_INFO">\nVeraCrypt-redningsdisken er verifisert. Vennligst fjern den fra lagringsenheten nå og oppbevar den på et trygt sted.\n\nKlikk Neste for å fortsette.</entry>
<entry lang="nb" key="REMOVE_RESCUE_DISK_FROM_DRIVE">ADVARSEL: Under de neste trinnene må ikke VeraCrypt Rescue Disk være i stasjonen. Ellers vil det ikke være mulig å fullføre trinnene riktig.\n\nVennligst fjern den fra stasjonen nå og oppbevar den på et trygt sted. Klikk deretter OK.</entry>
<entry lang="nb" key="PREBOOT_NOT_LOCALIZED">Advarsel: På grunn av tekniske begrensninger i pre-boot-miljøet, kan ikke tekster vist av VeraCrypt i pre-boot-miljøet (dvs. før Windows starter) lokaliseres. Brukergrensesnittet for VeraCrypt Boot Loader er helt på engelsk.\n\nFortsette?</entry>
<entry lang="nb" key="SYS_ENCRYPTION_PRETEST_INFO">Før du krypterer systempartisjonen eller -disken, må VeraCrypt verifisere at alt fungerer som det skal.\n\nEtter at du klikker Test, vil alle nødvendige komponenter (for eksempel pre-boot autentiseringskomponenten, dvs. VeraCrypt Boot Loader) bli installert og datamaskinen vil starte på nytt. Da må du angi passordet ditt på VeraCrypt Boot Loader-skjermen som vil vises før Windows starter. Etter Windows starter, vil du automatisk bli informert om resultatet av forhåndstesten.\n\nFølgende enhet vil bli endret: Disk #%d\n\n\nHvis du klikker Avbryt nå, vil ingenting bli installert og forhåndstesten vil ikke bli utført.</entry>
@@ -1245,9 +1245,9 @@
<entry lang="nb" key="CONFIRM_CHANGE_WIZARD_MODE_TO_FILE_CONTAINER">Vil du opprette en VeraCrypt filbeholder i stedet?</entry>
<entry lang="nb" key="CONFIRM_SYSTEM_ENCRYPTION_MODE">Du har valgt systempartisjonen/disken (eller oppstartspartisjonen), men veivisermodusen du valgte er egnet bare for ikke-systempartisjoner/disks.\n\nVil du sette opp førstart-autentisering (som betyr at du må angi passordet ditt hver gang før Windows starter) og kryptere systempartisjonen/disken?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_SYS_DEVICE">Er du sikker på at du vil permanent dekryptere systempartisjonen/disken?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_SYS_DEVICE_CAUTION">ADVARSEL: Hvis du permanent dekrypterer systempartisjonen/disken, vil ukryptert data bli skrevet til den.\n\nEr du virkelig sikker på at du vil permanent dekryptere systempartisjonen/disken?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_SYS_DEVICE_CAUTION">ADVARSEL: Hvis du permanent dekrypterer systempartisjonen/disken, vil ukrypterte data bli skrevet til den.\n\nEr du virkelig sikker på at du vil permanent dekryptere systempartisjonen/disken?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_NON_SYS_DEVICE">Er du sikker på at du vil permanent dekryptere følgende volum?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_NON_SYS_DEVICE_CAUTION">ADVARSEL: Hvis du permanent dekrypterer VeraCrypt-volumet, vil ukryptert data bli skrevet til disken.\n\nEr du virkelig sikker på at du vil permanent dekryptere det valgte volumet?</entry>
<entry lang="nb" key="CONFIRM_DECRYPT_NON_SYS_DEVICE_CAUTION">ADVARSEL: Hvis du permanent dekrypterer VeraCrypt-volumet, vil ukrypterte data bli skrevet til disken.\n\nEr du virkelig sikker på at du vil permanent dekryptere det valgte volumet?</entry>
<entry lang="nb" key="CONFIRM_CASCADE_FOR_SYS_ENCRYPTION">Advarsel: Hvis du bruker en kaskade av chiffer for systemkryptering, kan du oppleve følgende problemer:\n\n1) VeraCrypt Boot Loader er større enn normalt, og derfor er det ikke nok plass i det første spor på disken for en sikkerhetskopi av VeraCrypt Boot Loader. Derfor, når den blir skadet (som ofte skjer, for eksempel under upassende utformede antipirat-aktiveringsprosedyrer av visse programmer), vil du måtte bruke VeraCrypt Redningsdisk for å starte eller reparere VeraCrypt Boot Loader.\n\n2) På noen datamaskiner tar det lengre tid å gjenoppta fra dvalemodus.\n\nDisse potensielle problemene kan forhindres ved å velge en ikke-kaskade krypteringsalgoritme (f.eks. AES).\n\nEr du sikker på at du vil bruke en kaskade av chiffer?</entry>
<entry lang="nb" key="NOTE_CASCADE_FOR_SYS_ENCRYPTION">Hvis du opplever noen av de tidligere beskrevne problemene, dekrypter partisjonen/disken (hvis den er kryptert) og prøv deretter å kryptere den igjen ved å bruke en ikke-kaskade krypteringsalgoritme (f.eks. AES).</entry>
<entry lang="nb" key="UPDATE_TC_IN_DECOY_OS_FIRST">ADVARSEL: Av sikkerhetsgrunner bør du oppdatere VeraCrypt på dekosystemet før du oppdaterer det på det skjulte systemet.\n\nFor å gjøre det, start dekosystemet og kjør VeraCrypt installasjonsprogrammet fra det. Start deretter det skjulte systemet og kjør installasjonsprogrammet fra det også.\n\nMerk: Dekosystemet og det skjulte systemet deler en enkelt boot loader. Hvis du oppgraderte VeraCrypt bare på det skjulte systemet (men ikke på dekosystemet), vil dekosystemet inneholde en VeraCrypt-driver og VeraCrypt-programmer hvis versjonsnummer er forskjellig fra versjonsnummeret til VeraCrypt Boot Loader. En slik diskrepans kan indikere at det finnes et skjult operativsystem på denne datamaskinen.\n\n\nVil du fortsette?</entry>
@@ -1278,7 +1278,7 @@
<entry lang="nb" key="SECURITY_TOKEN_ERROR">Sikkerhetstoken feil</entry>
<entry lang="nb" key="CKR_PIN_INCORRECT">Passord for sikkerhetstoken er feil.</entry>
<entry lang="nb" key="CKR_DEVICE_MEMORY">Sikkerhetstoken har ikke nok minne/plass til å utføre den forespurte operasjonen.\n\nHvis du prøver å importere en nøkkelfil, bør du velge en mindre fil eller bruke en nøkkelfil generert av VeraCrypt (velg 'Verktøy' > 'Nøkkelfilgenerator').</entry>
<entry lang="nb" key="ALL_TOKEN_SESSIONS_CLOSED">Alle åpne sikkerhetstoken-sesjoner har blitt lukket.</entry>
<entry lang="nb" key="ALL_TOKEN_SESSIONS_CLOSED">Alle åpne sikkerhetstokensesjoner er lukket.</entry>
<entry lang="nb" key="SELECT_TOKEN_KEYFILES">Velg Sikkerhetstoken-nøkkelfiler</entry>
<entry lang="nb" key="TOKEN_SLOT_ID">Slot</entry>
<entry lang="nb" key="TOKEN_NAME">Token-navn</entry>
@@ -1412,9 +1412,9 @@
<entry lang="nb" key="IDC_SECURE_DESKTOP_PASSWORD_ENTRY">Bruk Sikkert Skrivebord for passordinntasting</entry>
<entry lang="nb" key="ERR_REFS_INVALID_VOLUME_SIZE">Volumfilstørrelsen spesifisert i kommandolinjen er inkompatibel med valgt ReFS-filsystem.</entry>
<entry lang="nb" key="IDC_EDIT_DCSPROP">Rediger Boot Loader-konfigurasjon</entry>
<entry lang="nb" key="IDC_SHOW_PLATFORMINFO">Vis EFI-plattformsinformasjon</entry>
<entry lang="nb" key="IDC_SHOW_PLATFORMINFO">Vis EFI-plattforminformasjon</entry>
<entry lang="nb" key="BOOT_LOADER_CONFIGURATION_FILE">Boot Loader-konfigurasjonsfil</entry>
<entry lang="nb" key="EFI_PLATFORM_INFORMATION">EFI-plattformsinformasjon</entry>
<entry lang="nb" key="EFI_PLATFORM_INFORMATION">EFI-plattforminformasjon</entry>
<entry lang="nb" key="EDIT_DCSPROP_FOR_ADVANCED_ONLY">ADVARSEL: Uerfarne brukere bør aldri forsøke å manuelt redigere Boot Loader-konfigurasjoner.\n\nFortsette?</entry>
<entry lang="nb" key="DCSPROP_XML_VALIDATION_FAILED">ADVARSEL: Kunne ikke verifisere XML-formatet til Boot Loader-konfigurasjonen. Vennligst sjekk dine modifikasjoner.</entry>
<entry lang="nb" key="IDT_ADVANCED_OPTIONS">Avanserte Alternativer</entry>
@@ -1443,9 +1443,9 @@
<entry lang="nb" key="HIDDEN_CREDS_SAME_AS_OUTER">Det skjulte volumet kan ikke ha samme passord, PIM og nøkkelfiler som det ytre volumet</entry>
<entry lang="nb" key="SYSENC_BITLOCKER_CONFLICT">VeraCrypt støtter ikke kryptering av en systemdisk som allerede er kryptert med BitLocker.</entry>
<entry lang="nb" key="IDC_UPDATE_BOOTLOADER_ON_SHUTDOWN">Fiks automatisk oppstartskonfigurasjonsproblemer som kan forhindre at Windows starter</entry>
<entry lang="nb" key="IDC_FORCE_NEXT_BOOT_VERACRYPT">Tving maskinen til å starte VeraCrypt ved neste oppstart</entry>
<entry lang="nb" key="IDC_FORCE_VERACRYPT_BOOT_ENTRY">Tving tilstedeværelsen av VeraCrypt-oppføringen i EFI-firmware bootmenyen</entry>
<entry lang="nb" key="IDC_FORCE_VERACRYPT_FIRST_BOOT_ENTRY">Tving VeraCrypt-oppføringen til å være den første i EFI-firmware bootmenyen</entry>
<entry lang="nb" key="IDC_FORCE_NEXT_BOOT_VERACRYPT">Tving maskinen til å starte opp i VeraCrypt ved neste oppstart</entry>
<entry lang="nb" key="IDC_FORCE_VERACRYPT_BOOT_ENTRY">Tving tilstedeværelsen av VeraCrypt-oppføringen i EFI-fastvarens oppstartsmeny</entry>
<entry lang="nb" key="IDC_FORCE_VERACRYPT_FIRST_BOOT_ENTRY">Tving VeraCrypt-oppføringen til å være den første i EFI-fastvarens oppstartsmeny</entry>
<entry lang="nb" key="RAM_ENCRYPTION_DISABLE_HIBERNATE">ADVARSEL: RAM-kryptering er ikke kompatibel med Windows Hvilemodus og Windows Hurtigoppstart-funksjoner. VeraCrypt må deaktivere dem før du aktiverer RAM-kryptering.\n\nFortsette?</entry>
<entry lang="nb" key="CONFIRM_DISABLE_FAST_STARTUP">ADVARSEL: Windows Hurtigoppstart er aktivert og det er kjent for å forårsake problemer når du arbeider med VeraCrypt volumer. Det anbefales å deaktivere det for bedre sikkerhet og brukervennlighet.\n\nVil du deaktivere Windows Hurtigoppstart?</entry>
<entry lang="nb" key="QUICK_FORMAT_HELP">For å gjøre det mulig for operativsystemet å montere ditt nye volum, må det formateres med et filsystem. Vennligst velg en filsystemtype.\n\nHvis volumet ditt skal være vert på en enhet eller partisjon, kan du bruke 'Hurtigformatering' for å hoppe over kryptering av ledig plass på volumet.</entry>
@@ -1475,7 +1475,7 @@
<entry lang="nb" key="LINUX_CROSS_SUPPORT_ONLY">Jeg skal montere volumet kun på {0}</entry>
<entry lang="nb" key="LINUX_CROSS_SUPPORT_ONLY_HELP">Velg dette alternativet hvis du ikke trenger å bruke volumet på andre plattformer.</entry>
<entry lang="nb" key="LINUX_DESELECT">Fjern merking</entry>
<entry lang="nb" key="LINUX_ADMIN_PW_QUERY">Angi ditt brukernavn eller administratorpassord:</entry>
<entry lang="nb" key="LINUX_ADMIN_PW_QUERY">Skriv inn bruker- eller administratorpassordet ditt:</entry>
<entry lang="nb" key="LINUX_ADMIN_PW_QUERY_TITLE">Administratorrettigheter kreves</entry>
<entry lang="nb" key="LINUX_VC_RUNNING_ALREADY">VeraCrypt kjører allerede.</entry>
<entry lang="nb" key="LINUX_SYSTEM_ENC_PW_LENGTH_NOTE">Systemkrypteringspassord er lengre enn {0} tegn.</entry>
@@ -1486,13 +1486,13 @@
<entry lang="nb" key="LINUX_UNMOUNT_ALL_WHEN">Demonter alle volumer når</entry>
<entry lang="nb" key="LINUX_ENTERING_POWERSAVING">Systemet går inn i strømsparingsmodus</entry>
<entry lang="nb" key="LINUX_LOGIN_ACTION">Handlinger å utføre når brukeren logger inn</entry>
<entry lang="nb" key="LINUX_CLOSE_EXPL_ON_UNMOUNT">Lukk alle Utforsker-vinduer til volumet som demonteres</entry>
<entry lang="nb" key="LINUX_CLOSE_EXPL_ON_UNMOUNT">Lukk alle Utforsker-vinduer for volumet som demonteres</entry>
<entry lang="nb" key="LINUX_HOTKEYS">Hurtigtaster</entry>
<entry lang="nb" key="LINUX_SYSTEM_HOTKEYS">System-omfattende Hurtigtaster</entry>
<entry lang="nb" key="LINUX_SOUND_NOTIFICATION">Spill av systemvarsellyd etter montering/demontering</entry>
<entry lang="nb" key="LINUX_CONFIRM_AFTER_UNMOUNT">Vis bekreftelsesmeldingsboks etter demontering</entry>
<entry lang="nb" key="LINUX_VC_QUITS">VeraCrypt avsluttes</entry>
<entry lang="nb" key="LINUX_OPEN_FINDER">Åpne Finder-vindu for vellykket montert volum</entry>
<entry lang="nb" key="LINUX_OPEN_FINDER">Åpne Finder-vindu for monterte volumer</entry>
<entry lang="nb" key="LINUX_DISABLE_KERNEL_ONLY_SETTING">Vennligst merk at denne innstillingen trer i kraft kun hvis bruk av kjernekryptografiske tjenester er deaktivert.</entry>
<entry lang="nb" key="LINUX_DISABLE_KERNEL_CRYPT_CONFIRM">Deaktivering av bruk av kjernekryptografiske tjenester kan redusere ytelsen.\n\nEr du sikker?</entry>
<entry lang="nb" key="LINUX_KERNEL_CRYPT_OPTION_CHANGE_MOUNTED_HINT">Vennligst merk at deaktivering av dette alternativet kanskje ikke har noen effekt på volumer som er montert ved bruk av kjernekryptografiske tjenester.</entry>
@@ -1573,7 +1573,7 @@
<entry lang="nb" key="SYS_ENCRYPTION_UPGRADE_UNSUPPORTED_ALGORITHM">VeraCrypt kan ikke oppgraderes fordi systempartisjonen/disken ble kryptert ved bruk av en algoritme som ikke støttes lenger.\nVennligst dekrypter systemet ditt før du oppgraderer VeraCrypt og deretter krypter det igjen.</entry>
<entry lang="nb" key="LINUX_EX2MSG_TERMINALNOTFOUND">Støttet terminalprogram kunne ikke bli funnet, du trenger enten xterm, konsole eller gnome-terminal (med dbus-x11).</entry>
<entry lang="nb" key="IDM_MOUNT_NO_CACHE">Monter uten mellomlager</entry>
<entry lang="nb" key="EXPANDER_INFO">:: VeraCrypt Expander ::\n\nUtvid et VeraCrypt-volum mens det er i drift uten å omformatere\n\n\nAlle typer volumer (beholderfiler, disker og partisjoner) formatert med NTFS støttes. Den eneste forutsetningen er at det må være nok ledig plass på vertsenheten eller vertsdisken til VeraCrypt-volumet.\n\nIkke bruk denne programvaren for å utvide et ytre volum som inneholder et skjult volum, da dette ødelegger det skjulte volumet!</entry>
<entry lang="nb" key="EXPANDER_INFO">:: VeraCrypt Expander ::\n\nUtvid et VeraCrypt-volum uten å reformatere\n\n\nAlle typer volumer (beholderfiler, disker og partisjoner) formatert med NTFS støttes. Den eneste forutsetningen er at det må være nok ledig plass på vertsenheten eller vertsdisken til VeraCrypt-volumet.\n\nIkke bruk denne programvaren for å utvide et ytre volum som inneholder et skjult volum, da dette ødelegger det skjulte volumet!</entry>
<entry lang="nb" key="IDC_STEPSEXPAND">1. Velg VeraCrypt-volumet som skal utvides\n2. Klikk på 'Monter'-knappen</entry>
<entry lang="nb" key="IDT_VOL_NAME">Volum: </entry>
<entry lang="nb" key="IDT_FILE_SYS">Filsystem: </entry>
@@ -1585,7 +1585,7 @@
<entry lang="nb" key="IDT_INIT_SPACE">Fyll ny plass: </entry>
<entry lang="nb" key="EXPANDER_FREE_SPACE">%s ledig plass tilgjengelig på vertsdisken</entry>
<entry lang="nb" key="EXPANDER_HELP_DEVICE">Dette er et enhetsbasert VeraCrypt-volum.\n\nDen nye volumstørrelsen vil bli valgt automatisk som størrelsen på vertsenheten.</entry>
<entry lang="nb" key="EXPANDER_HELP_FILE">Vennligst spesifiser den nye størrelsen på VeraCrypt-volumet (må være minst %I64u KB større enn den nåværende størrelsen).</entry>
<entry lang="nb" key="EXPANDER_HELP_FILE">Vennligst spesifiser den nye størrelsen på VeraCrypt-volumet (må være minst %I64u KiB større enn den nåværende størrelsen).</entry>
<entry lang="nb" key="QUICK_EXPAND_WARNING">ADVARSEL: Du bør bruke rask utvidelse bare i følgende tilfeller:\n\n1) Enheten hvor filbeholderen er plassert inneholder ingen sensitive data og du trenger ikke troverdig benektelse.\n2) Enheten hvor filbeholderen er plassert har allerede blitt sikkert og fullstendig kryptert.\n\nEr du sikker på at du vil bruke hurtigutvidelse?</entry>
<entry lang="nb" key="EXPANDER_STATUS_TEXT">VIKTIG: Flytt musen så tilfeldig som mulig innenfor dette vinduet. Jo lengre du flytter den, jo bedre. Dette øker den kryptografiske styrken til krypteringsnøklene betydelig. Klikk deretter 'Fortsett' for å utvide volumet.</entry>
<entry lang="nb" key="EXPANDER_STATUS_TEXT_LEGACY">Klikk 'Fortsett' for å utvide volumet.</entry>
@@ -1668,9 +1668,9 @@
<entry lang="nb" key="PIM_ARGON2_LARGE_WARNING">Du har valgt en Argon2 PIM-verdi som er større enn VeraCrypts standardverdi.\nVær oppmerksom på at dette kan kreve mer minne og føre til mye tregere montering.</entry>
<entry lang="nb" key="PIM_ARGON2_SMALL_WARNING">Du har valgt en Argon2 PIM-verdi som er mindre enn VeraCrypts standardverdi. Vær oppmerksom på at dersom passordet ditt ikke er sterkt nok, kan dette føre til svakere sikkerhet.\n\nBekrefter du at du bruker et sterkt passord?</entry>
<entry lang="nb" key="PIM_ARGON2_REQUIRE_LONG_PASSWORD">Passordet må inneholde 20 eller flere tegn for å kunne bruke den angitte Argon2 PIM-en.\nKortere passord kan kun brukes hvis Argon2 PIM er 12 eller større.</entry>
<entry lang="en" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER">Mount NTFS volumes with an in-kernel Linux driver</entry>
<entry lang="en" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER_HELP">Linux only. When enabled and no explicit filesystem type was supplied, VeraCrypt probes the decrypted virtual device with blkid -p and mounts detected NTFS filesystems with an available in-kernel NTFS driver, bypassing mount helpers such as ntfs-3g. VeraCrypt uses ntfs when it is positively identified as a modern read/write driver or expected on Linux 7.1 or later, and otherwise uses ntfs3. If NTFS detection fails, VeraCrypt uses the normal automatic filesystem selection. If no supported in-kernel NTFS driver is available or loadable, mounting fails. This opt-in option can avoid suspend or hibernate hangs caused by frozen user-space FUSE filesystems.</entry>
<entry lang="en" key="LINUX_KERNEL_NTFS_DRIVER_UNAVAILABLE">No supported in-kernel NTFS driver is available or loadable. To use the system default NTFS backend, disable the NTFS kernel-driver preference or do not request kernel NTFS explicitly.</entry>
<entry lang="nb" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER">Monter NTFS-volumer med en Linux-driver i kjernen</entry>
<entry lang="nb" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER_HELP">Kun Linux. Når aktivert og ingen eksplisitt filsystemtype er angitt, undersøker VeraCrypt den dekrypterte virtuelle enheten med blkid -p og monterer oppdagede NTFS-filsystemer med en tilgjengelig NTFS-driver i kjernen, og omgår monteringshjelpere som ntfs-3g. VeraCrypt bruker ntfs når den er positivt identifisert som en moderne lese/skrive-driver eller forventet på Linux 7.1 eller nyere, og bruker ellers ntfs3. Hvis NTFS-deteksjonen mislykkes, bruker VeraCrypt det vanlige automatiske filsystemvalget. Hvis ingen støttet NTFS-driver i kjernen er tilgjengelig eller kan lastes, mislykkes monteringen. Dette valgfrie alternativet kan unngå at hvilemodus eller dvalemodus henger på grunn av frosne FUSE-filsystemer i brukerområdet.</entry>
<entry lang="nb" key="LINUX_KERNEL_NTFS_DRIVER_UNAVAILABLE">Ingen støttet NTFS-driver i kjernen er tilgjengelig eller kan lastes. For å bruke systemets standard NTFS-backend, deaktiver innstillingen for NTFS-kjernedriver eller ikke be om NTFS-kjerne eksplisitt.</entry>
<entry lang="nb" key="LINUX_EMERGENCY_UNMOUNT_WARNING">Normal demontering av volumet {0} mislyktes. Dette kan skje når programmer fortsatt har filer eller mapper åpne på volumet, eller når den underliggende enheten ble frakoblet og monteringen ble foreldet.\n\nHvis enheten fortsatt er tilkoblet, velg Nei, lukk programmene som bruker volumet, og prøv å demontere på nytt.\n\nHvis enheten ble frakoblet eller monteringen er foreldet, kan VeraCrypt forsøke en nødopprydding ved å frakoble filsystemet og fjerne eller planlegge fjerning av VeraCrypts kjerneobjekter. Ventende skrivinger kan ha mislyktes, data kan gå tapt, og oppryddingen kan forbli ventende inntil programmene lukker åpne filer. Kontroller filsystemet med fsck eller et passende reparasjonsverktøy før du bruker det igjen.\n\nFortsette?</entry>
<entry lang="nb" key="LINUX_EMERGENCY_UNMOUNTED">Nødopprydding for volumet {0} er igangsatt. Hvis volumet ble frakoblet, monteringen var foreldet, eller det var ventende skrivinger, kontroller filsystemet med fsck eller et passende reparasjonsverktøy før du bruker det igjen.</entry>
<entry lang="nb" key="FORMAT_STAGE_WRITING_DATA">Oppretter volumdata. Vennligst vent.</entry>
+12 -12
View File
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<VeraCrypt>
<localization prog-version="1.26.28">
<language langid="nl" name="Nederlands" en-name="Dutch" version="2026-05-13" translators="Jan van der Wal, Peter Tak, Thomas De Rocker"/>
<language langid="nl" name="Nederlands" en-name="Dutch" version="2026-05-19" translators="Jan van der Wal, Peter Tak, Thomas De Rocker"/>
<font lang="nl" class="normal" size="11" face="default"/>
<font lang="nl" class="bold" size="13" face="Arial"/>
<font lang="nl" class="fixed" size="12" face="Lucida Console"/>
@@ -1654,8 +1654,8 @@
<entry lang="nl" key="IDC_SECURE_DESKTOP_ENABLE_IME">De invoermethode-editor (IME) inschakelen in Secure Desktop</entry>
<entry lang="nl" key="ENABLE_IME_IN_SECURE_DESKTOP_WARNING">WAARSCHUWING: schakel deze optie alleen in als u problemen ondervindt bij het selecteren van sleutelbestanden/tokens onder Secure Desktop.</entry>
<entry lang="nl" key="ERR_KEY_DERIVATION_FAILED">Het afleiden van de sleutel is mislukt. Dit kan worden veroorzaakt door onvoldoende geheugen of een onderbroken bewerking.</entry>
<entry lang="nl" key="EFI_MS_BOOT_LOADER_RESTORE_FAILED">De systeempartitie/schijf is al ontsleuteld, maar het pad naar de EFI-bootloader van Microsoft is niet hersteld in de Windows Boot Manager. Alleen de EFI-opstartbestanden moeten worden gerepareerd. Gebruik de reparatieoptie van de VeraCrypt Rescue Disk, of start op vanaf het Windows-herstelmedium en voer bcdboot W:\\Windows /s S: /f UEFI uit, waarbij u W: vervangt door de stationsletter van het Windows-volume en S: door de stationsletter van de EFI-systeempartitie. Pad:</entry>
<entry lang="nl" key="EFI_FALLBACK_BOOT_LOADER_STILL_VERACRYPT">De systeempartitie/schijf is al ontsleuteld, maar het pad naar de fallback-EFI-bootloader bevat nog steeds de VeraCrypt-bootloader. Alleen de EFI-opstartbestanden moeten worden gerepareerd. Gebruik de reparatieoptie van de VeraCrypt Rescue Disk, of start op vanaf het Windows-herstelmedium en voer bcdboot W:\\Windows /s S: /f UEFI uit, waarbij u W: vervangt door de stationsletter van het Windows-volume en S: door de stationsletter van de EFI-systeempartitie. Pad:</entry>
<entry lang="nl" key="EFI_MS_BOOT_LOADER_RESTORE_FAILED">De systeempartitie/schijf is al ontsleuteld, maar het pad naar de EFI-bootloader van Microsoft is niet hersteld in de Windows Boot Manager. Alleen de EFI-opstartbestanden moeten worden gerepareerd. Gebruik de reparatieoptie van de VeraCrypt Rescue Disk, of start op vanaf het Windows-herstelmedium en voer 'bcdboot W:\\Windows /s S: /f UEFI' uit, waarbij u W: vervangt door de stationsletter van het Windows-volume en S: door de stationsletter van de EFI-systeempartitie. Pad:</entry>
<entry lang="nl" key="EFI_FALLBACK_BOOT_LOADER_STILL_VERACRYPT">De systeempartitie/schijf is al ontsleuteld, maar het pad naar de fallback-EFI-bootloader bevat nog steeds de VeraCrypt-bootloader. Alleen de EFI-opstartbestanden moeten worden gerepareerd. Gebruik de reparatieoptie van de VeraCrypt Rescue Disk, of start op vanaf het Windows-herstelmedium en voer 'bcdboot W:\\Windows /s S: /f UEFI' uit, waarbij u W: vervangt door de stationsletter van het Windows-volume en S: door de stationsletter van de EFI-systeempartitie. Pad:</entry>
<entry lang="nl" key="IDM_REPAIR_EFI_BOOT_LOADER">EFI-bootloader repareren...</entry>
<entry lang="nl" key="CONFIRM_REPAIR_EFI_BOOT_LOADER">VeraCrypt herstelt de paden van de Windows EFI-bootloader en verwijdert de EFI-opstartvermeldingen en -bestanden van VeraCrypt.\n\nGebruik deze optie alleen nadat de systeempartitie/het systeemstation volledig is ontsleuteld en Windows kan opstarten zonder systeemversleuteling.\n\nWilt u doorgaan?</entry>
<entry lang="nl" key="EFI_BOOT_LOADER_FILE_READ_FAILED">Het EFI-bootloaderbestand kon niet volledig worden gelezen:</entry>
@@ -1668,10 +1668,10 @@
<entry lang="nl" key="PIM_ARGON2_LARGE_WARNING">U hebt een Argon2 PIM-waarde gekozen die hoger is dan de standaardwaarde van VeraCrypt.\nHoud er rekening mee dat dit meer geheugen kan vergen en kan leiden tot een aanzienlijk tragere koppeling.</entry>
<entry lang="nl" key="PIM_ARGON2_SMALL_WARNING">U hebt een Argon2-PIM-waarde gekozen die lager is dan de standaardwaarde van VeraCrypt. Houd er rekening mee dat als uw wachtwoord niet sterk genoeg is, dit kan leiden tot een lagere beveiliging.\n\nBevestigt u dat u een sterk wachtwoord gebruikt?</entry>
<entry lang="nl" key="PIM_ARGON2_REQUIRE_LONG_PASSWORD">Het wachtwoord moet uit minimaal 20 tekens bestaan om de opgegeven Argon2-PIM te kunnen gebruiken.\nKortere wachtwoorden kunnen alleen worden gebruikt als de Argon2-PIM 12 of hoger is.</entry>
<entry lang="en" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER">Mount NTFS volumes with an in-kernel Linux driver</entry>
<entry lang="en" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER_HELP">Linux only. When enabled and no explicit filesystem type was supplied, VeraCrypt probes the decrypted virtual device with blkid -p and mounts detected NTFS filesystems with an available in-kernel NTFS driver, bypassing mount helpers such as ntfs-3g. VeraCrypt uses ntfs when it is positively identified as a modern read/write driver or expected on Linux 7.1 or later, and otherwise uses ntfs3. If NTFS detection fails, VeraCrypt uses the normal automatic filesystem selection. If no supported in-kernel NTFS driver is available or loadable, mounting fails. This opt-in option can avoid suspend or hibernate hangs caused by frozen user-space FUSE filesystems.</entry>
<entry lang="en" key="LINUX_KERNEL_NTFS_DRIVER_UNAVAILABLE">No supported in-kernel NTFS driver is available or loadable. To use the system default NTFS backend, disable the NTFS kernel-driver preference or do not request kernel NTFS explicitly.</entry>
<entry lang="nl" key="LINUX_EMERGENCY_UNMOUNT_WARNING">Het normaal ontkoppelen van volume {0} is mislukt. Dit kan gebeuren wanneer applicaties nog bestanden of mappen op het volume open hebben staan, of wanneer het onderliggende apparaat is losgekoppeld en de koppeling verouderd is geraakt.\n\nAls het apparaat nog is aangesloten, kies dan Nee, sluit de applicaties die het volume gebruiken en probeer het ontkoppelen opnieuw.\n\nAls het apparaat is losgekoppeld of de koppeling verouderd is, kan VeraCrypt een noodopruiming uitvoeren door het bestandssysteem lui los te koppelen en VeraCrypt-kernelobjecten te verwijderen of de verwijdering ervan in te plannen. Lopende schrijfbewerkingen zijn mogelijk mislukt, er kan gegevensverlies optreden en de opruiming kan in behandeling blijven totdat applicaties geopende bestanden sluiten. Controleer het bestandssysteem met fsck of het juiste reparatieprogramma voordat u het opnieuw gebruikt.\n\nDoorgaan?</entry>
<entry lang="nl" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER">NTFS-volumes koppelen met een Linux-stuurprogramma in de kernel</entry>
<entry lang="nl" key="LINUX_PREF_MOUNT_NTFS_WITH_KERNEL_DRIVER_HELP">Alleen voor Linux. Wanneer deze optie is ingeschakeld en er geen specifiek bestandssysteemtype is opgegeven, onderzoekt VeraCrypt het ontsleutelde virtuele apparaat met 'blkid -p' en koppelt het gedetecteerde NTFS-bestandssystemen met een beschikbare NTFS-driver in de kernel, waarbij koppelhulpprogramma's zoals 'ntfs-3g' worden omzeild. VeraCrypt gebruikt ntfs wanneer dit duidelijk wordt geïdentificeerd als een modern lees-/schrijfstuurprogramma of wordt verwacht op Linux 7.1 of later, en gebruikt anders ntfs3. Als de NTFS-detectie mislukt, gebruikt VeraCrypt de normale automatische bestandssysteemselectie. Als er geen ondersteund NTFS-stuurprogramma in de kernel beschikbaar of laadbaar is, mislukt het koppelen. Deze opt-in-optie kan vastlopers bij slaapstand of sluimerstand voorkomen die worden veroorzaakt door bevroren FUSE-bestandssystemen in de gebruikersruimte.</entry>
<entry lang="nl" key="LINUX_KERNEL_NTFS_DRIVER_UNAVAILABLE">Er is geen ondersteunde NTFS-kerneldriver beschikbaar of laadbaar. Om de standaard NTFS-backend van het systeem te gebruiken, moet u de voorkeur voor de NTFS-kerneldriver uitschakelen of niet expliciet om de NTFS-kerneldriver vragen.</entry>
<entry lang="nl" key="LINUX_EMERGENCY_UNMOUNT_WARNING">Het normaal ontkoppelen van volume {0} is mislukt. Dit kan gebeuren wanneer applicaties nog bestanden of mappen op het volume open hebben staan, of wanneer het onderliggende apparaat is losgekoppeld en de koppeling verouderd is geraakt.\n\nAls het apparaat nog is aangesloten, kies dan 'Nee', sluit de applicaties die het volume gebruiken en probeer het ontkoppelen opnieuw.\n\nAls het apparaat is losgekoppeld of de koppeling verouderd is, kan VeraCrypt een noodopruiming uitvoeren door het bestandssysteem lui los te koppelen en VeraCrypt-kernelobjecten te verwijderen of de verwijdering ervan in te plannen. Lopende schrijfbewerkingen zijn mogelijk mislukt, er kan gegevensverlies optreden en de opruiming kan in behandeling blijven totdat applicaties geopende bestanden sluiten. Controleer het bestandssysteem met fsck of het juiste reparatieprogramma voordat u het opnieuw gebruikt.\n\nDoorgaan?</entry>
<entry lang="nl" key="LINUX_EMERGENCY_UNMOUNTED">De noodopruiming voor volume {0} is gestart. Als het volume was losgekoppeld, de koppeling verouderd was of er nog schrijfbewerkingen in de wachtrij stonden, controleer dan het bestandssysteem met fsck of het juiste reparatieprogramma voordat u het weer gebruikt.</entry>
<entry lang="nl" key="FORMAT_STAGE_WRITING_DATA">Volumegegevens aanmaken. Even geduld.</entry>
<entry lang="nl" key="FORMAT_STAGE_WRITING_BACKUP_HEADER">Aanmaken van volume voltooien: backup-header schrijven.</entry>
@@ -1683,11 +1683,11 @@
<entry lang="nl" key="FORMAT_STAGE_PREPARING_TEMP_DEVICE">Aanmaken van volume voltooien: tijdelijk apparaat voorbereiden.</entry>
<entry lang="nl" key="FORMAT_STAGE_CREATING_FILESYSTEM">Aanmaken van volume voltooien: bestandssysteem aanmaken met {0}.</entry>
<entry lang="nl" key="FORMAT_STAGE_DISMOUNTING_TEMP_VOLUME">Aanmaken van volume voltooien: tijdelijk volume ontkoppelen.</entry>
<entry lang="nl" key="MACOSX_APFS_SYNTHESIZED_DEVICE">Het geselecteerde apparaat {0} is een door APFS gesynthetiseerde container of een APFS-volume en kan niet worden gebruikt als host voor een onbewerkt VeraCrypt-volume.\n\nSelecteer in plaats daarvan de fysieke APFS-opslagpartitie{1}.</entry>
<entry lang="nl" key="MACOSX_DEVICE_SYSTEM_PARTITION">Het geselecteerde apparaat {0} is een systeem-/ondersteuningspartitie van macOS en kan niet worden gebruikt als host voor een VeraCrypt-volume.</entry>
<entry lang="nl" key="MACOSX_APFS_SYSTEM_STORE">De geselecteerde fysieke APFS-opslag {0} bevat het momenteel gekoppelde macOS-systeemvolume en kan niet worden gebruikt als host voor een VeraCrypt-volume.</entry>
<entry lang="nl" key="MACOSX_DEVICE_NOT_WRITABLE">macOS meldt dat het geselecteerde apparaat {0} alleen-lezen is. Selecteer een fysieke partitie of schijf waarop geschreven kan worden.</entry>
<entry lang="nl" key="MACOSX_APFS_EROFS_HINT">macOS geeft aan dat het geselecteerde apparaat alleen-lezen is. Als dit een APFS-schijf is, controleer dan of u de fysieke APFS-opslagpartitie hebt geselecteerd en niet een gesynthetiseerd APFS-volume. Gebruik Schijfhulpprogramma of diskutil list om de fysieke partitie te identificeren en probeer het vervolgens opnieuw.</entry>
<entry lang="nl" key="MACOSX_APFS_SYNTHESIZED_DEVICE">Het geselecteerde apparaat '{0}' is een door APFS gesynthetiseerde container of een APFS-volume en kan niet worden gebruikt als host voor een onbewerkt VeraCrypt-volume.\n\nSelecteer in plaats daarvan de fysieke APFS-opslagpartitie{1}.</entry>
<entry lang="nl" key="MACOSX_DEVICE_SYSTEM_PARTITION">Het geselecteerde apparaat '{0}' is een systeem-/ondersteuningspartitie van macOS en kan niet worden gebruikt als host voor een VeraCrypt-volume.</entry>
<entry lang="nl" key="MACOSX_APFS_SYSTEM_STORE">De geselecteerde fysieke APFS-opslag '{0}' bevat het momenteel gekoppelde macOS-systeemvolume en kan niet worden gebruikt als host voor een VeraCrypt-volume.</entry>
<entry lang="nl" key="MACOSX_DEVICE_NOT_WRITABLE">macOS meldt dat het geselecteerde apparaat '{0}' alleen-lezen is. Selecteer een fysieke partitie of schijf waarop geschreven kan worden.</entry>
<entry lang="nl" key="MACOSX_APFS_EROFS_HINT">macOS geeft aan dat het geselecteerde apparaat alleen-lezen is. Als dit een APFS-schijf is, controleer dan of u de fysieke APFS-opslagpartitie hebt geselecteerd en niet een gesynthetiseerd APFS-volume. Gebruik Schijfhulpprogramma of 'diskutil list' om de fysieke partitie te identificeren en probeer het vervolgens opnieuw.</entry>
</localization>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="VeraCrypt">
Binary file not shown.
+2 -2
View File
@@ -88,7 +88,7 @@ The amount of memory used during the key derivation process, controlled by the P
<strong>Range:</strong> 64 MiB to 1024 MiB (capped at PIM = 31)
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
<strong>Default:</strong> 96 MiB (equivalent to PIM = 2)
<strong>Default:</strong> 416 MiB (equivalent to PIM = 12)
</li>
</ul>
@@ -104,7 +104,7 @@ The number of iterations performed during the key derivation process:
<strong>For PIM > 31:</strong> t_cost(pim) = 13 + (pim - 31)
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
<strong>Default:</strong> 3 iterations (equivalent to PIM = 2)
<strong>Default:</strong> 6 iterations (equivalent to PIM = 12)
</li>
</ul>
@@ -173,6 +173,7 @@ Note that turning the password cache off will not clear it (use /w to clear the
fact that the password needs to be typed in the pre-boot environment (before Windows starts) where non-US Windows keyboard layouts are not available.</p>
<p><strong>bk</strong> or <strong>headerbak</strong>: Mount volume using embedded backup header. Note: All volumes created by VeraCrypt contain an embedded backup header (located at the end of the volume).</p>
<p><strong>recovery</strong>: Do not verify any checksums stored in the volume header. This option should be used only when the volume header is damaged and the volume cannot be mounted even with the mount option headerbak. Example: /m ro</p>
<p><strong>recoveryro</strong>, <strong>inplacerecovery</strong>, or <strong>nonsysinplacerecovery</strong>: Recovery-mount an interrupted non-system in-place encryption/decryption device-hosted volume as read-only using the embedded backup header. Use this option only to copy data from a sector-by-sector clone or image.</p>
<p><strong>label=LabelValue</strong>: Use the given string value <strong>LabelValue</strong> as a label of the mounted volume in Windows Explorer. The maximum length for
<strong>LabelValue&nbsp;</strong> is 32 characters for NTFS volumes and 11 characters for FAT volumes. For example,
<em>/m label=MyDrive</em> will set the label of the drive in Explorer to <em>MyDrive</em>.</p>
@@ -320,7 +321,7 @@ If it is followed by <strong>n</strong> or <strong>no</strong>: the password dia
</tbody>
</table>
<h4>Syntax</h4>
<p>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [drive letter]] [/e] [/f] [/h [y|n]] [/k keyfile or search path] [tryemptypass [y|n]] [/l drive letter] [/m {bk|rm|recovery|ro|sm|ts|noattach}]
<p>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [drive letter]] [/e] [/f] [/h [y|n]] [/k keyfile or search path] [tryemptypass [y|n]] [/l drive letter] [/m {bk|rm|recovery|recoveryro|ro|sm|ts|noattach}]
[/p password] [/pim pimvalue] [/q [background|preferences]] [/s] [/tokenlib path] [/v volume] [/w]</p>
<p>&quot;VeraCrypt Format.exe&quot; [/n] [/create] [/size number[{K|M|G|T}]] [/p password]&nbsp; [/encryption {AES | Serpent | Twofish | Camellia | Kuznyechik | AES(Twofish) | AES(Twofish(Serpent)) | Serpent(AES) | Serpent(Twofish(AES)) | Twofish(Serpent) | Camellia(Kuznyechik) | Kuznyechik(Twofish) | Camellia(Serpent) | Kuznyechik(AES) | Kuznyechik(Serpent(Camellia)))}] [/hash {sha256|sha-256|sha512|sha-512|whirlpool|blake2s|blake2s-256}]
[/filesystem {None|FAT|NTFS|ExFAT|ReFS}] [/dynamic] [/force] [/silent] [/noisocheck] [FastCreateFile] [/quick]</p>
+1
View File
@@ -73,6 +73,7 @@ Thus, when setting or entering your password, it's crucial to type it manually u
<p>Note: By default, Windows 7 and later boot from a special small partition. The partition contains files that are required to boot the system. Windows allows only applications that have administrator privileges to write to the partition (when the system is
running). In EFI boot mode, which is the default on modern PCs, VeraCrypt can not encrypt this partition since it must remain unencrypted so that the BIOS can load the EFI bootloader from it. This in turn implies that in EFI boot mode, VeraCrypt offers only to encrypt the system partition where Windows is installed (the user can later manually encrypt other data partitions using VeraCrypt).
In MBR legacy boot mode, VeraCrypt encrypts the partition only if you choose to encrypt the whole system drive (as opposed to choosing to encrypt only the partition where Windows is installed).</p>
<p>In EFI boot mode with Secure Boot enabled, VeraCrypt selects the installed Microsoft UEFI CA-signed bootloader set during install, repair, upgrade, or Windows PostOOBE repair. If you manually change firmware Secure Boot db entries, run VeraCrypt repair or reinstall to refresh the installed bootloader set.</p>
<p>&nbsp;</p>
<p><a href="Hidden%20Operating%20System.html" style="text-align:left; color:#0080c0; text-decoration:none; font-weight:bold">Next Section &gt;&gt;</a></p>
</div>
+2
View File
@@ -93,6 +93,8 @@ To boot a VeraCrypt Rescue Disk, insert it into a USB port or your CD/DVD drive
configuration screen appears, restart (reset) the computer again and start pressing F2 or Delete repeatedly as soon as you restart (reset) the computer. When a BIOS configuration screen appears, configure your BIOS to boot from the USB drive and CD/DVD drive first (for
information on how to do so, please refer to the documentation for your BIOS/motherboard or contact your computer vendor's technical support team for assistance). Then restart your computer. The VeraCrypt Rescue Disk screen should appear now. Note: In the
case of MBR legacy boot mode, you can select 'Repair Options' on the VeraCrypt Rescue Disk screen by pressing F8 on your keyboard.</div>
<p>In EFI boot mode with Secure Boot enabled, the VeraCrypt Rescue Disk uses the Microsoft UEFI CA-signed bootloader set selected from the computer's current Secure Boot db state when the Rescue Disk is created. If firmware or Secure Boot db entries are later changed, create a new VeraCrypt Rescue Disk. A Rescue Disk created on a computer that trusts only one Microsoft UEFI CA generation may not Secure-Boot on a different computer that trusts only the other generation.</p>
<p>Installed EFI bootloader files are refreshed only during VeraCrypt install, repair, upgrade, or Windows PostOOBE repair paths. If you manually change firmware Secure Boot db entries, run VeraCrypt repair or reinstall to refresh the installed bootloader set.</p>
<p>If your VeraCrypt Rescue Disk is damaged, you can create a new one by selecting
<em style="text-align:left">System</em> &gt; <em style="text-align:left">Create Rescue Disk</em>. To find out whether your VeraCrypt Rescue Disk is damaged, insert it into a USB port (or into your CD/DVD drive in case of MBR legacy boot mode) and select
<em style="text-align:left">System</em> &gt; <em style="text-align:left">Verify Rescue Disk</em>.</p>
+2 -1
View File
@@ -168,6 +168,7 @@
что пароль требуется вводить на этапе до загрузки операционной системы (до запуска Windows), когда раскладки клавиатуры, отличные от американской, ещё недоступны.</p>
<p><strong>bk</strong> или <strong>headerbak</strong>: смонтировать том, используя встроенную резервную копию заголовка. Примечание: встроенная резервная копия заголовка содержится во всех томах, созданных VeraCrypt (эта копия располагается в конце тома).</p>
<p><strong>recovery</strong>: не проверять контрольные суммы, хранящиеся в заголовке тома. Этот параметр следует использовать только при повреждении заголовка тома и когда такой том невозможно смонтировать даже с параметром headerbak. Пример: /m ro</p>
<p><strong>recoveryro</strong>, <strong>inplacerecovery</strong> или <strong>nonsysinplacerecovery</strong>: восстановительное монтирование прерванного несистемного тома с шифрованием/расшифровкой на месте, размещённого на устройстве, только для чтения с использованием встроенного резервного заголовка. Используйте этот параметр только для копирования данных с посекторного клона или образа.</p>
<p><strong>label=LabelValue</strong>: использовать указанную строку <strong>LabelValue</strong> как метку смонтированного тома в Проводнике Windows. Максимальная длина
<strong>LabelValue&nbsp;</strong> – 32 символа для томов NTFS и 11 символов для томов FAT. Например,
<code>/m label=MyDrive</code> установит для диска в Проводнике метку тома <em>MyDrive</em>.</p>
@@ -305,7 +306,7 @@
</tbody>
</table>
<h4>Синтаксис</h4>
<p><code>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [буква диска]] [/e] [/f] [/h [y|n]] [/k ключевой файл или путь поиска] [tryemptypass [y|n]] [/l буква диска] [/m {bk|rm|recovery|ro|sm|ts|noattach}]
<p><code>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [буква диска]] [/e] [/f] [/h [y|n]] [/k ключевой файл или путь поиска] [tryemptypass [y|n]] [/l буква диска] [/m {bk|rm|recovery|recoveryro|ro|sm|ts|noattach}]
[/p пароль] [/pim значение pim] [/q [background|preferences]] [/s] [/tokenlib путь] [/v том] [/w]</code></p>
<p><code>&quot;VeraCrypt Format.exe&quot; [/n] [/create] [/size число[{K|M|G|T}]] [/p пароль]&nbsp; [/encryption {AES | Serpent | Twofish | Camellia | Kuznyechik | AES(Twofish) | AES(Twofish(Serpent)) | Serpent(AES) | Serpent(Twofish(AES)) | Twofish(Serpent) | Camellia(Kuznyechik) | Kuznyechik(Twofish) | Camellia(Serpent) | Kuznyechik(AES) | Kuznyechik(Serpent(Camellia))}] [/hash {sha256|sha-256|sha512|sha-512|whirlpool|blake2s|blake2s-256}]
[/filesystem {пусто|FAT|NTFS|ExFAT|ReFS}] [/dynamic] [/force] [/silent] [/noisocheck] [FastCreateFile] [/quick]</code></p>
+3 -2
View File
@@ -165,6 +165,7 @@
<p><strong>sm</strong><strong>system</strong>:无需预启动验证,挂载位于系统加密密钥范围内的分区(例如,位于未运行的其他操作系统的加密系统驱动器上的分区)。 例如,用于备份或修复操作。注意:如果您将密码作为 /p 的参数提供,请确保使用标准美式键盘布局键入密码(相比之下,GUI 会自动确保这一点)。这是必需的,因为密码需要在预启动环境(Windows 启动之前)中键入,而在该环境中非美式 Windows 键盘布局不可用。</p>
<p><strong>bk</strong><strong>headerbak</strong>:使用嵌入式备份头挂载卷。注意:VeraCrypt 创建的所有卷都包含一个嵌入式备份头(位于卷的末尾)。</p>
<p><strong>recovery</strong>:不验证存储在卷头中的任何校验和。仅当卷头损坏且即使使用挂载选项 headerbak 也无法挂载卷时,才应使用此选项。示例:/m ro</p>
<p><strong>recoveryro</strong><strong>inplacerecovery</strong><strong>nonsysinplacerecovery</strong>:使用嵌入式备份头,以只读方式恢复挂载已中断的非系统就地加密/解密设备托管卷。仅应使用此选项从逐扇区克隆或映像中复制数据。</p>
<p><strong>label=LabelValue</strong>:使用给定的字符串值 <strong>LabelValue</strong> 作为 Windows 资源管理器中挂载卷的标签。对于 NTFS 卷,
<strong>LabelValue&nbsp;</strong> 的最大长度为 32 个字符,对于 FAT 卷,最大长度为 11 个字符。例如,
<em>/m label=我的驱动器</em> 将资源管理器中的驱动器标签设置为 <em>我的驱动器</em></p>
@@ -299,7 +300,7 @@
</tbody>
</table>
<h4>语法</h4>
<p>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [drive letter]] [/e] [/f] [/h [y|n]] [/k keyfile or search path] [tryemptypass [y|n]] [/l drive letter] [/m {bk|rm|recovery|ro|sm|ts|noattach}]
<p>VeraCrypt.exe [/tc] [/hash {sha256|sha-256|sha512|sha-512|whirlpool |blake2s|blake2s-256}][/a [devices|favorites]] [/b] [/c [y|n|f]] [/d [drive letter]] [/e] [/f] [/h [y|n]] [/k keyfile or search path] [tryemptypass [y|n]] [/l drive letter] [/m {bk|rm|recovery|recoveryro|ro|sm|ts|noattach}]
[/p password] [/pim pimvalue] [/q [background|preferences]] [/s] [/tokenlib path] [/v volume] [/w]</p>
<p>&quot;VeraCrypt Format.exe&quot; [/n] [/create] [/size number[{K|M|G|T}]] [/p password]&nbsp; [/encryption {AES | Serpent | Twofish | Camellia | Kuznyechik | AES(Twofish) | AES(Twofish(Serpent)) | Serpent(AES) | Serpent(Twofish(AES)) | Twofish(Serpent) | Camellia(Kuznyechik) | Kuznyechik(Twofish) | Camellia(Serpent) | Kuznyechik(AES) | Kuznyechik(Serpent(Camellia))}] [/hash {sha256|sha-256|sha512|sha-512|whirlpool|blake2s|blake2s-256}]
[/filesystem {None|FAT|NTFS|ExFAT|ReFS}] [/dynamic] [/force] [/silent] [/noisocheck] [FastCreateFile] [/quick]</p>
@@ -315,4 +316,4 @@
<p>使用密码 <em>test</em> 创建一个 10 MB 的文件容器,并使用 FAT 格式化:</p>
<p><code>&quot;C:\Program Files\VeraCrypt\VeraCrypt Format.exe&quot; /create c:\Data\test.hc /password test /hash sha512 /encryption serpent /filesystem FAT /size 10M /force</code></p>
</div>
</div><div class="ClearBoth"></div></body></html>
</div><div class="ClearBoth"></div></body></html>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -164,6 +164,7 @@ typedef struct
Password ProtectedHidVolPassword; /* Password to the hidden volume to be protected against overwriting */
BOOL UseBackupHeader;
BOOL RecoveryMode;
BOOL NonSysInplaceRecoveryReadOnly;
int pkcs5_prf;
int ProtectedHidVolPkcs5Prf;
BOOL VolumeMountedReadOnlyAfterPartialSysEnc;
+27
View File
@@ -437,6 +437,33 @@ DWORD BaseCom::GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKe
return ERROR_SUCCESS;
}
DWORD BaseCom::GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported)
{
if (!pMicrosoft2023UefiCAsSupported)
return ERROR_INVALID_PARAMETER;
try
{
BootEncryption bootEnc (NULL);
bootEnc.GetEfiBootLoaderSigningSupport (pMicrosoft2023UefiCAsSupported);
}
catch (SystemException &)
{
return GetLastError();
}
catch (Exception &e)
{
e.Show (NULL);
return ERROR_EXCEPTION_IN_SERVICE;
}
catch (...)
{
return ERROR_EXCEPTION_IN_SERVICE;
}
return ERROR_SUCCESS;
}
DWORD BaseCom::WriteEfiBootSectorUserConfig (DWORD userConfig, BSTR customUserMessage, int pim, int hashAlg)
{
if (!customUserMessage)
+1
View File
@@ -119,6 +119,7 @@ public:
static DWORD WriteEfiBootSectorUserConfig (DWORD userConfig, BSTR customUserMessage, int pim, int hashAlg);
static DWORD UpdateSetupConfigFile (BOOL bForInstall);
static DWORD GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKeysLoaded);
static DWORD GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported);
static DWORD NotifyService (DWORD dwNotifyCode);
static DWORD FastFileResize (BSTR filePath, __int64 fileSize);
+624 -71
View File
@@ -631,6 +631,18 @@ namespace VeraCrypt
}
}
static void GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported)
{
Elevate();
DWORD result = ElevatedComInstance->GetEfiBootLoaderSigningSupport (pMicrosoft2023UefiCAsSupported);
if (result != ERROR_SUCCESS)
{
SetLastError (result);
throw SystemException(SRC_POS);
}
}
static void WriteEfiBootSectorUserConfig (uint8 userConfig, const string &customUserMessage, int pim, int hashAlg)
{
Elevate();
@@ -755,6 +767,7 @@ namespace VeraCrypt
static void WriteEfiBootSectorUserConfig (uint8 userConfig, const string &customUserMessage, int pim, int hashAlg) { throw ParameterIncorrect (SRC_POS); }
static void UpdateSetupConfigFile (bool bForInstall) { throw ParameterIncorrect (SRC_POS); }
static void GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKeysLoaded) { throw ParameterIncorrect (SRC_POS); }
static void GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported) { throw ParameterIncorrect (SRC_POS); }
static void RegisterSystemFavoritesService(BOOL registerService) { throw ParameterIncorrect(SRC_POS); }
static BOOL IsPagingFileActive(BOOL checkNonWindowsPartitionsOnly) { throw ParameterIncorrect(SRC_POS); }
static void WriteLocalMachineRegistryDwordValue(wchar_t* keyPath, wchar_t* valueName, DWORD value) { throw ParameterIncorrect(SRC_POS); }
@@ -2504,6 +2517,530 @@ namespace VeraCrypt
}
static const wchar_t* EfiVarGuid = L"{8BE4DF61-93CA-11D2-AA0D-00E098032B8C}";
static const wchar_t* EfiImageSecurityDatabaseGuid = L"{D719B2CB-3D3A-4596-A3BC-DAD00E67656F}";
struct EfiBootLoaderResourceSet
{
int DcsBoot;
int DcsInt;
int DcsCfg;
int LegacySpeaker;
int DcsRescue;
int DcsInfo;
};
struct EfiBootLoaderImages
{
uint8 *DcsBoot;
DWORD SizeDcsBoot;
uint8 *DcsInt;
DWORD SizeDcsInt;
uint8 *DcsCfg;
DWORD SizeDcsCfg;
uint8 *LegacySpeaker;
DWORD SizeLegacySpeaker;
uint8 *DcsRescue;
DWORD SizeDcsRescue;
uint8 *DcsInfo;
DWORD SizeDcsInfo;
DWORD ResourceSet;
const wchar_t *SelectionReason;
DWORD FirmwareDbError;
};
struct EfiBootLoaderResourceSelection
{
const EfiBootLoaderResourceSet *Resources;
DWORD ResourceSet;
const wchar_t *Reason;
DWORD FirmwareDbError;
};
static const EfiBootLoaderResourceSet EfiBootLoaderResources2011 =
{
IDR_EFI_DCSBOOT_2011,
IDR_EFI_DCSINT_2011,
IDR_EFI_DCSCFG_2011,
IDR_EFI_LEGACYSPEAKER_2011,
IDR_EFI_DCSRE_2011,
IDR_EFI_DCSINFO_2011
};
static const EfiBootLoaderResourceSet EfiBootLoaderResources2023 =
{
IDR_EFI_DCSBOOT_2023,
IDR_EFI_DCSINT_2023,
IDR_EFI_DCSCFG_2023,
IDR_EFI_LEGACYSPEAKER_2023,
IDR_EFI_DCSRE_2023,
IDR_EFI_DCSINFO_2023
};
static const wchar_t *EfiBootLoaderDiagnosticsRegistryKey = L"Software\\VeraCrypt\\Diagnostics\\EfiBootLoader";
static bool ReadFirmwareEnvironmentVariableBuffer (const wchar_t* name, const wchar_t* guid, std::vector<uint8>& value, DWORD* pLastError = NULL)
{
bool bRet = false;
DWORD dwError = ERROR_SUCCESS;
BOOL bPrivilegesSet = IsPrivilegeEnabled (SE_SYSTEM_ENVIRONMENT_NAME);
BOOL bPrivilegeEnabled = FALSE;
const DWORD maxBufferSize = 16 * 1024 * 1024;
DWORD bufferSize = 16384;
value.clear ();
if (pLastError)
*pLastError = ERROR_SUCCESS;
if (!bPrivilegesSet)
{
if (!SetPrivilege (SE_SYSTEM_ENVIRONMENT_NAME, TRUE))
{
dwError = GetLastError ();
if (dwError == ERROR_SUCCESS)
dwError = ERROR_PRIVILEGE_NOT_HELD;
if (pLastError)
*pLastError = dwError;
SetLastError (dwError);
return false;
}
bPrivilegeEnabled = TRUE;
}
try
{
while (bufferSize <= maxBufferSize)
{
value.resize (bufferSize);
SetLastError (ERROR_SUCCESS);
DWORD dwLen = GetFirmwareEnvironmentVariableW (name, guid, value.data(), bufferSize);
if (dwLen != 0)
{
value.resize (dwLen);
bRet = true;
break;
}
dwError = GetLastError ();
if (dwError == ERROR_SUCCESS)
{
value.resize (0);
bRet = true;
break;
}
if ((dwError != ERROR_INSUFFICIENT_BUFFER) || (bufferSize == maxBufferSize))
break;
bufferSize = (bufferSize > (maxBufferSize / 2)) ? maxBufferSize : (bufferSize * 2);
}
}
catch (...)
{
if (bPrivilegeEnabled)
SetPrivilege (SE_SYSTEM_ENVIRONMENT_NAME, FALSE);
throw;
}
if (bPrivilegeEnabled)
SetPrivilege (SE_SYSTEM_ENVIRONMENT_NAME, FALSE);
if (!bRet)
{
value.clear ();
if (dwError == ERROR_SUCCESS)
dwError = GetLastError ();
if (dwError == ERROR_SUCCESS)
dwError = ERROR_INVALID_DATA;
if (pLastError)
*pLastError = dwError;
SetLastError (dwError);
}
return bRet;
}
static EfiBootLoaderResourceSelection MakeEfiBootLoaderResourceSelection (const EfiBootLoaderResourceSet& resources, DWORD resourceSet, const wchar_t *reason, DWORD firmwareDbError)
{
EfiBootLoaderResourceSelection selection = { &resources, resourceSet, reason, firmwareDbError };
return selection;
}
static void RecordEfiBootLoaderResourceSetSelection (const EfiBootLoaderImages& images)
{
if (!images.ResourceSet || !images.SelectionReason)
return;
DWORD previousLastError = GetLastError ();
WCHAR selectionTimeUtc[32] = {0};
SYSTEMTIME systemTime;
GetSystemTime (&systemTime);
StringCchPrintfW (selectionTimeUtc, ARRAYSIZE (selectionTimeUtc), L"%04u-%02u-%02uT%02u:%02u:%02uZ",
systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
WriteLocalMachineRegistryDword ((wchar_t *) EfiBootLoaderDiagnosticsRegistryKey, L"EfiBootLoaderResourceSet", images.ResourceSet);
WriteLocalMachineRegistryDword ((wchar_t *) EfiBootLoaderDiagnosticsRegistryKey, L"EfiBootLoaderFirmwareDbLastError", images.FirmwareDbError);
WriteLocalMachineRegistryString (EfiBootLoaderDiagnosticsRegistryKey, L"EfiBootLoaderSelectionReason", images.SelectionReason, FALSE);
WriteLocalMachineRegistryString (EfiBootLoaderDiagnosticsRegistryKey, L"EfiBootLoaderSelectionTimeUtc", selectionTimeUtc, FALSE);
SetLastError (previousLastError);
}
static uint32 ReadUint32LittleEndian (const uint8* buffer)
{
return (uint32) buffer[0]
| ((uint32) buffer[1] << 8)
| ((uint32) buffer[2] << 16)
| ((uint32) buffer[3] << 24);
}
static bool BufferEquals (const uint8* buffer, const uint8* expected, size_t expectedSize)
{
// Callers of this overload must first verify that buffer contains at least expectedSize bytes.
return memcmp (buffer, expected, expectedSize) == 0;
}
static bool BufferEquals (const uint8* buffer, size_t bufferSize, const uint8* expected, size_t expectedSize)
{
return (bufferSize == expectedSize) && BufferEquals (buffer, expected, expectedSize);
}
static bool FirmwareDbBufferContainsMicrosoft2023UefiCAs (const std::vector<uint8>& db)
{
// Microsoft documents these CAs as valid db entries in EFI_CERT_X509_GUID or EFI_CERT_RSA2048_GUID form:
// https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance
// EFI_CERT_X509_GUID {a5c059a1-94e4-4aa7-87b5-ab155c2bf072}
static const uint8 efiCertX509Guid[16] = { 0xA1, 0x59, 0xC0, 0xA5, 0xE4, 0x94, 0xA7, 0x4A, 0x87, 0xB5, 0xAB, 0x15, 0x5C, 0x2B, 0xF0, 0x72 };
// EFI_CERT_RSA2048_GUID {3c5766e8-269c-4e34-aa14-ed776e85b3b6}
static const uint8 efiCertRsa2048Guid[16] = { 0xE8, 0x66, 0x57, 0x3C, 0x9C, 0x26, 0x34, 0x4E, 0xAA, 0x14, 0xED, 0x77, 0x6E, 0x85, 0xB3, 0xB6 };
const size_t efiRsa2048KeySize = 256;
// X.509 entries are matched by embedded CA public-key modulus bytes; RSA2048 entries contain this modulus directly.
// This is a byte-presence heuristic for bootloader-set selection, not full certificate-chain validation.
// Microsoft UEFI CA 2023, SHA-1 thumbprint B5EEB4A6706048073F0ED296E7F580A790B59EAA.
// DER source: https://go.microsoft.com/fwlink/?linkid=2239872, SHA-256 F6124E34125BEE3FE6D79A574EAA7B91C0E7BD9D929C1A321178EFD611DAD901.
static const uint8 microsoftUefiCa2023Rsa2048Modulus[256] =
{
0xBD, 0x22, 0x2A, 0xAE, 0xEF, 0x1A, 0x31, 0x85,
0x13, 0x78, 0x51, 0xA7, 0x9B, 0xFD, 0xFC, 0x78,
0xD1, 0x63, 0xB8, 0x1A, 0x9B, 0x63, 0xF5, 0x12,
0x06, 0xDB, 0x4B, 0x41, 0x35, 0x6A, 0x6F, 0xAB,
0xF5, 0x6A, 0x04, 0xCC, 0x97, 0xCF, 0xBB, 0xD4,
0x08, 0x09, 0x1A, 0x61, 0x3A, 0x0D, 0xE6, 0xB3,
0xA0, 0x46, 0xFF, 0x09, 0xAD, 0xDE, 0x80, 0x24,
0xDC, 0x12, 0x80, 0xF2, 0x5F, 0xD9, 0x16, 0xED,
0xE2, 0x42, 0x9D, 0xCD, 0x2F, 0x4D, 0x61, 0x02,
0x61, 0x8A, 0x1C, 0x4B, 0x1D, 0x18, 0x62, 0x39,
0x86, 0x97, 0x71, 0xAD, 0x3E, 0x7F, 0x5D, 0x71,
0x13, 0x4B, 0xE9, 0x2A, 0x00, 0xC1, 0xBE, 0xD5,
0xB7, 0x00, 0x9F, 0x5E, 0x65, 0xB2, 0x2C, 0x1A,
0xFF, 0x74, 0xED, 0xEA, 0x83, 0xD2, 0x39, 0x89,
0x33, 0x35, 0x73, 0x7D, 0xA0, 0xA2, 0xFA, 0x40,
0xE4, 0x66, 0x50, 0x58, 0xAA, 0xFC, 0x87, 0xE8,
0x5C, 0x20, 0x83, 0x34, 0xEC, 0xAB, 0xE2, 0x0B,
0xC5, 0x5F, 0x3E, 0xFF, 0x48, 0x2B, 0x11, 0x91,
0x26, 0xEF, 0x18, 0x6E, 0x57, 0xC5, 0x9F, 0x18,
0x73, 0x99, 0xEF, 0xE1, 0x6A, 0x74, 0x2B, 0xBB,
0x2F, 0x7F, 0x50, 0x8E, 0x1D, 0xDA, 0x3D, 0x76,
0xB6, 0x04, 0xE5, 0xCC, 0x2E, 0x10, 0xC7, 0x83,
0x1B, 0x83, 0xA3, 0xE4, 0xA5, 0x13, 0x13, 0x71,
0x6E, 0x33, 0x78, 0xA3, 0xA8, 0x3C, 0xEC, 0x48,
0x26, 0x5E, 0xC7, 0xC6, 0x5E, 0x0D, 0x87, 0x9A,
0xAA, 0xCC, 0x55, 0x34, 0x81, 0xAD, 0x9D, 0x90,
0xF5, 0xE6, 0x96, 0x63, 0xA6, 0xE8, 0x07, 0x20,
0x17, 0xC8, 0x93, 0x1E, 0xD2, 0xAE, 0xA4, 0xDC,
0xAE, 0x7D, 0x59, 0xBF, 0x88, 0x5E, 0x62, 0x0C,
0xAE, 0x5B, 0xF2, 0x29, 0x40, 0x56, 0x1D, 0x26,
0x40, 0xDE, 0x85, 0xA6, 0xAD, 0x56, 0xD1, 0xCF,
0x55, 0x47, 0x76, 0x5F, 0x9C, 0x39, 0xDB, 0x03
};
// Microsoft Option ROM UEFI CA 2023, SHA-1 thumbprint 3FB39E2B8BD183BF9E4594E72183CA60AFCD4277.
// DER source: https://go.microsoft.com/fwlink/?linkid=2284009, SHA-256 E5BE3E64C6E66A281457ECDECE0D6D0787577AAD2A3A0144262C10C14BA8D8F1.
static const uint8 microsoftOptionRomUefiCa2023Rsa2048Modulus[256] =
{
0xD3, 0x0B, 0xFE, 0x89, 0xCD, 0xCD, 0xB6, 0xEE,
0xDC, 0xE5, 0x1A, 0x8D, 0xDC, 0xCA, 0x21, 0x1A,
0x0F, 0x22, 0x2F, 0x0B, 0xB5, 0x32, 0x84, 0x35,
0xC0, 0xBE, 0x6F, 0x70, 0x93, 0x55, 0xB4, 0x47,
0xCC, 0x49, 0x03, 0xC2, 0xFE, 0xCF, 0xBA, 0x32,
0x65, 0x64, 0xB7, 0x35, 0xBD, 0x04, 0x3B, 0x44,
0x64, 0x2F, 0xA0, 0xF2, 0xDD, 0xE1, 0x5D, 0xBA,
0xE7, 0xBD, 0x39, 0x9A, 0xBD, 0xCB, 0x4B, 0xE1,
0x83, 0xAA, 0x1B, 0xE8, 0x6F, 0x4E, 0x4C, 0x91,
0x52, 0x43, 0xA5, 0xC4, 0x50, 0x55, 0x68, 0xF5,
0xDA, 0xAC, 0x48, 0xA2, 0x9C, 0xEC, 0x35, 0xA7,
0x04, 0x56, 0x68, 0x19, 0xE2, 0xB1, 0x62, 0xD4,
0x92, 0xF4, 0x85, 0x3F, 0x34, 0xA1, 0x15, 0x67,
0x87, 0x21, 0x6E, 0x1F, 0xC9, 0xD8, 0x35, 0x32,
0xB8, 0x3D, 0xCB, 0x58, 0xCA, 0x29, 0x43, 0x54,
0x4A, 0x7E, 0x8B, 0x55, 0x7B, 0x23, 0x7A, 0x3A,
0xB6, 0x9D, 0x43, 0x07, 0x04, 0x6B, 0x9A, 0x6B,
0xF4, 0xF0, 0x20, 0xFF, 0xFA, 0xA6, 0xDF, 0xA2,
0x9E, 0x49, 0xE8, 0x55, 0xC5, 0x75, 0x88, 0x44,
0xAC, 0xA4, 0x41, 0x3A, 0x03, 0x7C, 0xBB, 0xE9,
0x93, 0xE4, 0x6C, 0xF1, 0xED, 0x79, 0x26, 0xC7,
0x8B, 0x32, 0xF7, 0x59, 0x49, 0x25, 0x31, 0x00,
0x67, 0x18, 0x0C, 0x67, 0xFB, 0x40, 0xC5, 0x5D,
0x76, 0x3D, 0x09, 0x87, 0xC2, 0x2D, 0x8C, 0x5F,
0x2B, 0x5A, 0x1E, 0x01, 0x0F, 0x33, 0xAF, 0x65,
0x08, 0x90, 0x4F, 0xFC, 0x64, 0x5B, 0x9C, 0xA3,
0x5C, 0xD6, 0x53, 0x1B, 0x51, 0x01, 0x9F, 0x98,
0xCF, 0xC4, 0x53, 0xC5, 0xB1, 0xDF, 0xB3, 0x68,
0x6F, 0x45, 0x4B, 0xC8, 0x45, 0x85, 0xC8, 0x1D,
0xB8, 0x9E, 0xD1, 0x77, 0x71, 0xA0, 0xD5, 0xA2,
0x77, 0x87, 0xEC, 0x67, 0x2E, 0xB9, 0x87, 0x06,
0x46, 0xDD, 0x41, 0x43, 0x40, 0x6A, 0x5F, 0x2F
};
const size_t efiGuidSize = 16;
const size_t efiSignatureListHeaderSize = efiGuidSize + sizeof (uint32) * 3;
const size_t efiSignatureOwnerSize = efiGuidSize;
bool bContainsMicrosoftUefiCa2023 = false;
bool bContainsMicrosoftOptionRomUefiCa2023 = false;
size_t offset = 0;
while (offset < db.size ())
{
if (db.size () - offset < efiSignatureListHeaderSize)
return false;
const uint8* signatureList = &db[offset];
uint32 signatureListSize = ReadUint32LittleEndian (signatureList + efiGuidSize);
uint32 signatureHeaderSize = ReadUint32LittleEndian (signatureList + efiGuidSize + sizeof (uint32));
uint32 signatureSize = ReadUint32LittleEndian (signatureList + efiGuidSize + sizeof (uint32) * 2);
if ((signatureListSize < efiSignatureListHeaderSize)
|| (signatureListSize > db.size () - offset)
|| (signatureHeaderSize > signatureListSize - efiSignatureListHeaderSize))
return false;
size_t signaturesOffset = offset + efiSignatureListHeaderSize + signatureHeaderSize;
size_t signaturesSize = signatureListSize - efiSignatureListHeaderSize - signatureHeaderSize;
if (BufferEquals (signatureList, efiCertX509Guid, efiGuidSize))
{
if (signatureSize < efiSignatureOwnerSize)
return false;
if ((signaturesSize % signatureSize) != 0)
return false;
for (size_t signatureOffset = signaturesOffset; signatureOffset < offset + signatureListSize; signatureOffset += signatureSize)
{
const uint8* certificate = &db[signatureOffset + efiSignatureOwnerSize];
size_t certificateSize = signatureSize - efiSignatureOwnerSize;
if (!bContainsMicrosoftUefiCa2023
&& BufferHasPattern (certificate, certificateSize, microsoftUefiCa2023Rsa2048Modulus, sizeof (microsoftUefiCa2023Rsa2048Modulus)))
{
bContainsMicrosoftUefiCa2023 = true;
}
else if (!bContainsMicrosoftOptionRomUefiCa2023
&& BufferHasPattern (certificate, certificateSize, microsoftOptionRomUefiCa2023Rsa2048Modulus, sizeof (microsoftOptionRomUefiCa2023Rsa2048Modulus)))
{
bContainsMicrosoftOptionRomUefiCa2023 = true;
}
if (bContainsMicrosoftUefiCa2023 && bContainsMicrosoftOptionRomUefiCa2023)
return true;
}
}
else if (BufferEquals (signatureList, efiCertRsa2048Guid, efiGuidSize))
{
if (signatureHeaderSize != 0
|| signatureSize != efiSignatureOwnerSize + efiRsa2048KeySize
|| (signaturesSize % signatureSize) != 0)
{
return false;
}
for (size_t signatureOffset = signaturesOffset; signatureOffset < offset + signatureListSize; signatureOffset += signatureSize)
{
const uint8* publicKey = &db[signatureOffset + efiSignatureOwnerSize];
if (!bContainsMicrosoftUefiCa2023
&& BufferEquals (publicKey, efiRsa2048KeySize, microsoftUefiCa2023Rsa2048Modulus, sizeof (microsoftUefiCa2023Rsa2048Modulus)))
{
bContainsMicrosoftUefiCa2023 = true;
}
else if (!bContainsMicrosoftOptionRomUefiCa2023
&& BufferEquals (publicKey, efiRsa2048KeySize, microsoftOptionRomUefiCa2023Rsa2048Modulus, sizeof (microsoftOptionRomUefiCa2023Rsa2048Modulus)))
{
bContainsMicrosoftOptionRomUefiCa2023 = true;
}
if (bContainsMicrosoftUefiCa2023 && bContainsMicrosoftOptionRomUefiCa2023)
return true;
}
}
offset += signatureListSize;
}
return false;
}
#ifdef VC_EFI_BOOTLOADER_SELECTION_TEST
bool TestFirmwareDbBufferContainsMicrosoft2023UefiCAs (const uint8* db, size_t dbSize)
{
std::vector<uint8> firmwareDb;
if (dbSize != 0)
{
if (!db)
return false;
firmwareDb.assign (db, db + dbSize);
}
return FirmwareDbBufferContainsMicrosoft2023UefiCAs (firmwareDb);
}
#endif
static bool TryFirmwareDbContainsMicrosoft2023UefiCAs (bool& bContainsMicrosoft2023UefiCAs)
{
std::vector<uint8> db;
DWORD dwError = ERROR_SUCCESS;
if (!ReadFirmwareEnvironmentVariableBuffer (L"db", EfiImageSecurityDatabaseGuid, db, &dwError))
{
SetLastError (dwError);
return false;
}
bContainsMicrosoft2023UefiCAs = FirmwareDbBufferContainsMicrosoft2023UefiCAs (db);
return true;
}
static bool IsFirmwareDbUnavailableError (DWORD dwError)
{
return (dwError == ERROR_ENVVAR_NOT_FOUND) || (dwError == ERROR_INVALID_FUNCTION);
}
static bool TryFirmwareSecureBootEnabled (bool& bSecureBootEnabled, DWORD* pLastError = NULL)
{
std::vector<uint8> secureBoot;
DWORD dwError = ERROR_SUCCESS;
if (!ReadFirmwareEnvironmentVariableBuffer (L"SecureBoot", EfiVarGuid, secureBoot, &dwError))
{
if (pLastError)
*pLastError = dwError;
SetLastError (dwError);
return false;
}
bSecureBootEnabled = (secureBoot.size () >= 1) && (secureBoot[0] == 1);
return true;
}
static EfiBootLoaderResourceSelection GetPreferredEfiBootLoaderResourceSet ()
{
// The current 2023 DCS set uses both Microsoft UEFI CA 2023 and Microsoft Option ROM UEFI CA 2023:
// DcsInt.dcs and LegacySpeaker.dcs are signed through the Option ROM UEFI CA 2023 chain.
// If db cannot be read, keep the pre-2023 universal behavior and use the 2011 compatibility fallback.
bool bContainsMicrosoft2023UefiCAs = false;
if (TryFirmwareDbContainsMicrosoft2023UefiCAs (bContainsMicrosoft2023UefiCAs))
{
if (bContainsMicrosoft2023UefiCAs)
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2023, 2023, L"firmware db contains Microsoft UEFI CA 2023 and Microsoft Option ROM UEFI CA 2023", ERROR_SUCCESS);
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2011, 2011, L"firmware db does not contain both Microsoft 2023 UEFI CAs", ERROR_SUCCESS);
}
DWORD dwError = GetLastError ();
if (IsFirmwareDbUnavailableError (dwError))
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2011, 2011, L"firmware db is unavailable; using 2011 compatibility fallback", dwError);
bool bSecureBootEnabled = false;
if (TryFirmwareSecureBootEnabled (bSecureBootEnabled) && !bSecureBootEnabled)
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2011, 2011, L"Secure Boot is disabled and firmware db could not be read; using 2011 compatibility fallback", dwError);
#ifndef SETUP
if (!IsAdmin () && IsUacSupported ())
{
// This may prompt for elevation from non-admin Mount/Format paths. EFI rescue
// media and bootloader repair need accurate firmware db detection to avoid
// selecting a Microsoft CA set unsupported by the current Secure Boot db.
BOOL bElevatedContainsMicrosoft2023UefiCAs = FALSE;
Elevator::GetEfiBootLoaderSigningSupport (&bElevatedContainsMicrosoft2023UefiCAs);
if (bElevatedContainsMicrosoft2023UefiCAs)
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2023, 2023, L"elevated helper reported Microsoft 2023 UEFI CA support", dwError);
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2011, 2011, L"elevated helper did not report Microsoft 2023 UEFI CA support", dwError);
}
#endif
return MakeEfiBootLoaderResourceSelection (EfiBootLoaderResources2011, 2011, L"firmware db could not be read; using 2011 compatibility fallback", dwError);
}
static void ThrowMissingEfiResource (const wchar_t* resourceName, bool rescueDisk)
{
if (rescueDisk)
throw ParameterIncorrect (SRC_POS);
throw ErrorException (wstring (L"Out of resource ") + resourceName, SRC_POS);
}
static uint8* MapEfiBootLoaderResource (int resourceId, const wchar_t* resourceName, DWORD& size, bool rescueDisk)
{
uint8 *resource = MapResource (L"BIN", resourceId, &size);
if (!resource)
ThrowMissingEfiResource (resourceName, rescueDisk);
return resource;
}
static EfiBootLoaderImages MapEfiBootLoaderImages (bool rescueDisk)
{
EfiBootLoaderResourceSelection selection = GetPreferredEfiBootLoaderResourceSet ();
const EfiBootLoaderResourceSet& resources = *selection.Resources;
EfiBootLoaderImages images = {0};
images.DcsBoot = MapEfiBootLoaderResource (resources.DcsBoot, L"DcsBoot", images.SizeDcsBoot, rescueDisk);
images.DcsInt = MapEfiBootLoaderResource (resources.DcsInt, L"DcsInt", images.SizeDcsInt, rescueDisk);
images.DcsCfg = MapEfiBootLoaderResource (resources.DcsCfg, L"DcsCfg", images.SizeDcsCfg, rescueDisk);
images.LegacySpeaker = MapEfiBootLoaderResource (resources.LegacySpeaker, L"LegacySpeaker", images.SizeLegacySpeaker, rescueDisk);
images.DcsRescue = MapEfiBootLoaderResource (resources.DcsRescue, L"DcsRe", images.SizeDcsRescue, rescueDisk);
images.DcsInfo = MapEfiBootLoaderResource (resources.DcsInfo, L"DcsInfo", images.SizeDcsInfo, rescueDisk);
images.ResourceSet = selection.ResourceSet;
images.SelectionReason = selection.Reason;
images.FirmwareDbError = selection.FirmwareDbError;
return images;
}
static void BackupEfiBootLoaderImageIfDifferent (EfiBoot& efiBoot, const wchar_t* imageName, const wchar_t* backupName, uint8* replacementData, DWORD replacementSize)
{
std::vector<uint8> currentImage;
if (!efiBoot.ReadFileToBuffer (imageName, currentImage))
return;
if ((currentImage.size () != replacementSize)
|| ((replacementSize != 0) && (memcmp (currentImage.data (), replacementData, replacementSize) != 0)))
{
// Preserve the first divergent image as the rollback snapshot; later CA refreshes must not overwrite it.
if (!efiBoot.FileExists (backupName))
efiBoot.SaveFile (backupName, currentImage.data (), (DWORD) currentImage.size ());
}
}
static void BackupEfiBootLoaderImagesIfDifferent (EfiBoot& efiBoot, const EfiBootLoaderImages& images)
{
BackupEfiBootLoaderImageIfDifferent (efiBoot, L"\\EFI\\VeraCrypt\\DcsBoot.efi", L"\\EFI\\VeraCrypt\\DcsBoot.efi.vc_backup", images.DcsBoot, images.SizeDcsBoot);
BackupEfiBootLoaderImageIfDifferent (efiBoot, L"\\EFI\\VeraCrypt\\DcsInt.dcs", L"\\EFI\\VeraCrypt\\DcsInt.dcs.vc_backup", images.DcsInt, images.SizeDcsInt);
BackupEfiBootLoaderImageIfDifferent (efiBoot, L"\\EFI\\VeraCrypt\\DcsCfg.dcs", L"\\EFI\\VeraCrypt\\DcsCfg.dcs.vc_backup", images.DcsCfg, images.SizeDcsCfg);
BackupEfiBootLoaderImageIfDifferent (efiBoot, L"\\EFI\\VeraCrypt\\LegacySpeaker.dcs", L"\\EFI\\VeraCrypt\\LegacySpeaker.dcs.vc_backup", images.LegacySpeaker, images.SizeLegacySpeaker);
BackupEfiBootLoaderImageIfDifferent (efiBoot, L"\\EFI\\VeraCrypt\\DcsInfo.dcs", L"\\EFI\\VeraCrypt\\DcsInfo.dcs.vc_backup", images.DcsInfo, images.SizeDcsInfo);
}
static void SaveEfiBootLoaderImages (EfiBoot& efiBoot, const EfiBootLoaderImages& images, bool backupExistingImages = false)
{
if (backupExistingImages)
BackupEfiBootLoaderImagesIfDifferent (efiBoot, images);
efiBoot.SaveFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", images.DcsBoot, images.SizeDcsBoot);
efiBoot.SaveFile (L"\\EFI\\VeraCrypt\\DcsInt.dcs", images.DcsInt, images.SizeDcsInt);
efiBoot.SaveFile (L"\\EFI\\VeraCrypt\\DcsCfg.dcs", images.DcsCfg, images.SizeDcsCfg);
efiBoot.SaveFile (L"\\EFI\\VeraCrypt\\LegacySpeaker.dcs", images.LegacySpeaker, images.SizeLegacySpeaker);
efiBoot.SaveFile (L"\\EFI\\VeraCrypt\\DcsInfo.dcs", images.DcsInfo, images.SizeDcsInfo);
RecordEfiBootLoaderResourceSetSelection (images);
}
void
GetVolumeESP(wstring& path, wstring& bootVolumePath)
@@ -3442,32 +3979,16 @@ namespace VeraCrypt
Warning ("ADMIN_PRIVILEGES_WARN_DEVICES", ParentWindow);
}
}
DWORD sizeDcsBoot;
uint8 *dcsBootImg = MapResource(L"BIN", IDR_EFI_DCSBOOT, &sizeDcsBoot);
if (!dcsBootImg)
throw ErrorException(L"Out of resource DcsBoot", SRC_POS);
DWORD sizeDcsInt;
uint8 *dcsIntImg = MapResource(L"BIN", IDR_EFI_DCSINT, &sizeDcsInt);
if (!dcsIntImg)
throw ErrorException(L"Out of resource DcsInt", SRC_POS);
DWORD sizeDcsCfg;
uint8 *dcsCfgImg = MapResource(L"BIN", IDR_EFI_DCSCFG, &sizeDcsCfg);
if (!dcsCfgImg)
throw ErrorException(L"Out of resource DcsCfg", SRC_POS);
DWORD sizeLegacySpeaker;
uint8 *LegacySpeakerImg = MapResource(L"BIN", IDR_EFI_LEGACYSPEAKER, &sizeLegacySpeaker);
if (!LegacySpeakerImg)
throw ErrorException(L"Out of resource LegacySpeaker", SRC_POS);
EfiBootLoaderImages efiImages = MapEfiBootLoaderImages (false);
// Kept as aliases for the legacy EFI\Boot\bootx64.efi replacement block below.
DWORD sizeDcsBoot = efiImages.SizeDcsBoot;
uint8 *dcsBootImg = efiImages.DcsBoot;
#ifdef VC_EFI_CUSTOM_MODE
DWORD sizeBootMenuLocker;
uint8 *BootMenuLockerImg = MapResource(L"BIN", IDR_EFI_DCSBML, &sizeBootMenuLocker);
if (!BootMenuLockerImg)
throw ErrorException(L"Out of resource DcsBml", SRC_POS);
#endif
DWORD sizeDcsInfo;
uint8 *DcsInfoImg = MapResource(L"BIN", IDR_EFI_DCSINFO, &sizeDcsInfo);
if (!DcsInfoImg)
throw ErrorException(L"Out of resource DcsInfo", SRC_POS);
EfiBootInst.PrepareBootPartition(PostOOBEMode);
@@ -3477,14 +3998,16 @@ namespace VeraCrypt
bool bAlreadyExist;
const char* g_szMsBootString = "bootmgfw.pdb";
unsigned __int64 loaderSize = 0;
const wchar_t * szStdMsBootloader = L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi";
const wchar_t * szBackupMsBootloader = L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc";
const wchar_t * szStdEfiBootloader = L"\\EFI\\Boot\\bootx64.efi";
const wchar_t * szBackupEfiBootloader = L"\\EFI\\Boot\\original_bootx64.vc_backup";
if (preserveUserConfig)
{
bool bModifiedMsBoot = true, bMissingMsBoot = false;;
if (EfiBootInst.FileExists (L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi"))
EfiBootInst.GetFileSize(L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", loaderSize);
bool bModifiedMsBoot = true, bMissingMsBoot = false, bMsBootloaderMovedToBackup = false;
if (EfiBootInst.FileExists (szStdMsBootloader))
EfiBootInst.GetFileSize(szStdMsBootloader, loaderSize);
else
bMissingMsBoot = true;
@@ -3492,20 +4015,21 @@ namespace VeraCrypt
if (PostOOBEMode)
EfiBootInst.SetStartExec(L"VeraCrypt BootLoader (DcsBoot)", L"\\EFI\\VeraCrypt\\DcsBoot.efi", SetBootEntry, ForceFirstBootEntry, SetBootNext);
if (EfiBootInst.FileExists (L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc"))
if (EfiBootInst.FileExists (szBackupMsBootloader))
{
if (loaderSize > 32768)
{
std::vector<uint8> bootLoaderBuf ((size_t) loaderSize);
EfiBootInst.ReadFile(L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", &bootLoaderBuf[0], (DWORD) loaderSize);
EfiBootInst.ReadFile(szStdMsBootloader, &bootLoaderBuf[0], (DWORD) loaderSize);
// look for bootmgfw.efi identifiant string
if (BufferHasPattern (bootLoaderBuf.data (), (size_t) loaderSize, g_szMsBootString, strlen (g_szMsBootString)))
{
bModifiedMsBoot = false;
// replace the backup with this version
EfiBootInst.RenameFile (L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc", TRUE);
if (EfiBootInst.RenameFile (szStdMsBootloader, szBackupMsBootloader, TRUE))
bMsBootloaderMovedToBackup = true;
}
}
}
@@ -3516,7 +4040,7 @@ namespace VeraCrypt
{
std::vector<uint8> bootLoaderBuf ((size_t) loaderSize);
EfiBootInst.ReadFile(L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", &bootLoaderBuf[0], (DWORD) loaderSize);
EfiBootInst.ReadFile(szStdMsBootloader, &bootLoaderBuf[0], (DWORD) loaderSize);
// look for bootmgfw.efi identifiant string
if (BufferHasPattern (bootLoaderBuf.data (), (size_t) loaderSize, g_szMsBootString, strlen (g_szMsBootString)))
@@ -3525,7 +4049,8 @@ namespace VeraCrypt
if (!bModifiedMsBoot)
{
EfiBootInst.RenameFile (L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc", TRUE);
if (EfiBootInst.RenameFile (szStdMsBootloader, szBackupMsBootloader, TRUE))
bMsBootloaderMovedToBackup = true;
}
else
{
@@ -3551,7 +4076,7 @@ namespace VeraCrypt
if (BufferHasPattern (bootLoaderBuf.data (), (size_t) loaderSize, g_szMsBootString, strlen (g_szMsBootString)))
{
bFound = true;
EfiBootInst.RenameFile(loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc", TRUE);
EfiBootInst.RenameFile(loaderPath.c_str(), szBackupMsBootloader, TRUE);
}
}
}
@@ -3563,16 +4088,47 @@ namespace VeraCrypt
}
if (PostOOBEMode && EfiBootInst.FileExists (L"\\EFI\\VeraCrypt\\DcsBoot.efi"))
{
// check if bootmgfw.efi has been set again to Microsoft version
// if yes, replace it with our bootloader after it was copied to bootmgfw_ms.vc
if (!bModifiedMsBoot || bMissingMsBoot)
EfiBootInst.CopyFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
{
const bool bRefreshMsBootloader = !bModifiedMsBoot
|| bMissingMsBoot
|| (EfiBootInst.FileExists (szStdMsBootloader) && EfiBootInst.IsVeraCryptBootLoader (szStdMsBootloader));
// Keep the firmware-visible loader path valid before the larger module refresh.
if (bRefreshMsBootloader && !EfiBootInst.FileExists (szStdMsBootloader))
{
try
{
EfiBootInst.CopyFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", szStdMsBootloader);
}
catch (...)
{
if (bMsBootloaderMovedToBackup)
EfiBootInst.RenameFile (szBackupMsBootloader, szStdMsBootloader, TRUE);
throw;
}
}
SaveEfiBootLoaderImages (EfiBootInst, efiImages, true);
#ifdef VC_EFI_CUSTOM_MODE
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsBml.dcs", BootMenuLockerImg, sizeBootMenuLocker);
#endif
// check if bootmgfw.efi has been set again to Microsoft version.
// If yes, replace it with our bootloader after it was copied to bootmgfw_ms.vc.
// If it is already a VeraCrypt copy, refresh it because the firmware db may now
// trust a different Microsoft CA than the one selected at original install time.
if (bRefreshMsBootloader)
{
EfiBootInst.CopyFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", szStdMsBootloader);
}
if (EfiBootInst.FileExists (szStdEfiBootloader))
{
// check if standard bootloader under EFI\Boot has been set to Microsoft version
// if yes, replace it with our bootloader
// check if standard bootloader under EFI\Boot has been set to Microsoft version.
// If yes, replace it with our bootloader. If it is already a VeraCrypt copy,
// refresh it because the firmware db may now trust a different Microsoft CA
// than the one selected at original install time.
bool bStdEfiBootloaderUpdated = false;
EfiBootInst.GetFileSize(szStdEfiBootloader, loaderSize);
if (loaderSize > 32768)
{
@@ -3585,22 +4141,23 @@ namespace VeraCrypt
{
EfiBootInst.RenameFile (szStdEfiBootloader, szBackupEfiBootloader, TRUE);
EfiBootInst.CopyFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", szStdEfiBootloader);
bStdEfiBootloaderUpdated = true;
}
}
if (!bStdEfiBootloaderUpdated && EfiBootInst.IsVeraCryptBootLoader (szStdEfiBootloader))
{
EfiBootInst.CopyFile (L"\\EFI\\VeraCrypt\\DcsBoot.efi", szStdEfiBootloader);
}
}
return;
}
}
EfiBootInst.MkDir(L"\\EFI\\VeraCrypt", bAlreadyExist);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsBoot.efi", dcsBootImg, sizeDcsBoot);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsInt.dcs", dcsIntImg, sizeDcsInt);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsCfg.dcs", dcsCfgImg, sizeDcsCfg);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\LegacySpeaker.dcs", LegacySpeakerImg, sizeLegacySpeaker);
SaveEfiBootLoaderImages (EfiBootInst, efiImages);
#ifdef VC_EFI_CUSTOM_MODE
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsBml.dcs", BootMenuLockerImg, sizeBootMenuLocker);
#endif
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsInfo.dcs", DcsInfoImg, sizeDcsInfo);
if (!preserveUserConfig)
EfiBootInst.DelFile(L"\\EFI\\VeraCrypt\\PlatformInfo");
EfiBootInst.SetStartExec(L"VeraCrypt BootLoader (DcsBoot)", L"\\EFI\\VeraCrypt\\DcsBoot.efi", SetBootEntry, ForceFirstBootEntry, SetBootNext);
@@ -3812,36 +4369,13 @@ namespace VeraCrypt
if (bIsGPT)
{
// create EFI disk structure
DWORD sizeDcsBoot;
uint8 *dcsBootImg = MapResource(L"BIN", IDR_EFI_DCSBOOT, &sizeDcsBoot);
if (!dcsBootImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsInt;
uint8 *dcsIntImg = MapResource(L"BIN", IDR_EFI_DCSINT, &sizeDcsInt);
if (!dcsIntImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsCfg;
uint8 *dcsCfgImg = MapResource(L"BIN", IDR_EFI_DCSCFG, &sizeDcsCfg);
if (!dcsCfgImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeLegacySpeaker;
uint8 *LegacySpeakerImg = MapResource(L"BIN", IDR_EFI_LEGACYSPEAKER, &sizeLegacySpeaker);
if (!LegacySpeakerImg)
throw ParameterIncorrect (SRC_POS);
EfiBootLoaderImages efiImages = MapEfiBootLoaderImages (true);
#ifdef VC_EFI_CUSTOM_MODE
DWORD sizeBootMenuLocker;
uint8 *BootMenuLockerImg = MapResource(L"BIN", IDR_EFI_DCSBML, &sizeBootMenuLocker);
if (!BootMenuLockerImg)
throw ParameterIncorrect (SRC_POS);
#endif
DWORD sizeDcsRescue;
uint8 *DcsRescueImg = MapResource(L"BIN", IDR_EFI_DCSRE, &sizeDcsRescue);
if (!DcsRescueImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsInfo;
uint8 *DcsInfoImg = MapResource(L"BIN", IDR_EFI_DCSINFO, &sizeDcsInfo);
if (!DcsInfoImg)
throw ParameterIncorrect (SRC_POS);
WCHAR szTmpPath[MAX_PATH + 1], szTmpFilePath[MAX_PATH + 1];
if (!GetTempPathW (MAX_PATH, szTmpPath))
@@ -3865,21 +4399,21 @@ namespace VeraCrypt
finally_do_arg (zip_t**, &z, { if (*finally_arg) zip_discard (*finally_arg);});
if (!ZipAdd (z, "EFI/Boot/bootx64.efi", DcsRescueImg, sizeDcsRescue))
if (!ZipAdd (z, "EFI/Boot/bootx64.efi", efiImages.DcsRescue, efiImages.SizeDcsRescue))
throw ParameterIncorrect (SRC_POS);
#ifdef VC_EFI_CUSTOM_MODE
if (!ZipAdd (z, "EFI/VeraCrypt/DcsBml.dcs", BootMenuLockerImg, sizeBootMenuLocker))
throw ParameterIncorrect (SRC_POS);
#endif
if (!ZipAdd (z, "EFI/VeraCrypt/DcsBoot.efi", dcsBootImg, sizeDcsBoot))
if (!ZipAdd (z, "EFI/VeraCrypt/DcsBoot.efi", efiImages.DcsBoot, efiImages.SizeDcsBoot))
throw ParameterIncorrect (SRC_POS);
if (!ZipAdd (z, "EFI/VeraCrypt/DcsCfg.dcs", dcsCfgImg, sizeDcsCfg))
if (!ZipAdd (z, "EFI/VeraCrypt/DcsCfg.dcs", efiImages.DcsCfg, efiImages.SizeDcsCfg))
throw ParameterIncorrect (SRC_POS);
if (!ZipAdd (z, "EFI/VeraCrypt/DcsInt.dcs", dcsIntImg, sizeDcsInt))
if (!ZipAdd (z, "EFI/VeraCrypt/DcsInt.dcs", efiImages.DcsInt, efiImages.SizeDcsInt))
throw ParameterIncorrect (SRC_POS);
if (!ZipAdd (z, "EFI/VeraCrypt/LegacySpeaker.dcs", LegacySpeakerImg, sizeLegacySpeaker))
if (!ZipAdd (z, "EFI/VeraCrypt/LegacySpeaker.dcs", efiImages.LegacySpeaker, efiImages.SizeLegacySpeaker))
throw ParameterIncorrect (SRC_POS);
if (!ZipAdd (z, "EFI/VeraCrypt/DcsInfo.dcs", DcsInfoImg, sizeDcsInfo))
if (!ZipAdd (z, "EFI/VeraCrypt/DcsInfo.dcs", efiImages.DcsInfo, efiImages.SizeDcsInfo))
throw ParameterIncorrect (SRC_POS);
Buffer volHeader(TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE);
@@ -5252,6 +5786,25 @@ namespace VeraCrypt
}
}
#endif
void BootEncryption::GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported)
{
if (!pMicrosoft2023UefiCAsSupported)
{
SetLastError (ERROR_INVALID_PARAMETER);
throw SystemException (SRC_POS);
}
bool bContainsMicrosoft2023UefiCAs = false;
if (!TryFirmwareDbContainsMicrosoft2023UefiCAs (bContainsMicrosoft2023UefiCAs))
{
*pMicrosoft2023UefiCAsSupported = FALSE;
return;
}
*pMicrosoft2023UefiCAsSupported = bContainsMicrosoft2023UefiCAs ? TRUE : FALSE;
}
#ifndef SETUP
void BootEncryption::CheckRequirements ()
{
+5
View File
@@ -27,6 +27,10 @@ using namespace std;
namespace VeraCrypt
{
#ifdef VC_EFI_BOOTLOADER_SELECTION_TEST
bool TestFirmwareDbBufferContainsMicrosoft2023UefiCAs (const uint8* db, size_t dbSize);
#endif
class File
{
public:
@@ -317,6 +321,7 @@ namespace VeraCrypt
void RestoreSystemLoader ();
static void UpdateSetupConfigFile (bool bForInstall);
void GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKeysLoaded);
void GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported);
bool IsUsingUnsupportedAlgorithm(LONG driverVersion);
void NotifyService (DWORD dwNotifyCmd);
protected:
+1
View File
@@ -89,6 +89,7 @@ typedef struct
Password ProtectedHidVolPassword; /* Password of hidden volume to protect against overwriting */
BOOL UseBackupHeader;
BOOL RecoveryMode;
BOOL NonSysInplaceRecoveryReadOnly;
int ProtectedHidVolPkcs5Prf;
int ProtectedHidVolPim;
wchar_t Label[33]; /* maximum label length is 32 for NTFS and 11 for FAT32 */
+33 -25
View File
@@ -65,7 +65,7 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,248,190,50,14
END
IDD_MOUNT_OPTIONS DIALOGEX 0, 0, 310, 244
IDD_MOUNT_OPTIONS DIALOGEX 0, 0, 310, 258
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt - Mount Options"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
@@ -75,29 +75,31 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,25,231,10
CONTROL "Use backup header embedded in &volume if available",IDC_USE_EMBEDDED_HEADER_BAK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,39,295,11
CONTROL "Mount partition &using system encryption without pre-boot authentication",IDC_MOUNT_SYSENC_PART_WITHOUT_PBA,
CONTROL "Recovery mount interrupted non-system in-place volume as read-only",IDC_NONSYS_INPLACE_RECOVERY_READONLY,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,53,295,11
EDITTEXT IDC_VOLUME_LABEL,134,82,167,14,ES_AUTOHSCROLL
CONTROL "Mount partition &using system encryption without pre-boot authentication",IDC_MOUNT_SYSENC_PART_WITHOUT_PBA,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,67,295,11
EDITTEXT IDC_VOLUME_LABEL,134,96,167,14,ES_AUTOHSCROLL
CONTROL "&Protect hidden volume against damage caused by writing to outer volume",IDC_PROTECT_HIDDEN_VOL,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,115,283,10
EDITTEXT IDC_PASSWORD_PROT_HIDVOL,134,133,167,14,ES_PASSWORD | ES_AUTOHSCROLL
COMBOBOX IDC_PKCS5_PRF_ID,134,154,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
EDITTEXT IDC_PIM,134,174,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,179,97,10
LTEXT "(Empty or 0 for defaults)",IDC_PIM_HELP,181,177,121,8,NOT WS_VISIBLE
CONTROL "&Display password",IDC_SHOW_PASSWORD_MO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,192,90,10
CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE_HIDVOL_PROT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,205,90,10
PUSHBUTTON "&Keyfiles...",IDC_KEYFILES_HIDVOL_PROT,239,201,60,14
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,129,283,10
EDITTEXT IDC_PASSWORD_PROT_HIDVOL,134,147,167,14,ES_PASSWORD | ES_AUTOHSCROLL
COMBOBOX IDC_PKCS5_PRF_ID,134,168,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
EDITTEXT IDC_PIM,134,188,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,193,97,10
LTEXT "(Empty or 0 for defaults)",IDC_PIM_HELP,181,191,121,8,NOT WS_VISIBLE
CONTROL "&Display password",IDC_SHOW_PASSWORD_MO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,206,90,10
CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE_HIDVOL_PROT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,219,90,10
PUSHBUTTON "&Keyfiles...",IDC_KEYFILES_HIDVOL_PROT,239,215,60,14
DEFPUSHBUTTON "OK",IDOK,246,7,60,14
PUSHBUTTON "Cancel",IDCANCEL,246,24,60,14
LTEXT "What is hidden volume protection?",IDC_LINK_HIDVOL_PROTECTION_INFO,16,220,279,10,SS_NOTIFY
RTEXT "P&assword to hidden volume:\n(if empty, cache is used)",IDT_HIDDEN_PROT_PASSWD,15,132,115,17,0,WS_EX_RIGHT
GROUPBOX "Hidden Volume Protection",IDT_HIDDEN_VOL_PROTECTION,6,101,299,136
RTEXT "KDF:",IDT_KDF,15,155,115,17
RTEXT "Volume PIM:",IDT_PIM,15,177,115,17,NOT WS_VISIBLE
LTEXT "Volume Label in Windows:",IDT_VOLUME_LABEL,12,85,115,8
LTEXT "What is hidden volume protection?",IDC_LINK_HIDVOL_PROTECTION_INFO,16,234,279,10,SS_NOTIFY
RTEXT "P&assword to hidden volume:\n(if empty, cache is used)",IDT_HIDDEN_PROT_PASSWD,15,146,115,17,0,WS_EX_RIGHT
GROUPBOX "Hidden Volume Protection",IDT_HIDDEN_VOL_PROTECTION,6,115,299,136
RTEXT "KDF:",IDT_KDF,15,169,115,17
RTEXT "Volume PIM:",IDT_PIM,15,191,115,17,NOT WS_VISIBLE
LTEXT "Volume Label in Windows:",IDT_VOLUME_LABEL,12,99,115,8
CONTROL "Only create virtual device without mounting on selected drive letter",IDC_DISABLE_MOUNT_MANAGER,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,67,297,10
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,81,297,10
END
IDD_KEYFILES DIALOGEX 0, 0, 363, 264
@@ -556,15 +558,21 @@ IDR_RESCUE_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AE
IDR_RESCUE_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootLoader.com.gz"
IDR_RESCUE_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootLoader.com.gz"
IDR_RESCUE_LOADER_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Rescue_Camellia_SHA2\\BootLoader.com.gz"
IDR_EFI_DCSBOOT BIN "..\\Boot\\EFI\\DcsBoot.efi"
IDR_EFI_DCSINT BIN "..\\Boot\\EFI\\DcsInt.efi"
IDR_EFI_DCSCFG BIN "..\\Boot\\EFI\\DcsCfg.efi"
IDR_EFI_LEGACYSPEAKER BIN "..\\Boot\\EFI\\LegacySpeaker.efi"
IDR_EFI_DCSBOOT_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\DcsBoot.efi"
IDR_EFI_DCSINT_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\DcsInt.efi"
IDR_EFI_DCSCFG_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\DcsCfg.efi"
IDR_EFI_LEGACYSPEAKER_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\LegacySpeaker.efi"
#ifdef VC_EFI_CUSTOM_MODE
IDR_EFI_DCSBML BIN "..\\Boot\\EFI\\DcsBml.efi"
#endif
IDR_EFI_DCSRE BIN "..\\Boot\\EFI\\DcsRe.efi"
IDR_EFI_DCSINFO BIN "..\\Boot\\EFI\\DcsInfo.efi"
IDR_EFI_DCSRE_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\DcsRe.efi"
IDR_EFI_DCSINFO_2011 BIN "..\\Boot\\EFI\\2011UEFICA\\DcsInfo.efi"
IDR_EFI_DCSBOOT_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\DcsBoot.efi"
IDR_EFI_DCSINT_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\DcsInt.efi"
IDR_EFI_DCSCFG_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\DcsCfg.efi"
IDR_EFI_LEGACYSPEAKER_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\LegacySpeaker.efi"
IDR_EFI_DCSRE_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\DcsRe.efi"
IDR_EFI_DCSINFO_2023 BIN "..\\Boot\\EFI\\2023UEFICA\\DcsInfo.efi"
#endif
/////////////////////////////////////////////////////////////////////////////
//
+20 -7
View File
@@ -5827,6 +5827,10 @@ void handleError (HWND hwndDlg, int code, const char* srcPos)
Error ("ERR_NONSYS_INPLACE_ENC_INCOMPLETE", hwndDlg);
break;
case ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED:
Error ("ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED", hwndDlg);
break;
case ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG:
Error ("ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG", hwndDlg);
break;
@@ -8987,7 +8991,7 @@ int MountVolume (HWND hwndDlg,
BYTE volumeID[VOLUME_ID_SIZE] = {0};
#ifdef TCMOUNT
if (mountOptions->PartitionInInactiveSysEncScope)
if (!mountOptions->NonSysInplaceRecoveryReadOnly && mountOptions->PartitionInInactiveSysEncScope)
{
if (!CheckSysEncMountWithoutPBA (hwndDlg, volumePath, quiet))
return -1;
@@ -9016,8 +9020,9 @@ int MountVolume (HWND hwndDlg,
ZeroMemory (&mount, sizeof (mount));
mount.bExclusiveAccess = sharedAccess ? FALSE : TRUE;
mount.SystemFavorite = MountVolumesAsSystemFavorite;
mount.UseBackupHeader = mountOptions->UseBackupHeader;
mount.UseBackupHeader = mountOptions->UseBackupHeader || mountOptions->NonSysInplaceRecoveryReadOnly;
mount.RecoveryMode = mountOptions->RecoveryMode;
mount.NonSysInplaceRecoveryReadOnly = mountOptions->NonSysInplaceRecoveryReadOnly;
StringCbCopyW (mount.wszLabel, sizeof (mount.wszLabel), mountOptions->Label);
retry:
@@ -9032,7 +9037,7 @@ retry:
else
mount.VolumePassword.Length = 0;
if (!mountOptions->ReadOnly && mountOptions->ProtectHiddenVolume)
if (!mountOptions->ReadOnly && !mountOptions->NonSysInplaceRecoveryReadOnly && mountOptions->ProtectHiddenVolume)
{
mount.ProtectedHidVolPassword = mountOptions->ProtectedHidVolPassword;
mount.bProtectHiddenVolume = TRUE;
@@ -9042,7 +9047,7 @@ retry:
else
mount.bProtectHiddenVolume = FALSE;
mount.bMountReadOnly = mountOptions->ReadOnly;
mount.bMountReadOnly = mountOptions->ReadOnly || mountOptions->NonSysInplaceRecoveryReadOnly;
mount.bMountRemovable = mountOptions->Removable;
mount.bPreserveTimestamp = mountOptions->PreserveTimestamp;
@@ -9164,7 +9169,14 @@ retry:
}
}
if (mountOptions->PartitionInInactiveSysEncScope)
if (mountOptions->NonSysInplaceRecoveryReadOnly && !bDevice)
{
if (!quiet)
Error ("ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED", hwndDlg);
return -1;
}
if (!mountOptions->NonSysInplaceRecoveryReadOnly && mountOptions->PartitionInInactiveSysEncScope)
{
if (mount.wszVolume == NULL || swscanf_s ((const wchar_t *) mount.wszVolume,
WIDE("\\Device\\Harddisk%d\\Partition"),
@@ -9299,7 +9311,8 @@ retry:
// Mount successful
if (mount.UseBackupHeader != mountOptions->UseBackupHeader
if (!mountOptions->NonSysInplaceRecoveryReadOnly
&& mount.UseBackupHeader != mountOptions->UseBackupHeader
&& mount.UseBackupHeader)
{
if (bReportWrongPassword && !Silent)
@@ -9314,7 +9327,7 @@ retry:
Warning ("ERR_XTS_MASTERKEY_VULNERABLE", hwndDlg);
}
if (mount.FilesystemDirty)
if (mount.FilesystemDirty && !mountOptions->NonSysInplaceRecoveryReadOnly)
{
wchar_t msg[1024];
wchar_t mountPoint[] = { (wchar_t) (L'A' + driveNo), L':', 0 };
+3
View File
@@ -151,6 +151,7 @@
<entry lang="en" key="IDC_MOUNTALL">&amp;Auto-Mount Devices</entry>
<entry lang="en" key="IDC_MOUNT_OPTIONS">Mount Opti&amp;ons...</entry>
<entry lang="en" key="IDC_MOUNT_READONLY">Mount volume as read-&amp;only</entry>
<entry lang="en" key="IDC_NONSYS_INPLACE_RECOVERY_READONLY">Recovery mount interrupted non-system in-place volume as read-only</entry>
<entry lang="en" key="IDC_NEW_KEYFILES">Keyfiles...</entry>
<entry lang="en" key="IDC_OLD_PIM_HELP">(Empty or 0 for defaults)</entry>
<entry lang="en" key="IDC_PIM_HELP">(Empty or 0 for defaults)</entry>
@@ -1238,6 +1239,8 @@
<entry lang="en" key="SYSTEM_ENCRYPTION_NOT_COMPLETED">The process of encryption or decryption of the system partition/drive has not been completed. Please wait until it is complete before proceeding.</entry>
<entry lang="en" key="ERR_ENCRYPTION_NOT_COMPLETED">Error: The process of encryption of the partition/drive has not been completed. It must be completed first.</entry>
<entry lang="en" key="ERR_NONSYS_INPLACE_ENC_INCOMPLETE">Error: The process of encryption or decryption of the partition/volume has not been completed. It must be completed first.\n\nNote: To resume the process, select 'Volumes' &gt; 'Resume Interrupted Process' from the menu bar of the main VeraCrypt window.</entry>
<entry lang="en" key="ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED">Error: Recovery read-only mount is supported only for device-hosted volumes with an incomplete non-system in-place encryption/decryption state and a valid embedded backup header layout.\n\nFully encrypted, fully decrypted, hidden, file-hosted, or unsupported-layout volumes cannot be mounted with this option.</entry>
<entry lang="en" key="NONSYS_INPLACE_RECOVERY_READONLY_WARNING">This recovery mode is intended only for copying data from a sector-by-sector clone or image of a partition where non-system in-place encryption/decryption was interrupted.\n\nThe volume will be mounted read-only using the embedded backup header. Do not run CHKDSK, formatting, partition repair, or any write-capable recovery tool on the original disk or on the partially transformed volume.\n\nContinue?</entry>
<entry lang="en" key="ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG">The password is correct, VeraCrypt has successfully decrypted the volume header and detected that this volume is a hidden system volume. However, you cannot modify the header of a hidden system volume this way.\n\nTo change the password for a hidden system volume, boot the operating system residing in the hidden volume, and then select 'System' &gt; 'Change Password' from the menu bar of the main VeraCrypt window.\n\nTo set the header key derivation algorithm, boot the hidden operating system and then select 'System' &gt; 'Set Header Key Derivation Algorithm'.</entry>
<entry lang="en" key="CANNOT_DECRYPT_HIDDEN_OS">VeraCrypt does not support in-place decryption of a hidden system partition.\n\nNote: If you want to decrypt the decoy system partition, boot the decoy system, and then select 'System' &gt; 'Permanently Decrypt System Partition/Drive' from the menu bar of the main VeraCrypt window.</entry>
<entry lang="en" key="ERR_PARAMETER_INCORRECT">Error: Incorrect/invalid parameter.</entry>
+2 -2
View File
@@ -199,7 +199,7 @@ BOOL WriteLocalMachineRegistryMultiString (wchar_t *subKey, wchar_t *name, wchar
return TRUE;
}
BOOL WriteLocalMachineRegistryString (wchar_t *subKey, wchar_t *name, wchar_t *str, BOOL expandable)
BOOL WriteLocalMachineRegistryString (const wchar_t *subKey, const wchar_t *name, const wchar_t *str, BOOL expandable)
{
HKEY hkey = 0;
DWORD disp;
@@ -297,4 +297,4 @@ void GetRestorePointRegKeyName (wchar_t *regk, size_t cbRegk)
// The string is split in order to prevent some antivirus packages from falsely reporting
// VeraCrypt.exe to contain a possible Trojan horse because of this string (heuristic scan).
StringCbPrintfW (regk, cbRegk,L"%s%s%s%s", L"Software\\Microsoft\\Windows", L" NT\\Curren", L"tVersion\\Sy", L"stemRestore");
}
}
+1 -1
View File
@@ -24,7 +24,7 @@ DWORD ReadRegistryBytes (wchar_t *path, wchar_t *name, char *value, int maxLen);
void WriteRegistryInt (wchar_t *subKey, wchar_t *name, int value);
BOOL WriteLocalMachineRegistryDword (wchar_t *subKey, wchar_t *name, DWORD value);
BOOL WriteLocalMachineRegistryMultiString (wchar_t *subKey, wchar_t *name, wchar_t *multiString, DWORD size);
BOOL WriteLocalMachineRegistryString (wchar_t *subKey, wchar_t *name, wchar_t *str, BOOL expandable);
BOOL WriteLocalMachineRegistryString (const wchar_t *subKey, const wchar_t *name, const wchar_t *str, BOOL expandable);
void WriteRegistryString (wchar_t *subKey, wchar_t *name, wchar_t *str);
BOOL WriteRegistryBytes (wchar_t *path, wchar_t *name, char *str, DWORD size);
BOOL DeleteLocalMachineRegistryKey (wchar_t *parentKey, wchar_t *subKeyToDelete);
+15 -8
View File
@@ -67,13 +67,19 @@
#define IDR_BOOT_LOADER_CAMELLIA_SHA2 563
#define IDR_RESCUE_BOOT_SECTOR_CAMELLIA_SHA2 564
#define IDR_RESCUE_LOADER_CAMELLIA_SHA2 565
#define IDR_EFI_DCSBOOT 566
#define IDR_EFI_DCSINT 567
#define IDR_EFI_DCSCFG 568
#define IDR_EFI_LEGACYSPEAKER 569
#define IDR_EFI_DCSBOOT_2011 566
#define IDR_EFI_DCSINT_2011 567
#define IDR_EFI_DCSCFG_2011 568
#define IDR_EFI_LEGACYSPEAKER_2011 569
#define IDR_EFI_DCSBML 570
#define IDR_EFI_DCSRE 571
#define IDR_EFI_DCSINFO 578
#define IDR_EFI_DCSRE_2011 571
#define IDR_EFI_DCSINFO_2011 578
#define IDR_EFI_DCSBOOT_2023 579
#define IDR_EFI_DCSINT_2023 580
#define IDR_EFI_DCSCFG_2023 581
#define IDR_EFI_LEGACYSPEAKER_2023 582
#define IDR_EFI_DCSRE_2023 583
#define IDR_EFI_DCSINFO_2023 584
#define IDC_HW_AES_LABEL_LINK 5000
#define IDC_HW_AES 5001
#define IDC_PARALLELIZATION_LABEL_LINK 5002
@@ -221,15 +227,16 @@
#define IDC_LINK_KEYFILES_EXTENSIONS_WARNING 5144
#define IDC_DISABLE_MEMORY_PROTECTION 5145
#define IDC_DISABLE_MEMORY_PROTECTION_HELP 5146
#define IDC_NONSYS_INPLACE_RECOVERY_READONLY 5147
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 578
#define _APS_NEXT_RESOURCE_VALUE 585
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 5147
#define _APS_NEXT_CONTROL_VALUE 5148
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
+2 -1
View File
@@ -457,7 +457,8 @@ enum
ERR_CAPI_INIT_FAILED = 35,
ERR_XTS_MASTERKEY_VULNERABLE = 36,
ERR_SYSENC_XTS_MASTERKEY_VULNERABLE = 37,
ERR_KEY_DERIVATION_FAILED = 38
ERR_KEY_DERIVATION_FAILED = 38,
ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED = 39
};
#endif // #ifndef TCDEFS_H
+3
View File
@@ -76,6 +76,9 @@ extern "C" {
#define TC_VOLUME_DATA_OFFSET TC_VOLUME_HEADER_GROUP_SIZE
#define TC_INITIAL_NTFS_CONCEAL_PORTION_SIZE (2 * TC_MAX_VOLUME_SECTOR_SIZE)
#define TC_NTFS_CONCEAL_CONSTANT 0xFF
// The offset, in bytes, of the legacy hidden volume header position from the end of the file (a positive value).
#define TC_HIDDEN_VOLUME_HEADER_OFFSET_LEGACY (TC_VOLUME_HEADER_SIZE_LEGACY + TC_SECTOR_SIZE_LEGACY * 2)
+113
View File
@@ -556,6 +556,27 @@ static VOID CompletionThreadProc(PVOID threadArg)
DecryptDataUnits(request->Data + request->EncryptedOffset, &dataUnit, request->EncryptedLength / ENCRYPTION_DATA_UNIT_SIZE, queue->CryptoInfo);
}
else if (queue->NonSysInplaceRecoveryMode
&& request->EncryptedLength == 0
&& queue->NonSysInplaceConcealedPlaintextLength > 0
&& NT_SUCCESS(request->Item->Status))
{
uint64 concealIntersectStart;
uint32 concealIntersectLength;
uint32 concealBufferOffset;
uint32 i;
GetIntersection ((uint64) request->Offset.QuadPart,
request->Length,
0,
queue->NonSysInplaceConcealedPlaintextLength - 1,
&concealIntersectStart,
&concealIntersectLength);
concealBufferOffset = (uint32) (concealIntersectStart - (uint64) request->Offset.QuadPart);
for (i = 0; i < concealIntersectLength; ++i)
request->Data[concealBufferOffset + i] ^= TC_NTFS_CONCEAL_CONSTANT;
}
// Dump("Read sector %lld count %d\n", request->Offset.QuadPart >> 9, request->Length >> 9);
// Update subst sectors
if((queue->SecRegionData != NULL) && (queue->SecRegionSize > 512)) {
@@ -577,6 +598,17 @@ static VOID CompletionThreadProc(PVOID threadArg)
static NTSTATUS TCCachedRead (EncryptedIoQueue *queue, IO_STATUS_BLOCK *ioStatus, PVOID buffer, LARGE_INTEGER offset, ULONG length)
{
if (queue->NonSysInplaceRecoveryMode)
{
queue->LastReadLength = 0;
queue->ReadAheadBufferValid = FALSE;
if (queue->IsFilterDevice)
return TCReadDevice (queue->LowerDeviceObject, buffer, offset, length);
return ZwReadFile (queue->HostFileHandle, NULL, NULL, NULL, ioStatus, buffer, length, &offset, NULL);
}
queue->LastReadOffset = offset;
queue->LastReadLength = length;
@@ -741,6 +773,7 @@ static VOID IoThreadProc (PVOID threadArg)
request->Data = request->OrigDataBufferFragment;
if (request->CompleteOriginalIrp
&& !queue->NonSysInplaceRecoveryMode
&& queue->LastReadLength > 0
&& NT_SUCCESS (request->Item->Status)
&& InterlockedExchangeAdd (&queue->IoThreadPendingRequestCount, 0) == 0)
@@ -959,6 +992,12 @@ static VOID MainThreadProc (PVOID threadArg)
Dump ("Q %I64d [%I64d] %c len=%d\n", item->OriginalOffset.QuadPart, GetElapsedTime (&queue->LastPerformanceCounter), item->Write ? 'W' : 'R', item->OriginalLength);
#endif
if (queue->NonSysInplaceRecoveryMode && item->Write)
{
QueueIrpCompletionFromItem(queue, item, STATUS_MEDIA_WRITE_PROTECTED);
continue;
}
if (!queue->IsFilterDevice)
{
// Adjust the offset for host file or device
@@ -1044,6 +1083,80 @@ static VOID MainThreadProc (PVOID threadArg)
continue;
}
if (queue->NonSysInplaceRecoveryMode)
{
dataRemaining = item->OriginalLength;
fragmentOffset = item->OriginalOffset;
while (dataRemaining > 0)
{
ULONG queueFragmentSize = queue->FragmentSize;
ULONG dataFragmentLength = dataRemaining <= queueFragmentSize ? dataRemaining : queueFragmentSize;
BOOL encryptedFragment;
BOOL isLastFragment;
LARGE_INTEGER physicalFragmentOffset;
uint64 logicalFragmentOffset = (uint64) fragmentOffset.QuadPart;
if (logicalFragmentOffset < (uint64) queue->NonSysInplaceLogicalEncryptedStart)
{
uint64 bytesToEncryptedStart = (uint64) queue->NonSysInplaceLogicalEncryptedStart - logicalFragmentOffset;
if ((uint64) dataFragmentLength > bytesToEncryptedStart)
dataFragmentLength = (ULONG) bytesToEncryptedStart;
encryptedFragment = FALSE;
physicalFragmentOffset = fragmentOffset;
}
else
{
encryptedFragment = TRUE;
hResult = ULongLongAdd (logicalFragmentOffset, TC_VOLUME_DATA_OFFSET, &addResult);
if (hResult != S_OK || addResult > (ULONGLONG) _I64_MAX)
{
QueueIrpCompletionFromItem (queue, item, STATUS_INVALID_PARAMETER);
break;
}
physicalFragmentOffset.QuadPart = addResult;
}
isLastFragment = dataRemaining == dataFragmentLength;
activeFragmentBuffer = (activeFragmentBuffer == queue->FragmentBufferA ? queue->FragmentBufferB : queue->FragmentBufferA);
InterlockedIncrement (&queue->IoThreadPendingRequestCount);
request = GetPoolBuffer (queue, sizeof (EncryptedIoRequest));
if (!request)
{
InterlockedDecrement(&queue->IoThreadPendingRequestCount);
QueueIrpCompletionFromItem (queue, item, STATUS_INSUFFICIENT_RESOURCES);
break;
}
request->Item = item;
request->CompleteOriginalIrp = isLastFragment;
request->Offset = physicalFragmentOffset;
request->Data = activeFragmentBuffer;
request->OrigDataBufferFragment = dataBuffer;
request->Length = dataFragmentLength;
request->EncryptedOffset = 0;
request->EncryptedLength = encryptedFragment ? dataFragmentLength : 0;
AcquireFragmentBuffer (queue, activeFragmentBuffer);
ExInterlockedInsertTailList (&queue->IoThreadQueue, &request->ListEntry, &queue->IoThreadQueueLock);
KeSetEvent (&queue->IoThreadQueueNotEmptyEvent, IO_DISK_INCREMENT, FALSE);
if (isLastFragment)
break;
dataRemaining -= dataFragmentLength;
dataBuffer += dataFragmentLength;
fragmentOffset.QuadPart += dataFragmentLength;
}
continue;
}
// Divide data block to fragments to enable efficient overlapping of encryption and IO operations
dataRemaining = item->OriginalLength;
+4
View File
@@ -62,6 +62,10 @@ typedef struct _EncryptedIoQueueStruct
// File-handle-based IO
HANDLE HostFileHandle;
BOOL bSupportPartialEncryption;
BOOL NonSysInplaceRecoveryMode;
int64 NonSysInplaceLogicalEncryptedStart;
int64 NonSysInplaceLogicalEncryptedEnd;
uint32 NonSysInplaceConcealedPlaintextLength;
int64 VirtualDeviceLength;
SECURITY_CLIENT_CONTEXT *SecurityClientContext;
+144 -53
View File
@@ -795,6 +795,112 @@ IOCTL_STORAGE_GET_HOTPLUG_INFO 0x002D0C14
IOCTL_STORAGE_QUERY_PROPERTY 0x002D1400
*/
static NTSTATUS VerifyBackingReadRange (PEXTENSION Extension, PVOID buffer, ULONG bufferSize, ULONGLONG physicalOffset, ULONG length)
{
IO_STATUS_BLOCK ioStatus;
LARGE_INTEGER offset;
ULONG remainingBytes = length;
if (physicalOffset > (ULONGLONG) _I64_MAX)
return STATUS_INVALID_PARAMETER;
offset.QuadPart = (LONGLONG) physicalOffset;
while (remainingBytes)
{
ULONG readCount = min (bufferSize, remainingBytes);
NTSTATUS status = ZwReadFile (Extension->hDeviceFile, NULL, NULL, NULL, &ioStatus, buffer, readCount, &offset, NULL);
if (NT_SUCCESS (status) && ioStatus.Information != readCount)
return STATUS_INVALID_PARAMETER;
else if (!NT_SUCCESS (status))
return status;
remainingBytes -= readCount;
offset.QuadPart += (ULONGLONG) readCount;
}
return STATUS_SUCCESS;
}
static NTSTATUS VerifyVolumeReadRange (PEXTENSION Extension, ULONGLONG logicalOffset, ULONG length)
{
HRESULT hResult;
ULONGLONG logicalEndOffset;
DWORD bufferSize;
PVOID buffer;
NTSTATUS status = STATUS_SUCCESS;
if (S_OK != ULongLongAdd (logicalOffset, (ULONGLONG) length, &logicalEndOffset)
|| logicalEndOffset > (ULONGLONG) Extension->DiskLength)
{
return STATUS_INVALID_PARAMETER;
}
if (length == 0)
return STATUS_SUCCESS;
bufferSize = min (length, 16 * PAGE_SIZE);
buffer = TCalloc (bufferSize);
if (!buffer)
return STATUS_INSUFFICIENT_RESOURCES;
if (Extension->Queue.NonSysInplaceRecoveryMode)
{
ULONG remainingBytes = length;
ULONGLONG currentLogicalOffset = logicalOffset;
while (remainingBytes)
{
ULONG fragmentLength = min (bufferSize, remainingBytes);
ULONGLONG physicalOffset;
if (currentLogicalOffset < (ULONGLONG) Extension->Queue.NonSysInplaceLogicalEncryptedStart)
{
ULONGLONG bytesToEncryptedStart = (ULONGLONG) Extension->Queue.NonSysInplaceLogicalEncryptedStart - currentLogicalOffset;
if ((ULONGLONG) fragmentLength > bytesToEncryptedStart)
fragmentLength = (ULONG) bytesToEncryptedStart;
physicalOffset = currentLogicalOffset;
}
else
{
hResult = ULongLongAdd (currentLogicalOffset, (ULONGLONG) TC_VOLUME_DATA_OFFSET, &physicalOffset);
if (hResult != S_OK)
{
status = STATUS_INVALID_PARAMETER;
break;
}
}
status = VerifyBackingReadRange (Extension, buffer, bufferSize, physicalOffset, fragmentLength);
if (!NT_SUCCESS (status))
break;
currentLogicalOffset += fragmentLength;
remainingBytes -= fragmentLength;
}
}
else
{
ULONGLONG physicalOffset;
ULONGLONG volumeOffset = Extension->cryptoInfo->hiddenVolume
? Extension->cryptoInfo->hiddenVolumeOffset
: Extension->cryptoInfo->volDataAreaOffset;
hResult = ULongLongAdd (logicalOffset, volumeOffset, &physicalOffset);
if (hResult != S_OK)
status = STATUS_INVALID_PARAMETER;
else
status = VerifyBackingReadRange (Extension, buffer, bufferSize, physicalOffset, length);
}
burn (buffer, bufferSize);
TCfree (buffer);
return status;
}
NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp)
{
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation (Irp);
@@ -1339,65 +1445,16 @@ NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION
case IOCTL_DISK_VERIFY:
Dump ("ProcessVolumeDeviceControlIrp (IOCTL_DISK_VERIFY)\n");
Irp->IoStatus.Information = 0;
if (ValidateIOBufferSize (Irp, sizeof (VERIFY_INFORMATION), ValidateInput))
{
HRESULT hResult;
ULONGLONG ullStartingOffset, ullNewOffset, ullEndOffset;
PVERIFY_INFORMATION pVerifyInformation;
ULONGLONG volumeOffset = Extension->cryptoInfo->hiddenVolume
? Extension->cryptoInfo->hiddenVolumeOffset
: Extension->cryptoInfo->volDataAreaOffset;
pVerifyInformation = (PVERIFY_INFORMATION) Irp->AssociatedIrp.SystemBuffer;
ullStartingOffset = (ULONGLONG) pVerifyInformation->StartingOffset.QuadPart;
hResult = ULongLongAdd(ullStartingOffset,
volumeOffset,
&ullNewOffset);
if (hResult != S_OK)
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
else if (S_OK != ULongLongAdd(ullStartingOffset, (ULONGLONG) pVerifyInformation->Length, &ullEndOffset))
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
else if (ullEndOffset > (ULONGLONG) Extension->DiskLength)
if (pVerifyInformation->StartingOffset.QuadPart < 0)
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
else
{
IO_STATUS_BLOCK ioStatus;
DWORD dwBuffersize = min (pVerifyInformation->Length, 16 * PAGE_SIZE);
PVOID buffer = TCalloc (dwBuffersize);
if (!buffer)
{
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
}
else
{
LARGE_INTEGER offset;
DWORD dwRemainingBytes = pVerifyInformation->Length, dwReadCount;
offset.QuadPart = ullNewOffset;
while (dwRemainingBytes)
{
dwReadCount = min (dwBuffersize, dwRemainingBytes);
Irp->IoStatus.Status = ZwReadFile (Extension->hDeviceFile, NULL, NULL, NULL, &ioStatus, buffer, dwReadCount, &offset, NULL);
if (NT_SUCCESS (Irp->IoStatus.Status) && ioStatus.Information != dwReadCount)
{
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
break;
}
else if (!NT_SUCCESS (Irp->IoStatus.Status))
break;
dwRemainingBytes -= dwReadCount;
offset.QuadPart += (ULONGLONG) dwReadCount;
}
burn (buffer, dwBuffersize);
TCfree (buffer);
}
}
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = VerifyVolumeReadRange (Extension, (ULONGLONG) pVerifyInformation->StartingOffset.QuadPart, pVerifyInformation->Length);
}
break;
@@ -2614,6 +2671,14 @@ NTSTATUS ProcessMainDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Ex
EnsureNullTerminatedString (mount->wszVolume, sizeof (mount->wszVolume));
EnsureNullTerminatedString (mount->wszLabel, sizeof (mount->wszLabel));
if (mount->NonSysInplaceRecoveryReadOnly)
{
mount->UseBackupHeader = TRUE;
mount->bMountReadOnly = TRUE;
mount->bProtectHiddenVolume = FALSE;
mount->bPartitionInInactiveSysEncScope = FALSE;
}
Irp->IoStatus.Information = sizeof (MOUNT_STRUCT);
Irp->IoStatus.Status = MountDevice (DeviceObject, mount);
@@ -3094,7 +3159,33 @@ VOID VolumeThreadProc (PVOID Context)
Extension->Queue.HostFileHandle = Extension->hDeviceFile;
Extension->Queue.VirtualDeviceLength = Extension->DiskLength;
Extension->Queue.MaxReadAheadOffset.QuadPart = Extension->HostLength;
if (bDevice && pThreadBlock->mount->bPartitionInInactiveSysEncScope
if (bDevice && pThreadBlock->mount->NonSysInplaceRecoveryReadOnly)
{
int64 logicalEncryptedStart;
int64 logicalEncryptedEnd;
uint32 concealedPlaintextLength;
if (!GetNonSysInplaceRecoveryGeometry (Extension->cryptoInfo, &logicalEncryptedStart, &logicalEncryptedEnd, &concealedPlaintextLength))
{
TCCloseVolume (DeviceObject, Extension);
pThreadBlock->mount->nReturnCode = ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED;
pThreadBlock->ntCreateStatus = STATUS_SUCCESS;
KeSetEvent (&Extension->keCreateEvent, 0, FALSE);
PsTerminateSystemThread (STATUS_SUCCESS);
return; /* Make static analyzer happy */
}
Extension->Queue.NonSysInplaceRecoveryMode = TRUE;
Extension->Queue.NonSysInplaceLogicalEncryptedStart = logicalEncryptedStart;
Extension->Queue.NonSysInplaceLogicalEncryptedEnd = logicalEncryptedEnd;
Extension->Queue.NonSysInplaceConcealedPlaintextLength = concealedPlaintextLength;
Extension->Queue.EncryptedAreaStart = -1;
Extension->Queue.EncryptedAreaEnd = -1;
Dump ("Non-system in-place recovery mount: logical encrypted area %I64d-%I64d, concealed plaintext bytes %u\n",
logicalEncryptedStart, logicalEncryptedEnd, concealedPlaintextLength);
}
else if (bDevice && pThreadBlock->mount->bPartitionInInactiveSysEncScope
&& (!Extension->cryptoInfo->hiddenVolume)
&& (Extension->cryptoInfo->EncryptedAreaLength.Value != Extension->cryptoInfo->VolumeSize.Value)
)
+94 -3
View File
@@ -36,6 +36,62 @@
volatile BOOL ProbingHostDeviceForWrite = FALSE;
BOOL GetNonSysInplaceRecoveryGeometry (PCRYPTO_INFO cryptoInfo, int64 *logicalEncryptedStart, int64 *logicalEncryptedEnd, uint32 *concealedPlaintextLength)
{
uint64 volumeSize;
uint64 encryptedAreaStart;
uint64 encryptedAreaLength;
uint64 encryptedAreaEndExclusive;
uint64 expectedAreaEndExclusive;
uint64 logicalStart;
if (!cryptoInfo)
return FALSE;
volumeSize = cryptoInfo->VolumeSize.Value;
encryptedAreaStart = cryptoInfo->EncryptedAreaStart.Value;
encryptedAreaLength = cryptoInfo->EncryptedAreaLength.Value;
if (cryptoInfo->hiddenVolume
|| (cryptoInfo->HeaderFlags & TC_HEADER_FLAG_NONSYS_INPLACE_ENC) == 0
|| (cryptoInfo->HeaderFlags & TC_HEADER_FLAG_ENCRYPTED_SYSTEM) != 0
|| volumeSize == 0
|| encryptedAreaLength == 0
|| encryptedAreaLength >= volumeSize
|| encryptedAreaStart < TC_VOLUME_DATA_OFFSET
|| volumeSize > (uint64) _I64_MAX
|| encryptedAreaStart > (uint64) _I64_MAX
|| encryptedAreaLength > (uint64) _I64_MAX
|| encryptedAreaStart > ((uint64) _I64_MAX - encryptedAreaLength)
|| volumeSize > ((uint64) _I64_MAX - TC_VOLUME_DATA_OFFSET))
{
return FALSE;
}
encryptedAreaEndExclusive = encryptedAreaStart + encryptedAreaLength;
expectedAreaEndExclusive = TC_VOLUME_DATA_OFFSET + volumeSize;
if (encryptedAreaEndExclusive != expectedAreaEndExclusive)
return FALSE;
logicalStart = encryptedAreaStart - TC_VOLUME_DATA_OFFSET;
if (logicalStart >= volumeSize
|| (logicalStart % ENCRYPTION_DATA_UNIT_SIZE) != 0)
{
return FALSE;
}
if (logicalEncryptedStart)
*logicalEncryptedStart = (int64) logicalStart;
if (logicalEncryptedEnd)
*logicalEncryptedEnd = (int64) (logicalStart + encryptedAreaLength - 1);
if (concealedPlaintextLength)
*concealedPlaintextLength = logicalStart < TC_INITIAL_NTFS_CONCEAL_PORTION_SIZE ? (uint32) logicalStart : TC_INITIAL_NTFS_CONCEAL_PORTION_SIZE;
return TRUE;
}
NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
PEXTENSION Extension,
@@ -58,6 +114,7 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
BOOL forceAccessCheck = !bRawDevice;
BOOL disableBuffering = TRUE;
BOOL exclusiveAccess = mount->bExclusiveAccess;
int volumeTypeCount;
/* when mounting with hidden volume protection, we cache the passwords after both outer and hidden volumes are mounted successfully*/
BOOL bAutoCachePassword = mount->bProtectHiddenVolume? FALSE : mount->bCache;
@@ -91,6 +148,21 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
mount->VolumeMountedReadOnlyAfterPartialSysEnc = FALSE;
mount->VolumeMasterKeyVulnerable = FALSE;
if (mount->NonSysInplaceRecoveryReadOnly)
{
mount->UseBackupHeader = TRUE;
mount->bMountReadOnly = TRUE;
mount->bProtectHiddenVolume = FALSE;
bAutoCachePassword = mount->bCache;
if (!bRawDevice || mount->bPartitionInInactiveSysEncScope)
{
mount->nReturnCode = ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED;
ntStatus = STATUS_SUCCESS;
goto error;
}
}
// If we are opening a device, query its size first
if (bRawDevice)
{
@@ -467,8 +539,10 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
}
// Go through all volume types (e.g., normal, hidden)
volumeTypeCount = mount->NonSysInplaceRecoveryReadOnly ? TC_VOLUME_TYPE_NORMAL + 1 : TC_VOLUME_TYPE_COUNT;
for (volumeType = TC_VOLUME_TYPE_NORMAL;
volumeType < TC_VOLUME_TYPE_COUNT;
volumeType < volumeTypeCount;
volumeType++)
{
Dump ("Trying to open volume type %d\n", volumeType);
@@ -660,7 +734,19 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
if (volumeType == TC_VOLUME_TYPE_NORMAL)
{
if (mount->bPartitionInInactiveSysEncScope)
if (mount->NonSysInplaceRecoveryReadOnly)
{
if (!GetNonSysInplaceRecoveryGeometry (Extension->cryptoInfo, NULL, NULL, NULL))
{
mount->nReturnCode = ERR_NONSYS_INPLACE_RECOVERY_READONLY_UNSUPPORTED;
ntStatus = STATUS_SUCCESS;
goto error;
}
Extension->bReadOnly = mount->bMountReadOnly = TRUE;
Extension->TrimEnabled = FALSE;
}
else if (mount->bPartitionInInactiveSysEncScope)
{
if (Extension->cryptoInfo->EncryptedAreaStart.Value > (unsigned __int64) partitionStartingOffset
|| Extension->cryptoInfo->EncryptedAreaStart.Value + Extension->cryptoInfo->VolumeSize.Value <= (unsigned __int64) partitionStartingOffset)
@@ -709,7 +795,12 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
Extension->cryptoInfo->hiddenVolume = FALSE;
if (mount->bPartitionInInactiveSysEncScope)
if (mount->NonSysInplaceRecoveryReadOnly)
{
Extension->cryptoInfo->volDataAreaOffset = 0;
Extension->DiskLength = Extension->cryptoInfo->VolumeSize.Value;
}
else if (mount->bPartitionInInactiveSysEncScope)
{
Extension->cryptoInfo->volDataAreaOffset = 0;
Extension->DiskLength = lDiskLength.QuadPart;
+1
View File
@@ -15,6 +15,7 @@ extern volatile BOOL ProbingHostDeviceForWrite;
NTSTATUS TCOpenVolume ( PDEVICE_OBJECT DeviceObject , PEXTENSION Extension , MOUNT_STRUCT *mount , PWSTR pwszMountVolume , BOOL bRawDevice );
void TCCloseVolume ( PDEVICE_OBJECT DeviceObject , PEXTENSION Extension );
BOOL GetNonSysInplaceRecoveryGeometry ( PCRYPTO_INFO cryptoInfo , int64 *logicalEncryptedStart , int64 *logicalEncryptedEnd , uint32 *concealedPlaintextLength );
NTSTATUS TCCompletion ( PDEVICE_OBJECT DeviceObject , PIRP Irp , PVOID pUserBuffer );
NTSTATUS TCSendHostDeviceIoControlRequest ( PDEVICE_OBJECT DeviceObject , PEXTENSION Extension , ULONG IoControlCode , void *OutputBuffer , ULONG OutputBufferSize );
NTSTATUS TCSendHostDeviceIoControlRequestEx ( PDEVICE_OBJECT DeviceObject , PEXTENSION Extension , ULONG IoControlCode , void *InputBuffer , ULONG InputBufferSize , void *OutputBuffer , ULONG OutputBufferSize );
+13 -7
View File
@@ -511,12 +511,18 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-arm64.exe" &gt;NUL:
<ClInclude Include="..\Common\Xts.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\Boot\EFI\DcsBoot.efi" />
<None Include="..\Boot\EFI\DcsCfg.efi" />
<None Include="..\Boot\EFI\DcsInfo.efi" />
<None Include="..\Boot\EFI\DcsInt.efi" />
<None Include="..\Boot\EFI\DcsRe.efi" />
<None Include="..\Boot\EFI\LegacySpeaker.efi" />
<None Include="..\Boot\EFI\2011UEFICA\DcsBoot.efi" />
<None Include="..\Boot\EFI\2011UEFICA\DcsCfg.efi" />
<None Include="..\Boot\EFI\2011UEFICA\DcsInfo.efi" />
<None Include="..\Boot\EFI\2011UEFICA\DcsInt.efi" />
<None Include="..\Boot\EFI\2011UEFICA\DcsRe.efi" />
<None Include="..\Boot\EFI\2011UEFICA\LegacySpeaker.efi" />
<None Include="..\Boot\EFI\2023UEFICA\DcsBoot.efi" />
<None Include="..\Boot\EFI\2023UEFICA\DcsCfg.efi" />
<None Include="..\Boot\EFI\2023UEFICA\DcsInfo.efi" />
<None Include="..\Boot\EFI\2023UEFICA\DcsInt.efi" />
<None Include="..\Boot\EFI\2023UEFICA\DcsRe.efi" />
<None Include="..\Boot\EFI\2023UEFICA\LegacySpeaker.efi" />
<None Include="..\Boot\Windows\Release_AES_SHA2\BootLoader.com.gz" />
<None Include="..\Boot\Windows\Release_Camellia\BootLoader.com.gz" />
<None Include="..\Boot\Windows\Release_Camellia\BootSector.bin" />
@@ -599,4 +605,4 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-arm64.exe" &gt;NUL:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
+5
View File
@@ -176,6 +176,11 @@ public:
return BaseCom::GetSecureBootConfig (pSecureBootEnabled, pVeraCryptKeysLoaded);
}
virtual DWORD STDMETHODCALLTYPE GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported)
{
return BaseCom::GetEfiBootLoaderSigningSupport (pMicrosoft2023UefiCAsSupported);
}
virtual DWORD STDMETHODCALLTYPE WriteEfiBootSectorUserConfig (DWORD userConfig, BSTR customUserMessage, int pim, int hashAlg)
{
return BaseCom::WriteEfiBootSectorUserConfig (userConfig, customUserMessage,pim, hashAlg);
+2 -1
View File
@@ -16,7 +16,7 @@ import "..\Common\Password.h";
[
uuid(56327DDA-F1A7-4e13-B128-520D129BDEF6),
helpstring("VeraCrypt Format UAC Support Library"),
version(2.10) // Update ComSetup.cpp when changing version number
version(2.11) // Update ComSetup.cpp when changing version number
]
library TrueCryptFormatCom
{
@@ -51,6 +51,7 @@ library TrueCryptFormatCom
DWORD GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKeysLoaded);
DWORD NotifyService (DWORD dwNotifyCode);
DWORD FastFileResize (BSTR filePath, __int64 fileSize);
DWORD GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported);
};
[
-2
View File
@@ -57,8 +57,6 @@ using namespace VeraCrypt;
#endif
#define TC_MAX_NONSYS_INPLACE_ENC_WORK_CHUNK_SIZE (2048 * BYTES_PER_KB)
#define TC_INITIAL_NTFS_CONCEAL_PORTION_SIZE (2 * TC_MAX_VOLUME_SECTOR_SIZE)
#define TC_NTFS_CONCEAL_CONSTANT 0xFF
#define TC_NONSYS_INPLACE_ENC_HEADER_UPDATE_INTERVAL (64 * BYTES_PER_MB)
#define TC_NONSYS_INPLACE_ENC_MIN_VOL_SIZE (TC_TOTAL_VOLUME_HEADERS_SIZE + TC_MIN_NTFS_FS_SIZE * 2)
+1 -1
View File
@@ -106,7 +106,7 @@ FUSE_LIBS = $(shell $(PKG_CONFIG) $(VC_FUSE_PACKAGE) --libs)
#------ Executable ------
export TC_VERSION := $(shell awk -F '"' '/^[[:space:]]*#define[[:space:]]+VERSION_STRING[[:space:]]*"/ { print $$2; exit }' ../Common/Tcdefs.h)
export TC_VERSION := $(shell awk -F '"' '/^[[:space:]]*\#define[[:space:]]+VERSION_STRING[[:space:]]*"/ { print $$2; exit }' ../Common/Tcdefs.h)
#------ Linux package naming ------
ifeq "$(PLATFORM)" "Linux"
+5
View File
@@ -193,6 +193,11 @@ public:
return BaseCom::GetSecureBootConfig (pSecureBootEnabled, pVeraCryptKeysLoaded);
}
virtual DWORD STDMETHODCALLTYPE GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported)
{
return BaseCom::GetEfiBootLoaderSigningSupport (pMicrosoft2023UefiCAsSupported);
}
virtual DWORD STDMETHODCALLTYPE WriteEfiBootSectorUserConfig (DWORD userConfig, BSTR customUserMessage, int pim, int hashAlg)
{
return BaseCom::WriteEfiBootSectorUserConfig (userConfig, customUserMessage,pim, hashAlg);
+2 -1
View File
@@ -16,7 +16,7 @@ import "..\Common\Password.h";
[
uuid(9ACF6176-5FC4-4690-A025-B3306A50EB6A),
helpstring("VeraCrypt Main UAC Support Library"),
version(2.13) // Update ComSetup.cpp when changing version number
version(2.14) // Update ComSetup.cpp when changing version number
]
library TrueCryptMainCom
{
@@ -55,6 +55,7 @@ library TrueCryptMainCom
DWORD GetSecureBootConfig (BOOL* pSecureBootEnabled, BOOL *pVeraCryptKeysLoaded);
DWORD NotifyService (DWORD dwNotifyCode);
DWORD FastFileResize (BSTR filePath, __int64 fileSize);
DWORD GetEfiBootLoaderSigningSupport (BOOL* pMicrosoft2023UefiCAsSupported);
};
[
+64 -7
View File
@@ -1089,6 +1089,7 @@ void LoadSettingsAndCheckModified (HWND hwndDlg, BOOL bOnlyCheckModified, BOOL*
defaultMountOptions.ProtectedHidVolPim = 0;
defaultMountOptions.PartitionInInactiveSysEncScope = FALSE;
defaultMountOptions.RecoveryMode = FALSE;
defaultMountOptions.NonSysInplaceRecoveryReadOnly = FALSE;
defaultMountOptions.UseBackupHeader = FALSE;
defaultMountOptions.SkipCachedPasswords = FALSE;
@@ -3923,8 +3924,10 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
case WM_INITDIALOG:
{
BOOL protect;
BOOL nonSysInplaceRecovery;
pMountOptions = (MountOptions *) lParam;
nonSysInplaceRecovery = !bPrebootPasswordDlgMode && pMountOptions->NonSysInplaceRecoveryReadOnly;
LocalizeDialog (hwndDlg, "IDD_MOUNT_OPTIONS");
@@ -3935,6 +3938,9 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
SendDlgItemMessage (hwndDlg, IDC_DISABLE_MOUNT_MANAGER, BM_SETCHECK,
pMountOptions->DisableMountManager ? BST_CHECKED : BST_UNCHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_NONSYS_INPLACE_RECOVERY_READONLY, BM_SETCHECK,
nonSysInplaceRecovery ? BST_CHECKED : BST_UNCHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_PROTECT_HIDDEN_VOL, BM_SETCHECK,
pMountOptions->ProtectHiddenVolume ? BST_CHECKED : BST_UNCHECKED, 0);
@@ -3946,7 +3952,18 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
SendDlgItemMessage (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK, BM_SETCHECK,
pMountOptions->UseBackupHeader ? BST_CHECKED : BST_UNCHECKED, 0);
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA), !bPrebootPasswordDlgMode);
if (nonSysInplaceRecovery)
{
SendDlgItemMessage (hwndDlg, IDC_MOUNT_READONLY, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_PROTECT_HIDDEN_VOL, BM_SETCHECK, BST_UNCHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA, BM_SETCHECK, BST_UNCHECKED, 0);
}
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY), !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK), !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA), !bPrebootPasswordDlgMode && !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_NONSYS_INPLACE_RECOVERY_READONLY), !bPrebootPasswordDlgMode);
SetDlgItemTextW (hwndDlg, IDC_VOLUME_LABEL, pMountOptions->Label);
SendDlgItemMessage (hwndDlg, IDC_VOLUME_LABEL, EM_LIMITTEXT, 32, 0); // 32 is the maximum possible length for a drive label in Windows
@@ -3975,8 +3992,8 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
protect = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL));
EnableWindow (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)));
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_VOL_PROTECTION), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)));
EnableWindow (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_VOL_PROTECTION), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_PASSWORD_PROT_HIDVOL), protect);
EnableWindow (GetDlgItem (hwndDlg, IDC_SHOW_PASSWORD_MO), protect);
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_PROT_PASSWD), protect);
@@ -4113,6 +4130,10 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
if (lw == IDOK)
{
wchar_t tmp[MAX_PASSWORD+1];
BOOL nonSysInplaceRecovery = IsButtonChecked (GetDlgItem (hwndDlg, IDC_NONSYS_INPLACE_RECOVERY_READONLY));
if (nonSysInplaceRecovery && AskWarnYesNo ("NONSYS_INPLACE_RECOVERY_READONLY_WARNING", hwndDlg) != IDYES)
return 1;
pMountOptions->ReadOnly = IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY));
pMountOptions->Removable = IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_REMOVABLE));
@@ -4120,6 +4141,15 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
pMountOptions->ProtectHiddenVolume = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL));
pMountOptions->PartitionInInactiveSysEncScope = IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA));
pMountOptions->UseBackupHeader = IsButtonChecked (GetDlgItem (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK));
pMountOptions->NonSysInplaceRecoveryReadOnly = nonSysInplaceRecovery;
if (pMountOptions->NonSysInplaceRecoveryReadOnly)
{
pMountOptions->ReadOnly = TRUE;
pMountOptions->UseBackupHeader = TRUE;
pMountOptions->ProtectHiddenVolume = FALSE;
pMountOptions->PartitionInInactiveSysEncScope = FALSE;
}
GetDlgItemTextW (hwndDlg, IDC_VOLUME_LABEL, pMountOptions->Label, sizeof (pMountOptions->Label) /sizeof (wchar_t));
@@ -4154,15 +4184,31 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
return 1;
}
if (lw == IDC_MOUNT_READONLY || lw == IDC_PROTECT_HIDDEN_VOL || lw == IDC_DISABLE_MOUNT_MANAGER)
if (lw == IDC_MOUNT_READONLY || lw == IDC_PROTECT_HIDDEN_VOL || lw == IDC_DISABLE_MOUNT_MANAGER || lw == IDC_NONSYS_INPLACE_RECOVERY_READONLY)
{
BOOL protect;
BOOL nonSysInplaceRecovery = IsButtonChecked (GetDlgItem (hwndDlg, IDC_NONSYS_INPLACE_RECOVERY_READONLY));
if (lw == IDC_NONSYS_INPLACE_RECOVERY_READONLY)
{
if (nonSysInplaceRecovery)
{
SendDlgItemMessage (hwndDlg, IDC_MOUNT_READONLY, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_PROTECT_HIDDEN_VOL, BM_SETCHECK, BST_UNCHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA, BM_SETCHECK, BST_UNCHECKED, 0);
}
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY), !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_USE_EMBEDDED_HEADER_BAK), !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_SYSENC_PART_WITHOUT_PBA), !bPrebootPasswordDlgMode && !nonSysInplaceRecovery);
}
if (lw == IDC_MOUNT_READONLY)
{
SendDlgItemMessage (hwndDlg, IDC_PROTECT_HIDDEN_VOL, BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)));
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_VOL_PROTECTION), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)));
EnableWindow (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_VOL_PROTECTION), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
}
if (lw == IDC_DISABLE_MOUNT_MANAGER)
@@ -4171,7 +4217,10 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
EnableWindow (GetDlgItem (hwndDlg, IDT_VOLUME_LABEL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_DISABLE_MOUNT_MANAGER)));
}
protect = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL));
EnableWindow (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_VOL_PROTECTION), !IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY)) && !nonSysInplaceRecovery);
protect = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PROTECT_HIDDEN_VOL)) && !nonSysInplaceRecovery;
EnableWindow (GetDlgItem (hwndDlg, IDC_PASSWORD_PROT_HIDVOL), protect);
EnableWindow (GetDlgItem (hwndDlg, IDT_HIDDEN_PROT_PASSWD), protect);
@@ -9893,6 +9942,14 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine)
else if (!_wcsicmp (szTmp, L"recovery"))
mountOptions.RecoveryMode = TRUE;
else if (!_wcsicmp (szTmp, L"inplacerecovery") || !_wcsicmp (szTmp, L"nonsysinplacerecovery") || !_wcsicmp (szTmp, L"recoveryro"))
{
mountOptions.NonSysInplaceRecoveryReadOnly = TRUE;
mountOptions.ReadOnly = TRUE;
mountOptions.UseBackupHeader = TRUE;
mountOptions.ProtectHiddenVolume = FALSE;
mountOptions.PartitionInInactiveSysEncScope = FALSE;
}
else if ((wcslen(szTmp) > 6) && (wcslen(szTmp) <= 38) && !_wcsnicmp (szTmp, L"label=", 6))
{
// get the label
+2 -2
View File
@@ -11,10 +11,10 @@
*/
#define TC_MAIN_COM_VERSION_MAJOR 2
#define TC_MAIN_COM_VERSION_MINOR 13
#define TC_MAIN_COM_VERSION_MINOR 14
#define TC_FORMAT_COM_VERSION_MAJOR 2
#define TC_FORMAT_COM_VERSION_MINOR 10
#define TC_FORMAT_COM_VERSION_MINOR 11
#include <atlbase.h>
#include <comdef.h>
+2
View File
@@ -1441,6 +1441,8 @@ BOOL DoRegUninstall (HWND hwndDlg, BOOL bRemoveDeprecated)
RegDeleteKeyExW (HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VeraCrypt", KEY_WOW64_32KEY, 0);
RegDeleteKeyExW (HKEY_CURRENT_USER, L"Software\\VeraCrypt", KEY_WOW64_32KEY, 0);
DeleteRegistryKey (HKEY_LOCAL_MACHINE, L"Software\\VeraCrypt\\Diagnostics\\EfiBootLoader");
RegDeleteKey (HKEY_LOCAL_MACHINE, L"Software\\VeraCrypt\\Diagnostics");
RegDeleteKey (HKEY_LOCAL_MACHINE, L"Software\\Classes\\VeraCryptVolume\\Shell\\open\\command");
RegDeleteKey (HKEY_LOCAL_MACHINE, L"Software\\Classes\\VeraCryptVolume\\Shell\\open");
+8 -6
View File
@@ -10,11 +10,13 @@
code distribution packages.
*/
// Keep these in sync with MainCom.idl and FormatCom.idl. MSI unregister targets these
// exact typelib versions before removing older versions.
#define TC_MAIN_COM_VERSION_MAJOR 2
#define TC_MAIN_COM_VERSION_MINOR 11
#define TC_MAIN_COM_VERSION_MINOR 14
#define TC_FORMAT_COM_VERSION_MAJOR 2
#define TC_FORMAT_COM_VERSION_MINOR 9
#define TC_FORMAT_COM_VERSION_MINOR 11
#include <atlbase.h>
#include <comdef.h>
@@ -52,9 +54,9 @@ extern "C" BOOL RegisterComServers (wchar_t *modulePath)
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR, 0, SYS_WIN32);
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR, 0, SYS_WIN32);
// unregister older versions that may still exist
for (WORD i = 7; i >= 1; i--)
for (WORD i = 9; i >= 1; i--)
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
for (WORD i = 5; i >= 1; i--)
for (WORD i = 6; i >= 1; i--)
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
CRegObject ro;
@@ -95,9 +97,9 @@ extern "C" BOOL UnregisterComServers (wchar_t *modulePath)
return FALSE;
// unregister older versions that may still exist
for (WORD i = 7; i >= 1; i--)
for (WORD i = 9; i >= 1; i--)
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
for (WORD i = 5; i >= 1; i--)
for (WORD i = 6; i >= 1; i--)
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
wchar_t module[1024];
+3
View File
@@ -1730,6 +1730,9 @@ BOOL DoRegUninstall_Dll (MSIHANDLE hInstaller, BOOL bRemoveDeprecated)
RegDeleteKey (HKEY_LOCAL_MACHINE, L"Software\\Classes\\VeraCryptVolume");
*/
DeleteRegistryKey (HKEY_LOCAL_MACHINE, L"Software\\VeraCrypt\\Diagnostics\\EfiBootLoader");
RegDeleteKey (HKEY_LOCAL_MACHINE, L"Software\\VeraCrypt\\Diagnostics");
if (!bRemoveDeprecated)
{
HKEY hKey;