evntcons.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /**
  2. * This file is part of the mingw-w64 runtime package.
  3. * No warranty is given; refer to the file DISCLAIMER within this package.
  4. */
  5. #ifndef _EVNTCONS_H_
  6. #define _EVNTCONS_H_
  7. #include <winapifamily.h>
  8. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  9. #include <wmistr.h>
  10. #include <evntrace.h>
  11. #include <evntprov.h>
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #define EVENT_HEADER_EXT_TYPE_RELATED_ACTIVITYID 0x0001
  16. #define EVENT_HEADER_EXT_TYPE_SID 0x0002
  17. #define EVENT_HEADER_EXT_TYPE_TS_ID 0x0003
  18. #define EVENT_HEADER_EXT_TYPE_INSTANCE_INFO 0x0004
  19. #define EVENT_HEADER_EXT_TYPE_STACK_TRACE32 0x0005
  20. #define EVENT_HEADER_EXT_TYPE_STACK_TRACE64 0x0006
  21. #define EVENT_HEADER_EXT_TYPE_PEBS_INDEX 0x0007
  22. #define EVENT_HEADER_EXT_TYPE_PMC_COUNTERS 0x0008
  23. #define EVENT_HEADER_EXT_TYPE_MAX 0x0009
  24. #define EVENT_HEADER_PROPERTY_XML 0x0001
  25. #define EVENT_HEADER_PROPERTY_FORWARDED_XML 0x0002
  26. #define EVENT_HEADER_PROPERTY_LEGACY_EVENTLOG 0x0004
  27. #define EVENT_HEADER_FLAG_EXTENDED_INFO 0x0001
  28. #define EVENT_HEADER_FLAG_PRIVATE_SESSION 0x0002
  29. #define EVENT_HEADER_FLAG_STRING_ONLY 0x0004
  30. #define EVENT_HEADER_FLAG_TRACE_MESSAGE 0x0008
  31. #define EVENT_HEADER_FLAG_NO_CPUTIME 0x0010
  32. #define EVENT_HEADER_FLAG_32_BIT_HEADER 0x0020
  33. #define EVENT_HEADER_FLAG_64_BIT_HEADER 0x0040
  34. #define EVENT_HEADER_FLAG_CLASSIC_HEADER 0x0100
  35. #define EVENT_HEADER_FLAG_PROCESSOR_INDEX 0x0200
  36. #define EVENT_ENABLE_PROPERTY_SID 0x00000001
  37. #define EVENT_ENABLE_PROPERTY_TS_ID 0x00000002
  38. #define EVENT_ENABLE_PROPERTY_STACK_TRACE 0x00000004
  39. #define PROCESS_TRACE_MODE_REAL_TIME 0x00000100
  40. #define PROCESS_TRACE_MODE_RAW_TIMESTAMP 0x00001000
  41. #define PROCESS_TRACE_MODE_EVENT_RECORD 0x10000000
  42. typedef enum {
  43. EventSecuritySetDACL,
  44. EventSecuritySetSACL,
  45. EventSecurityAddDACL,
  46. EventSecurityAddSACL,
  47. EventSecurityMax
  48. } EVENTSECURITYOPERATION;
  49. #ifndef EVENT_HEADER_EXTENDED_DATA_ITEM_DEF
  50. #define EVENT_HEADER_EXTENDED_DATA_ITEM_DEF
  51. typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM {
  52. USHORT Reserved1;
  53. USHORT ExtType;
  54. __C89_NAMELESS struct {
  55. USHORT Linkage : 1;
  56. USHORT Reserved2 : 15;
  57. };
  58. USHORT DataSize;
  59. ULONGLONG DataPtr;
  60. } EVENT_HEADER_EXTENDED_DATA_ITEM,*PEVENT_HEADER_EXTENDED_DATA_ITEM;
  61. #endif
  62. typedef struct _EVENT_EXTENDED_ITEM_INSTANCE {
  63. ULONG InstanceId;
  64. ULONG ParentInstanceId;
  65. GUID ParentGuid;
  66. } EVENT_EXTENDED_ITEM_INSTANCE,*PEVENT_EXTENDED_ITEM_INSTANCE;
  67. typedef struct _EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID {
  68. GUID RelatedActivityId;
  69. } EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID,*PEVENT_EXTENDED_ITEM_RELATED_ACTIVITYID;
  70. typedef struct _EVENT_EXTENDED_ITEM_TS_ID {
  71. ULONG SessionId;
  72. } EVENT_EXTENDED_ITEM_TS_ID,*PEVENT_EXTENDED_ITEM_TS_ID;
  73. typedef struct _EVENT_EXTENDED_ITEM_STACK_TRACE32 {
  74. ULONG64 MatchId;
  75. ULONG Address[ANYSIZE_ARRAY];
  76. } EVENT_EXTENDED_ITEM_STACK_TRACE32,*PEVENT_EXTENDED_ITEM_STACK_TRACE32;
  77. typedef struct _EVENT_EXTENDED_ITEM_STACK_TRACE64 {
  78. ULONG64 MatchId;
  79. ULONG64 Address[ANYSIZE_ARRAY];
  80. } EVENT_EXTENDED_ITEM_STACK_TRACE64,*PEVENT_EXTENDED_ITEM_STACK_TRACE64;
  81. typedef struct _EVENT_EXTENDED_ITEM_PEBS_INDEX {
  82. ULONG64 PebsIndex;
  83. } EVENT_EXTENDED_ITEM_PEBS_INDEX,*PEVENT_EXTENDED_ITEM_PEBS_INDEX;
  84. typedef struct _EVENT_EXTENDED_ITEM_PMC_COUNTERS {
  85. ULONG64 Counter[ANYSIZE_ARRAY];
  86. } EVENT_EXTENDED_ITEM_PMC_COUNTERS,*PEVENT_EXTENDED_ITEM_PMC_COUNTERS;
  87. #ifndef EVENT_HEADER_DEF
  88. #define EVENT_HEADER_DEF
  89. typedef struct _EVENT_HEADER {
  90. USHORT Size;
  91. USHORT HeaderType;
  92. USHORT Flags;
  93. USHORT EventProperty;
  94. ULONG ThreadId;
  95. ULONG ProcessId;
  96. LARGE_INTEGER TimeStamp;
  97. GUID ProviderId;
  98. EVENT_DESCRIPTOR EventDescriptor;
  99. __C89_NAMELESS union {
  100. __C89_NAMELESS struct {
  101. ULONG KernelTime;
  102. ULONG UserTime;
  103. } DUMMYSTRUCTNAME;
  104. ULONG64 ProcessorTime;
  105. } DUMMYUNIONNAME;
  106. GUID ActivityId;
  107. } EVENT_HEADER,*PEVENT_HEADER;
  108. #endif
  109. #ifndef EVENT_RECORD_DEF
  110. #define EVENT_RECORD_DEF
  111. typedef struct _EVENT_RECORD {
  112. EVENT_HEADER EventHeader;
  113. ETW_BUFFER_CONTEXT BufferContext;
  114. USHORT ExtendedDataCount;
  115. USHORT UserDataLength;
  116. PEVENT_HEADER_EXTENDED_DATA_ITEM ExtendedData;
  117. PVOID UserData;
  118. PVOID UserContext;
  119. } EVENT_RECORD,*PEVENT_RECORD;
  120. typedef const EVENT_RECORD *PCEVENT_RECORD;
  121. #endif
  122. #if WINVER >= 0x0600
  123. ULONG EVNTAPI EventAccessControl (LPGUID Guid, ULONG Operation, PSID Sid, ULONG Rights, BOOLEAN AllowOrDeny);
  124. ULONG EVNTAPI EventAccessQuery (LPGUID Guid, PSECURITY_DESCRIPTOR Buffer, PULONG BufferSize);
  125. ULONG EVNTAPI EventAccessRemove (LPGUID Guid);
  126. #endif
  127. FORCEINLINE ULONG GetEventProcessorIndex (PCEVENT_RECORD er) {
  128. return ((er->EventHeader.Flags & EVENT_HEADER_FLAG_PROCESSOR_INDEX) != 0 ? er->BufferContext.ProcessorIndex : er->BufferContext.ProcessorNumber);
  129. }
  130. #ifdef __cplusplus
  131. }
  132. #endif
  133. #endif
  134. #endif