View Issue Details

IDProjectCategoryView StatusLast Update
0000460WishesPanelpublic2013-02-03 00:34
Reporteralexmitin Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status assignedResolutionreopened 
Product Version1.80 
Fixed in Version1.71 
Summary0000460: Add support of FILE_ATTRIBUTE_VIRTUAL
DescriptionAdd support of FILE_ATTRIBUTE_VIRTUAL.
See the following link for more information about this attribute:

http://msdn2.microsoft.com/en-us/library/aa364944.aspx [^]

Additional information:

FILE_ATTRIBUTE_VIRTUAL means the file has been virtualized
to a per-user location (one of UAC features in Vista). This is not a valid
flag to pass to CreateFile, and it shouldn't be mentioned in CreateFile
docs (it's a doc bug that it is mentioned).

Source:
http://www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2007-08/msg00298.html


1) The "Offline" attribute should be visible in the panel if the "A" column type is defined for the panel mode, and the lenght of this column is enough to display it. The position of this attribute should be the last: "RSHALCEIO"

2) The Attributes dialog should show "Virtual" attribute as read-only (grayed). This is only for information purposes, not to change this attribute.
------------------------
[ ] Sparse
[ ] Temporary
[ ] Offline
[x] Virtual
------------------------

3) The "Virtual" attribute should be available in the "Filter" dialog for the file highlighting.
------------------------
[ ] Sparse
[ ] Temporary
[ ] Offline
[x] Virtual
------------------------
TagsNo tags attached.
Build2323

Activities

2008-01-20 14:04

 

Fix460.diff (37,565 bytes)   
Index: FarEng.hlf.m4
===================================================================
--- FarEng.hlf.m4	(revision 1460)
+++ FarEng.hlf.m4	(working copy)
@@ -1512,6 +1512,7 @@
                    are used only on disks with the NTFS file system.
                    Although the #Encrypted# and #Offline# attributes 
                    are used only in Windows 2000/XP/2003/Vista/2008.
+                   #Virtual# attribute is used only in Windows Vista/2008.
 
 
     To quickly disable one or several conditions, uncheck the corresponding
@@ -2904,8 +2905,9 @@
 corresponding checkboxes was changed from the initial state.
 
     The "Compressed", "Encrypted", "Not indexed", "Sparse", "Temporary" and 
-"Offline" attributes may be changed only on NTFS drives. The "Encrypted" and
+"Offline" attributes are available only on NTFS drives. The "Encrypted" and
 "Offline" attributes can be used in Windows 2000/XP/2003/Vista/2008 only. 
+The "Virtual" attribute can be used in Windows Vista/2008 only.
 The "Compressed" and "Encrypted" attributes are mutually exclusive, that is,
 you can set only one of them.
 
@@ -3123,14 +3125,15 @@
        #T#         - Temporary
        #I#         - Not content indexed
        #O#         - Offline
+       #V#         - Virtual
 
-    The attributes are displayed in the following order - RSHALCTIO. The
+    The attributes are displayed in the following order - RSHALCTIOV. The
 "Sparse" attribute applies only to files and is shown instead of 'L'. The
 "Encrypted" attribute is shown instead of 'C' as a file/folder can not
 have both attributes ("Compressed" and "Encrypted") set at the same time.
 By default the size of the attributes column is 6 characters. To display
-the additional 'T', 'I' and 'O' attributes it is necessary to manually 
-set the size of the column to 9 characters.
+the additional 'T', 'I', 'O' and 'V' attributes it is necessary to manually 
+set the size of the column to 10 characters.
 
   - #Column widths# - used to change width of panel columns.
 If the width is equal to 0, the default value will be used. If the width of
Index: farlang.templ
===================================================================
--- farlang.templ	(revision 1460)
+++ farlang.templ	(working copy)
@@ -4809,7 +4809,7 @@
 
 MSetAttrNotIndexed
 "�&��������㥬�"
-"Not &indexed"
+"Not &Indexed"
 
 MSetAttrSparse
 "���०����"
@@ -4823,6 +4823,10 @@
 "��⮭����"
 "Offline"
 
+MSetAttrVirtual
+"����㠫��"
+"Virtual"
+
 MSetAttrSubfolders
 "��ࠡ��뢠�� &�������� �����"
 "Process sub&folders"
@@ -7174,7 +7178,7 @@
 "<="
 
 MFileFilterCurrent
-"���&���"
+"����&��"
 "C&urrent"
 
 MFileFilterBlank
@@ -7233,6 +7237,10 @@
 "��⮭����&�"
 "&Offline"
 
+MFileFilterAttrVirtual
+"����&㠫��"
+"&Virtual"
+
 MFileFilterOk
 "�த������"
 "Ok"
Index: FarRus.hlf.m4
===================================================================
--- FarRus.hlf.m4	(revision 1460)
+++ FarRus.hlf.m4	(working copy)
@@ -1555,7 +1555,8 @@
                    #���०����#, #�६����# � #��⮭����# �ᯮ�������
                    ⮫쪮 �� ��᪠� � 䠩����� ��⥬�� NTFS. �� �⮬
                    ��ਡ��� #����஢����# � #��⮭����# �ᯮ�������
-                   ⮫쪮 � Windows 2000/XP/2003/Vista/2008.
+                   ⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ�� 
+                   #����㠫��# �ᯮ������ ⮫쪮 � Windows Vista/2008.
 
     ��� ����ண� �⪫�祭�� ������ ��� ��᪮�쪨� �᫮��� 䨫��� �⪫���
 ᮮ⢥�����騥 ��樨. ������ #������# ���� �� �᫮��� 䨫���.
@@ -2788,9 +2789,11 @@
      - �� �� ����� ��ਡ�⮢ �᪫�祭��.
 
     ��ਡ��� "�����", "����஢����", "���������㥬�", "���०����",
-"�६����", "��������᪠� ���" � "��⮭����" �ᯮ������� ⮫쪮 �� ��᪠� 
-� 䠩����� ��⥬�� NTFS. ��祬, ��ਡ��� "����஢����", "��������᪠� ���" 
-� "��⮭����" �ᯮ������� ⮫쪮 � Windows 2000/XP/2003/Vista/2008.
+"�६����", "��������᪠� ���", "��⮭����" � "����㠫��" �ᯮ������� 
+⮫쪮 �� ��᪠� � 䠩����� ��⥬�� NTFS. ��祬, ��ਡ��� "����஢����", 
+"��������᪠� ���" � "��⮭����" �ᯮ������� ⮫쪮 � Windows 
+2000/XP/2003/Vista/2008. ��ਡ�� "����㠫��" �ᯮ������ ⮫쪮 � 
+Windows Vista/2008.
 
 
 @ViewerSettings
@@ -3004,9 +3007,10 @@
 �����" �㤥� ������㯭�.
 
     ��ਡ��� "�����", "����஢����", #���������㥬�#, #���०����#,
-#�६����# � #��⮭����# ����� ���� �������� ⮫쪮 �� ��᪠� � 䠩�����
+#�६����#, #��⮭����# � #����㠫��# ����㯭� ⮫쪮 �� ��᪠� � 䠩�����
 ��⥬�� NTFS. ��祬, ��ਡ��� "����஢����" � "��⮭����" �ᯮ�������
-⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ��� "�����" � "����஢����"
+⮫쪮 � Windows 2000/XP/2003/Vista/2008. ��ਡ�� "����㠫��" �ᯮ������
+⮫쪮 � Windows Vista/2008. ��ਡ��� "�����" � "����஢����"
 ����� �������᪫���騬�, �.�. ����� ���⠢��� ⮫쪮 ���� �� ���.
 
     ��� ~ᨬ�����᪨� �痢�~@HardSymLink@ � ������� �⮡ࠦ����� ���ଠ��
@@ -3230,14 +3234,15 @@
        #T#         - �६����
        #I#         - ���������㥬� �� ᮤ�ন����
        #O#         - ��⮭���� (offline)
+       #V#         - ����㠫��
 
-    ���冷� �⮡ࠦ���� ��ਡ�⮢ - RSHALCTIO. ������ ��ਡ�� 
+    ���冷� �⮡ࠦ���� ��ਡ�⮢ - RSHALCTIOV. ������ ��ਡ�� 
 "���०����" �ਬ������ ⮫쪮 ��� 䠩��� � �⠢���� ����� 'L'. 
 ������ ��ਡ�� "����஢����" �⠢���� ����� 'C', �.�. 䠩�/��⠫�� �� 
 ����� ����� �����६���� ��� ��ਡ�� ("�����" � "����஢����"). �� 
 㬮�砭�� ࠧ��� ������� ��ਡ�⮢ - 6 ᨬ�����. ��� �⮡ࠦ���� 
