/* Derived from source code of TrueCrypt 7.1a, which is Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed by the TrueCrypt License 3.0. Modifications and additions to the original source code (contained in this file) and all other portions of this file are Copyright (c) 2013-2016 IDRIX and are governed by the Apache License 2.0 the full text of which is contained in the file License.txt included in VeraCrypt binary and source code distribution packages. */ #include #include #include #include #ifdef TC_LINUX #include #endif #ifdef TC_BSD #include #endif #ifdef TC_SOLARIS #include #include #endif #include #include #include #include "Platform/File.h" #include "Platform/TextReader.h" namespace VeraCrypt { #if 0 # define TC_TRACE_FILE_OPERATIONS static void TraceFileOperation (int fileHandle, FilePath filePath, bool write, uint64 length, int64 position = -1) { string path = filePath; if (path.empty() || path.find ("veracrypt_aux_mnt") != string::npos) return; stringstream s; s << path << ": " << (write ? "W " : "R ") << (position == -1 ? lseek (fileHandle, 0, SEEK_CUR) : position) << " (" << length << ")"; SystemLog::WriteError (s.str()); } #endif void File::Close () { if_debug (ValidateState()); if (!SharedHandle) { close (FileHandle); FileIsOpen = false; if ((mFileOpenFlags & File::PreserveTimestamps) && Path.IsFile()) { struct utimbuf u; u.actime = AccTime; u.modtime = ModTime; try { throw_sys_sub_if (utime (string (Path).c_str(), &u) == -1, wstring (Path)); } catch (...) // Suppress errors to allow using read-only files { #ifdef DEBUG throw; #endif } } } } void File::Delete () { Close(); Path.Delete(); } void File::Flush () const { if_debug (ValidateState()); throw_sys_sub_if (fsync (FileHandle) != 0, wstring (Path)); } uint32 File::GetDeviceSectorSize () const { if (Path.IsDevice()) { #ifdef TC_LINUX int blockSize; throw_sys_sub_if (ioctl (FileHandle, BLKSSZGET, &blockSize) == -1, wstring (Path)); return blockSize; #elif defined (TC_MACOSX) uint32 blockSize; throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBLOCKSIZE, &blockSize) == -1, wstring (Path)); return blockSize; #elif defined (TC_FREEBSD) u_int sectorSize; throw_sys_sub_if (ioctl (FileHandle, DIOCGSECTORSIZE, §orSize) == -1, wstring (Path)); return (uint32) sectorSize; #elif defined (TC_SOLARIS) struct dk_minfo mediaInfo; throw_sys_sub_if (ioctl (FileHandle, DKIOCGMEDIAINFO, &mediaInfo) == -1, wstring (Path)); return mediaInfo.dki_lbsize; #else # error GetDeviceSectorSize() #endif } else throw ParameterIncorrect (SRC_POS); } uint64 File::GetPartitionDeviceStartOffset () const { #ifdef TC_LINUX // HDIO_GETGEO ioctl is limited by the size of long TextReader tr ("/sys/block/" + string (Path.ToHostDriveOfPartition().ToBaseName()) + "/" + string (Path.ToBaseName()) + "/start"); string line; tr.ReadLine (line); return StringConverter::ToUInt64 (line) * GetDeviceSectorSize(); #elif defined (TC_MACOSX) #ifndef DKIOCGETBASE # define DKIOCGETBASE _IOR('d', 73, uint64) #endif uint64 offset; throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBASE, &offset) == -1, wstring (Path)); return offset; #elif defined (TC_SOLARIS) struct extpart_info partInfo; throw_sys_sub_if (ioctl (FileHandle, DKIOCEXTPARTINFO, &partInfo) == -1, wstring (Path)); return partInfo.p_start * GetDeviceSectorSize(); #else throw NotImplemented (SRC_POS); #endif } uint64 File::Length () const { if_debug (ValidateState()); // BSD does not support seeking to the end of a device #ifdef TC_BSD if (Path.IsBlockDevice() || Path.IsCharacterDevice()) { # ifdef TC_MACOSX uint32 blockSize; uint64 blockCount; throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBLOCKSIZE, &blockSize) == -1, wstring (Path)); throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBLOCKCOUNT, &blockCount) == -1, wstring (Path)); return blockCount * blockSize; # else uint64 mediaSize; throw_sys_sub_if (ioctl (FileHandle, DIOCGMEDIASIZE, &mediaSize) == -1, wstring (Path)); return mediaSize; # endif } #endif off_t current = lseek (FileHandle, 0, SEEK_CUR); throw_sys_sub_if (current == -1, wstring (Path)); SeekEnd (0); uint64 length = lseek (FileHandle, 0, SEEK_CUR); SeekAt (current); return length; } void File::Open (const FilePath &path, FileOpenMode mode, FileShareMode shareMode, FileOpenFlags flags) { #ifdef TC_LINUX int sysFlags = O_LARGEFILE; #else int sysFlags = 0; #endif switch (mode) { case CreateReadWrite: sysFlags |= O_CREAT | O_TRUNC | O_RDWR; break; case CreateWrite: sysFlags |= O_CREAT | O_TRUNC | O_WRONLY; break; case OpenRead: sysFlags |= O_RDONLY; break; case OpenWrite: sysFlags |= O_WRONLY; break; case OpenReadWrite: sysFlags |= O_RDWR; break; default: throw ParameterIncorrect (SRC_POS); } if ((flags & File::PreserveTimestamps) && path.IsFile()) { struct stat statData; throw_sys_sub_if (stat (string (path).c_str(), &statData) == -1, wstring (path)); AccTime = statData.st_atime; ModTime = statData.st_mtime; } FileHandle = open (string (path).c_str(), sysFlags, S_IRUSR | S_IWUSR); throw_sys_sub_if (FileHandle == -1, wstring (path)); #if 0 // File locking is disabled to avoid remote filesystem locking issues try { struct flock fl; memset (&fl, 0, sizeof (fl)); fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; switch (shareMode) { case ShareNone: fl.l_type = F_WRLCK; if (fcntl (FileHandle, F_SETLK, &fl) == -1) throw_sys_sub_if (errno == EAGAIN || errno == EACCES, wstring (path)); break; case ShareRead: fl.l_type = F_RDLCK; if (fcntl (FileHandle, F_SETLK, &fl) == -1) throw_sys_sub_if (errno == EAGAIN || errno == EACCES, wstring (path)); break; case ShareReadWrite: fl.l_type = (mode == OpenRead ? F_RDLCK : F_WRLCK); if (fcntl (FileHandle, F_GETLK, &fl) != -1 && fl.l_type != F_UNLCK) { errno = EAGAIN; throw SystemException (SRC_POS, wstring (path)); } break; case ShareReadWriteIgnoreLock: break; default: throw ParameterIncorrect (SRC_POS); } } catch (...) { close (FileHandle); throw; } #endif // 0 Path = path; mFileOpenFlags = flags; FileIsOpen = true; } uint64 File::Read (const BufferPtr &buffer) const { if_debug (ValidateState()); #ifdef TC_TRACE_FILE_OPERATIONS TraceFileOperation (FileHandle, Path, false, buffer.Size()); #endif ssize_t bytesRead = read (FileHandle, buffer, buffer.Size()); throw_sys_sub_if (bytesRead == -1, wstring (Path)); return bytesRead; } uint64 File::ReadAt (const BufferPtr &buffer, uint64 position) const { if_debug (ValidateState()); #ifdef TC_TRACE_FILE_OPERATIONS TraceFileOperation (FileHandle, Path, false, buffer.Size(), position); #endif ssize_t bytesRead = pread (FileHandle, buffer, buffer.Size(), position); throw_sys_sub_if (bytesRead == -1, wstring (Path)); return bytesRead; } void File::SeekAt (uint64 position) const { if_debug (ValidateState()); throw_sys_sub_if (lseek (FileHandle, position, SEEK_SET) == -1, wstring (Path)); } void File::SeekEnd (int offset) const { if_debug (ValidateState()); // BSD does not support seeking to the end of a device #ifdef TC_BSD if (Path.IsBlockDevice() || Path.IsCharacterDevice()) { SeekAt (Length() + offset); return; } #endif throw_sys_sub_if (lseek (FileHandle, offset, SEEK_END) == -1, wstring (Path)); } void File::Write (const ConstBufferPtr &buffer) const { if_debug (ValidateState()); #ifdef TC_TRACE_FILE_OPERATIONS TraceFileOperation (FileHandle, Path, true, buffer.Size()); #endif throw_sys_sub_if (write (FileHandle, buffer, buffer.Size()) != (ssize_t) buffer.Size(), wstring (Path)); } void File::WriteAt (const ConstBufferPtr &buffer, uint64 position) const { if_debug (ValidateState()); #ifdef TC_TRACE_FILE_OPERATIONS TraceFileOperation (FileHandle, Path, true, buffer.Size(), position); #endif throw_sys_sub_if (pwrite (FileHandle, buffer, buffer.Size(), position) != (ssize_t) buffer.Size(), wstring (Path)); } } d='n155' href='#n155'>155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
#include "..\\common\\resource.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_SIZE_DIALOG DIALOGEX 0, 0, 376, 271
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt Expander"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    EDITTEXT        IDC_SIZEBOX,30,102,109,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
    CONTROL         "&KB",IDC_KB,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,169,105,38,10
    CONTROL         "&MB",IDC_MB,"Button",BS_AUTORADIOBUTTON,209,105,38,10
    CONTROL         "&GB",IDC_GB,"Button",BS_AUTORADIOBUTTON,247,105,38,10
    CONTROL         "Fill new space with random data",IDC_INIT_NEWSPACE,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,127,118,10
    DEFPUSHBUTTON   "Continue",IDOK,15,238,84,18
    PUSHBUTTON      "Cancel",IDCANCEL,277,238,84,18
    LTEXT           "Help Text",IDC_BOX_HELP,15,165,346,58,0,WS_EX_CLIENTEDGE
    GROUPBOX        "Enter new volume size",IDC_STATIC,15,83,346,63
    RTEXT           "Current size: ",IDT_CURRENT_SIZE,27,42,46,8
    CONTROL         "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,42,275,8,WS_EX_TRANSPARENT
    RTEXT           "New size: ",IDT_NEW_SIZE,28,54,45,8
    LTEXT           "",IDC_EXPAND_VOLUME_NEWSIZE,80,54,275,8,0,WS_EX_TRANSPARENT
    RTEXT           "Volume: ",IDT_VOL_NAME,31,18,42,8
    GROUPBOX        "",IDC_STATIC,15,9,346,59
    CONTROL         "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,18,275,8,WS_EX_TRANSPARENT
    RTEXT           "File system: ",IDT_FILE_SYS,31,30,42,8
    CONTROL         "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,30,275,8,WS_EX_TRANSPARENT
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    IDD_SIZE_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 15
        RIGHTMARGIN, 361
        VERTGUIDE, 30
        TOPMARGIN, 14
        BOTTOMMARGIN, 256
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_MOUNT_DLG DIALOGEX 0, 0, 376, 271
STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt Expander"
MENU IDR_MENU
CLASS "VeraCryptCustomDlg"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
    COMBOBOX        IDC_VOLUME,56,192,212,74,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
    PUSHBUTTON      "Select &File...",IDC_SELECT_FILE,276,192,84,14
    PUSHBUTTON      "Select D&evice...",IDC_SELECT_DEVICE,276,211,84,14
    DEFPUSHBUTTON   "Start",IDOK,8,243,84,18,WS_GROUP
    PUSHBUTTON      "E&xit",IDC_EXIT,284,243,84,18,WS_GROUP
    CONTROL         112,IDC_LOGO,"Static",SS_BITMAP | SS_NOTIFY | WS_BORDER,16,192,27,31
    GROUPBOX        "Volume",IDT_VOLUME,8,179,360,53
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDFRAME,1,0,373,147
    GROUPBOX        "",IDC_STATIC,282,238,88,24
    GROUPBOX        "",IDC_STATIC,6,238,88,24
    GROUPBOX        "",IDC_STATIC,1,147,373,123,BS_CENTER
    LTEXT           "1. Select the VeraCrypt volume to be expanded\n2. Click the 'Start' button",IDC_STATIC,15,156,293,21
    LTEXT           "Static",IDC_INFOEXPAND,8,6,361,134,SS_NOPREFIX | SS_SUNKEN,WS_EX_STATICEDGE
