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. |