DEFRAG.H
上传用户:lw2005ff
上传日期:2007-01-07
资源大小:35k
文件大小:5k
源码类别:

系统编程

开发平台:

Visual C++

  1. //====================================================================
  2. //
  3. // Defrag.h
  4. //
  5. // Copyright (C) 1997 Mark Russinovich
  6. //
  7. // Header file for defragmentation demonstration program. This file
  8. // includes definitions for defragmentation File System Control 
  9. // commands, as well as the undocumented NtFsControl call.
  10. //
  11. //====================================================================
  12. //--------------------------------------------------------------------
  13. //                     D E F I N E S 
  14. //--------------------------------------------------------------------
  15. //
  16. // File System Control commands related to defragging
  17. //
  18. #define FSCTL_GET_VOLUME_INFORMATION 0x90064
  19. #define FSCTL_READ_MFT_RECORD 0x90068
  20. #define FSCTL_GET_VOLUME_BITMAP 0x9006F
  21. #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
  22. #define FSCTL_MOVE_FILE 0x90074
  23. //
  24. // return code type
  25. //
  26. typedef UINT NTSTATUS;
  27. //
  28. // Error codes returned by NtFsControlFile (see NTSTATUS.H)
  29. //
  30. #define STATUS_SUCCESS          ((NTSTATUS)0x00000000L)
  31. #define STATUS_BUFFER_OVERFLOW           ((NTSTATUS)0x80000005L)
  32. #define STATUS_INVALID_PARAMETER         ((NTSTATUS)0xC000000DL)
  33. #define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS)0xC0000023L)
  34. #define STATUS_ACCESS_DENIED          ((NTSTATUS)0xC0000011L)
  35. #define STATUS_ALREADY_COMMITTED         ((NTSTATUS)0xC0000021L)
  36. #define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS)0xC0000010L)
  37. //--------------------------------------------------------------------
  38. //       F S C T L  S P E C I F I C   T Y P E D E F S  
  39. //--------------------------------------------------------------------
  40. //
  41. // This is the definition for a VCN/LCN (virtual cluster/logical cluster)
  42. // mapping pair that is returned in the buffer passed to 
  43. // FSCTL_GET_RETRIEVAL_POINTERS
  44. //
  45. typedef struct {
  46. ULONGLONG Vcn;
  47. ULONGLONG Lcn;
  48. } MAPPING_PAIR, *PMAPPING_PAIR;
  49. //
  50. // This is the definition for the buffer that FSCTL_GET_RETRIEVAL_POINTERS
  51. // returns. It consists of a header followed by mapping pairs
  52. //
  53. typedef struct {
  54. ULONG NumberOfPairs;
  55. ULONGLONG StartVcn;
  56. MAPPING_PAIR Pair[1];
  57. } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
  58. //
  59. // This is the definition of the buffer that FSCTL_GET_VOLUME_BITMAP
  60. // returns. It consists of a header followed by the actual bitmap data
  61. //
  62. typedef struct {
  63. ULONGLONG StartLcn;
  64. ULONGLONG ClustersToEndOfVol;
  65. BYTE Map[1];
  66. } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR; 
  67. //
  68. // This is the definition for the data structure that is passed in to
  69. // FSCTL_MOVE_FILE
  70. //
  71. typedef struct {
  72.      HANDLE            FileHandle; 
  73.      ULONG             Reserved;   
  74.      ULONGLONG     StartVcn; 
  75.      ULONGLONG     TargetLcn;
  76.      ULONG             NumVcns; 
  77.      ULONG             Reserved1;
  78. } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
  79. //
  80. // NTFS volume information
  81. //
  82. typedef struct {
  83. ULONGLONG     SerialNumber;
  84. ULONGLONG     NumberOfSectors;
  85. ULONGLONG     TotalClusters;
  86. ULONGLONG     FreeClusters;
  87. ULONGLONG     Reserved;
  88. ULONG     BytesPerSector;
  89. ULONG     BytesPerCluster;
  90. ULONG     BytesPerMFTRecord;
  91. ULONG     ClustersPerMFTRecord;
  92. ULONGLONG     MFTLength;
  93. ULONGLONG     MFTStart;
  94. ULONGLONG     MFTMirrorStart;
  95. ULONGLONG     MFTZoneStart;
  96. ULONGLONG     MFTZoneEnd;
  97. } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
  98. //--------------------------------------------------------------------
  99. //     N T F S C O N T R O L F I L E   D E F I N I T I O N S
  100. //--------------------------------------------------------------------
  101. //
  102. // Prototype for NtFsControlFile and data structures
  103. // used in its definition
  104. //
  105. //
  106. // Io Status block (see NTDDK.H)
  107. //
  108. typedef struct _IO_STATUS_BLOCK {
  109.     NTSTATUS Status;
  110.     ULONG Information;
  111. } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
  112. //
  113. // Apc Routine (see NTDDK.H)
  114. //
  115. typedef VOID (*PIO_APC_ROUTINE) (
  116. PVOID ApcContext,
  117. PIO_STATUS_BLOCK IoStatusBlock,
  118. ULONG Reserved
  119. );
  120. //
  121. // The undocumented NtFsControlFile
  122. //
  123. // This function is used to send File System Control (FSCTL)
  124. // commands into file system drivers. Its definition is 
  125. // in ntdll.dll (ntdll.lib), a file shipped with the NTDDK.
  126. //
  127. NTSTATUS (__stdcall *NtFsControlFile)( 
  128. HANDLE FileHandle,
  129. HANDLE Event, // optional
  130. PIO_APC_ROUTINE ApcRoutine, // optional
  131. PVOID ApcContext, // optional
  132. PIO_STATUS_BLOCK IoStatusBlock,
  133. ULONG FsControlCode,
  134. PVOID InputBuffer, // optional
  135. ULONG InputBufferLength,
  136. PVOID OutputBuffer, // optional
  137. ULONG OutputBufferLength
  138. );
  139. ULONG (__stdcall *RtlNtStatusToDosError) (
  140. IN NTSTATUS Status
  141. );