-�������⥫��� ��ਡ�⮢ 'T', 'I' � 'O' ����室��� � 㪠���� ࠧ��� 
-������� � 9 ᨬ�����.
+�������⥫��� ��ਡ�⮢ 'T', 'I', 'O' � 'V' ����室��� � 㪠���� ࠧ��� 
+������� � 10 ᨬ�����.
 
   - #��ਭ� �������# - �������� �������� �ਭ� ������� ������.
 �᫨ �ਭ� ࠢ�� 0, � �ᯮ������ ���祭�� �� 㬮�砭��.
Index: filefilterparams.cpp
===================================================================
--- filefilterparams.cpp	(revision 1460)
+++ filefilterparams.cpp	(working copy)
@@ -390,11 +390,11 @@
                             FILE_ATTRIBUTE_TEMPORARY,
                             FILE_ATTRIBUTE_REPARSE_POINT,
                             FILE_ATTRIBUTE_OFFLINE,
-                            FILE_ATTRIBUTE_VIRTUAL,
+                            FILE_ATTRIBUTE_VIRTUAL
                           };
 
-  const wchar_t Format1[] = L"%-21.21s %c %-24.24s %-2.2s %c %-60.60s";
-  const wchar_t Format2[] = L"%-3.3s %c %-24.24s %-2.2s %c %-78.78s";
+  const wchar_t Format1[] = L"%-21.21s %c %-26.26s %-2.2s %c %-60.60s";
+  const wchar_t Format2[] = L"%-3.3s %c %-26.26s %-2.2s %c %-78.78s";
 
   const wchar_t *Name, *Mask;
   wchar_t MarkChar[]=L"\" \"";
@@ -487,14 +487,15 @@
     ID_FF_ARCHIVE,
     ID_FF_HIDDEN,
     ID_FF_SYSTEM,
+    ID_FF_REPARSEPOINT,
     ID_FF_DIRECTORY,
     ID_FF_COMPRESSED,
     ID_FF_ENCRYPTED,
     ID_FF_NOTINDEXED,
     ID_FF_SPARSE,
     ID_FF_TEMP,
-    ID_FF_REPARSEPOINT,
     ID_FF_OFFLINE,
+    ID_FF_VIRTUAL,
 
     ID_HER_SEPARATOR3,
     ID_HER_MARK_TITLE,
@@ -600,7 +601,7 @@
            ������� BSTATE_UNCHECKED �� BSTATE_3STATE, � ������
            ����� ��� ����� �������, �.�. ��������� �������
         */
-        for(int I=ID_FF_READONLY; I <= ID_FF_OFFLINE; ++I)
+        for(int I=ID_FF_READONLY; I <= ID_FF_VIRTUAL; ++I)
           Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE);
 
         // 6, 13 - ������ � ������
@@ -676,34 +677,31 @@
 bool FileFilterConfig(FileFilterParams *FF, bool ColorConfig)
 {
 /*
-    00000000001111111111222222222233333333334444444444555555555566666666667777777777
-    01234567890123456789012345678901234567890123456789012345678901234567890123456789
-00
-01     +-------------------------- ����� ������� --------------------------+
-02     | �������� ������:                                                   |
-03     | "�����-�� ��������                                                "|
-04     +-------------------------- �������� ����� --------------------------+
-05     | [ ] ���������� � ������ (�������)                                   |
-06     |   *.*                                                              |
-07     +------------------------------+--------------------------------------+
-08     | [x] ������ �                 � [x] ����/����                       |
-09     |              "���������   "�               "���������         "|
-10     |   ���� ��� �����: "      " �   ����� �:  "  .  .   " "  :  :  " |
-11     |   ���� ��� �����: "      " �   ��������: "  .  .   " "  :  :  " |
-12     |                              �                [ ����� ] [ ����� ] |
-13     +------------------------------+--------------------------------------+
-14     | [ ] �������                                                        |
-15     |   [?] ����� �� �����  [?] �������           [?] ����������      |
-16     |   [?] ������           [?] �����            [?] ��������        |
-17     |   [?] �����            [?] �����������     [?] ������. ���    |
-18     |   [?] ��������          [?] ��������������   [?] ���������       |
-19     +---------------------------------------------------------------------+
-20     |                  [ �� ]  [ ������ ]  [ ������ ]                   |
-21     +---------------------------------------------------------------------+
-22
-23
-24
-25
+  |         |         |         |         |         |         |         |
+  00000000001111111111222222222233333333334444444444555555555566666666667777777777
+  01234567890123456789012345678901234567890123456789012345678901234567890123456789
+01+-------------------------- ����� ������� --------------------------+
+02| �������� ������:                                                   |     
+03+-------------------------- �������� ����� --------------------------+     
+04| [ ] ���������� � ������ (�������)                                   |     
+05+------------------------------+--------------------------------------+     
+06| [x] ������ �                 � [x] ����/����                       |     
+07|   ���� ��� �����: "      " �   ����� �:  "  .  .   " "  :  :  " |     
+08|   ���� ��� �����: "      " �   ��������: "  .  .   " "  :  :  " |     
+09|                              �                [ ����� ] [ ����� ] |     
+10+------------------------------+--------------------------------------+     
+11| [ ] �������                                                        |     
+12|   [?] ����� �� �����  [?] �������           [?] ����������      |     
+13|   [?] ������           [?] �����            [?] ��������        |     
+14|   [?] �����            [?] �����������     [?] ���������       |     
+15|   [?] ��������          [?] ��������������   [?] ���������      |     
+16|   [?] ������. ���                                                 |     
+17+---------------------------------------------------------------------+     
+18|                  [ �� ]  [ ������ ]  [ ������ ]                   |     
+19+---------------------------------------------------------------------+     
+  01234567890123456789012345678901234567890123456789012345678901234567890123456789
+  00000000001111111111222222222233333333334444444444555555555566666666667777777777
+  |         |         |         |         |         |         |         |
 */
 
   // �������� �����.
@@ -741,7 +739,7 @@
 
   struct DialogDataEx FilterDlgData[]=
   {
-    DI_DOUBLEBOX,3,1,73,18,0,0,DIF_SHOWAMPERSAND,0,(const wchar_t *)MFileFilterTitle,
+    DI_DOUBLEBOX,3,1,73,19,0,0,DIF_SHOWAMPERSAND,0,(const wchar_t *)MFileFilterTitle,
 
     DI_TEXT,5,2,0,2,1,0,0,0,(const wchar_t *)MFileFilterName,
     DI_EDIT,5,2,71,2,0,0,0,0,L"",
@@ -776,40 +774,44 @@
     DI_VTEXT,38,5,38,10,0,0,0,0,VerticalLine,
 
     DI_CHECKBOX, 5,11,0,11,0,0,DIF_AUTOMATION,0,(const wchar_t *)MFileFilterAttr,
+
     DI_CHECKBOX, 7,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrR,
     DI_CHECKBOX, 7,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrA,
     DI_CHECKBOX, 7,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrH,
     DI_CHECKBOX, 7,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrS,
+    DI_CHECKBOX, 7,16,0,16,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrReparse,
+
     DI_CHECKBOX,29,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrD,
     DI_CHECKBOX,29,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrC,
     DI_CHECKBOX,29,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrE,
     DI_CHECKBOX,29,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrNI,
+
     DI_CHECKBOX,51,12,0,12,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrSparse,
     DI_CHECKBOX,51,13,0,13,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrT,
-    DI_CHECKBOX,51,14,0,14,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrReparse,
-    DI_CHECKBOX,51,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrOffline,
+    DI_CHECKBOX,51,14,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrOffline,
+    DI_CHECKBOX,51,15,0,15,0,0,DIF_3STATE,0,(const wchar_t *)MFileFilterAttrVirtual,
 
-    DI_TEXT,-1,14,0,14,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,(const wchar_t *)MHighlightColors,
-    DI_TEXT,7,15,0,15,0,0,0,0,(const wchar_t *)MHighlightMarkChar,
-    DI_FIXEDIT,5,15,5,15,0,0,0,0,L"",
-    DI_CHECKBOX,0,15,0,15,0,0,0,0,(const wchar_t *)MHighlightTransparentMarkChar,
-    DI_BUTTON,5,16,0,16,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName1,
-    DI_BUTTON,5,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName2,
-    DI_BUTTON,5,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName3,
-    DI_BUTTON,5,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName4,
-    DI_BUTTON,0,16,0,16,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking1,
-    DI_BUTTON,0,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking2,
-    DI_BUTTON,0,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking3,
-    DI_BUTTON,0,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking4,
-    DI_USERCONTROL,73-15-1,16,73-2,19,0,0,DIF_NOFOCUS,0,L"",
-    DI_CHECKBOX,5,20,0,20,0,0,0,0,(const wchar_t *)MHighlightContinueProcessing,
+    DI_TEXT,-1,15,0,15,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,(const wchar_t *)MHighlightColors,
+    DI_TEXT,7,16,0,16,0,0,0,0,(const wchar_t *)MHighlightMarkChar,
+    DI_FIXEDIT,5,16,5,16,0,0,0,0,L"",
+    DI_CHECKBOX,0,16,0,16,0,0,0,0,(const wchar_t *)MHighlightTransparentMarkChar,
+    DI_BUTTON,5,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName1,
+    DI_BUTTON,5,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName2,
+    DI_BUTTON,5,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName3,
+    DI_BUTTON,5,20,0,20,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightFileName4,
+    DI_BUTTON,0,17,0,17,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking1,
+    DI_BUTTON,0,18,0,18,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking2,
+    DI_BUTTON,0,19,0,19,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking3,
+    DI_BUTTON,0,20,0,20,0,0,DIF_BTNNOCLOSE|DIF_NOBRACKETS,0,(const wchar_t *)MHighlightMarking4,
+    DI_USERCONTROL,73-15-1,17,73-2,20,0,0,DIF_NOFOCUS,0,L"",
+    DI_CHECKBOX,5,21,0,21,0,0,0,0,(const wchar_t *)MHighlightContinueProcessing,
 
-    DI_TEXT,0,16,0,16,0,0,DIF_SEPARATOR,0,L"",
+    DI_TEXT,0,17,0,17,0,0,DIF_SEPARATOR,0,L"",
 
-    DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MFileFilterOk,
-    DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterReset,
-    DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MFileFilterCancel,
-    DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterMakeTransparent,
+    DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MFileFilterOk,
+    DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterReset,
+    DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MFileFilterCancel,
+    DI_BUTTON,0,18,0,18,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(const wchar_t *)MFileFilterMakeTransparent,
   };
 
   MakeDialogItemsEx(FilterDlgData,FilterDlg);
@@ -821,7 +823,7 @@
     for (int i=ID_FF_NAME; i<=ID_FF_SEPARATOR1; i++)
       FilterDlg[i].Flags|=DIF_HIDDEN;
 
-    for (int i=ID_FF_MATCHMASK; i<=ID_FF_OFFLINE; i++)
+    for (int i=ID_FF_MATCHMASK; i<=ID_FF_VIRTUAL; i++)
     {
       FilterDlg[i].Y1-=2;
       FilterDlg[i].Y2-=2;
@@ -953,10 +955,11 @@
   FilterDlg[ID_FF_TEMP].Selected=(AttrSet & FILE_ATTRIBUTE_TEMPORARY?1:AttrClear & FILE_ATTRIBUTE_TEMPORARY?0:2);
   FilterDlg[ID_FF_REPARSEPOINT].Selected=(AttrSet & FILE_ATTRIBUTE_REPARSE_POINT?1:AttrClear & FILE_ATTRIBUTE_REPARSE_POINT?0:2);
   FilterDlg[ID_FF_OFFLINE].Selected=(AttrSet & FILE_ATTRIBUTE_OFFLINE?1:AttrClear & FILE_ATTRIBUTE_OFFLINE?0:2);
+  FilterDlg[ID_FF_VIRTUAL].Selected=(AttrSet & FILE_ATTRIBUTE_VIRTUAL?1:AttrClear & FILE_ATTRIBUTE_VIRTUAL?0:2);
 
   if (!FilterDlg[ID_FF_MATCHATTRIBUTES].Selected)
   {
-    for(int i=ID_FF_READONLY; i <= ID_FF_OFFLINE; i++)
+    for(int i=ID_FF_READONLY; i <= ID_FF_VIRTUAL; i++)
       FilterDlg[i].Flags|=DIF_DISABLE;
   }
 
@@ -994,6 +997,7 @@
   Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_TEMP,DIF_DISABLE,0,0,DIF_DISABLE);
   Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_REPARSEPOINT,DIF_DISABLE,0,0,DIF_DISABLE);
   Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_OFFLINE,DIF_DISABLE,0,0,DIF_DISABLE);
