Subversion Repositories recyclebinunit

Rev

Rev 99 | Rev 101 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 99 Rev 100
Line 1... Line 1...
1
unit RecBinUnitLowLvl;
1
unit RecBinUnitLowLvl;
2
 
2
 
3
// TODO: Gain more information about drive '@' / Homedrive / Netdrive?
-
 
4
 
-
 
5
interface
3
interface
6
 
4
 
7
uses
5
uses
8
  Windows;
6
  Windows;
9
 
7
 
Line 13... Line 11...
13
    format: DWORD;         // Version of the info file
11
    format: DWORD;         // Version of the info file
14
                           // Win95 (without IE4):   00 00 00 00
12
                           // Win95 (without IE4):   00 00 00 00
15
                           // Win NT4:               02 00 00 00   (Win96/Cairo?)
13
                           // Win NT4:               02 00 00 00   (Win96/Cairo?)
16
                           // Win95 (with IE4), 98:  04 00 00 00
14
                           // Win95 (with IE4), 98:  04 00 00 00
17
                           // Win Me, 2000, XP:      05 00 00 00   (NT4+IE4, NT5?)
15
                           // Win Me, 2000, XP:      05 00 00 00   (NT4+IE4, NT5?)
18
    totalEntries: DWORD;   // Only Win95 (without IE4) and Win NT4, other OS versions might use the registry instead
16
    totalEntries: DWORD;   // Only Win95 (without IE4) and Win NT4, other OS versions will use the registry instead and might write information on WM_ENDSESSION for compatibility reasons
19
    nextPossibleID: DWORD; // Only Win95 (without IE4) and Win NT4, other OS versions might use the registry instead
17
    nextPossibleID: DWORD; // Only Win95 (without IE4) and Win NT4, other OS versions will use the registry instead and might write information on WM_ENDSESSION for compatibility reasons
20
    recordLength: DWORD;   // 0x181  =  ANSI records
18
    recordLength: DWORD;   // 0x181  =  ANSI records
21
                           // 0x320  =  Unicode records
19
                           // 0x320  =  Unicode records
22
    totalSize: DWORD;      // sum of all "originalSize" values;
20
    totalSize: DWORD;      // sum of all "originalSize" values;
23
                           // Only Win95 (without IE4) and Win NT4, other OS versions might use the registry instead
21
                           // Only Win95 (without IE4) and Win NT4, other OS versions will use the registry instead and might write information on WM_ENDSESSION for compatibility reasons
24
  end;
22
  end;
25
 
23
 
26
type
24
type
27
  // Windows 95:      INFO file with TRbInfoRecordA; Folder deletion NOT possible
25
  // Windows 95:      INFO file with TRbInfoRecordA; Folder deletion NOT possible
28
  // Windows 95 +IE4: INFO2 file with TRbInfoRecordA; Folder deletion possible
26
  // Windows 95 +IE4: INFO2 file with TRbInfoRecordA; Folder deletion possible
29
  PRbInfoRecordA = ^TRbInfoRecordA;
27
  PRbInfoRecordA = ^TRbInfoRecordA;
30
  TRbInfoRecordA = packed record
28
  TRbInfoRecordA = packed record
31
    sourceAnsi: array[0..MAX_PATH-1] of AnsiChar; // 260 characters (including NUL terminator)
29
    sourceAnsi: array[0..MAX_PATH-1] of AnsiChar; // 260 characters (including NUL terminator)
32
    recordNumber: DWORD;
30
    recordNumber: DWORD;
33
    sourceDrive: DWORD; // 0=A, 1=B, 2=C, ...
31
    sourceDrive: DWORD; // 0=A, 1=B, 2=C, ..., Z=25, @=26 (@ is the "Network home drive" of the Win95 time)
34
    deletionTime: FILETIME;
32
    deletionTime: FILETIME;
35
    originalSize: DWORD; // Size occupied on disk. Not the actual file size.
33
    originalSize: DWORD; // Size occupied on disk. Not the actual file size.
36
                         // INFO2, for folders: The whole folder size with contents
34
                         // INFO2, for folders: The whole folder size with contents
37
  end;
35
  end;
38
 
36
 
Line 41... Line 39...
41
  // Windows 2000+: INFO2 file with TRbInfoRecordW; Folder deletion possible
39
  // Windows 2000+: INFO2 file with TRbInfoRecordW; Folder deletion possible
