diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-23 00:36:07 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-23 00:36:07 +0200 |
commit | bb55343f635cdda4f62c998b269c88cb9df384ec (patch) | |
tree | 84dc6b7a48602d5dbea82bf84a7ec74d160f0077 /src/Common/Format.c | |
parent | 0e4f1ecee33db0353dc845ee02b339f9c4ab7c22 (diff) | |
download | VeraCrypt-bb55343f635cdda4f62c998b269c88cb9df384ec.tar.gz VeraCrypt-bb55343f635cdda4f62c998b269c88cb9df384ec.zip |
Windows: if /fastCreateFile set, request SE_MANAGE_VOLUME_NAME privileges (credits: @xnoreq)
Display a warning if request failed and allow to continue without fast creation
Diffstat (limited to 'src/Common/Format.c')
-rw-r--r-- | src/Common/Format.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/Common/Format.c b/src/Common/Format.c index 4363f474..f34ee39b 100644 --- a/src/Common/Format.c +++ b/src/Common/Format.c @@ -401,12 +401,29 @@ begin_format: if (speedupFileCreation) { - // accelerate file creation by telling Windows not to fill all file content with zeros - // this has security issues since it will put existing disk content into file container - // We use this mechanism only when switch /fastCreateFile specific and when quick format - // also specified and which is documented to have security issues. - // we don't check returned status because failure is not issue for us - SetFileValidData (dev, volumeSize.QuadPart); + if (!SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE)) + { + DWORD dwLastError = GetLastError(); + if (Silent || (MessageBoxW(hwndDlg, GetString ("ADMIN_PRIVILEGES_WARN_MANAGE_VOLUME"), lpszTitle, MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2) == IDNO)) + { + SetLastError(dwLastError); + nStatus = ERR_OS_ERROR; + goto error; + } + } + else + { + // accelerate file creation by telling Windows not to fill all file content with zeros + // this has security issues since it will put existing disk content into file container + // We use this mechanism only when switch /fastCreateFile specific and when quick format + // also specified and which is documented to have security issues. + // we don't check returned status because failure is not issue for us + if (!SetFileValidData (dev, volumeSize.QuadPart)) + { + nStatus = ERR_OS_ERROR; + goto error; + } + } } if (SetFilePointer (dev, 0, NULL, FILE_BEGIN) != 0) |