END

IDD_PASSWORD_DLG DIALOGEX 0, 0, 322, 107
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Enter VeraCrypt Volume Password"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
    EDITTEXT        IDC_PASSWORD,69,8,166,14,ES_PASSWORD | ES_AUTOHSCROLL
    COMBOBOX        IDC_PKCS5_PRF_ID,69,26,86,90,CBS_DROPDOWNLIST | WS_TABSTOP
    CONTROL         "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,28,76,10
    EDITTEXT        IDC_PIM,69,43,42,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
    CONTROL         "Use PIM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,49,97,10
    CONTROL         "Cache passwords and keyfil&es in memory",IDC_CACHE,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,62,153,10
    CONTROL         "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,75,83,10
    CONTROL         "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,88,83,11
    PUSHBUTTON      "&Keyfiles...",IDC_KEY_FILES,171,86,64,14
    PUSHBUTTON      "Mount Opti&ons...",IDC_MOUNT_OPTIONS,243,86,64,14
    DEFPUSHBUTTON   "OK",IDOK,243,8,64,14
    PUSHBUTTON      "Cancel",IDCANCEL,243,25,64,14
    RTEXT           "Password:",IDT_PASSWORD,0,10,65,13
    RTEXT           "PKCS-5 PRF:",IDT_PKCS5_PRF,0,27,65,13
    RTEXT           "Volume PIM:",IDT_PIM,0,46,65,13,NOT WS_VISIBLE
    LTEXT           "(Empty or 0 for default iterations)",IDC_PIM_HELP,115,46,189,8,NOT WS_VISIBLE
