一个碎片整理程序的实现

来源:互联网 发布:网络视频帧数是多少 编辑:程序博客网 时间:2024/05/22 14:42
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

申明: 代码是网上收集的,原则上只供学习使用

//====================================================================

//

// Defrag.h

//

// Copyright (C) 1997 Mark Russinovich

//

// Header file for defragmentation demonstration program. This file

// includes definitions for defragmentation File System Control

// commands, as well as the undocumented NtFsControl call.

//

//====================================================================

 

//--------------------------------------------------------------------

//                     D E F I N E S

//--------------------------------------------------------------------

 

 

//

// File System Control commands related to defragging

//

#define FSCTL_READ_MFT_RECORD                0x90068

#define FSCTL_GET_VOLUME_BITMAP            0x9006F

#define FSCTL_GET_RETRIEVAL_POINTERS    0x90073

#define FSCTL_MOVE_FILE                            0x90074

 

//

// return code type

//

typedef UINT NTSTATUS;

 

//

// Error codes returned by NtFsControlFile (see NTSTATUS.H)

//

#define STATUS_SUCCESS                          ((NTSTATUS)0x00000000L)

#define STATUS_BUFFER_OVERFLOW           ((NTSTATUS)0x80000005L)

#define STATUS_INVALID_PARAMETER         ((NTSTATUS)0xC000000DL)

#define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS)0xC0000023L)

#define STATUS_ALREADY_COMMITTED         ((NTSTATUS)0xC0000021L)

#define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS)0xC0000010L)

 

 

//--------------------------------------------------------------------

//       F S C T L  S P E C I F I C   T Y P E D E F S 

//--------------------------------------------------------------------

 

 

//

// This is the definition for a VCN/LCN (virtual cluster/logical cluster)

// mapping pair that is returned in the buffer passed to

// FSCTL_GET_RETRIEVAL_POINTERS

//

typedef struct {

      ULONGLONG               Vcn;

      ULONGLONG               Lcn;

} MAPPING_PAIR, *PMAPPING_PAIR;

 

//

// This is the definition for the buffer that FSCTL_GET_RETRIEVAL_POINTERS

// returns. It consists of a header followed by mapping pairs

//

typedef struct {

      ULONG                  NumberOfPairs;

      ULONGLONG               StartVcn;

      MAPPING_PAIR      Pair[1];

} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;

 

 

//

// This is the definition of the buffer that FSCTL_GET_VOLUME_BITMAP

// returns. It consists of a header followed by the actual bitmap data

//

typedef struct {

      ULONGLONG               StartLcn;

      ULONGLONG               ClustersToEndOfVol;

      BYTE                     Map[1];

} BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;

 

 

//

// This is the definition for the data structure that is passed in to

// FSCTL_MOVE_FILE

//

typedef struct {

     HANDLE            FileHandle;

     ULONG             Reserved;  

     LARGE_INTEGER     StartVcn;

     LARGE_INTEGER     TargetLcn;

     ULONG             NumVcns;

     ULONG             Reserved1;    

} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;

 

 

//--------------------------------------------------------------------

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

//--------------------------------------------------------------------

 

//

// Prototype for NtFsControlFile and data structures

// used in its definition

//

 

//

// Io Status block (see NTDDK.H)

//

typedef struct _IO_STATUS_BLOCK {

    NTSTATUS Status;

    ULONG Information;

} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

 

 

//

// Apc Routine (see NTDDK.H)

//

typedef VOID (*PIO_APC_ROUTINE) (

                      PVOID ApcContext,

                      PIO_STATUS_BLOCK IoStatusBlock,

                      ULONG Reserved

                 );

 

 

//

// The undocumented NtFsControlFile

//

// This function is used to send File System Control (FSCTL)

// commands into file system drivers. Its definition is

// in ntdll.dll (ntdll.lib), a file shipped with the NTDDK.

//

NTSTATUS (__stdcall *NtFsControlFile)(

                            HANDLE FileHandle,

                            HANDLE Event,                       // optional

                            PIO_APC_ROUTINE ApcRoutine,          // optional

                            PVOID ApcContext,                 // optional

                            PIO_STATUS_BLOCK IoStatusBlock,   

                            ULONG FsControlCode,

                            PVOID InputBuffer,                 // optional

                            ULONG InputBufferLength,

                            PVOID OutputBuffer,                     // optional

                            ULONG OutputBufferLength

    &n<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击