nmexpert.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //=============================================================================
  2. //  Microsoft (R) Network Monitor (tm). 
  3. //  Copyright (C) 1997-1999. All rights reserved.
  4. //
  5. //  MODULE: NMExpert.h
  6. //
  7. //  Structures and definitions needed in Experts
  8. //=============================================================================
  9. #ifndef _NMEXPERT_H_
  10. #define _NMEXPERT_H_
  11. // we say zero length arrays are just fine...
  12. #pragma warning(disable:4200)
  13. // all of the stuff that follows is not C++ specific
  14. #ifdef __cplusplus
  15. extern "C"
  16. {
  17. #endif // __cplusplus
  18. #define EXPERTSTRINGLENGTH  MAX_PATH
  19. #define EXPERTGROUPNAMELENGTH 25
  20. // HEXPERTKEY tracks running experts. It is only used by experts for 
  21. // self reference. It refers to a RUNNINGEXPERT (an internal only structure)..
  22. typedef LPVOID HEXPERTKEY;
  23. typedef HEXPERTKEY * PHEXPERTKEY;
  24. // HEXPERT tracks loaded experts. It refers to an EXPERTENUMINFO.
  25. typedef LPVOID HEXPERT;
  26. typedef HEXPERT * PHEXPERT;
  27. // HRUNNINGEXPERT tracks a currently running expert.
  28. // It refers to a RUNNINGEXPERT (an internal only structure).
  29. typedef LPVOID HRUNNINGEXPERT;
  30. typedef HRUNNINGEXPERT * PHRUNNINGEXPERT;
  31. // HGROUP tracks a group. It refers to a GROUPLIST (an internal only structure).
  32. typedef LPVOID HGROUP;
  33. typedef HGROUP * PHGROUP;
  34. // forward ref
  35. typedef struct _EXPERTENUMINFO * PEXPERTENUMINFO;
  36. typedef struct _EXPERTCONFIG   * PEXPERTCONFIG;
  37. typedef struct _EXPERTSTARTUPINFO * PEXPERTSTARTUPINFO;
  38. // Definitions needed to call experts
  39. #define EXPERTENTRY_REGISTER      "Register"
  40. #define EXPERTENTRY_CONFIGURE     "Configure"
  41. #define EXPERTENTRY_RUN           "Run"
  42. typedef BOOL (WINAPI * PEXPERTREGISTERPROC)( PEXPERTENUMINFO );
  43. typedef BOOL (WINAPI * PEXPERTCONFIGPROC)  ( HEXPERTKEY, PEXPERTCONFIG*, PEXPERTSTARTUPINFO, DWORD, HWND );
  44. typedef BOOL (WINAPI * PEXPERTRUNPROC)     ( HEXPERTKEY, PEXPERTCONFIG, PEXPERTSTARTUPINFO, DWORD, HWND);
  45. // EXPERTENUMINFO describes an expert that NetMon has loaded from disk. 
  46. // It does not include any configuration or runtime information.
  47. typedef struct _EXPERTENUMINFO
  48. {
  49.     char      szName[EXPERTSTRINGLENGTH];
  50.     char      szVendor[EXPERTSTRINGLENGTH];
  51.     char      szDescription[EXPERTSTRINGLENGTH];
  52.     DWORD     Version;    
  53.     DWORD     Flags;
  54.     char      szDllName[MAX_PATH];      // private, dont' touch
  55.     HEXPERT   hExpert;                  // private, don't touch
  56.     HINSTANCE hModule;                  // private, don't touch
  57.     PEXPERTREGISTERPROC pRegisterProc;  // private, don't touch
  58.     PEXPERTCONFIGPROC   pConfigProc;    // private, don't touch
  59.     PEXPERTRUNPROC      pRunProc;       // private, don't touch
  60. } EXPERTENUMINFO;
  61. typedef EXPERTENUMINFO * PEXPERTENUMINFO;
  62. #define EXPERT_ENUM_FLAG_CONFIGURABLE                0x0001   // Expert dll contains configure export function 
  63. #define EXPERT_ENUM_FLAG_VIEWER_PRIVATE              0x0002   // Expert dll wants private viewer (default is shared)
  64. #define EXPERT_ENUM_FLAG_NO_VIEWER                   0x0004   // Expert dll does not want an associated viewer
  65. #define EXPERT_ENUM_FLAG_ADD_ME_TO_RMC_IN_SUMMARY    0x0010   // Expert dll wants to be on the RMC menu in the summary pane
  66. #define EXPERT_ENUM_FLAG_ADD_ME_TO_RMC_IN_DETAIL     0x0020   // Expert dll wants to be on the RMC menu in the detail pane
  67. // GROUPINFO
  68. // This is an accociation between a group name and its handle.
  69. typedef struct
  70. {
  71.     char        szGroupName[EXPERTGROUPNAMELENGTH+1];
  72.     HGROUP  hGroup;
  73. } GROUPINFO;
  74. typedef GROUPINFO * PGROUPINFO;
  75. // EXPERTSTARTUPINFO
  76. // This gives the Expert an indication of where he came from.
  77. typedef struct _EXPERTSTARTUPINFO
  78. {
  79.     DWORD           Flags;
  80.     HCAPTURE        hCapture;
  81.     char            szCaptureFile[MAX_PATH];
  82.     DWORD           dwFrameNumber;
  83.     HPROTOCOL       hProtocol;
  84.     // note: the expert launch code has locked the starting frame
  85.     // so this data will not go out of scope.
  86.     LPPROPERTYINST  lpPropertyInst;
  87.     // if the lpPropertyInst->PropertyInfo->DataQualifier == PROP_QUAL_FLAGS
  88.     // the the following structure is filled in
  89.     struct
  90.     {
  91.         BYTE    BitNumber;
  92.         BOOL    bOn;
  93.     } sBitfield;
  94. } EXPERTSTARTUPINFO;
  95. // EXPERTCONFIG
  96. // This is a generic holder for an Expert's config data.
  97. typedef struct  _EXPERTCONFIG
  98. {
  99.     DWORD   RawConfigLength;
  100.     BYTE    RawConfigData[0];
  101. } EXPERTCONFIG;
  102. typedef EXPERTCONFIG * PEXPERTCONFIG;
  103. // CONFIGUREDEXPERT
  104. // This structure associates a loaded expert with its configuration data.
  105. typedef struct
  106. {
  107.     HEXPERT         hExpert;
  108.     DWORD           StartupFlags;
  109.     PEXPERTCONFIG   pConfig;
  110. } CONFIGUREDEXPERT;
  111. typedef CONFIGUREDEXPERT * PCONFIGUREDEXPERT;
  112. // EXPERTFRAMEDESCRIPTOR - passed back to the expert to fulfil the request for a frame
  113. typedef struct
  114. {
  115.     DWORD                FrameNumber;         // Frame Number.
  116.     HFRAME               hFrame;              // Handle to the frame.
  117.     ULPFRAME             pFrame;              // pointer to frame.
  118.     LPRECOGNIZEDATATABLE lpRecognizeDataTable;// pointer to table of RECOGNIZEDATA structures.
  119.     LPPROPERTYTABLE      lpPropertyTable;     // pointer to property table.
  120. } EXPERTFRAMEDESCRIPTOR;
  121. typedef EXPERTFRAMEDESCRIPTOR * LPEXPERTFRAMEDESCRIPTOR;
  122. // other definitions
  123. #define GET_SPECIFIED_FRAME              0
  124. #define GET_FRAME_NEXT_FORWARD           1
  125. #define GET_FRAME_NEXT_BACKWARD          2
  126. #define FLAGS_DEFER_TO_UI_FILTER       0x1
  127. #define FLAGS_ATTACH_PROPERTIES        0x2
  128. // EXPERTSTATUSENUM
  129. // gives the possible values for the status field in the EXPERTSTATUS structure
  130. typedef enum
  131. {
  132.     EXPERTSTATUS_INACTIVE = 0,
  133.     EXPERTSTATUS_STARTING,
  134.     EXPERTSTATUS_RUNNING,
  135.     EXPERTSTATUS_PROBLEM,
  136.     EXPERTSTATUS_ABORTED,  
  137.     EXPERTSTATUS_DONE,  
  138. } EXPERTSTATUSENUMERATION;
  139. // EXPERTSUBSTATUS bitfield 
  140. // gives the possible values for the substatus field in the EXPERTSTATUS structure
  141. #define  EXPERTSUBSTATUS_ABORTED_USER          0x0001   // User aborted expert dll
  142. #define  EXPERTSUBSTATUS_ABORTED_LOAD_FAIL     0x0002   // Netmon could not load expert dll
  143. #define  EXPERTSUBSTATUS_ABORTED_THREAD_FAIL   0x0004   // Netmon could not start dll thread
  144. #define  EXPERTSUBSTATUS_ABORTED_BAD_ENTRY     0x0008   // Netmon could not find expert dll entry point 
  145. // EXPERTSTATUS
  146. // Indicates the current status of a running expert.
  147. typedef struct
  148. {                                                          
  149.     EXPERTSTATUSENUMERATION   Status;
  150.     DWORD                     SubStatus;
  151.     DWORD                     PercentDone;
  152.     DWORD                     Frame; 
  153.     char                      szStatusText[EXPERTSTRINGLENGTH];
  154. } EXPERTSTATUS;
  155. typedef EXPERTSTATUS * PEXPERTSTATUS;               
  156. // EXPERT STARTUP FLAGS
  157. #define EXPERT_STARTUP_FLAG_USE_STARTUP_DATA_OVER_CONFIG_DATA   0x00000001
  158. #ifdef __cplusplus
  159. }
  160. #endif // __cplusplus
  161. // turn this warning back on
  162. #pragma warning(default:4200)
  163. #endif // _NMEXPERT_H_