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

文件操作

开发平台:

Visual C++

  1. //======================================================================
  2. // 
  3. //  Filemon.h
  4. //
  5. //  Copyright (C) 1996-1997 Mark Russinovich and Bryce Cogswell
  6. //
  7. //======================================================================
  8. // 
  9. // NT Final Build number
  10. //
  11. #define NT4FINAL        1381
  12. //
  13. // Maximum amount of memory grabbed 
  14. //
  15. #define MAXMEMORY       1000000
  16. //
  17. // Maximum path length of pathname. This is larger than Win32 maxpath
  18. // because network drives have leading paths
  19. //
  20. #define MAXPATHLEN      1024
  21. //
  22. // Length of process name (rounded up to next DWORD)
  23. //
  24. #define PROCNAMELEN     20
  25. //
  26. // Maximum length of NT process name
  27. //
  28. #define NT_PROCNAMELEN  16
  29. //
  30. // Maximum seperate filter components 
  31. //
  32. #define MAXFILTERS      64
  33. //
  34. // Length of buffer for error string
  35. //
  36. #define ERRORLEN        64
  37. //
  38. // Structure for device specific data that keeps track of what
  39. // drive and what filesystem device are hooked 
  40. //
  41. typedef struct {
  42.    FILE_SYSTEM_TYPE Type;
  43.    PDEVICE_OBJECT   FileSystem;
  44.    unsigned         LogicalDrive;
  45. } HOOK_EXTENSION, *PHOOK_EXTENSION;         
  46. //
  47. // Structure for the fileobject/name hash table
  48. //
  49. typedef struct _nameentry {
  50.    PFILE_OBJECT FileObject;
  51.    PCHAR FullPathName;
  52.    struct _nameentry  *Next;
  53. } HASH_ENTRY, *PHASH_ENTRY;
  54. //
  55. // Structure for a completion routine work item
  56. //
  57. typedef struct _filemonwork {
  58.     WORK_QUEUE_ITEM WorkItem;
  59.     ULONG          Sequence;
  60.     LARGE_INTEGER  TimeResult;
  61.     CHAR           ErrString[ERRORLEN];
  62. } FILEMON_WORK, *PFILEMON_WORK;
  63. //
  64. // Number of hash buckets in the hash table
  65. //
  66. #define NUMHASH 0x100
  67. //
  68. // Hash function. Basically chops the low few bits of the file object
  69. //
  70. #define HASHOBJECT(_fileobject) (((ULONG)_fileobject)>>5)%NUMHASH
  71. //
  72. // Structure for keeping linked lists of output buffers
  73. //
  74. typedef struct _store {
  75.     ULONG           Len;
  76.     struct _store * Next;
  77.     CHAR            Data[ MAX_STORE ];
  78. } STORE_BUF, *PSTORE_BUF;
  79. //
  80. // A check to see if a fastio table extends to a specific entry
  81. //
  82. #define FASTIOPRESENT( _hookExt, _call )                                                      
  83.     ((((ULONG)&_hookExt->FileSystem->DriverObject->FastIoDispatch->_call -                    
  84.        (ULONG) &_hookExt->FileSystem->DriverObject->FastIoDispatch->SizeOfFastIoDispatch <    
  85.        (ULONG) _hookExt->FileSystem->DriverObject->FastIoDispatch->SizeOfFastIoDispatch )) && 
  86.       hookExt->FileSystem->DriverObject->FastIoDispatch->_call )
  87. //
  88. // Time stamp start macro
  89. //
  90. #define TIMESTAMPSTART()                                                       
  91.         if( TimeIsDuration ) timeStampStart = KeQueryPerformanceCounter(NULL); 
  92.         else                 KeQuerySystemTime( &timeResult )
  93. #define TIMESTAMPSTOP()                                                        
  94.         if( TimeIsDuration ) {                                                 
  95.             timeStampComplete = KeQueryPerformanceCounter(NULL);               
  96.             timeResult.QuadPart = timeStampComplete.QuadPart - timeStampStart.QuadPart; 
  97.         }
  98. //
  99. // Macro for getting the path name
  100. //
  101. #define GETPATHNAME(_IsCreate)                                                  
  102.         fullPathName = ExAllocatePool( NonPagedPool, MAXPATHLEN );              
  103.         if( fullPathName ) {                                                    
  104.             FilemonGetFullPath( _IsCreate, FileObject, hookExt, fullPathName ); 
  105.         }   
  106. #define FREEPATHNAME()                                   
  107.         if ( fullPathName ) ExFreePool( fullPathName )
  108. //
  109. // Undocumented ntoskrnl variable
  110. //
  111. extern PSHORT           NtBuildNumber;
  112. //
  113. // Undocumented ntoskrnl function
  114. //
  115. VOID NTAPI ProbeForWrite(PVOID Address, 
  116.                          ULONG Length, 
  117.                          ULONG Alignment );
  118. //
  119. // For the definitions in Winioctl.h
  120. //
  121. #undef DEVICE_TYPE
  122. typedef UCHAR  BYTE;
  123. typedef USHORT WORD;
  124. typedef ULONGLONG DWORDLONG;
  125. typedef ULONG  DWORD;
  126. typedef PVOID SID;
  127. //
  128. // So that we can pick up NT 5.0 IOCTLs in WINIOCTL.h
  129. //
  130. #undef _WIN32_WINNT
  131. #define _WIN32_WINNT 0x0500
  132. //
  133. // Totally undocumented named pipe file system control codes
  134. //
  135. #define FSCTL_PIPE_ASSIGN_EVENT          0x110000
  136. #define FSCTL_PIPE_DISCONNECT            0x110004
  137. #define FSCTL_PIPE_QUERY_EVENT           0x110010
  138. #define FSCTL_PIPE_LISTEN                0x110008
  139. #define FSCTL_PIPE_IMPERSONATE           0x11001C
  140. #define FSCTL_PIPE_WAIT                  0x110018
  141. #define FSCTL_PIPE_QUERY_CLIENT_PROCESS  0x110024
  142. #define FSCTL_PIPE_SET_CLIENT_PROCESS    0x110020
  143. #define FSCTL_PIPE_PEEK                  0x11400C
  144. #define FSCTL_PIPE_INTERNAL_READ         0x116000
  145. #define FSCTL_PIPE_INTERNAL_WRITE        0x119FF8
  146. #define FSCTL_PIPE_TRANSCEIVE            0x11C017
  147. #define FSCTL_PIPE_INTERNAL_TRANSCEIVE   0x11DFFF
  148. //
  149. // Undocumented mail slot file system controls
  150. //
  151. #define FSCTL_MAILSLOT_PEEK              0xC4003
  152. //
  153. // Named pipe and mail slot prefix names
  154. //
  155. #define NAMED_PIPE_PREFIX                "\\.\Pipe"
  156. #define NAMED_PIPE_PREFIX_LENGTH         (sizeof(NAMED_PIPE_PREFIX)-1)
  157. #define MAIL_SLOT_PREFIX                "\\.\MailSlot"
  158. #define MAIL_SLOT_PREFIX_LENGTH         (sizeof(MAIL_SLOT_PREFIX)-1)