22#include "../btrfsioctl.h"
33#define WIN32_NO_STATUS
41#define NO_SHLWAPI_STRFCNS
50 if (
u >= 0xa &&
u <= 0xf)
84 t =
L"\""s + modfn +
L"\",StartBalance "s +
fn +
L" "s;
86 t = wstring(
L"\"") + modfn + wstring(
L"\",StartBalance ") +
fn + wstring(
L" ");
96 bsb.
opts[0].
flags &= ~BTRFS_BALANCE_OPTS_ENABLED;
101 bsb.
opts[1].
flags &= ~BTRFS_BALANCE_OPTS_ENABLED;
106 bsb.
opts[2].
flags &= ~BTRFS_BALANCE_OPTS_ENABLED;
154 t =
L"\""s + modfn +
L"\",PauseBalance " +
fn;
156 t = wstring(
L"\"") + modfn + wstring(
L"\",PauseBalance ") +
fn;
184 t =
L"\""s + modfn +
L"\",StopBalance " +
fn;
186 t = wstring(
L"\"") + modfn + wstring(
L"\",StopBalance ") +
fn;
209 bool balancing =
false;
398 opts->
flags &= ~BTRFS_BALANCE_OPTS_DEVID;
417 if (opts->
devid == 0)
418 opts->
flags &= ~BTRFS_BALANCE_OPTS_DEVID;
503 opts->
flags &= ~BTRFS_BALANCE_OPTS_CONVERT;
523 int i, num_devices = 0, num_writeable_devices = 0;
579 num_writeable_devices++;
589 if (num_writeable_devices == 0)
590 num_writeable_devices = num_devices;
593 while (convtypes[
i] != 0) {
604 if (num_writeable_devices < 2 &&
i == 2)
606 else if (num_writeable_devices < 3 &&
i == 4)
608 else if (num_writeable_devices < 4 &&
i == 6)
656 if (num_devices < 2 || balance_started)
888 SetTimer(hwndDlg, 1, 1000,
nullptr);
1044 if (
c >=
'a' &&
c <=
'f')
1046 else if (
c >=
'A' &&
c <=
'F')
1057 while (
s[0] != 0 &&
s[1] != 0 &&
len > 0) {
1092 tp.PrivilegeCount = 1;
1093 tp.Privileges[0].Luid = luid;
1139 tp.PrivilegeCount = 1;
1140 tp.Privileges[0].Luid = luid;
1186 tp.PrivilegeCount = 1;
1187 tp.Privileges[0].Luid = luid;
static void unserialize(void *data, ULONG len, WCHAR *s)
void CALLBACK PauseBalanceW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
void CALLBACK StopBalanceW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
static INT_PTR CALLBACK stub_BalanceOptsDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static void serialize(void *data, ULONG len, WCHAR *s)
static INT_PTR CALLBACK stub_BalanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
void CALLBACK StartBalanceW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
static uint64_t convtypes2[]
static uint8_t from_hex_digit(WCHAR c)
#define FSCTL_BTRFS_QUERY_SCRUB
#define BTRFS_BALANCE_OPTS_DRANGE
#define BTRFS_BALANCE_OPTS_SOFT
#define FSCTL_BTRFS_PAUSE_BALANCE
#define BTRFS_BALANCE_OPTS_PROFILES
#define BTRFS_BALANCE_OPTS_ENABLED
#define BTRFS_BALANCE_OPTS_VRANGE
#define FSCTL_BTRFS_QUERY_BALANCE
#define FSCTL_BTRFS_START_BALANCE
#define BTRFS_BALANCE_OPTS_CONVERT
#define FSCTL_BTRFS_RESUME_BALANCE
#define BTRFS_BALANCE_STOPPED
#define BTRFS_BALANCE_ERROR
#define BLOCK_FLAG_SINGLE
#define BTRFS_BALANCE_OPTS_DEVID
#define BTRFS_BALANCE_SHRINKING
#define BTRFS_BALANCE_OPTS_USAGE
#define BTRFS_BALANCE_RUNNING
#define FSCTL_BTRFS_STOP_BALANCE
#define BTRFS_BALANCE_OPTS_STRIPES
#define FSCTL_BTRFS_GET_DEVICES
#define BTRFS_BALANCE_OPTS_LIMIT
#define BTRFS_SCRUB_STOPPED
#define BTRFS_BALANCE_PAUSED
#define BTRFS_BALANCE_REMOVAL
void SaveBalanceOpts(HWND hwndDlg)
void ShowBalanceOptions(HWND hwndDlg, uint8_t type)
INT_PTR CALLBACK BalanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
bool called_from_ShrinkDevice
void ShowBalance(HWND hwndDlg)
void StopBalance(HWND hwndDlg)
void StartBalance(HWND hwndDlg)
btrfs_balance_opts metadata_opts
void RefreshBalanceDlg(HWND hwndDlg, bool first)
void PauseBalance(HWND hwndDlg)
bool called_from_RemoveDevice
btrfs_balance_opts system_opts
btrfs_balance_opts data_opts
INT_PTR CALLBACK BalanceOptsDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define NT_SUCCESS(StatCode)
void error_message(HWND hwnd, const char *msg)
wstring format_ntstatus(NTSTATUS Status)
void wstring_sprintf(wstring &s, wstring fmt,...)
#define IDS_BALANCE_FAILED_SHRINK
#define IDS_LIMIT_END_BEFORE_START
#define IDS_BALANCE_COMPLETE_REMOVAL
#define IDC_PROFILES_RAID0
#define IDC_LIMIT_END_SPINNER
#define IDC_PAUSE_BALANCE
#define IDS_BALANCE_RUNNING_SHRINK
#define IDC_PROFILES_RAID1C3
#define IDC_USAGE_START_SPINNER
#define IDS_BALANCE_RUNNING
#define IDC_PROFILES_RAID6
#define IDS_VRANGE_END_BEFORE_START
#define IDS_BALANCE_PAUSED
#define IDS_BALANCE_CANCELLED_SHRINK
#define IDD_BALANCE_OPTIONS
#define IDC_PROFILES_RAID1
#define IDS_BALANCE_COMPLETE_SHRINK
#define IDS_BALANCE_FAILED_REMOVAL
#define IDC_USAGE_END_SPINNER
#define IDS_BALANCE_PAUSED_REMOVAL
#define IDC_CANCEL_BALANCE
#define IDC_STRIPES_START
#define IDC_STRIPES_START_SPINNER
#define IDC_PROFILES_RAID5
#define IDS_STRIPES_END_BEFORE_START
#define IDS_DRANGE_END_BEFORE_START
#define IDC_BALANCE_PROGRESS
#define IDS_BALANCE_SCRUB_RUNNING
#define IDC_STRIPES_END_SPINNER
#define IDC_METADATA_OPTIONS
#define IDC_PROFILES_SINGLE
#define IDS_BALANCE_PAUSED_SHRINK
#define IDC_PROFILES_RAID10
#define IDC_START_BALANCE
#define IDS_BALANCE_CANCELLED_REMOVAL
#define IDS_USAGE_END_BEFORE_START
#define IDS_BALANCE_RUNNING_REMOVAL
#define IDS_BALANCE_COMPLETE
#define IDC_CONVERT_COMBO
#define IDS_DISK_PART_NUM
#define IDS_BALANCE_CANCELLED
#define IDC_BALANCE_STATUS
#define IDC_PROFILES_RAID1C4
#define IDC_LIMIT_START_SPINNER
#define IDS_BALANCE_FAILED
#define IDC_SYSTEM_OPTIONS
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
#define INVALID_HANDLE_VALUE
#define GetCurrentProcess()
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
#define BLOCK_FLAG_RAID1C4
#define BLOCK_FLAG_RAID1C3
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLfloat GLfloat GLfloat GLfloat h
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
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 * u
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
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define FILE_FLAG_OPEN_REPARSE_POINT
#define FILE_FLAG_BACKUP_SEMANTICS
static PIO_STATUS_BLOCK iosb
static int load_string(HINSTANCE hModule, UINT resId, LPWSTR pwszBuffer, INT cMaxChars)
#define FILE_READ_ATTRIBUTES
#define FILE_SHARE_DELETE
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 SEE_MASK_NOCLOSEPROCESS
#define STATUS_DEVICE_NOT_READY
#define BLOCK_FLAG_DUPLICATE
#define BLOCK_FLAG_RAID10
#define STATUS_BUFFER_OVERFLOW
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
btrfs_balance_opts data_opts
btrfs_balance_opts metadata_opts
btrfs_balance_opts system_opts
btrfs_balance_opts opts[3]
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
HRESULT WINAPI EnableThemeDialogTexture(_In_ HWND hwnd, _In_ DWORD dwFlags)
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
DWORD WINAPI GetLastError(void)
#define GetWindowLongPtrW
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SetWindowLongPtrW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
__int64 CDECL _wtoi64(const wchar_t *str)
#define TOKEN_ADJUST_PRIVILEGES
#define SE_PRIVILEGE_ENABLED
static unsigned int block