Subversion Repositories recyclebinunit

Rev

Rev 82 | Rev 99 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit RecBinUnitLowLvl;
  2.  
  3. // TODO: Gain more information about drive '@' / Homedrive / Netdrive? Win2000 source
  4. //       + ├╝berall verwenden
  5.  
  6. interface
  7.  
  8. uses
  9.   Windows;
  10.  
  11. type
  12.   PRbInfoHeader = ^TRbInfoHeader;
  13.   TRbInfoHeader = record
  14.     format: DWORD;         // Unsure...
  15.                            // Win95 (without IE4): 00 00 00 00
  16.                            // Win95 (with IE4):    04 00 00 00
  17.                            // Win NT4:             02 00 00 00
  18.                            // Win XP:              05 00 00 00
  19.     totalEntries: DWORD;   // Only Win95 (without IE4) and Win NT4, unknown purpose for other OS versions
  20.     nextPossibleID: DWORD; // Only Win95 (without IE4) and Win NT4, unknown purpose for other OS versions
  21.     recordLength: DWORD; // 0x181  =  INFO  structure (without Unicode)
  22.                          // 0x320  =  INFO2 structure (with Unicode)
  23.     totalSize: DWORD; // sum of all "originalSize" values;
  24.                       // Only Win95 (without IE4) and Win NT4, unknown purpose for other OS versions
  25.   end;
  26.  
  27. type
  28.   // Windows 95:      INFO file with TRbInfoRecordA; Folder deletion NOT possible
  29.   // Windows 95 +IE4: INFO2 file with TRbInfoRecordA; Folder deletion possible
  30.   PRbInfoRecordA = ^TRbInfoRecordA;
  31.   TRbInfoRecordA = record
  32.     sourceAnsi: array[0..MAX_PATH-3] of AnsiChar; // 258 elements
  33.     recordNumber: DWORD;
  34.     sourceDrive: DWORD;
  35.     deletionTime: FILETIME;
  36.     originalSize: DWORD; // Size occupied on disk. Not the actual file size.
  37.                          // INFO2, for folders: The whole folder size with contents
  38.   end;
  39.  
  40. type
  41.   // Windows NT4:   INFO file with TRbInfoRecordW; Folder deletion possible
  42.   // Windows 2000+: INFO2 file with TRbInfoRecordW; Folder deletion possible
  43.   PRbInfoRecordW = ^TRbInfoRecordW;
  44.   TRbInfoRecordW = record
  45.     sourceAnsi: array[0..MAX_PATH-3] of AnsiChar; // 258 elements
  46.     recordNumber: DWORD;
  47.     sourceDrive: DWORD;
  48.     deletionTime: FILETIME;
  49.     originalSize: DWORD;
  50.     sourceUnicode: array[0..MAX_PATH-3] of WideChar; // 258 elements
  51.     unknown1: DWORD; // Dummy?
  52.   end;
  53.  
  54. type
  55.   // Introduced in Windows Vista
  56.   PRbVistaRecord1 = ^TRbVistaRecord1;
  57.   TRbVistaRecord1 = record
  58.     version: int64; // Always 01 00 00 00 00 00 00 00
  59.     originalSize: int64;
  60.     deletionTime: FILETIME;
  61.     sourceUnicode: array[0..MAX_PATH-1] of WideChar;
  62.   end;
  63.  
  64. type
  65.   // Introduced somewhere in a Win10 release
  66.   PRbVistaRecord2Head = ^TRbVistaRecord2Head;
  67.   TRbVistaRecord2Head = record
  68.     version: int64; // Always 02 00 00 00 00 00 00 00
  69.     originalSize: int64;
  70.     deletionTime: FILETIME;
  71.     (* sourceUnicode: BSTR; *)
  72.     sourceCountChars: DWORD; // including NUL
  73.     //sourceUnicode: array[0..sourceCountChars+1] of WideChar;
  74.   end;
  75.  
  76. type
  77.   // Windows 95 + Windows NT 4
  78.   // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\BitBucket: PurgeInfo (Binary)
  79.   PRbWin95PurgeInfo = ^TRbWin95PurgeInfo;
  80.   TRbWin95PurgeInfo = record
  81.     cbSize: DWORD;
  82.     bGlobalSettings: BOOL;
  83.     percentDrive: array['A'..'Z'] of WORD; // 0x00..0x64 = 0%..100%
  84.     percentHomedrive: WORD;
  85.     percentGlobal: WORD;
  86.     NukeOnDeleteBits: DWORD; // Flags "Nuke on delete"
  87.                              // Bit 0 (LSB): Drive A
  88.                              // Bit 1: Drive B
  89.                              // ...
  90.                              // Bit 25: Drive Z
  91.                              // Bit 26: Homedrive
  92.                              // Bit 27: Global
  93.                              // Bit 28..31 (MSB) probably unused
  94.     unknown1: DWORD; // For example 04 0D 02 00
  95.   end;               // or          C4 0C 02 00
  96.  
  97. implementation
  98.  
  99. end.
  100.