68 ULONG uuidlen, genlen;
158 ULONG uuidlen, genlen, paruuidlen, partransidlen;
198 if (partransidlen <
sizeof(
uint64_t))
206 bfs.
uuid = *parent_uuid;
210 parpathw,
sizeof(parpathw));
220 if (parpath.substr(parpath.length() - 1) ==
L"\\")
221 parpath = parpath.substr(0, parpath.length() - 1);
283 wstring nameu, pathlinku;
302 ULONG rdevlen, modelen;
341 bmn->
st_rdev = rdev ? *rdev : 0;
359 if (rdblen >= 0x10000)
428 wstring pathu, path_tou;
455 wstring pathu, path_linku;
474 path_linku =
utf8_to_utf16(
string(path_link, path_link_len));
558 xattrname =
string(xattrnamebuf, xattrnamelen);
579 streamname = streamname.substr(
XATTR_USER.length());
586 if (xattrdatalen > 0) {
587 if (!
WriteFile(
h, xattrdata, xattrdatalen,
nullptr,
nullptr))
603 else if (xattrname ==
EA_EA)
618 memcpy(bsxa->
data, xattrname.c_str(), xattrname.length());
619 memcpy(&bsxa->
data[xattrname.length()], xattrdata, xattrdatalen);
652 xattrname =
string(xattrnamebuf, xattrnamelen);
660 streamname = streamname.substr(
XATTR_USER.length());
686 else if (xattrname ==
EA_EA)
701 memcpy(bsxa->
data, xattrname.c_str(), xattrname.length());
769 memset(&fbi, 0,
sizeof(FILE_BASIC_INFO));
771 fbi.LastWriteTime.QuadPart = -1;
791 ULONG i, offsetlen, cloneoffsetlen, cloneuuidlen, clonetransidlen, clonelenlen;
792 wstring pathu, clonepathu, clonepar;
832 if (clonetransidlen <
sizeof(
uint64_t))
848 if (cloneoffsetlen <
sizeof(
uint64_t))
851 for (
i = 0;
i <
cache.size();
i++) {
862 bfs.
uuid = *cloneuuid;
866 cloneparw,
sizeof(cloneparw));
876 if (clonepar.substr(clonepar.length() - 1) ==
L"\\")
877 clonepar = clonepar.substr(0, clonepar.length() - 1);
879 clonepar += cloneparw;
1020 ULONG uidlen, gidlen;
1068 return (
t->seconds * 10000000) + (
t->nanoseconds / 100) + 116444736000000000;
1074 FILE_BASIC_INFO fbi;
1095 memset(&fbi, 0,
sizeof(FILE_BASIC_INFO));
1125 file = fff.cFileName;
1151 if (
cmd->length > 0)
1199 if (
cmd.length > 0) {
1363 #if defined(_X86_) || defined(_AMD64_) 1364 static void check_cpu() {
1365 bool have_sse42 =
false;
1373 if (__get_cpuid(1, &
eax, &
ebx, &ecx, &
edx))
1374 have_sse42 = ecx & bit_SSE4_2;
1381 have_sse42 = (
unsigned int)cpu_info[2] & (1 << 20);
1464 this->
hwnd = hwndDlg;
1533 #if defined(_X86_) || defined(_AMD64_) 1564 tp->PrivilegeCount = 3;
1567 #pragma clang diagnostic push 1568 #pragma clang diagnostic ignored "-Warray-bounds" 1576 tp->Privileges[0].Luid = luid;
1584 tp->Privileges[1].Luid = luid;
1592 tp->Privileges[2].Luid = luid;
1601 #pragma clang diagnostic pop 1632 if (
args.size() >= 2) {
1646 tp->PrivilegeCount = 3;
1649 #pragma clang diagnostic push 1650 #pragma clang diagnostic ignored "-Warray-bounds" 1658 tp->Privileges[0].Luid = luid;
1666 tp->Privileges[1].Luid = luid;
1674 tp->Privileges[2].Luid = luid;
1678 #pragma clang diagnostic pop
#define IDS_RECV_MKNOD_FAILED
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
#define BTRFS_SEND_TLV_OFFSET
#define OFN_FILEMUSTEXIST
#define IDS_OUT_OF_MEMORY
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
static PIO_STATUS_BLOCK iosb
#define BTRFS_SEND_CMD_LINK
#define IDS_RECV_CANT_FIND_PARENT_SUBVOL
#define IDS_RECV_FILE_TRUNCATED
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
#define BTRFS_SEND_TLV_UID
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define IDS_RECV_GETFILESIZEEX_FAILED
#define BTRFS_SEND_TLV_GID
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
void cmd_chown(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
wstring format_ntstatus(NTSTATUS Status)
#define BTRFS_TYPE_SOCKET
void CALLBACK RecvSubvolW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
#define BTRFS_SEND_TLV_PATH_TO
#define BTRFS_SEND_TLV_DATA
#define IDS_RECV_CANCELLED
static void delete_directory(const wstring &dir)
GLsizei const GLchar ** path
#define BTRFS_TYPE_BLOCKDEV
#define IDS_RECV_RECEIVED_SUBVOL_FAILED
#define FILE_FLAG_POSIX_SEMANTICS
BOOL WINAPI SetEndOfFile(HANDLE hFile)
#define IDS_RECV_CSUM_ERROR
void cmd_chmod(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define IDS_RECV_SUCCESS_PLURAL
struct _LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES
#define IDS_RECV_READFILE_FAILED
#define BTRFS_SEND_CMD_SET_XATTR
#define IDS_RECV_SETINODEINFO_FAILED
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
void cmd_snapshot(HWND hwnd, btrfs_send_command *cmd, uint8_t *data, const win_handle &parent)
#define IDS_RECV_CANT_FIND_CLONE_SUBVOL
void cmd_unlink(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define BTRFS_SEND_TLV_XATTR_NAME
BOOL WINAPI GetVolumePathNameW(IN LPCWSTR lpszFileName, IN LPWSTR lpszVolumePathName, IN DWORD cchBufferLength)
#define GetWindowLongPtrW
#define BTRFS_SEND_TLV_MTIME
#define BTRFS_SEND_CMD_UPDATE_EXTENT
unsigned short int uint16_t
#define BTRFS_TYPE_CHARDEV
#define IDS_RECV_UNKNOWN_COMMAND
#define BTRFS_SEND_TLV_XATTR_DATA
int const JOCTET unsigned int datalen
void cmd_truncate(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
struct _REPARSE_DATA_BUFFER::@303::@305 SymbolicLinkReparseBuffer
#define BTRFS_SEND_TLV_INODE
static DWORD WINAPI global_recv_thread(LPVOID lpParameter)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define FILE_WRITE_ATTRIBUTES
GLfloat GLfloat GLfloat GLfloat h
#define BTRFS_SEND_CMD_UTIMES
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define IDS_RECV_SHORT_PARAM
#define BTRFS_SEND_CMD_MKFIFO
#define IDC_RECV_PROGRESS
#define SE_PRIVILEGE_ENABLED
void error_message(HWND hwnd, const char *msg)
#define IDS_RECV_CREATETHREAD_FAILED
basic_ostream< _CharT, _Traits > &_STLP_CALL endl(basic_ostream< _CharT, _Traits > &__os)
#define BTRFS_SEND_TLV_TRANSID
void do_recv(const win_handle &f, uint64_t *pos, uint64_t size, const win_handle &parent)
#define FSCTL_BTRFS_CREATE_SNAPSHOT
#define IDS_RECV_UNSUPPORTED_VERSION
#define BTRFS_SEND_CMD_SUBVOL
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
#define BTRFS_SEND_TLV_CLONE_PATH
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
#define IDS_RECV_GETFILEATTRIBUTES_FAILED
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
#define BTRFS_SEND_CMD_TRUNCATE
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
void cmd_rmdir(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define BTRFS_SEND_TLV_OTIME
#define BTRFS_TYPE_DIRECTORY
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
#define IDS_RECV_REMOVEDIRECTORY_FAILED
#define offsetof(TYPE, MEMBER)
#define BTRFS_SEND_CMD_MKSOCK
#define BTRFS_SEND_CMD_CHOWN
#define IDD_RECV_PROGRESS
void cmd_clone(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
#define IDS_RECV_BUTTON_OK
#define FILE_ATTRIBUTE_REPARSE_POINT
static __inline uint64_t unix_time_to_win(BTRFS_TIME *t)
#define FSCTL_BTRFS_CREATE_SUBVOL
#define FILE_ATTRIBUTE_DIRECTORY
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
#define IDS_RECV_SETXATTR_FAILED
#define BTRFS_SEND_TLV_SIZE
#define BTRFS_SEND_TLV_PATH_LINK
void wstring_sprintf(wstring &s, wstring fmt,...)
#define IDS_RECV_WRITEFILE_FAILED
LARGE_INTEGER SourceFileOffset
GLboolean GLboolean GLboolean b
BOOL WINAPI CreateHardLinkW(IN LPCWSTR lpFileName, IN LPCWSTR lpExistingFileName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
#define IDS_RECV_SET_REPARSE_POINT_FAILED
#define IDS_RECV_FIND_SUBVOL_FAILED
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl eax
NTSYSAPI NTSTATUS NTAPI NtFsControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define BTRFS_SEND_CMD_REMOVE_XATTR
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define NT_SUCCESS(StatCode)
_STLP_DECLSPEC _Stl_aligned_buffer< ostream > cerr
#define IDS_RECV_NOT_A_SEND_STREAM
#define FSCTL_BTRFS_RESERVE_SUBVOL
#define BTRFS_SEND_TLV_CLONE_LENGTH
wstring utf8_to_utf16(const string_view &utf8)
#define FILE_ATTRIBUTE_READONLY
const string EA_DOSATTRIB
void cmd_mkfile(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define INVALID_FILE_ATTRIBUTES
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl ebx
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define IDS_RECV_CREATE_SUBVOL_FAILED
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET * Privileges
#define IDS_RECV_DELETEFILE_FAILED
#define BTRFS_SEND_CMD_WRITE
void cmd_utimes(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define BTRFS_SEND_TLV_PATH
void Open(HWND hwnd, const wstring &file, const wstring &path, bool quiet)
#define FSCTL_BTRFS_FIND_SUBVOL
void cmd_removexattr(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
static INT_PTR CALLBACK stub_RecvProgressDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define BTRFS_SEND_TLV_RDEV
#define FILE_SHARE_DELETE
#define BTRFS_SEND_CMD_CLONE
#define IDS_RECV_SETFILEPOINTER_FAILED
struct tagOFNW OPENFILENAMEW
#define BTRFS_SEND_CMD_MKNOD
#define FSCTL_BTRFS_MKNOD
#define BTRFS_SEND_TLV_CTIME
void cmd_link(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
void CALLBACK RecvSubvolGUIW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
void cmd_subvol(HWND hwnd, btrfs_send_command *cmd, uint8_t *data, const win_handle &parent)
#define FILE_ADD_SUBDIRECTORY
#define memcpy(s1, s2, n)
format_message(j_common_ptr cinfo, char *buffer)
#define GetCurrentProcess()
#define BTRFS_SEND_CMD_END
#define FSCTL_BTRFS_SET_INODE_INFO
#define BTRFS_SEND_CMD_CHMOD
#define IDS_RECV_MISSING_PARAM
#define SYMLINK_FLAG_RELATIVE
#define BTRFS_SEND_CMD_RENAME
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
void cmd_setxattr(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
INT_PTR CALLBACK RecvProgressDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define BTRFS_SEND_TLV_CLONE_UUID
#define IDS_RECV_CANT_CREATE_FILE
#define BTRFS_SEND_TLV_MODE
PPC_QUAL void __cpuid(int CPUInfo[], const int InfoType)
#define INVALID_SET_FILE_POINTER
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static float(__cdecl *square_half_float)(float x
static bool check_csum(btrfs_send_command *cmd, uint8_t *data)
#define IDS_RECV_DUPLICATE_EXTENTS_FAILED
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
void command_line_to_args(LPWSTR cmdline, vector< wstring > &args)
void cmd_rename(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
#define IDS_RECV_CREATE_SNAPSHOT_FAILED
#define ReadFile(a, b, c, d, e)
#define BTRFS_SEND_CMD_MKFILE
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
#define BTRFS_SEND_CMD_RMDIR
LARGE_INTEGER TargetFileOffset
static int load_string(HINSTANCE hModule, UINT resId, LPWSTR pwszBuffer, INT cMaxChars)
#define crc32(crc, buf, len)
#define IDS_RECV_SETFILEATTRIBUTES_FAILED
#define IDS_RECV_CANT_OPEN_PATH
#define FSCTL_BTRFS_RECEIVED_SUBVOL
#define FILE_FLAG_BACKUP_SEMANTICS
#define IDS_RECV_MOVEFILE_FAILED
#define FSCTL_BTRFS_SET_XATTR
#define BTRFS_SEND_CMD_MKDIR
#define BTRFS_SEND_TLV_CLONE_CTRANSID
#define IDS_RECV_CANT_OPEN_FILE
#define BTRFS_SEND_CMD_SNAPSHOT
#define SetWindowLongPtrW
#define MAKEINTRESOURCEW(i)
#define FSCTL_SET_REPARSE_POINT
GLuint GLuint GLsizei GLenum type
#define IDS_RECV_RESERVE_SUBVOL_FAILED
#define BTRFS_SEND_TLV_UUID
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx
#define BTRFS_SEND_CMD_UNLINK
#define IDS_RECV_SETENDOFFILE_FAILED
void add_cache_entry(BTRFS_UUID *uuid, uint64_t transid, const wstring &path)
#define TOKEN_ADJUST_PRIVILEGES
#define FILE_OPEN_REPARSE_POINT
#define IO_REPARSE_TAG_SYMLINK
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
void cmd_write(HWND hwnd, btrfs_send_command *cmd, uint8_t *data)
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
#define BTRFS_SEND_TLV_CLONE_OFFSET
#define IDS_RECV_PATH_TOO_LONG
#define BTRFS_SEND_CMD_SYMLINK
#define FSCTL_DUPLICATE_EXTENTS_TO_FILE
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
#define BTRFS_SEND_TLV_ATIME
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define IDS_RECV_CREATEHARDLINK_FAILED
bool find_tlv(uint8_t *data, ULONG datalen, uint16_t type, void **value, ULONG *len)
#define IDS_RECV_GETVOLUMEPATHNAME_FAILED
GLuint const GLchar * name