42
  PRbInfoRecordW = ^TRbInfoRecordW;
40
  PRbInfoRecordW = ^TRbInfoRecordW;
43
  TRbInfoRecordW = packed record
41
  TRbInfoRecordW = packed record
44
    sourceAnsi: array[0..MAX_PATH-1] of AnsiChar; // 260 characters (including NUL terminator)
42
    sourceAnsi: array[0..MAX_PATH-1] of AnsiChar; // 260 characters (including NUL terminator)
45
    recordNumber: DWORD;
43
    recordNumber: DWORD;
46
    sourceDrive: DWORD; // 0=A, 1=B, 2=C, ...
44
    sourceDrive: DWORD; // 0=A, 1=B, 2=C, ..., Z=25, @=26 (@ is the "Network home drive" of the Win95 times)
47
    deletionTime: FILETIME;
45
    deletionTime: FILETIME;
48
    originalSize: DWORD;
46
    originalSize: DWORD;
49
    sourceUnicode: array[0..MAX_PATH-1] of WideChar; // 260 characters (including NUL terminator)
47
    sourceUnicode: array[0..MAX_PATH-1] of WideChar; // 260 characters (including NUL terminator)
50
  end;
48
  end;
51
 
49
 
Line 66... Line 64...
66
    version: int64; // Always 02 00 00 00 00 00 00 00
64
    version: int64; // Always 02 00 00 00 00 00 00 00
67
    originalSize: int64;
65
    originalSize: int64;
68
    deletionTime: FILETIME;
66
    deletionTime: FILETIME;
69
    (* sourceUnicode: BSTR; *)
67
    (* sourceUnicode: BSTR; *)
70
    sourceCountChars: DWORD; // including NUL
68
    sourceCountChars: DWORD; // including NUL
71
    //sourceUnicode: array[0..sourceCountChars+1] of WideChar;
69
    //sourceUnicode: array[0..sourceCountChars-1] of WideChar;
72
  end;
70
  end;
73
 
71
 
74
type
72
type
75
  // Windows 95 + Windows NT 4
73
  // Windows 95 (tested with 4.00.950 and Win95b) + Windows NT 4
76
  // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\BitBucket: PurgeInfo (Binary)
74
  // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\BitBucket: PurgeInfo (Binary)
-
 
75
  // TODO: also explain this in FORMAT.md ?
77
  PRbWin95PurgeInfo = ^TRbWin95PurgeInfo;
76
  PRbWin95PurgeInfo = ^TRbWin95PurgeInfo;
78
  TRbWin95PurgeInfo = packed record
77
  TRbWin95PurgeInfo = packed record
79
    cbSize: DWORD;
78
    cbSize: DWORD; // 0x48 = 72
80
    bGlobalSettings: BOOL;
79
    bGlobalSettings: BOOL;
81
    percentDrive: array['A'..'Z'] of WORD; // 0x00..0x64 = 0%..100%
80
    percentDrive: array['A'..'Z'] of WORD; // 0x00..0x64 = 0%..100%
82
    percentHomedrive: WORD;
81
    percentHomedrive: WORD;
83
    percentGlobal: WORD;
82
    percentGlobal: WORD;
84
    NukeOnDeleteBits: DWORD; // Flags "Nuke on delete"
83
    NukeOnDeleteBits: DWORD; // Flags "Nuke on delete"
85
                             // Bit 0 (LSB): Drive A
84
                             // Bit 0 (LSB): Drive A
86
                             // Bit 1: Drive B
85
                             // Bit 1: Drive B
87
                             // ...
86
                             // ...
88
                             // Bit 25: Drive Z
87
                             // Bit 25: Drive Z
89
                             // Bit 26: Homedrive
88
                             // Bit 26: "Network home drive"
90
                             // Bit 27: Global
89
                             // Bit 27: Global
91
                             // Bit 28..31 (MSB) probably unused
90
                             // Bit 28..31 (MSB) unused
92
    unknown1: DWORD; // For example 04 0D 02 00
91
    dummy: DWORD; // "dummy to force a new size" ?! (TODO: was there a Windows version that had a smaller size (0x44), i.e. a different version of this record?)
93
  end;               // or          C4 0C 02 00
92
  end;
94
 
93
 
95
implementation
94
implementation
96
 
95
 
97
end.
96
end.