END

IDD_EXPAND_PROGRESS_DLG DIALOGEX 0, 0, 376, 271
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt Expander"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
    RTEXT           "Current size: ",IDT_CURRENT_SIZE,27,40,46,8
    CONTROL         "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,40,275,8,WS_EX_TRANSPARENT
    RTEXT           "New size: ",IDT_NEW_SIZE,28,52,45,8
    LTEXT           "",IDC_EXPAND_VOLUME_NEWSIZE,80,52,275,8,0,WS_EX_TRANSPARENT
    CONTROL         "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,22,96,332,12
    RTEXT           "",IDC_TIMEREMAIN,275,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
    RTEXT           "",IDC_WRITESPEED,178,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
    LTEXT           "",IDC_BYTESWRITTEN,77,114,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
    RTEXT           "Done",IDT_DONE,53,115,22,8
    RTEXT           "Speed",IDT_SPEED,142,115,34,8
    RTEXT           "Left",IDT_LEFT,248,115,25,8
    GROUPBOX        "",IDC_STATIC,15,84,346,49
    RTEXT           "Volume: ",IDT_VOL_NAME,31,16,42,8
    GROUPBOX        "",IDC_STATIC,15,7,346,72
    CONTROL         "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,16,275,8,WS_EX_TRANSPARENT
    DEFPUSHBUTTON   "Continue",IDOK,15,238,84,18
    PUSHBUTTON      "Cancel",IDCANCEL,277,238,84,18
    EDITTEXT        IDC_BOX_STATUS,15,162,346,66,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL
    CONTROL         "",IDC_EXPAND_VOLUME_INITSPACE,"Static",SS_SIMPLE | WS_GROUP,80,64,275,8,WS_EX_TRANSPARENT
    RTEXT           "Fill new space: ",IDT_INIT_SPACE,20,64,53,8
    RTEXT           "File system: ",IDT_FILE_SYS,31,28,42,8
    CONTROL         "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,28,275,8,WS_EX_TRANSPARENT
    RTEXT           "Random Pool: ",IDT_RANDOM_POOL2,20,144,53,8
    CONTROL         "",IDC_RANDOM_BYTES,"Static",SS_SIMPLE | WS_GROUP,80,144,149,8,WS_EX_TRANSPARENT
    CONTROL         "",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,142,14,12
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    IDD_MOUNT_DLG, DIALOG
    BEGIN
        RIGHTMARGIN, 369
        VERTGUIDE, 8
        BOTTOMMARGIN, 269
    END

    IDD_PASSWORD_DLG, DIALOG
    BEGIN
        BOTTOMMARGIN, 102
    END

    IDD_EXPAND_PROGRESS_DLG, DIALOG
    BEGIN
        RIGHTMARGIN, 361
        VERTGUIDE, 15
        VERTGUIDE, 73
        VERTGUIDE, 80
        VERTGUIDE, 355
        TOPMARGIN, 9
        BOTTOMMARGIN, 256
        HORZGUIDE, 162
    END
