DEFRAG.H
上传用户:shshsw
上传日期:2007-01-06
资源大小:37k
文件大小:4k
源码类别:

磁盘编程

开发平台:

Others

  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_READ_MFT_RECORD 0x90068
  19. #define FSCTL_GET_VOLUME_BITMAP 0x9006F
  20. #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
  21. #define FSCTL_MOVE_FILE 0x90074
  22. //
  23. // return code type
  24. //
  25. typedef UINT NTSTATUS;
  26. //
  27. // Error codes returned by NtFsControlFile (see NTSTATUS.H)
  28. //
  29. #define STATUS_SUCCESS          ((NTSTATUS)0x00000000L)
  30. #define STATUS_BUFFER_OVERFLOW           ((NTSTATUS)0x80000005L)
  31. #define STATUS_INVALID_PARAMETER         ((NTSTATUS)0xC000000DL)
  32. #define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS)0xC0000023L)
  33. #define STATUS_ALREADY_COMMITTED         ((NTSTATUS)0xC0000021L)
  34. #define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS)0xC0000010L)
  35. //--------------------------------------------------------------------
  36. //       F S C T L  S P E C I F I C   T Y P E D E F S  
  37. //--------------------------------------------------------------------
  38. //
  39. // This is the definition for a VCN/LCN (virtual cluster/logical cluster)
  40. // mapping pair that is returned in the buffer passed to 
  41. // FSCTL_GET_RETRIEVAL_POINTERS
  42. //
  43. typedef struct {
  44. ULONGLONG Vcn;
  45. ULONGLONG Lcn;
  46. } MAPPING_PAIR, *PMAPPING_PAIR;
  47. //
  48. // This is the definition for the buffer that FSCTL_GET_RETRIEVAL_POINTERS
  49. // returns. It consists of a header followed by mapping pairs
  50. //
  51. typedef struct {
  52. ULONG NumberOfPairs;
  53. ULONGLONG StartVcn;
  54. MAPPING_PAIR Pair[1];
  55. } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
  56. //
  57. // This is the definition of the buffer that FSCTL_GET_VOLUME_BITMAP
  58. // returns. It consists of a header followed by the actual bitmap data
  59. //
  60. typedef struct {
  61. ULONGLONG StartLcn;
  62. ULONGLONG ClustersToEndOfVol;
  63. BYTE Map[1];
  64. } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR; 
  65. //
  66. // This is the definition for the data structure that is passed in to
  67. // FSCTL_MOVE_FILE
  68. //
  69. typedef struct {
  70.      HANDLE            FileHandle; 
  71.      ULONG             Reserved;   
  72.      LARGE_INTEGER     StartVcn; 
  73.      LARGE_INTEGER     TargetLcn;
  74.      ULONG             NumVcns; 
  75.      ULONG             Reserved1;
  76. } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
  77. //--------------------------------------------------------------------
  78. //     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
  79. //--------------------------------------------------------------------
  80. //
  81. // Prototype for NtFsControlFile and data structures
  82. // used in its definition
  83. //
  84. //
  85. // Io Status block (see NTDDK.H)
  86. //
  87. typedef struct _IO_STATUS_BLOCK {
  88.     NTSTATUS Status;
  89.     ULONG Information;
  90. } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
  91. //
  92. // Apc Routine (see NTDDK.H)
  93. //
  94. typedef VOID (*PIO_APC_ROUTINE) (
  95. PVOID ApcContext,
  96. PIO_STATUS_BLOCK IoStatusBlock,
  97. ULONG Reserved
  98. );
  99. //
  100. // The undocumented NtFsControlFile
  101. //
  102. // This function is used to send File System Control (FSCTL)
  103. // commands into file system drivers. Its definition is 
  104. // in ntdll.dll (ntdll.lib), a file shipped with the NTDDK.
  105. //
  106. NTSTATUS (__stdcall *NtFsControlFile)( 
  107. HANDLE FileHandle,
  108. HANDLE Event, // optional
  109. PIO_APC_ROUTINE ApcRoutine, // optional
  110. PVOID ApcContext, // optional
  111. PIO_STATUS_BLOCK IoStatusBlock,
  112. ULONG FsControlCode,
  113. PVOID InputBuffer, // optional
  114. ULONG InputBufferLength,
  115. PVOID OutputBuffer, // optional
  116. ULONG OutputBufferLength
  117. );