+  Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_VIRTUAL,DIF_DISABLE,0,0,DIF_DISABLE);
   Dlg.SetAutomation(ID_FF_MATCHATTRIBUTES,ID_FF_DIRECTORY,DIF_DISABLE,0,0,DIF_DISABLE);
 
   for (;;)
@@ -1064,6 +1068,7 @@
       AttrSet|=(FilterDlg[ID_FF_TEMP].Selected==1?FILE_ATTRIBUTE_TEMPORARY:0);
       AttrSet|=(FilterDlg[ID_FF_REPARSEPOINT].Selected==1?FILE_ATTRIBUTE_REPARSE_POINT:0);
       AttrSet|=(FilterDlg[ID_FF_OFFLINE].Selected==1?FILE_ATTRIBUTE_OFFLINE:0);
+      AttrSet|=(FilterDlg[ID_FF_VIRTUAL].Selected==1?FILE_ATTRIBUTE_VIRTUAL:0);
       AttrClear|=(FilterDlg[ID_FF_READONLY].Selected==0?FILE_ATTRIBUTE_READONLY:0);
       AttrClear|=(FilterDlg[ID_FF_ARCHIVE].Selected==0?FILE_ATTRIBUTE_ARCHIVE:0);
       AttrClear|=(FilterDlg[ID_FF_HIDDEN].Selected==0?FILE_ATTRIBUTE_HIDDEN:0);
@@ -1076,10 +1081,9 @@
       AttrClear|=(FilterDlg[ID_FF_TEMP].Selected==0?FILE_ATTRIBUTE_TEMPORARY:0);
       AttrClear|=(FilterDlg[ID_FF_REPARSEPOINT].Selected==0?FILE_ATTRIBUTE_REPARSE_POINT:0);
       AttrClear|=(FilterDlg[ID_FF_OFFLINE].Selected==0?FILE_ATTRIBUTE_OFFLINE:0);
+      AttrClear|=(FilterDlg[ID_FF_VIRTUAL].Selected==0?FILE_ATTRIBUTE_VIRTUAL:0);
 
-      FF->SetAttr(FilterDlg[ID_FF_MATCHATTRIBUTES].Selected,
-                  AttrSet,
-                  AttrClear);
+      FF->SetAttr(FilterDlg[ID_FF_MATCHATTRIBUTES].Selected, AttrSet, AttrClear);
 
       return true;
     }
Index: headers.hpp
===================================================================
--- headers.hpp	(revision 1460)
+++ headers.hpp	(working copy)
@@ -88,14 +88,30 @@
 
 #include <winioctl.h>
 
-#undef FILE_ATTRIBUTE_ENCRYPTED
+#if !defined(FILE_ATTRIBUTE_ENCRYPTED)
 #define FILE_ATTRIBUTE_ENCRYPTED     0x00004000
-//#define FILE_ATTRIBUTE_ENCRYPTED     0x00000040
+#endif
 
+#if !defined(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)
 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000
+#endif
+
+#if !defined(FILE_ATTRIBUTE_SPARSE_FILE)
 #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200
+#endif
+
+#if !defined(FILE_ATTRIBUTE_TEMPORARY)
 #define FILE_ATTRIBUTE_TEMPORARY            0x00000100
+#endif
 
+#if !defined(FILE_ATTRIBUTE_REPARSE_POINT)
+#define FILE_ATTRIBUTE_REPARSE_POINT 0x400
+#endif
+
+#if !defined(FILE_ATTRIBUTE_VIRTUAL)
+#define FILE_ATTRIBUTE_VIRTUAL              0x00010000
+#endif
+
 #define FILE_NAMED_STREAMS              0x00040000
 #define FILE_READ_ONLY_VOLUME           0x00080000
 #define FILE_SUPPORTS_OBJECT_IDS        0x00010000
