#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA|FILE_WRITE_DATA)
#define FSCTL_READ_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,17,METHOD_NEITHER,FILE_READ_DATA)
#define FSCTL_WRITE_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,18,METHOD_NEITHER,FILE_WRITE_DATA)
+#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS)
#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS)
#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
LARGE_INTEGER BitmapSize;
BYTE Buffer[1];
} VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER;
+typedef struct {
+ LARGE_INTEGER VolumeSerialNumber;
+ LARGE_INTEGER NumberSectors;
+ LARGE_INTEGER TotalClusters;
+ LARGE_INTEGER FreeClusters;
+ LARGE_INTEGER TotalReserved;
+ DWORD BytesPerSector;
+ DWORD BytesPerCluster;
+ DWORD BytesPerFileRecordSegment;
+ DWORD ClustersPerFileRecordSegment;
+ LARGE_INTEGER MftValidDataLength;
+ LARGE_INTEGER MftStartLcn;
+ LARGE_INTEGER Mft2StartLcn;
+ LARGE_INTEGER MftZoneStart;
+ LARGE_INTEGER MftZoneEnd;
+} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
+
#define IsRecognizedPartition(t)\
(((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_12))||\
((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_16))||\