//-------------------------------------------------------------------------
    static void AddToExplorerContextMenu(bool bAdd)
    {
        stringT cmd = TEXT("reg ");

        if (bAdd)
            cmd += TEXT("ADD ");
        else
            cmd += TEXT("DELETE ");

        cmd += STR_HKCR_CTXMENU_BASE;

        if (bAdd)
            cmd += STR_HKCR_CTXMENU_CMD;

        cmd += TEXT("\" /f ");

        if (bAdd)
        {
            cmd += TEXT("/ve /t REG_SZ /d \"\\\"");

            cmd += AppName;

            cmd += TEXT("\\\" %%1\"");
        }

        cmd += STR_NEWLINE;

        cmd += STR_CMD_PAUSE;
        SetCommandWindowText(cmd.c_str());
    }
//-------------------------------------------------------------------------
void ResetPermissionDialog::BackRestorePermissions(bool bBackup)
{
    // Browse for permission backup file
    stringT PermsFile;
    if (!ResetPermissionDialog::BrowseFileName(
        bBackup,
        bBackup ? STR_TITLE_BACKUP_PERMS : STR_TITLE_RESTORE_PERMS,
        TEXT("permissions.txt"),
        TEXT("*.txt"),
        PermsFile))
    {
        return;
    }

    QuotePath(PermsFile);

    // Get the folder location
    stringT folder;
    if (GetFolderText(folder, false, bBackup ? true : false, true) == 0)
        return;

    stringT cmd;
    InitCommand(cmd);

    // Update the command prompt's title
    if (bBackup)
    {
        cmd += _TEXT("TITLE Backing up permissions of folder: ") + folder + STR_NEWLINE;

        cmd += STR_CMD_ICACLS + folder + _TEXT(" /save ") + PermsFile;
        if (bRecurse)
            cmd += _TEXT(" /T ");
    }
    else
    {
        cmd += _TEXT("TITLE Restoring permissions of folder: ") + folder + STR_NEWLINE;

        cmd += STR_CMD_ICACLS + folder + _TEXT(" /restore ") + PermsFile;
    }

    cmd += STR_NEWLINE2 + STR_CMD_PAUSE;

    SetCommandWindowText(cmd.c_str());
}
    //-------------------------------------------------------------------------
    // Update the command text
    static void UpdateCommandText()
    {
        bool bRecurse = SendDlgItemMessage(
            hDlg,
            IDCHK_RECURSE,
            BM_GETCHECK,
            0,
            0) == BST_CHECKED;

        bool bResetPerm = SendDlgItemMessage(
            hDlg,
            IDCHK_RESETPERM,
            BM_GETCHECK,
            0,
            0) == BST_CHECKED;

        bool bRmHidSys = SendDlgItemMessage(
            hDlg,
            IDCHK_RM_HS,
            BM_GETCHECK,
            0,
            0) == BST_CHECKED;

        bool bTakeOwn = SendDlgItemMessage(
            hDlg,
            IDCHK_TAKEOWN,
            BM_GETCHECK,
            0,
            0) == BST_CHECKED;

        bool bDontFollowLinks = SendDlgItemMessage(
            hDlg,
            IDCHK_DONTFOLLOWLINKS,
            BM_GETCHECK,
            0,
            0) == BST_CHECKED;


        TCHAR Path[MAX_PATH * 4];
        UINT len = GetDlgItemText(hDlg, IDTXT_FOLDER, Path, _countof(Path));
        if (len == 0)
            return;

        stringT folder = Path;

        // Add the wildcard mask
        if (*folder.rbegin() != TCHAR('\\'))
            folder += _TEXT("\\");

        folder += _TEXT("*");

        // Quote the folder if needed
        if (folder.find(_T(' ')) != stringT::npos)
        {
            folder = _TEXT("\"") + folder;
            folder += _TEXT("\"");
        }

        stringT cmd;

        if (bTakeOwn)
        {
            cmd += _TEXT("takeown");
            if (bRecurse)
                cmd += _TEXT(" /r ");

            cmd += _TEXT(" /f ");
            cmd += folder;
            cmd += STR_NEWLINE;
        }

        if (bResetPerm)
        {
            cmd += _TEXT("icacls ");
            cmd += folder;
            if (bRecurse)
                cmd += _TEXT(" /T ");
            if (bDontFollowLinks)
                cmd += _TEXT(" /L ");

            cmd += _TEXT(" /Q /C /RESET\r\n");
        }

        if (bRmHidSys)
        {
            cmd += _TEXT("attrib");
            if (bRecurse)
                cmd += _TEXT(" /s ");

            cmd += _TEXT(" -h -s ");
            cmd += folder;
            cmd += STR_NEWLINE;
        }

        cmd += STR_CMD_PAUSE;

        SetCommandWindowText(cmd.c_str());
    }
//-------------------------------------------------------------------------
// Update the command text
void ResetPermissionDialog::UpdateCommandText()
{
    UpdateCheckboxes(true);

    stringT folder;
    if (GetFolderText(folder, false, true, true) == 0)
        return;

    stringT cmd;
    InitCommand(cmd);

    // Form takeown.exe command
    if (bTakeOwn)
    {
        // Update the command prompt's title
        cmd += _TEXT("TITLE taking ownership of folder: ") + folder + STR_NEWLINE;

        cmd += STR_CMD_TAKEOWN;
        if (bRecurse)
            cmd += _TEXT(" /r ");

        if (bDontFollowLinks)
            cmd += _TEXT(" /SKIPSL ");

        cmd += _TEXT(" /f ") + folder + STR_NEWLINE2;
    }

    //
    // Form icacls.exe command
    //
    if (bResetPerm)
    {
        // Update the command prompt's title
        cmd += _TEXT("TITLE Taking ownership of folder: ") + folder + STR_NEWLINE;

        cmd += STR_CMD_ICACLS + folder;
        if (bRecurse)
            cmd += _TEXT(" /T ");

        if (bDontFollowLinks)
            cmd += _TEXT(" /L ");

        cmd += _TEXT(" /Q /C /RESET") + STR_NEWLINE2;
    }

    // Form attribute.exe command
    if (bRmHidSys)
    {
        // Update the command prompt's title
        cmd += _TEXT("TITLE Changing files attributes in folder: ") + folder + STR_NEWLINE;

        cmd += STR_CMD_ATTRIB;
        if (bRecurse)
            cmd += _TEXT(" /s ");

        cmd += _TEXT(" -h -s ") + folder + STR_NEWLINE2;
    }

    // Always add a pause and a new line
    cmd += STR_CMD_PAUSE;
    cmd += STR_NEWLINE;

    // Update the 
    SetCommandWindowText(cmd.c_str());
}