@@ -109,10 +125,6 @@
 #define FS_FILE_ENCRYPTION           FILE_SUPPORTS_ENCRYPTION
 #endif
 
-#if !defined(FILE_ATTRIBUTE_REPARSE_POINT)
-#define FILE_ATTRIBUTE_REPARSE_POINT 0x400
-#endif
-
 #if !defined(FILE_SUPPORTS_REPARSE_POINTS)
 #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
 #endif
@@ -131,8 +143,6 @@
 
 #define IO_REPARSE_TAG_DFSR                     (0x80000012L)
 
-#define FILE_ATTRIBUTE_VIRTUAL              0x00010000
-
 #if !defined(__DOS_H) && !defined(_DOS_H_)
 #include <dos.h>  // FA_*
 #endif
@@ -355,4 +365,6 @@
 #define INPUTLANGCHANGE_FORWARD 0x0002
 #endif
 
+#include <crtdbg.h>
+
 #endif // __HEADERS_HPP__
Index: setattr.cpp
===================================================================
--- setattr.cpp	(revision 1460)
+++ setattr.cpp	(working copy)
@@ -55,6 +55,7 @@
 
   SETATTR_NAME=2,
 
+  SETATTR_ATTR_FIRST=4,  // This should be equal to the next value.
   SETATTR_RO=4,
   SETATTR_ARCHIVE=5,
   SETATTR_HIDDEN=6,
@@ -65,26 +66,28 @@
   SETATTR_SPARSE=11,
   SETATTR_TEMP=12,
   SETATTR_OFFLINE=13,
+  SETATTR_VIRTUAL=14,
+  SETATTR_ATTR_LAST=14,  // This should be equal to the previous value.
 
-  SETATTR_SUBFOLDERS=15,
+  SETATTR_SUBFOLDERS=16,
 
-  SETATTR_TITLEDATE=17,
-  SETATTR_MODIFICATION=18,
-  SETATTR_MDATE=19,
-  SETATTR_MTIME=20,
-  SETATTR_CREATION=21,
-  SETATTR_CDATE=22,
-  SETATTR_CTIME=23,
-  SETATTR_LASTACCESS=24,
-  SETATTR_ADATE=25,
-  SETATTR_ATIME=26,
-  SETATTR_ORIGINAL=27,
-  SETATTR_CURRENT=28,
-  SETATTR_BLANK=29,
+  SETATTR_TITLEDATE=18,
+  SETATTR_MODIFICATION=19,
+  SETATTR_MDATE=20,
+  SETATTR_MTIME=21,
+  SETATTR_CREATION=22,
+  SETATTR_CDATE=23,
+  SETATTR_CTIME=24,
+  SETATTR_LASTACCESS=25,
+  SETATTR_ADATE=26,
+  SETATTR_ATIME=27,
+  SETATTR_ORIGINAL=28,
+  SETATTR_CURRENT=29,
+  SETATTR_BLANK=30,
 
-  SETATTR_SET=31,
-  SETATTR_CANCEL=32,
-  SETATTR_TITLELINK=33,
+  SETATTR_SET=32,
+  SETATTR_CANCEL=33,
+  SETATTR_TITLELINK=34,
 };
 
 const wchar_t FmtMask1[]=L"99%c99%c99";
@@ -141,10 +144,10 @@
   switch(Msg)
   {
     case DN_BTNCLICK:
-      if(Param1 >= SETATTR_RO && Param1 <= SETATTR_OFFLINE || Param1 == SETATTR_SUBFOLDERS)
+      if(Param1 >= SETATTR_ATTR_FIRST && Param1 <= SETATTR_ATTR_LAST || Param1 == SETATTR_SUBFOLDERS)
       {
-        DlgParam->OriginalCBAttr[Param1-SETATTR_RO] = (int)Param2;
-        DlgParam->OriginalCBAttr2[Param1-SETATTR_RO] = 0;
+        DlgParam->OriginalCBAttr[Param1-SETATTR_ATTR_FIRST] = (int)Param2;
+        DlgParam->OriginalCBAttr2[Param1-SETATTR_ATTR_FIRST] = 0;
 
         FocusPos=(int)Dialog::SendDlgMessage(hDlg,DM_GETFOCUS,0,0);
         StateC_8=(int)Dialog::SendDlgMessage(hDlg,DM_GETCHECK,SETATTR_COMPRESSED,0);
@@ -205,17 +208,17 @@
               if(DlgParam->OStateF_12 != StateF_12) // �������� ���������?
               {
                 // ������� 3-State
-                for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+                for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
                 {
                   if(!StateF_12) // ����?
                   {
                     Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,FALSE);
-                    Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_RO]);
+                    Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_ATTR_FIRST]);
                   }
                   else                      // ����������?
                   {
                     Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,TRUE);
-                    if(DlgParam->OriginalCBAttr2[I-SETATTR_RO] == -1)
+                    if(DlgParam->OriginalCBAttr2[I-SETATTR_ATTR_FIRST] == -1)
                       Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE);
                   }
                 }