END
#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// HEADER
//

IDR_MOUNT_RSRC_HEADER   HEADER                  "resource.h"

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,6,3
 PRODUCTVERSION 1,0,6,3
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "IDRIX"
            VALUE "FileDescription", "VeraCrypt Expander"
            VALUE "FileVersion", "1.0f-2"
            VALUE "LegalTrademarks", "VeraCrypt"
            VALUE "OriginalFilename", "VeraCryptExpander.exe"
            VALUE "ProductName", "VeraCrypt"
            VALUE "ProductVersion", "1.0f-2"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "#include ""..\\\\common\\\\resource.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "#include ""..\\\\common\\\\common.rc""\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//

IDB_LOGO_96DPI          BITMAP                  "Logo_96dpi.bmp"
IDB_LOGO_288DPI         BITMAP                  "Logo_288dpi.bmp"

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDR_MENU MENUEX 
BEGIN
    MENUITEM "About",                       IDM_ABOUT,MFT_STRING,MFS_ENABLED
    MENUITEM "Homepage",                    IDM_HOMEPAGE,MFT_STRING | MFT_RIGHTJUSTIFY,MFS_ENABLED
END


/////////////////////////////////////////////////////////////////////////////
//
// String Table
//

STRINGTABLE 
BEGIN
    IDS_UACSTRING           "VeraCrypt Expander"
END

#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "..\\common\\common.rc"

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED