#pragma autorecover
#pragma classflags(64)
#pragma namespace("\\\\.\\Root\\WMI")

[Dynamic,Guid("{3b7b0b4b-4b01-44b4-a95e-3c755719aebf}"),locale("MS\\0x409")] 
class IIS_Reqmon : EventTrace
{
  [DefineValues{"ETW_IIS_MONITOR_ON_DEMAND"},Values{"monitorOnDemand"},ValueMap{"0x00000001"}] uint32 Flags;
};

[Dynamic,Guid("{8806a3e2-59b1-4904-8837-92c546795109}"),EventVersion(1),DisplayName("IISRequestMonitor"),locale("MS\\0x409")] 
class IIS_ReqMonEvent : IIS_Reqmon
{
};

[Dynamic,EventType(1)] 
class IIS_ReqMonEventsStart : IIS_ReqMonEvent
{
  [WmiDataId(1),read] uint32 WorkerProcessPID;
  [WmiDataId(2),read] uint32 RequestsServed;
  [WmiDataId(3),read] uint32 TotalWorkerThreads;
  [WmiDataId(4),read] uint32 AvailableWorkerThreads;
  [WmiDataId(5),StringTermination("NullTerminated"),format("w"),read] string AppPoolId;
  [WmiDataId(6),read] uint64 ProcessStartedTime;
};

[Dynamic,EventType(2)] 
class IIS_ReqMonEventsStop : IIS_ReqMonEvent
{
  [WmiDataId(1),read] uint32 WorkerProcessPID;
};

[Dynamic,EventType(3)] 
class IISRequestInProgress : IIS_ReqMonEvent
{
  [WmiDataId(1),extension("Guid"),read] object ContextId;
  [WmiDataId(2),read] uint32 SiteId;
  [WmiDataId(3),StringTermination("NullTerminated"),format("a"),read] string LocalIPAddress;
  [WmiDataId(4),read] uint16 LocalPort;
  [WmiDataId(5),StringTermination("NullTerminated"),format("w"),read] string HostName;
  [WmiDataId(6),StringTermination("NullTerminated"),format("w"),read] string AppPoolId;
  [WmiDataId(7),read] uint64 ConnId;
  [WmiDataId(8),read] uint32 ProcId;
  [WmiDataId(9),StringTermination("NullTerminated"),read] string ClientIP;
  [WmiDataId(10),StringTermination("NullTerminated"),read] string ReqVerb;
  [WmiDataId(11),StringTermination("NullTerminated"),read] string ReqUrl;
  [WmiDataId(12),TRACING_NREQ_STATE_INIT,TRACING_NREQ_STATE_NEW_REQUEST_COMPLETED,TRACING_NREQ_STATE_PROCESSING,TRACING_NREQ_STATE_SEND_SYNC,TRACING_NREQ_STATE_SEND_ASYNC,TRACING_NREQ_STATE_SEND_ASYNC_COMPLETED,TRACING_NREQ_STATE_RECEIVE_SYNC,TRACING_NREQ_STATE_RECEIVE_ASYNC,TRACING_NREQ_STATE_RECEIVE_ASYNC_COMPLETED,TRACING_NREQ_STATE_RECEIVE_CLIENT_CERT_SYNC,TRACING_NREQ_STATE_RECEIVE_CLIENT_CERT_ASYNC,TRACING_NREQ_STATE_RECEIVE_CLIENT_CERT_ASYNC_COMPLETED,DefineValues{"Init", "NewRequest", "Processing", "Send Sync", "Send Async", "Send Async Completed", "Receive Sync", "Receive Async", "Receive Async Completed", "Receive Client Cert Sync", "Receive Client Cert Async ", "Receive Client Cert Async completed"},Values{"Init", "NewRequest", "Processing", "Send Sync", "Send Async", "Send Async Completed", "Receive Sync", "Receive Async", "Receive Async Completed", "Receive Client Cert Sync", "Receive Client Cert Async ", "Receive Client Cert Async completed"},ValueMap{"0x00000000", "0x00000001", "0x00000002", "0x00000003", "0x00000004", "0x00000005", "0x00000006", "0x00000007", "0x00000008", "0x00000009", "0x0000000A", "0x0000000B"},ValueType("index"),read] uint32 ProcessingState;
  [WmiDataId(13),read] uint64 TicksElapsed;
  [WmiDataId(14),read] uint64 TicksFromLastState;
};