@@ -270,17 +273,17 @@
             {
               if(DlgParam->OStateF_12 != StateF_12) // �������� ���������?
               {
-                for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+                for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
                 {
                   if(!StateF_12) // ����?
                   {
                     Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,
-                              ((DlgParam->OriginalCBFlag[I-SETATTR_RO]&DIF_3STATE)?TRUE:FALSE));
-                    Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_RO]);
+                              ((DlgParam->OriginalCBFlag[I-SETATTR_ATTR_FIRST]&DIF_3STATE)?TRUE:FALSE));
+                    Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,DlgParam->OriginalCBAttr[I-SETATTR_ATTR_FIRST]);
                   }
                   else                      // ����������?
                   {
-                    if(DlgParam->OriginalCBAttr2[I-SETATTR_RO] == -1)
+                    if(DlgParam->OriginalCBAttr2[I-SETATTR_ATTR_FIRST] == -1)
                     {
                       Dialog::SendDlgMessage(hDlg,DM_SET3STATE,I,TRUE);
                       Dialog::SendDlgMessage(hDlg,DM_SETCHECK,I,BSTATE_3STATE);
@@ -432,13 +435,13 @@
 03   |                 foo                 |   03
 04   |          Link: blach blach          | < 04 <<
 05   +-------------------------------------+   05
-06   | [ ] Read only                       |   06
-07   | [ ] Archive                         |   07
-08   | [ ] Hidden                          |   08
-09   | [ ] System                          |   09
+06   | [ ] Read only        [ ] Sparse     |   06
+07   | [ ] Archive          [ ] Temporary  |   07
+08   | [ ] Hidden           [ ] Offline    |   08
+09   | [ ] System           [ ] Virtual    |   09
 10   | [ ] Compressed                      |   10
 11   | [ ] Encrypted                       |   11
-12   | [ ] Indexed                         |   12
+12   | [ ] Not Indexed                     |   12
 13   +-------------------------------------+   13
 14   | [x] Process subfolders              |   14
 15   +-------------------------------------+   15
@@ -453,40 +456,44 @@
 24                                             24
 */
   static struct DialogDataEx AttrDlgData[]={
-  /* 00 */DI_DOUBLEBOX,3,1,65,20,0,0,0,0,(wchar_t *)MSetAttrTitle,
+  /* 00 */DI_DOUBLEBOX,3,1,65,22,0,0,0,0,(wchar_t *)MSetAttrTitle,
   /* 01 */DI_TEXT,-1,2,0,2,0,0,0,0,(wchar_t *)MSetAttrFor,
   /* 02 */DI_TEXT,-1,3,0,3,0,0,DIF_SHOWAMPERSAND,0,L"",
   /* 03 */DI_TEXT,3,4,0,4,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
+
   /* 04 */DI_CHECKBOX,5, 5,0,5,1,0,DIF_3STATE,0,(wchar_t *)MSetAttrRO,
   /* 05 */DI_CHECKBOX,5, 6,0,6,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrArchive,
   /* 06 */DI_CHECKBOX,5, 7,0,7,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrHidden,
   /* 07 */DI_CHECKBOX,5, 8,0,8,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrSystem,
   /* 08 */DI_CHECKBOX,5, 9,0,9,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrCompressed,
-  /* 09 */DI_CHECKBOX,35, 5,0,5,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrEncrypted,
-  /* 10 */DI_CHECKBOX,35, 6,0,6,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrNotIndexed,
-  /* 11 */DI_CHECKBOX,35, 7,0,7,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrSparse,
-  /* 12 */DI_CHECKBOX,35, 8,0,8,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrTemp,
-  /* 13 */DI_CHECKBOX,35, 9,0,9,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrOffline,
-  /* 14 */DI_TEXT,3,10,0,10,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
-  /* 15 */DI_CHECKBOX,5,11,0,11,0,0,DIF_DISABLE,0,(wchar_t *)MSetAttrSubfolders,
-  /* 16 */DI_TEXT,3,12,0,12,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
-  /* 17 */DI_TEXT,45,13,0,13,0,0,0,0,L"",
-  /* 18 */DI_TEXT,    5,14,0,14,0,0,0,0,(wchar_t *)MSetAttrModification,
-  /* 19 */DI_FIXEDIT,45,14,54,14,0,0,DIF_MASKEDIT,0,L"",
-  /* 20 */DI_FIXEDIT,56,14,63,14,0,0,DIF_MASKEDIT,0,L"",
-  /* 21 */DI_TEXT,    5,15,0,15,0,0,0,0,(wchar_t *)MSetAttrCreation,
-  /* 22 */DI_FIXEDIT,45,15,54,15,0,0,DIF_MASKEDIT,0,L"",
-  /* 23 */DI_FIXEDIT,56,15,63,15,0,0,DIF_MASKEDIT,0,L"",
-  /* 24 */DI_TEXT,    5,16,0,16,0,0,0,0,(wchar_t *)MSetAttrLastAccess,
-  /* 25 */DI_FIXEDIT,45,16,54,16,0,0,DIF_MASKEDIT,0,L"",
-  /* 26 */DI_FIXEDIT,56,16,63,16,0,0,DIF_MASKEDIT,0,L"",
-  /* 27 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrOriginal,
-  /* 28 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrCurrent,
-  /* 29 */DI_BUTTON,0,17,0,17,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrBlank,
-  /* 30 */DI_TEXT,3,18,0,18,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
-  /* 31 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP,1,(wchar_t *)MSetAttrSet,
-  /* 32 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP,0,(wchar_t *)MCancel,
-  /* 33 */DI_TEXT,-1,4,0,4,0,0,DIF_SHOWAMPERSAND,0,L"",
+  /* 09 */DI_CHECKBOX,5,10,0,10,0,0,DIF_3STATE,0,(wchar_t *)MSetAttrEncrypted,
+  /* 10 */DI_CHECKBOX,5,11,0,11,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrNotIndexed,
+
+  /* 11 */DI_CHECKBOX,35, 5,0,5,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrSparse,
+  /* 12 */DI_CHECKBOX,35, 6,0,6,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrTemp,
+  /* 13 */DI_CHECKBOX,35, 7,0,7,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrOffline,
+  /* 14 */DI_CHECKBOX,35, 8,0,8,0,0,DIF_3STATE|DIF_DISABLE,0,(wchar_t *)MSetAttrVirtual,
+
+  /* 15 */DI_TEXT,3,12,0,12,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
+  /* 16 */DI_CHECKBOX,5,13,0,13,0,0,DIF_DISABLE,0,(wchar_t *)MSetAttrSubfolders,
+  /* 17 */DI_TEXT,3,14,0,14,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
+  /* 18 */DI_TEXT,45,15,0,15,0,0,0,0,L"",
+  /* 19 */DI_TEXT,    5,16,0,16,0,0,0,0,(wchar_t *)MSetAttrModification,
+  /* 20 */DI_FIXEDIT,45,16,54,16,0,0,DIF_MASKEDIT,0,L"",
+  /* 21 */DI_FIXEDIT,56,16,63,16,0,0,DIF_MASKEDIT,0,L"",
+  /* 22 */DI_TEXT,    5,17,0,17,0,0,0,0,(wchar_t *)MSetAttrCreation,
+  /* 23 */DI_FIXEDIT,45,17,54,17,0,0,DIF_MASKEDIT,0,L"",
+  /* 24 */DI_FIXEDIT,56,17,63,17,0,0,DIF_MASKEDIT,0,L"",
+  /* 25 */DI_TEXT,    5,18,0,18,0,0,0,0,(wchar_t *)MSetAttrLastAccess,
+  /* 26 */DI_FIXEDIT,45,18,54,18,0,0,DIF_MASKEDIT,0,L"",
+  /* 27 */DI_FIXEDIT,56,18,63,18,0,0,DIF_MASKEDIT,0,L"",
+  /* 28 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrOriginal,
+  /* 29 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrCurrent,
+  /* 30 */DI_BUTTON,0,19,0,19,0,0,DIF_CENTERGROUP|DIF_BTNNOCLOSE,0,(wchar_t *)MSetAttrBlank,
+  /* 31 */DI_TEXT,3,20,0,20,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"",
+  /* 32 */DI_BUTTON,0,21,0,21,0,0,DIF_CENTERGROUP,1,(wchar_t *)MSetAttrSet,
+  /* 33 */DI_BUTTON,0,21,0,21,0,0,DIF_CENTERGROUP,0,(wchar_t *)MCancel,
+  /* 34 */DI_TEXT,-1,4,0,4,0,0,DIF_SHOWAMPERSAND,0,L"",
   };
   MakeDialogItemsEx(AttrDlgData,AttrDlg);
   int DlgCountItems=sizeof(AttrDlgData)/sizeof(AttrDlgData[0])-1;
@@ -582,6 +589,7 @@
         break;
     }
 
+    AttrDlg[SETATTR_TITLEDATE].strData = strAttr;
     AttrDlg[SETATTR_MDATE].Mask=strDMask;
     AttrDlg[SETATTR_MTIME].Mask=strTMask;
     AttrDlg[SETATTR_CDATE].Mask=strDMask;
@@ -620,9 +628,10 @@
           AttrDlg[SETATTR_SPARSE].Selected=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)!=0;
           AttrDlg[SETATTR_TEMP].Selected=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)!=0;
           AttrDlg[SETATTR_OFFLINE].Selected=(FileAttr & FILE_ATTRIBUTE_OFFLINE)!=0;
+          AttrDlg[SETATTR_VIRTUAL].Selected=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)!=0;
 
           // ������� 3-State
-          for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+          for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
             AttrDlg[I].Flags&=~DIF_3STATE;
         }
         FolderPresent=TRUE;
@@ -694,7 +703,7 @@
       else
       {
         // ������� 3-State
-        for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+        for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
           AttrDlg[I].Flags&=~DIF_3STATE;
       }
 
@@ -711,6 +720,7 @@
       AttrDlg[SETATTR_SPARSE].Selected=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)!=0;
       AttrDlg[SETATTR_TEMP].Selected=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)!=0;
       AttrDlg[SETATTR_OFFLINE].Selected=(FileAttr & FILE_ATTRIBUTE_OFFLINE)!=0;
+      AttrDlg[SETATTR_VIRTUAL].Selected=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)!=0;
 
       if(DlgParam.Plugin)
       {
@@ -733,7 +743,8 @@
       AttrDlg[SETATTR_RO].Selected=AttrDlg[SETATTR_ARCHIVE].Selected=AttrDlg[SETATTR_HIDDEN].Selected=
       AttrDlg[SETATTR_SYSTEM].Selected=AttrDlg[SETATTR_COMPRESSED].Selected=AttrDlg[SETATTR_ENCRYPTED].Selected=
       AttrDlg[SETATTR_INDEXED].Selected=AttrDlg[SETATTR_SPARSE].Selected=AttrDlg[SETATTR_TEMP].Selected=
-        AttrDlg[SETATTR_OFFLINE].Selected=2;
+      AttrDlg[SETATTR_OFFLINE].Selected=AttrDlg[SETATTR_VIRTUAL].Selected=2;
+
       AttrDlg[SETATTR_MDATE].strData=AttrDlg[SETATTR_MTIME].strData=AttrDlg[SETATTR_CDATE].strData=
       AttrDlg[SETATTR_CTIME].strData=AttrDlg[SETATTR_ADATE].strData=AttrDlg[SETATTR_ATIME].strData=L"";
 
@@ -742,7 +753,7 @@
 
       AttrDlg[SETATTR_NAME].strData = UMSG(MSetAttrSelectedObjects);
       // ������� -1 - ����� ���� ���� ���� :-)
-      for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+      for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
         AttrDlg[I].Selected=0;
 
       // �������� - ��� �� ����� ������� - ��������?
@@ -767,11 +778,12 @@
         AttrDlg[SETATTR_SPARSE].Selected+=(FileAttr & FILE_ATTRIBUTE_SPARSE_FILE)?1:0;
         AttrDlg[SETATTR_TEMP].Selected+=(FileAttr & FILE_ATTRIBUTE_TEMPORARY)?1:0;
         AttrDlg[SETATTR_OFFLINE].Selected+=(FileAttr & FILE_ATTRIBUTE_OFFLINE)?1:0;
+        AttrDlg[SETATTR_VIRTUAL].Selected+=(FileAttr & FILE_ATTRIBUTE_VIRTUAL)?1:0;
       }
       SrcPanel->GetSelName(NULL,FileAttr);
       SrcPanel->GetSelName(&strSelName,FileAttr,NULL,&FindData);
       // ������� "�������������" ��� ��, ��� �����
-      for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+      for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
       {
         J=AttrDlg[I].Selected;
         // ������� 3-state, ���� "��� ��� ��� ��� �����"
@@ -789,7 +801,7 @@
       AttrDlg[SETATTR_SUBFOLDERS].Selected=1;
       AttrDlg[SETATTR_MDATE].strData=AttrDlg[SETATTR_MTIME].strData=AttrDlg[SETATTR_CDATE].strData=
       AttrDlg[SETATTR_CTIME].strData=AttrDlg[SETATTR_ADATE].strData=AttrDlg[SETATTR_ATIME].strData=L"";
-      for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+      for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
       {
         AttrDlg[I].Selected=2;
         AttrDlg[I].Flags|=DIF_3STATE;
@@ -797,11 +809,11 @@
     }
 
     // �������� �������� ������������.
-    for(I=SETATTR_RO; I <= SETATTR_OFFLINE; ++I)
+    for(I=SETATTR_ATTR_FIRST; I <= SETATTR_ATTR_LAST; ++I)
     {
-      DlgParam.OriginalCBAttr[I-SETATTR_RO]=AttrDlg[I].Selected;
-      DlgParam.OriginalCBAttr2[I-SETATTR_RO]=-1;
-      DlgParam.OriginalCBFlag[I-SETATTR_RO]=AttrDlg[I].Flags;
+      DlgParam.OriginalCBAttr[I-SETATTR_ATTR_FIRST]=AttrDlg[I].Selected;
+      DlgParam.OriginalCBAttr2[I-SETATTR_ATTR_FIRST]=-1;
+      DlgParam.OriginalCBFlag[I-SETATTR_ATTR_FIRST]=AttrDlg[I].Flags;
     }
 
     DlgParam.ModeDialog=((SelCount==1 && (FileAttr & FA_DIREC)==0)?0:(SelCount==1?1:2));
@@ -814,7 +826,7 @@
     {
       Dialog Dlg(AttrDlg,DlgCountItems,SetAttrDlgProc,(LONG_PTR)&DlgParam);
       Dlg.SetHelp(L"FileAttrDlg");                 //  ^ - ��� ������� ������!
-      Dlg.SetPosition(-1,-1,69,JunctionPresent?23:22);
+      Dlg.SetPosition(-1,-1,69,JunctionPresent?25:24);
       Dlg.Process();
       if (Dlg.GetExitCode()!=SETATTR_SET)
         return 0;
@@ -849,6 +861,9 @@
         if(!(AttrDlg[SETATTR_OFFLINE].Flags&DIF_DISABLE))
           if (AttrDlg[SETATTR_OFFLINE].Selected)
             NewAttr|=FILE_ATTRIBUTE_OFFLINE;
+        if(!(AttrDlg[SETATTR_VIRTUAL].Flags&DIF_DISABLE))
+          if (AttrDlg[SETATTR_VIRTUAL].Selected)
+            NewAttr|=FILE_ATTRIBUTE_VIRTUAL;
         */
 
         SetWriteTime=     DlgParam.OLastWriteTime  && ReadFileTime(0,strSelName,FileAttr,&LastWriteTime,AttrDlg[SETATTR_MDATE].strData,AttrDlg[SETATTR_MTIME].strData);
@@ -938,6 +953,11 @@
         if (AttrDlg[SETATTR_OFFLINE].Selected == 1)        SetAttr|=FILE_ATTRIBUTE_OFFLINE;
         else if (!AttrDlg[SETATTR_OFFLINE].Selected)       ClearAttr|=FILE_ATTRIBUTE_OFFLINE;
       }
+      if(!(AttrDlg[SETATTR_VIRTUAL].Flags&DIF_DISABLE))
+      {
+        if (AttrDlg[SETATTR_VIRTUAL].Selected == 1)        SetAttr|=FILE_ATTRIBUTE_VIRTUAL;
+        else if (!AttrDlg[SETATTR_VIRTUAL].Selected)       ClearAttr|=FILE_ATTRIBUTE_VIRTUAL;
+      }
       */
 
       SrcPanel->GetSelName(NULL,FileAttr);
Fix460.diff (37,565 bytes)   

alexmitin

2008-01-20 14:05

reporter   bugnote:0001142

Реализовано в соответствии с начальным описанием. Смотреть Файл Fix460.diff.

vskirdin

2008-01-21 05:03

administrator   bugnote:0001144

> Реализовано в соответствии с начальным описанием
Хмм... в фильтрах (Options|Files highlighting and sort groups) диалог не помещается на экран (80x25). Не смертельно, но как то неаккуратно смотрится.
Не пора ли переделать дизайн диалога?


В хелпе тоже... 80x25, окно хелпа не распахнуто:
**********************
                   Разреженный, Временный и Автономный используются
                   только на дисках с файловой системой NTFS. При
 этом
                   атрибуты Зашифрованный и Автономный используются
                   только в Windows 2000/XP/2003/Vista/2008. Атрибут
                   Виртуальный используется только в Windows
 Vista/2008.

    Для быстрого отключения одного или нескольких условий фильтра
**********************

И.. кстати, про хелп. В разделе про Фильтры нет упоминания про цвета.

DrKnS

2008-01-21 05:47

administrator   bugnote:0001145

>Не пора ли переделать дизайн диалога?
Диалог вообще перегружен информацией, и дальше будет только хуже.
Может быть, имеет смысл копать в сторону 0000179?

HaRT

2008-01-21 06:47

reporter   bugnote:0001146

Last edited: 2008-01-21 06:49

> Не пора ли переделать дизайн диалога?
Прошу также не забыть про 0000262.

alexmitin

2008-01-21 08:43

reporter   bugnote:0001147

> в фильтрах (Options|Files highlighting and sort groups)
> диалог не помещается на экран (80x25).
> Не смертельно, но как то неаккуратно смотрится.

Насколько я вижу в 80x25 не помещается последняя строка рамки. Думаю что это некритично. Смотри вопрос в bug#461.

Это можно исправить убиранием разделителя ниже Mask, а также разделителя между секцией "Size in" и "Attributes". Еще один вариант - это сделать кнопку "Colors" и вынести всю секцию "File Name Colors" в отдельный диалог.

Давайте вынесем обсуждение переделки UI для диалого "Filter" и "Files Highlighting Filter" в отдельные баг репорты.

В этом баг репорте хотелось бы обсудить функциональность. Сделано ли это как задумано. Найдется ли применение?

alexmitin

2008-01-21 08:45

reporter   bugnote:0001148

Исправление:
В предыдущем сообщении следует читать "Смотри вопрос в 0000461".

vskirdin

2008-01-21 09:01

administrator   bugnote:0001152

DrKnS> Может быть, имеет смысл копать в сторону 0000179?
да я собственно и не против :-)

alexmitin> Давайте вынесем обсуждение переделки UI для диалого
alexmitin> "Filter" и "Files Highlighting Filter" в отдельные баг репорты
А лучше на форум, а здесь (на мантисе) только сухой остаток...

2008-01-22 02:46

 

hilight.hlf (5,888 bytes)   
.Language=Russian,Russian (���᪨�)
.Options CtrlColorChar=\

@Contents
$^#Edit files highlighting#                   RSHALCTIO
@-

 \70                                                                          \-
 \70  ���������������������� Edit files highlighting ���������������������ͻ  \-\00  \-
 \70  � [x] A \7Ef\70ile mask or several file masks delimited with commas:       �  \-\00  \-
 \70  � \38*.*                                                               \70\78\70�  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � ~[ ]~@ShAttr@ \7EA\70ttributes           \78Include attributes   Exclude attributes   \70�  \-\00  \-
 \70  �                          \78RAHSDCEXSOV          RAHSDCEXSOV          \70�  \-\00  \-
 \70  �     \78[ Edit ]             -A---------          -----------          \70�  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � [x] Optional cha\7Er\70acter to mark specified files: \30\70                  �  \-\00  \-
 \70  ����������������������������� Colors �������������������������������Ķ  \-\00  \-
 \70  � Normal                    [ File ]  [ Mark char ]  \1B�\13filename.ext�\70 �  \-\00  \-
 \70  � Under cursor              [ File ]  [ Mark char ]  \1B�\38filename.ext�\70 �  \-\00  \-
 \70  � Selected                  [ File ]  [ Mark char ]  \1B�\1E\13\1Efilename.ext�\70 �  \-\00  \-
 \70  � Selected under cursor     [ File ]  [ Mark char ]  \1B�\3E\30\3Efilename.ext�\70 �  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � [ ] \7EP\70arse subsequent highlighting groups                           �  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  �                         [ Ok ]  [ Cancel ]                         �  \-\00  \-
 \70  ��������������������������������������������������������������������ͼ  \-\00  \-
 \70                                                                          \-\00  \-
   \00                                                                        \-\00  \-

@EditAttr
$^#Files highlighting attributes#
@-

 \70                                                                \-
 \70  ������������ Files highlighting attributes ���������������ͻ  \-\00  \-
 \70  � Include attributes              Exclude attributes       �  \-\00  \-
 \70  � [ ] Read-only                   [ ] Read-only            �  \-\00  \-
 \70  � [x] Hidden                      [ ] Hidden               �  \-\00  \-
 \70  � [ ] System                      [ ] System               �  \-\00  \-
 \70  � [ ] Archive                     [ ] Archive              �  \-\00  \-
 \70  � [ ] Compressed                  [ ] Compressed           �  \-\00  \-
 \70  � [ ] Encrypted                   [ ] Encrypted            �  \-\00  \-
 \70  � [ ] Folder                      [ ] Folder               �  \-\00  \-
 \70  � [ ] Symbolic links              [ ] Symbolic links       �  \-\00  \-
 \70  � [ ] Temporary                   [ ] Temporary            �  \-\00  \-
 \70  � [ ] Index                       [ ] Index                �  \-\00  \-
 \70  � [ ] Spare                       [ ] Spare                �  \-\00  \-
 \70  ����������������������������������������������������������Ķ  \-\00  \-
 \70  �                  ~[ Ok ]~@ShAttr@  [ Cancel ]                      �  \-\00  \-
 \70  ����������������������������������������������������������ͼ  \-\00  \-
 \70                                                                \-\00  \-
   \00                                                              \-\00  \-


@ShAttr
$^#Edit files highlighting#
@-

 \70                                                                          \-
 \70  ���������������������� Edit files highlighting ���������������������ͻ  \-\00  \-
 \70  � [x] A \7Ef\70ile mask or several file masks delimited with commas:       �  \-\00  \-
 \70  � \38*.*                                                               \70\70\70�  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � ~[x]~@Contents@ \7EA\70ttributes           Include attributes   Exclude attributes   �  \-\00  \-
 \70  �                          RHSACEFLIT$          RHSACEFLIT$          �  \-\00  \-
 \70  �     ~\70[ \7EE\70dit ]~@EditAttr@             -H---------          -----------          �  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � [x] Optional cha\7Er\70acter to mark specified files: \30\70                  �  \-\00  \-
 \70  ����������������������������� Colors �������������������������������Ķ  \-\00  \-
 \70  � Normal                    [ File ]  [ Mark char ]  \1B�\13filename.ext�\70 �  \-\00  \-
 \70  � Under cursor              [ File ]  [ Mark char ]  \1B�\38filename.ext�\70 �  \-\00  \-
 \70  � Selected                  [ File ]  [ Mark char ]  \1B�\1E\13\1Efilename.ext�\70 �  \-\00  \-
 \70  � Selected under cursor     [ File ]  [ Mark char ]  \1B�\3E\30\3Efilename.ext�\70 �  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  � [ ] \7EP\70arse subsequent highlighting groups                           �  \-\00  \-
 \70  ��������������������������������������������������������������������Ķ  \-\00  \-
 \70  �                         [ Ok ]  [ Cancel ]                         �  \-\00  \-
 \70  ��������������������������������������������������������������������ͼ  \-\00  \-
 \70                                                                          \-\00  \-
   \00                                                                        \-\00  \-
hilight.hlf (5,888 bytes)   

vskirdin

2008-01-22 02:47

administrator   bugnote:0001156

hilight.hlf - вариант (правда старый) - пример работы с атрибутами

vskirdin

2008-01-29 14:58

administrator   bugnote:0001165

"временно" патч принимается.
"временно" - потому, что диалог фильтра не вмещается в 25 строк.
нужен редизайн диалога фильтра - это отдельная песня.
искать после 417 билда

Zuz

2008-03-12 04:25

developer   bugnote:0001291

Я надеюсь все понимают, что в таком варианте никто и никогда не увидет ни одного файла или папки с атрибутом FILE_ATTRIBUTE_VIRTUAL, тем более на x64 и IA64 (там правда и IA32 запустится для этих целей)?

Варианты (плохие):
1. Вручную ч/з таскменеджер устанавливать FAR'у флаг виртуализации (или вручную манифест править).
2. Дать педаль в опциях FAR'a для управления этим (но нужны права админа).
3. Сделать плагин/утилиту для установки флага виртуализации у FAR'a (тоже нужны права админа).

Вариант (правильный, но по имплементации ужасный):
вынести все операции с файлами в отдельный IA32 процесс (FindFirstFile/FindNextFile, и т.п.), который когда опция в FAR'e показывать виртуализированные файлы включена, поднимается и ч/з него доступ ко всем файловым операциям осуществялется.
Но здесь для x64 и IA64 тоже всё криво, т.к. не будут видны специфичные для их случая файлы.
Здесь же ещё можно реализовать GOD mode, с FILE_FLAG_BACKUP_SEMANTICS ж-)
Но это похоже некоторый перебор.

vskirdin

2008-03-12 05:44

administrator   bugnote:0001293

много читал, много думал, ничего не понял.

Zuz

2008-03-12 08:00

developer   bugnote:0001297

Last edited: 2008-03-12 08:02

А что здесь не понятного? ;-)
Для чего нужен FILE_ATTRIBUTE_VIRTUAL в фильтрах и пр.? Для того чтобы с такими файлами работать (искать их, подсвечивать, редактировать, удалять и пр.).
А как с ними работать, если для FAR'a LUA Virtualization отключен манифестом (и это правильно), следовательно FAR их не увидит и работать с такими файлами будет невозможно.
С другой стороны если включить для FAR'a LUA Virtualization, то тогда FAR будет криво работать с файлами (с учётом того как это задумано M$).
Соответсвенно патовая ситуация.
Т.е. для того, чтобы работать с виртуализированными файлами сейчас, нужны некоторые действия, которые я указал выше. Соответсвенно нужно для начала об этом в хелпе написать.
Корректно работать можно только, если запускать специальный процесс (для которого LUA Virtualization включен) и обращаться за списком файлов через него, а так же строить логику работы примерно так:
если у файла есть флаг FILE_ATTRIBUTE_VIRTUAL, то работать с ним ч/з специальный процесс, если флаг не установлен, то работать как обычно.
Но реализация этого метода это не совсем простая задачка ради небольшого бонуса работы с виртуализированными файлами.
Вот такие мысли.

alexmitin

2008-03-12 15:12

reporter   bugnote:0001299

> Я надеюсь все понимают, что в таком варианте никто
> и никогда не увидет ни одного файла или папки с атрибутом
> FILE_ATTRIBUTE_VIRTUAL, тем более на x64 и IA64
> (там правда и IA32 запустится для этих целей)?
>
> Варианты (плохие):
> 1. Вручную ч/з таскменеджер устанавливать
> FAR'у флаг виртуализации (или вручную манифест править).

Что не так уж и плохо. Нужно только документировать это в файле помощи.

> 2. Дать педаль в опциях FAR'a для управления этим (но нужны права админа).

Лучше добавить какой-нибудь shortcut (например Ctrl+Shift+V), при нажатии которого включается/выключается виртуализация. Этот режим не должен сохраняться между сессиями FAR. При включении виртуализации дать также визуальную индикацию. Например добавлением слова "Виртуализация" (Virtualization) в заголовок окна и/или на месте часов (правый верний угол). При этом часы не показываются.

Использование режима "Vista Virtualization" должно быть ограничено таким образом , чтобы пользователь не мог его использовать постоянно (именно поэтому не нужно его сохранять в регистре), но в то же время быть достаточно удобным к использованию в пределах текущей сессии FAR.

---------------
Для того чтобы процесс мог разрешить/запретить виртуализацию под Vista не нужно иметь административные права.

Вполне достаточно открыть process token с правами TOKEN_QUERY | TOKEN_WRITE. А затем использовать функцию SetTokenInformation() с параметром TokenVirtualizationEnabled:

::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY | TOKEN_WRITE, &hToken);

DWORD dwVirtualizationEnabled = bEnabled ? 1 : 0;
::SetTokenInformation(
  hToken, // __in HANDLE TokenHandle,
  TokenVirtualizationEnabled, // __in TOKEN_INFORMATION_CLASS TokenInformationClass,
  &dwVirtualizationEnabled, // __in LPVOID TokenInformation,
  sizeof(dwVirtualizationEnabled) // __in DWORD TokenInformationLength
);

Для примера смотри проект "TestTokenInfo.zip" в аттачменте.

2008-03-12 15:13

 

TestTokenInfo.zip (6,372 bytes)

Zuz

2008-03-13 08:22

developer   bugnote:0001308

2 alexmitin:
Каюсь, с правами админа перегнул (не могу понять почему так написал, клинануло, что-то)...
Включать виртализацию всё же криво, хотя твой вариант пока самое лучшее, что удалось придумать.

2 all:
Осталось решить дилему с x64/IA64 там невозможно в принципе виртуализацию влючить для процесса => код текущий там мёртвый.
Для решения этой проблемы, как вариант пришло в голову, нарисовать IA32 exe Файлик (для которого стопудово будет включена виртуализация) и подключить его к FAR'у ч/з MultiArc, но пока не смотрел, как там передать FILE_ATTRIBUTE_VIRTUAL. Если эта идея годится, то буду делать.

alexmitin

2008-03-13 10:40

reporter   bugnote:0001309

> Осталось решить дилему с x64/IA64 там невозможно в принципе
> виртуализацию влючить для процесса => код текущий там мёртвый.

Для x64 - почему же невозможно? Это возможно.
Смотри файл TestTokenInfo2.zip в аттачменте.
Перед компиляцией переключить на x64.

Насчет IA64 не уверен. Если из Task Manager под IA64 можно вручную поменять флаг виртуализации для процесса cmd.exe - тогда и из кода FAR для IA64 это тоже можно будет сделать. Проверить не могу за неимением IA64 платформы.

> Для решения этой проблемы, как вариант пришло в голову,
> нарисовать IA32 exe Файлик (для которого стопудово будет
> включена виртуализация)и подключить его к FAR'у ч/з MultiArc,
> но пока не смотрел, как там передать FILE_ATTRIBUTE_VIRTUAL.
> Если эта идея годится, то буду делать.

Криво.

2008-03-13 10:42

 

TestTokenInfo2.zip (6,519 bytes)

Zuz

2008-03-13 22:17

developer   bugnote:0001317

хм. интересно, просто во всех доках M$ написано, что оно не будет работать. Видимо это следует читать не будет автоматически.
И ещё оно просто делает пометку в токене или реально работает? Под рукой просто нет x64 в моменте.
Под IA64, у меня пока нет системы где Windows Server 2008 установлен, посему проверить тоже не могу.

Вообщем твой вариант, всё же интересней получается, т.к. позволяет задействовать все плагины FAR'a в работе, сделаю его.

alexmitin

2008-03-13 22:42

reporter   bugnote:0001318

Под x64 cmd.exe 64-битный. При установке для этого процесса флага виртуализации через Task Manager команда dir "C:\Program Files" показывает "виртуальные" файлы. Если виртуализация выключена - файлы не видны.

vskirdin

2008-03-15 00:36

administrator   bugnote:0001323

Вижу активный тусняк пошел (аля скрытый форум :-)
Может мне кто-нить объяснить на пальцах (можно ссылки на русскоязычные тексты), про что это такое вы толкуете (что это за зверь виртуализация).
Спинным мозгом чуствую, что полезно, но общая картинка пока не складывается.

DrKnS

2008-03-15 00:57

administrator   bugnote:0001325

vskirdin

http://blog.not-a-kernel-guy.com/2006/10/13/84

alexmitin

2008-04-01 10:16

reporter   bugnote:0001465

> В общем твой вариант, всё же интересней получается,
> т.к. позволяет задействовать все плагины FAR'a
> в работе, сделаю его.

Кстати не все плагины, а только те, которые не вызывают внешние процессы. Например MultiArc может входить в виртуальные zip файлы, но не распаковывать их, т.к. вызывает внешний архиватор для этого.

Более полное решение - если в FAR включена виртуализация, то при выхове внешних процессов - включать виртуализацию для них тоже. Но в этом случае возможно много side affects. Лучше этого не делать.

Поэтому просто триггер для включения/выключения виртуализации - это больше для поиска виртуальных файлов, просмотра и редактирования. На работу всех плагинов расчитывать не приходится.

Скриншоты с примером реализации смотри в аттачменте.

Файл:
  VirtualizationON.jpg - виртуализация включена
  VirtualizationOFF.jpg - виртуализация выключена

2008-04-01 10:17

 

Virtualization.zip (79,573 bytes)

Issue History

Date Modified Username Field Change
2008-01-20 13:56 alexmitin New Issue
2008-01-20 14:04 alexmitin File Added: Fix460.diff
2008-01-20 14:05 alexmitin Note Added: 0001142
2008-01-20 20:15 Zuz Status new => assigned
2008-01-20 20:15 Zuz Assigned To => Zuz
2008-01-21 05:03 vskirdin Note Added: 0001144
2008-01-21 05:47 DrKnS Note Added: 0001145
2008-01-21 06:47 HaRT Note Added: 0001146
2008-01-21 06:49 HaRT Note Edited: 0001146
2008-01-21 08:43 alexmitin Note Added: 0001147
2008-01-21 08:45 alexmitin Note Added: 0001148
2008-01-21 09:01 vskirdin Note Added: 0001152
2008-01-22 02:46 vskirdin File Added: hilight.hlf
2008-01-22 02:47 vskirdin Note Added: 0001156
2008-01-29 14:55 vskirdin Assigned To Zuz => vskirdin
2008-01-29 14:58 vskirdin Note Added: 0001165
2008-01-29 14:58 vskirdin Status assigned => feedback
2008-03-09 12:38 alexmitin Status feedback => resolved
2008-03-09 12:38 alexmitin Resolution open => fixed
2008-03-12 03:42 vskirdin Build => 2323
2008-03-12 03:42 vskirdin Status resolved => closed
2008-03-12 03:43 vskirdin Fixed in Version => 1.71
2008-03-12 04:25 Zuz Note Added: 0001291
2008-03-12 04:25 Zuz Status closed => assigned
2008-03-12 04:25 Zuz Resolution fixed => reopened
2008-03-12 05:44 vskirdin Note Added: 0001293
2008-03-12 08:00 Zuz Note Added: 0001297
2008-03-12 08:02 Zuz Note Edited: 0001297
2008-03-12 15:12 alexmitin Note Added: 0001299
2008-03-12 15:13 alexmitin File Added: TestTokenInfo.zip
2008-03-13 08:22 Zuz Note Added: 0001308
2008-03-13 10:40 alexmitin Note Added: 0001309
2008-03-13 10:42 alexmitin File Added: TestTokenInfo2.zip
2008-03-13 22:17 Zuz Note Added: 0001317
2008-03-13 22:42 alexmitin Note Added: 0001318
2008-03-15 00:36 vskirdin Note Added: 0001323
2008-03-15 00:57 DrKnS Note Added: 0001325
2008-04-01 10:16 alexmitin Note Added: 0001465
2008-04-01 10:17 alexmitin File Added: Virtualization.zip
2013-02-03 00:34 alexy Severity minor => feature