WPRControlProfiles 架构

Windows Performance Recorder (WPR) 记录配置文件 WPRControlProfiles.xsd 的完整架构如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" xml:lang="en-us">
  <xs:simpleType name="SystemKeywordEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="AllFaults"></xs:enumeration>
      <xs:enumeration value="Alpc"></xs:enumeration>
      <xs:enumeration value="AntiStarvation"></xs:enumeration>
      <xs:enumeration value="CacheFlush"></xs:enumeration>
      <xs:enumeration value="CC"></xs:enumeration>
      <xs:enumeration value="ClockInterrupt"></xs:enumeration>
      <xs:enumeration value="ClusterOff"></xs:enumeration>
      <xs:enumeration value="CompactCSwitch"></xs:enumeration>
      <xs:enumeration value="ContiguousMemorygeneration"></xs:enumeration>
      <xs:enumeration value="CpuConfig"></xs:enumeration>
      <xs:enumeration value="CSwitch"></xs:enumeration>
      <xs:enumeration value="DiskIO"></xs:enumeration>
      <xs:enumeration value="DiskIOInit"></xs:enumeration>
      <xs:enumeration value="DPC"></xs:enumeration>
      <xs:enumeration value="DPCQueue"></xs:enumeration>
      <xs:enumeration value="Drivers"></xs:enumeration>
      <xs:enumeration value="FileIO"></xs:enumeration>
      <xs:enumeration value="FileIOInit"></xs:enumeration>
      <xs:enumeration value="Filename"></xs:enumeration>
      <xs:enumeration value="FilterIO"></xs:enumeration>
      <xs:enumeration value="FilterIOFailure"></xs:enumeration>
      <xs:enumeration value="FilterIOFastIO"></xs:enumeration>
      <xs:enumeration value="FilterIOInit"></xs:enumeration>
      <xs:enumeration value="FootPrint"></xs:enumeration>
      <xs:enumeration value="KeClock"></xs:enumeration>
      <xs:enumeration value="Handle"></xs:enumeration>
      <xs:enumeration value="HardFaults"></xs:enumeration>
      <xs:enumeration value="IdealProcessor"></xs:enumeration>
      <xs:enumeration value="IdleStates"></xs:enumeration>
      <xs:enumeration value="InterProcessorInterrupt"></xs:enumeration>
      <xs:enumeration value="Interrupt"></xs:enumeration>
      <xs:enumeration value="KernelQueue"></xs:enumeration>
      <xs:enumeration value="Loader"></xs:enumeration>
      <xs:enumeration value="Memory"></xs:enumeration>
      <xs:enumeration value="MemoryInfo"></xs:enumeration>
      <xs:enumeration value="MemoryInfoWS"></xs:enumeration>
      <xs:enumeration value="NetworkTrace"></xs:enumeration>
      <xs:enumeration value="Object"></xs:enumeration>
      <xs:enumeration value="OpticalIO"></xs:enumeration>
      <xs:enumeration value="OpticalIOInit"></xs:enumeration>
      <xs:enumeration value="Pool"></xs:enumeration>
      <xs:enumeration value="Power"></xs:enumeration>
      <xs:enumeration value="PmcProfile"></xs:enumeration>
      <xs:enumeration value="ProcessCounter"></xs:enumeration>
      <xs:enumeration value="ProcessFreeze"></xs:enumeration>
      <xs:enumeration value="ProcessThread"></xs:enumeration>
      <xs:enumeration value="ReadyThread"></xs:enumeration>
      <xs:enumeration value="ReferenceSet"></xs:enumeration>
      <xs:enumeration value="Registry"></xs:enumeration>
      <xs:enumeration value="RegistryHive"></xs:enumeration>
      <xs:enumeration value="SampledProfile"></xs:enumeration>
      <xs:enumeration value="Session"></xs:enumeration>
      <xs:enumeration value="SpinLock"></xs:enumeration>
      <xs:enumeration value="SplitIO"></xs:enumeration>
      <xs:enumeration value="SynchronizationObjects"></xs:enumeration>
      <xs:enumeration value="SystemCall"></xs:enumeration>
      <xs:enumeration value="ThreadPriority"></xs:enumeration>
      <xs:enumeration value="Timer"></xs:enumeration>
      <xs:enumeration value="VAMap"></xs:enumeration>
      <xs:enumeration value="VirtualAllocation"></xs:enumeration>
      <xs:enumeration value="WakeCounter"></xs:enumeration>
      <xs:enumeration value="WakeDrop"></xs:enumeration>
      <xs:enumeration value="WakeEvent"></xs:enumeration>
      <xs:enumeration value="WDFDPC"></xs:enumeration>
      <xs:enumeration value="WDFInterrupt"></xs:enumeration>
      <xs:enumeration value="HiberRundown"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SystemStackEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="AlpcClosePort"></xs:enumeration>
      <xs:enumeration value="AlpcConnectFail"></xs:enumeration>
      <xs:enumeration value="AlpcConnectRequest"></xs:enumeration>
      <xs:enumeration value="AlpcConnectSuccess"></xs:enumeration>
      <xs:enumeration value="AlpcReceiveMessage"></xs:enumeration>
      <xs:enumeration value="AlpcSendMessage"></xs:enumeration>
      <xs:enumeration value="AlpcUnwait"></xs:enumeration>
      <xs:enumeration value="AlpcWaitForNewMessage"></xs:enumeration>
      <xs:enumeration value="AlpcWaitForReply"></xs:enumeration>
      <xs:enumeration value="CcCanIWriteFail"></xs:enumeration>
      <xs:enumeration value="CcFlushCache"></xs:enumeration>
      <xs:enumeration value="CcFlushSection"></xs:enumeration>
      <xs:enumeration value="CcLazyWriteScan"></xs:enumeration>
      <xs:enumeration value="CcReadAhead"></xs:enumeration>
      <xs:enumeration value="CcWorkitemComplete"></xs:enumeration>
      <xs:enumeration value="CcWorkitemDequeue"></xs:enumeration>
      <xs:enumeration value="CcWorkitemEnqueue"></xs:enumeration>
      <xs:enumeration value="CcWriteBehind"></xs:enumeration>
      <xs:enumeration value="ContiguousMemoryGeneration"></xs:enumeration>
      <xs:enumeration value="CacheFlush"></xs:enumeration>
      <xs:enumeration value="CSwitch"></xs:enumeration>
      <xs:enumeration value="DiskFlushInit"></xs:enumeration>
      <xs:enumeration value="DiskReadInit"></xs:enumeration>
      <xs:enumeration value="DiskWriteInit"></xs:enumeration>
      <xs:enumeration value="DpcEnqueue"></xs:enumeration>
      <xs:enumeration value="DpcExecute"></xs:enumeration>
      <xs:enumeration value="ExecutiveResource"></xs:enumeration>
      <xs:enumeration value="FileCleanup"></xs:enumeration>
      <xs:enumeration value="FileClose"></xs:enumeration>
      <xs:enumeration value="FileCreate"></xs:enumeration>
      <xs:enumeration value="FileDelete"></xs:enumeration>
      <xs:enumeration value="FileDirEnum"></xs:enumeration>
      <xs:enumeration value="FileDirNotify"></xs:enumeration>
      <xs:enumeration value="FileFlush"></xs:enumeration>
      <xs:enumeration value="FileFSCTL"></xs:enumeration>
      <xs:enumeration value="FileOpEnd"></xs:enumeration>
      <xs:enumeration value="FileQueryInformation"></xs:enumeration>
      <xs:enumeration value="FileRead"></xs:enumeration>
      <xs:enumeration value="FileRename"></xs:enumeration>
      <xs:enumeration value="FileSetInformation"></xs:enumeration>
      <xs:enumeration value="FileWrite"></xs:enumeration>
      <xs:enumeration value="HandleCreate"></xs:enumeration>
      <xs:enumeration value="HandleClose"></xs:enumeration>
      <xs:enumeration value="HandleDuplicate"></xs:enumeration>
      <xs:enumeration value="HardFault"></xs:enumeration>
      <xs:enumeration value="HeapAllocation"></xs:enumeration>
      <xs:enumeration value="HeapCreate"></xs:enumeration>
      <xs:enumeration value="HeapDestroy"></xs:enumeration>
      <xs:enumeration value="HeapFree"></xs:enumeration>
      <xs:enumeration value="HeapRangeCreate"></xs:enumeration>
      <xs:enumeration value="HeapRangeDestroy"></xs:enumeration>
      <xs:enumeration value="HeapRangeRelease"></xs:enumeration>
      <xs:enumeration value="HeapRangeReserve"></xs:enumeration>
      <xs:enumeration value="HeapReallocation"></xs:enumeration>
      <xs:enumeration value="ImageLoad"></xs:enumeration>
      <xs:enumeration value="ImageUnload"></xs:enumeration>
      <xs:enumeration value="InterProcessorInterrupt"></xs:enumeration>
      <xs:enumeration value="KernelQueueEnqueue"></xs:enumeration>
      <xs:enumeration value="KernelQueueDequeue"></xs:enumeration>
      <xs:enumeration value="MapFile"></xs:enumeration>
      <xs:enumeration value="Mark"></xs:enumeration>
      <xs:enumeration value="MiniFilterPreOpInit"></xs:enumeration>
      <xs:enumeration value="MiniFilterPostOpInit"></xs:enumeration>
      <xs:enumeration value="ObjectCreate"></xs:enumeration>
      <xs:enumeration value="ObjectDelete"></xs:enumeration>
      <xs:enumeration value="ObjectReference"></xs:enumeration>
      <xs:enumeration value="ObjectDeReference"></xs:enumeration>
      <xs:enumeration value="PageAccess"></xs:enumeration>
      <xs:enumeration value="PageAccessEx"></xs:enumeration>
      <xs:enumeration value="PagefaultAV"></xs:enumeration>
      <xs:enumeration value="PagefaultCopyOnWrite"></xs:enumeration>
      <xs:enumeration value="PagefaultDemandZero"></xs:enumeration>
      <xs:enumeration value="PagefaultGuard"></xs:enumeration>
      <xs:enumeration value="PagefaultHard"></xs:enumeration>
      <xs:enumeration value="PagefaultTransition"></xs:enumeration>
      <xs:enumeration value="PagefileBackedImageMapping"></xs:enumeration>
      <xs:enumeration value="PagefileMappedSectionCreate"></xs:enumeration>
      <xs:enumeration value="PagefileMappedSectionDelete"></xs:enumeration>
      <xs:enumeration value="PageRangeAccess"></xs:enumeration>
      <xs:enumeration value="PageRangeRelease"></xs:enumeration>
      <xs:enumeration value="PageRelease"></xs:enumeration>
      <xs:enumeration value="PageRemovedfromWorkingSet"></xs:enumeration>
      <xs:enumeration value="PmcInterrupt"></xs:enumeration>
      <xs:enumeration value="PoolAllocation"></xs:enumeration>
      <xs:enumeration value="PoolAllocationSession"></xs:enumeration>
      <xs:enumeration value="PoolFree"></xs:enumeration>
      <xs:enumeration value="PoolFreeSession"></xs:enumeration>
      <xs:enumeration value="PowerDeviceNotify"></xs:enumeration>
      <xs:enumeration value="PowerDeviceNotifyComplete"></xs:enumeration>
      <xs:enumeration value="PowerIdleStateChange"></xs:enumeration>
      <xs:enumeration value="PowerPerfStateChange"></xs:enumeration>
      <xs:enumeration value="PowerPostSleep"></xs:enumeration>
      <xs:enumeration value="PowerPreSleep"></xs:enumeration>
      <xs:enumeration value="PowerSessionCallout"></xs:enumeration>
      <xs:enumeration value="PowerSessionCalloutReturn"></xs:enumeration>
      <xs:enumeration value="PowerSetDevicesState"></xs:enumeration>
      <xs:enumeration value="PowerSetDevicesStateReturn"></xs:enumeration>
      <xs:enumeration value="PowerSetPowerAction"></xs:enumeration>
      <xs:enumeration value="PowerSetPowerActionReturn"></xs:enumeration>
      <xs:enumeration value="PowerThermalConstraint"></xs:enumeration>
      <xs:enumeration value="PopSetUserPresent"></xs:enumeration>
      <xs:enumeration value="ProcessCreate"></xs:enumeration>
      <xs:enumeration value="ProcessDelete"></xs:enumeration>
      <xs:enumeration value="ProcessFreeze"></xs:enumeration>
      <xs:enumeration value="ProcessResume"></xs:enumeration>
      <xs:enumeration value="SampledProfile"></xs:enumeration>
      <xs:enumeration value="SampledProfileSetInterval"></xs:enumeration>
      <xs:enumeration value="ReadyThread"></xs:enumeration>
      <xs:enumeration value="RegistryCloseKey"></xs:enumeration>
      <xs:enumeration value="RegistryCreateKey"></xs:enumeration>
      <xs:enumeration value="RegistryDeleteKey"></xs:enumeration>
      <xs:enumeration value="RegistryDeleteValue"></xs:enumeration>
      <xs:enumeration value="RegistryEnumerateKey"></xs:enumeration>
      <xs:enumeration value="RegistryEnumerateValueKey"></xs:enumeration>
      <xs:enumeration value="RegistryFlush"></xs:enumeration>
      <xs:enumeration value="RegistryKcbCreate"></xs:enumeration>
      <xs:enumeration value="RegistryKcbDelete"></xs:enumeration>
      <xs:enumeration value="RegistryOpenKey"></xs:enumeration>
      <xs:enumeration value="RegistryQueryKey"></xs:enumeration>
      <xs:enumeration value="RegistryQueryMultipleValue"></xs:enumeration>
      <xs:enumeration value="RegistryQuerySecurity"></xs:enumeration>
      <xs:enumeration value="RegistryQueryValue"></xs:enumeration>
      <xs:enumeration value="RegistrySetInformation"></xs:enumeration>
      <xs:enumeration value="RegistrySetSecurity"></xs:enumeration>
      <xs:enumeration value="RegistrySetValue"></xs:enumeration>
      <xs:enumeration value="RegistryVirtualize"></xs:enumeration>
      <xs:enumeration value="RegHiveInit"></xs:enumeration>
      <xs:enumeration value="RegHiveDestroy"></xs:enumeration>
      <xs:enumeration value="RegHiveLink"></xs:enumeration>
      <xs:enumeration value="RegHiveDirty"></xs:enumeration>
      <xs:enumeration value="SplitIO"></xs:enumeration>
      <xs:enumeration value="SystemCallEnter"></xs:enumeration>
      <xs:enumeration value="SystemCallExit"></xs:enumeration>
      <xs:enumeration value="ThreadCreate"></xs:enumeration>
      <xs:enumeration value="ThreadDCEnd"></xs:enumeration>
      <xs:enumeration value="ThreadDCStart"></xs:enumeration>
      <xs:enumeration value="ThreadDelete"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCallbackCancel"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCallbackDequeue"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCallbackEnqueue"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCallbackStart"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCallbackStop"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCancelNtTimer"></xs:enumeration>
      <xs:enumeration value="ThreadPoolClose"></xs:enumeration>
      <xs:enumeration value="ThreadPoolCreate"></xs:enumeration>
      <xs:enumeration value="ThreadPoolSetMaxThreads"></xs:enumeration>
      <xs:enumeration value="ThreadPoolSetMinThreads"></xs:enumeration>
      <xs:enumeration value="ThreadPoolSetNtTimer"></xs:enumeration>
      <xs:enumeration value="ThreadPoolTimerSet"></xs:enumeration>
      <xs:enumeration value="ThreadPoolTimerCancelled"></xs:enumeration>
      <xs:enumeration value="ThreadPoolTimerExpirationBegin"></xs:enumeration>
      <xs:enumeration value="ThreadPoolTimerExpirationEnd"></xs:enumeration>
      <xs:enumeration value="ThreadPoolTimerExpiration"></xs:enumeration>
      <xs:enumeration value="ThreadSetBasePriority"></xs:enumeration>
      <xs:enumeration value="ThreadSetIdealProcessor"></xs:enumeration>
      <xs:enumeration value="ThreadSetPriority"></xs:enumeration>
      <xs:enumeration value="ThreadSetUserIdealProcessor"></xs:enumeration>
      <xs:enumeration value="TimerPeriodic"></xs:enumeration>
      <xs:enumeration value="TimerOneShot"></xs:enumeration>
      <xs:enumeration value="UnMapFile"></xs:enumeration>
      <xs:enumeration value="VirtualAllocation"></xs:enumeration>
      <xs:enumeration value="VirtualFree"></xs:enumeration>
      <xs:enumeration value="WakeChargeUser"></xs:enumeration>
      <xs:enumeration value="WakeChargeExecution"></xs:enumeration>
      <xs:enumeration value="WakeChargeKernel"></xs:enumeration>
      <xs:enumeration value="WakeChargeInstrumentation"></xs:enumeration>
      <xs:enumeration value="WakeReleaseUser"></xs:enumeration>
      <xs:enumeration value="WakeReleaseExecution"></xs:enumeration>
      <xs:enumeration value="WakeReleaseKernel"></xs:enumeration>
      <xs:enumeration value="WakeReleaseInstrumentation"></xs:enumeration>
      <xs:enumeration value="WakeDropUser"></xs:enumeration>
      <xs:enumeration value="WakeDropExecution"></xs:enumeration>
      <xs:enumeration value="WakeDropKernel"></xs:enumeration>
      <xs:enumeration value="WakeDropInstrumentation"></xs:enumeration>
      <xs:enumeration value="WakeEventUser"></xs:enumeration>
      <xs:enumeration value="WakeEventExecution"></xs:enumeration>
      <xs:enumeration value="WakeEventKernel"></xs:enumeration>
      <xs:enumeration value="WakeEventInstrumentation"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LoggingModeEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="File"></xs:enumeration>
      <xs:enumeration value="Memory"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DetailLevelEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Light"></xs:enumeration>
      <xs:enumeration value="Verbose"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OperationEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Set"></xs:enumeration>
      <xs:enumeration value="Add"></xs:enumeration>
      <xs:enumeration value="Remove"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NameFilterOperationEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Set"></xs:enumeration>
      <xs:enumeration value="Add"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TraceMergePropertiesCustomEventsEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="None"></xs:enumeration>
      <xs:enumeration value="ImageId"></xs:enumeration>
      <xs:enumeration value="BuildInfo"></xs:enumeration>
      <xs:enumeration value="VolumeMapping"></xs:enumeration>
      <xs:enumeration value="EventMetadata"></xs:enumeration>
      <xs:enumeration value="PerfTrackMetadata"></xs:enumeration>
      <xs:enumeration value="WinSAT"></xs:enumeration>
      <xs:enumeration value="NetworkInterface"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LastBranchFilterEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ConditionalBranches"></xs:enumeration>
      <xs:enumeration value="NearRelativeCalls"></xs:enumeration>
      <xs:enumeration value="NearIndirectCalls"></xs:enumeration>
      <xs:enumeration value="NearReturns"></xs:enumeration>
      <xs:enumeration value="NearIndirectJumps"></xs:enumeration>
      <xs:enumeration value="FarBranches"></xs:enumeration>
      <xs:enumeration value="Kernel"></xs:enumeration>
      <xs:enumeration value="User"></xs:enumeration>
      <xs:enumeration value="StackMode"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ProcessorTraceCodeModeEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="User"></xs:enumeration>
      <xs:enumeration value="Kernel"></xs:enumeration>
      <xs:enumeration value="UserKernel"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ProcessorTraceBufferSizeEnumeration">
    <xs:restriction base="xs:unsignedByte">
      <xs:enumeration value="4"></xs:enumeration>
      <xs:enumeration value="8"></xs:enumeration>
      <xs:enumeration value="16"></xs:enumeration>
      <xs:enumeration value="32"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="IdType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[^:\s]+"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RundownModeEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="None"></xs:enumeration>
      <xs:enumeration value="Start"></xs:enumeration>
      <xs:enumeration value="Stop"></xs:enumeration>
      <xs:enumeration value="Both"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="SystemKeywordType">
    <xs:attribute name="Value" type="SystemKeywordEnumeration" use="required"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="RundownOnlyMode" type="RundownModeEnumeration" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:simpleType name="SystemCustomKeywordAttributeType">
    <xs:restriction base="xs:string">
      <xs:pattern value="0x[a-fA-F0-9]{1,8}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="HexOrDecValue">
    <xs:restriction base="xs:string">
      <xs:pattern value="(0[xX])?[a-fA-F0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SimpleValueType">
    <xs:restriction base="xs:unsignedShort">
      <xs:minInclusive value="1"></xs:minInclusive>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="SystemCustomKeywordType">
    <xs:attribute name="Value" type="SystemCustomKeywordAttributeType" use="required"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:group name="SystemKeywordsGroup">
    <xs:sequence>
      <xs:element name="Keywords" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Keyword" minOccurs="1" maxOccurs="unbounded" type="SystemKeywordType"></xs:element>
            <xs:element name="CustomKeyword" minOccurs="0" maxOccurs="unbounded" type="SystemCustomKeywordType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="SystemProviderKeywordsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="SystemStackType">
    <xs:attribute name="Value" type="SystemStackEnumeration" use="required"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="CustomStackType">
    <xs:attribute name="Value" type="HexOrDecValue" use="required" />
  </xs:complexType>
  <xs:group name="StacksGroup">
    <xs:sequence>
      <xs:element name="Stacks" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:choice minOccurs="1" maxOccurs="unbounded">
            <xs:element name="Stack" type="SystemStackType" />
            <xs:element name="CustomStack" type="CustomStackType" />
          </xs:choice>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="SystemProviderStacksKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="EventProviderKeywordType">
    <xs:attribute name="Value" type="xs:string" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="EventIdType">
    <xs:attribute name="Value" type="HexOrDecValue" use="required" />
  </xs:complexType>
  <xs:complexType name="EventIdFilterType">
      <xs:sequence>
        <xs:element name="EventId" minOccurs="0" maxOccurs="64" type="EventIdType"></xs:element>
      </xs:sequence>
    <xs:attribute name="FilterIn" type="xs:boolean" use="required" />
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional" />
  </xs:complexType>
  <xs:group name="EventFilterGroup">
    <xs:sequence>
      <xs:element name="EventFilters" minOccurs="0" maxOccurs="1" type="EventIdFilterType" />
    </xs:sequence>
  </xs:group>
  <xs:group name="StackFilterGroup">
    <xs:sequence>
      <xs:element name="StackFilters" minOccurs="0" maxOccurs="1" type="EventIdFilterType" />
    </xs:sequence>
  </xs:group>
  <xs:complexType name="EventNameType">
    <xs:attribute name="Value" type="xs:string" use="required" />
  </xs:complexType>
  <xs:complexType name="NamesFilterType">
      <xs:sequence>
        <xs:element name="Keyword" minOccurs="0" maxOccurs="unbounded" type="EventProviderKeywordType" />
        <xs:element name="EventName" minOccurs="0" maxOccurs="64" type="EventNameType"></xs:element>
      </xs:sequence>
    <xs:attribute name="FilterIn" type="xs:boolean" use="required" />
    <xs:attribute name="Level" type="xs:unsignedByte" use="optional" />
    <xs:attribute name="Operation" type="NameFilterOperationEnumeration" use="optional" />
  </xs:complexType>
  <xs:group name="EventNamesFilterGroup">
    <xs:sequence>
      <xs:element name="EventNameFilters" minOccurs="0" maxOccurs="1" type="NamesFilterType" />
    </xs:sequence>
  </xs:group>
  <xs:group name="StackEventNamesFilterGroup">
    <xs:sequence>
      <xs:element name="StackEventNameFilters" minOccurs="0" maxOccurs="1" type="NamesFilterType" />
    </xs:sequence>
  </xs:group>
  <xs:complexType name="KeywordLevelFilterType">
      <xs:sequence>
        <xs:element name="Keyword" minOccurs="0" maxOccurs="unbounded" type="EventProviderKeywordType" />
      </xs:sequence>
    <xs:attribute name="FilterIn" type="xs:boolean" use="required" />
    <xs:attribute name="Level" type="xs:unsignedByte" use="optional" />
    <xs:attribute name="Operation" type="NameFilterOperationEnumeration" use="optional" />
  </xs:complexType>
  <xs:group name="StackKeywordLevelFilterGroup">
    <xs:sequence>
      <xs:element name="StackKeywordLevelFilter" minOccurs="0" maxOccurs="1" type="KeywordLevelFilterType" />
    </xs:sequence>
  </xs:group>
  <xs:simpleType name="SystemPoolTagAttributeType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"></xs:minLength>
      <xs:maxLength value="4"></xs:maxLength>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="SystemPoolTagType">
    <xs:attribute name="Value" type="SystemPoolTagAttributeType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="SystemPoolTagsGroup">
    <xs:sequence>
      <xs:element name="PoolTags" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PoolTag" minOccurs="1" maxOccurs="4" type="SystemPoolTagType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="SystemProviderPoolTagsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="HardwareCounterCounterType">
    <xs:attribute name="Value" type="xs:string" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="HardwareCounterCountersGroup">
    <xs:sequence>
      <xs:element name="Counters" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Counter" minOccurs="1" maxOccurs="unbounded" type="HardwareCounterCounterType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="HardwareCounterCountersKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="HardwareCounterEventsGroup">
    <xs:sequence>
      <xs:element name="Events" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Event" minOccurs="1" maxOccurs="4" type="SystemStackType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="HardwareCounterEventsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:simpleType name="CounterIntervalType">
    <xs:restriction base="xs:unsignedLong">
      <xs:minInclusive value="1221"/>
      <xs:maxInclusive value="2147483647"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="HardwareCounterSampledCounterType">
    <xs:attribute name="Value" type="xs:string" use="required"></xs:attribute>
    <xs:attribute name="Interval" type="CounterIntervalType" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:group name="HardwareCounterSampledCountersGroup">
    <xs:sequence>
      <xs:element name="SampledCounters" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SampledCounter" minOccurs="1" maxOccurs="unbounded" type="HardwareCounterSampledCounterType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="HardwareCounterSampledCountersKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="LastBranchFilterType">
    <xs:attribute name="Value" type="LastBranchFilterEnumeration" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="LastBranchFilterOutType">
      <xs:sequence>
        <xs:element name="LastBranchFilterOut" minOccurs="0" maxOccurs="unbounded" type="LastBranchFilterType"></xs:element>
      </xs:sequence>
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional" />
  </xs:complexType>
  <xs:group name="LastBranchFiltersGroup">
    <xs:sequence>
      <xs:element name="LastBranchFilters" minOccurs="0" maxOccurs="unbounded" type="LastBranchFilterOutType" />
    </xs:sequence>
  </xs:group>
  <xs:group name="LastBranchEventsGroup">
      <xs:sequence>
      <xs:element name="Events" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Event" minOccurs="1" maxOccurs="4" type="SystemStackType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="LastBranchEventsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="LastBranchGroupType">
    <xs:sequence>
      <xs:group ref="LastBranchEventsGroup"></xs:group>
      <xs:group ref="LastBranchFiltersGroup"></xs:group>
    </xs:sequence>
  </xs:complexType>
  <xs:group name="LastBranchGroup">
    <xs:sequence>
      <xs:element name="LastBranch" type="LastBranchGroupType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
  </xs:group>
    <xs:group name="ProcessorTraceEventsGroup">
      <xs:sequence>
      <xs:element name="Events" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Event" minOccurs="1" maxOccurs="4" type="SystemStackType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="ProcessorTraceEventsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="ProcessorTraceCodeModeType">
    <xs:attribute name="Value" type="ProcessorTraceCodeModeEnumeration" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="ProcessorTraceBufferSizeType">
    <xs:attribute name="Value" type="ProcessorTraceBufferSizeEnumeration" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="ProcessorTraceGroupType">
    <xs:sequence>
      <xs:element name="BufferSize" minOccurs="1" maxOccurs="1" type="ProcessorTraceBufferSizeType"></xs:element>
      <xs:element name="CodeMode" minOccurs="1" maxOccurs="1" type="ProcessorTraceCodeModeType"></xs:element>
      <xs:group ref="ProcessorTraceEventsGroup"></xs:group>
    </xs:sequence>
  </xs:complexType>
  <xs:group name="ProcessorTraceGroup">
    <xs:sequence>
      <xs:element name="ProcessorTrace" type="ProcessorTraceGroupType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="EventProviderKeywordsGroup">
    <xs:sequence>
      <xs:element name="Keywords" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Keyword" minOccurs="1" maxOccurs="unbounded" type="EventProviderKeywordType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
        <xs:key name="EventProviderKeywordsKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:simpleType name="CaptureStateTimeoutValue">
    <xs:union>
      <xs:simpleType>
        <xs:restriction base="xs:integer">
          <xs:minInclusive value="0"/>
          <xs:maxInclusive value="4294967"/>
        </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="infinite"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
  <xs:attributeGroup name="CaptureStateAttributeGroup">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Timeout" type="CaptureStateTimeoutValue" use="optional"></xs:attribute>
  </xs:attributeGroup>
  <xs:group name="EventProviderCaptureStateOnStartGroup">
    <xs:sequence>
      <xs:element name="CaptureStateOnStart" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Keyword" minOccurs="1" maxOccurs="unbounded" type="EventProviderKeywordType"></xs:element>
          </xs:sequence>
          <xs:attributeGroup ref="CaptureStateAttributeGroup"/>
        </xs:complexType>
        <xs:key name="EventProviderCaptureStateOnStartKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="EventProviderCaptureStateOnSaveGroup">
    <xs:sequence>
      <xs:element name="CaptureStateOnSave" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Keyword" minOccurs="1" maxOccurs="unbounded" type="EventProviderKeywordType"></xs:element>
          </xs:sequence>
          <xs:attributeGroup ref="CaptureStateAttributeGroup"/>
        </xs:complexType>
        <xs:key name="EventProviderCaptureStateOnSaveKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="EventProviderCaptureStateOnDemandGroup">
    <xs:sequence>
      <xs:element name="CaptureStateOnDemand" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Keyword" minOccurs="1" maxOccurs="unbounded" type="EventProviderKeywordType"></xs:element>
          </xs:sequence>
          <xs:attributeGroup ref="CaptureStateAttributeGroup"/>
        </xs:complexType>
        <xs:key name="EventProviderCaptureStateOnDemandKey">
          <xs:selector xpath="./*"></xs:selector>
          <xs:field xpath="@Value"></xs:field>
        </xs:key>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:attributeGroup name="SystemCollectorAttributeGroup">
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Name" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Realtime" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="HostGuestCorrelation" type="xs:boolean" use="optional"></xs:attribute>
  </xs:attributeGroup>
  <xs:attributeGroup name="CollectorAttributeGroup">
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Name" type="xs:string" use="required"></xs:attribute>
    <xs:attribute name="Realtime" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="HostGuestCorrelation" type="xs:boolean" use="optional"></xs:attribute>
  </xs:attributeGroup>
  <xs:complexType name="BuffersType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:decimal" use="required"></xs:attribute>
    <xs:attribute name="PercentageOfTotalMemory" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="MinimumRundownSpace" type="SimpleValueType" use="optional"></xs:attribute>
    <xs:attribute name="MaximumBufferSpace" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:unsignedInt">
          <xs:minInclusive value="1"/>
          <xs:maxInclusive value="4294967295"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="BufferSizeType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:unsignedInt" use="required"></xs:attribute>
  </xs:complexType>
  <xs:simpleType name="FileModeEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Circular"></xs:enumeration>
      <xs:enumeration value="Sequential"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="FileMaxValue">
    <xs:restriction base="xs:unsignedByte">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="16"/>
    </xs:restriction>
 </xs:simpleType> 
  <xs:complexType name="MaximumFileSizeType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:unsignedInt" use="required"></xs:attribute>
    <xs:attribute name="FileMode" type="FileModeEnumeration" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="FileMaxType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="FileMaxValue" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="StackCachingType">
    <xs:attribute name="BucketCount" type="xs:unsignedInt" use="required"></xs:attribute>
    <xs:attribute name="CacheSize" type="xs:unsignedInt" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="FlushTimerType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:unsignedInt" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="FlushThresholdType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:unsignedInt" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="BuffersPerCPUType">
    <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
    <xs:attribute name="Value" type="xs:decimal" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="SystemBufferElementGroup">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="BufferSize" type="BufferSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="Buffers" type="BuffersType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="StackCaching" type="StackCachingType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="MaximumFileSize" type="MaximumFileSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FileMax" type="FileMaxType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FlushTimer" type="FlushTimerType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FlushThreshold" type="FlushThresholdType"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="EventBufferElementGroup">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="BufferSize" type="BufferSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="Buffers" type="BuffersType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="StackCaching" type="StackCachingType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="MaximumFileSize" type="MaximumFileSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FileMax" type="FileMaxType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FlushTimer" type="FlushTimerType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FlushThreshold" type="FlushThresholdType"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="HypervisorBufferElementGroup">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="BufferSize" type="BufferSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="BuffersPerCPU" type="BuffersPerCPUType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="MaximumFileSize" type="MaximumFileSizeType"></xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="FileMax" type="FileMaxType"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="SystemCollectorType">
    <xs:group ref="SystemBufferElementGroup"></xs:group>
    <xs:attributeGroup ref="SystemCollectorAttributeGroup"></xs:attributeGroup>
  </xs:complexType>
  <xs:complexType name="EventCollectorType">
    <xs:group ref="EventBufferElementGroup"></xs:group>
    <xs:attributeGroup ref ="CollectorAttributeGroup"></xs:attributeGroup>
    <xs:attribute name="Private" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="ProcessPrivate" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="Secure" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HeapEventCollectorType">
    <xs:group ref="EventBufferElementGroup"></xs:group>
    <xs:attributeGroup ref ="CollectorAttributeGroup"></xs:attributeGroup>
    <xs:attribute name="Secure" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HypervisorEventCollectorType">
    <xs:group ref="HypervisorBufferElementGroup"></xs:group>
    <xs:attributeGroup ref ="CollectorAttributeGroup"></xs:attributeGroup>
  </xs:complexType>
  <xs:complexType name="SystemProviderType">
    <xs:sequence>
      <xs:group ref="SystemKeywordsGroup"></xs:group>
      <xs:group ref="StacksGroup"></xs:group>
      <xs:group ref="SystemPoolTagsGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="ProfileSourceType">
    <xs:attribute name="Name" type="xs:string" use="required"></xs:attribute>
    <xs:attribute name="Event" type="HexOrDecValue" use="required"></xs:attribute>
    <xs:attribute name="Unit" type="HexOrDecValue" use="optional"></xs:attribute>
    <xs:attribute name="Interval" type="HexOrDecValue" use="optional"></xs:attribute>
    <xs:attribute name="AllowsHalt" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="Persist" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="ExtendedBits" type="HexOrDecValue" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:simpleType name="ProfileSourcesArchitectureEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ARM"></xs:enumeration>
      <xs:enumeration value="INTEL"></xs:enumeration>
      <xs:enumeration value="AMD"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ProfileSourcesType">
    <xs:sequence>
      <xs:element name="ProfileSource" type="ProfileSourceType" minOccurs="1" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
    <xs:attribute name="Architecture" type="ProfileSourcesArchitectureEnumeration" use="required"></xs:attribute>
    <xs:attribute name="Family" type="xs:integer" use="optional"></xs:attribute>
    <xs:attribute name="Model" type="xs:integer" use="optional"></xs:attribute>
    <xs:attribute name="Stepping" type="xs:integer" use="optional"></xs:attribute>    
    <xs:attribute name="Description" type="xs:string" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="MicroArchitecturalConfigType">
    <xs:sequence>  
      <xs:element name="ProfileSources" type="ProfileSourcesType" minOccurs="0" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="MicroArchitecturalConfigIdType">
    <xs:sequence>  
      <xs:element name="ProfileSources" type="ProfileSourcesType" minOccurs="0" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HardwareCounterType">
    <xs:sequence>
      <xs:element name="MicroArchitecturalConfigId" type="MicroArchitecturalConfigIdType" minOccurs="0" maxOccurs="1"></xs:element>
      <xs:group ref="HardwareCounterCountersGroup"></xs:group>
      <xs:group ref="HardwareCounterEventsGroup"></xs:group>
      <xs:group ref="HardwareCounterSampledCountersGroup"></xs:group>
      <xs:group ref="LastBranchGroup"></xs:group>      
      <xs:group ref="ProcessorTraceGroup"></xs:group>      
    </xs:sequence>
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="CustomFilterType">
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Type" type="HexOrDecValue" use="required" />
  </xs:complexType>
  <xs:complexType name="EventProviderType">
    <xs:sequence>
      <xs:group ref="EventProviderKeywordsGroup"></xs:group>
      <xs:group ref="EventProviderCaptureStateOnStartGroup"></xs:group>
      <xs:group ref="EventProviderCaptureStateOnSaveGroup"></xs:group>
      <xs:group ref="EventProviderCaptureStateOnDemandGroup"></xs:group>
      <xs:group ref="StacksGroup" />
      <xs:group ref="EventFilterGroup" />
      <xs:group ref="StackFilterGroup" />
      <xs:group ref="EventNamesFilterGroup" />
      <xs:group ref="StackEventNamesFilterGroup" />
      <xs:group ref="StackKeywordLevelFilterGroup" />
      <xs:element name="CustomFilter" type="CustomFilterType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Name" type="xs:string" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="NonPagedMemory" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="Stack" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="SID" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="TSID" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="Level" type="xs:unsignedByte" use="optional"></xs:attribute>
    <xs:attribute name="CaptureStateOnly" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="Strict" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="ProcessExeFilter" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="EventKey" type="xs:boolean" use="optional"></xs:attribute>
    <xs:attribute name="ExcludeInPrivate" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HeapProcessIdType">
    <xs:attribute name="Value" type="xs:unsignedInt" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="HeapEventProcessIdsGroup">
    <xs:sequence>
      <xs:element name="HeapProcessIds" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="HeapProcessId" minOccurs="1" maxOccurs="2" type="HeapProcessIdType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="HeapEventProviderType">
    <xs:sequence>
      <xs:group ref="HeapEventProcessIdsGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
    <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:group name="SystemProviderGroup">
    <xs:sequence>
      <xs:element name="SystemProvider" type="SystemProviderType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="HardwareCounterGroup">
    <xs:sequence>
      <xs:element name="HardwareCounter" type="HardwareCounterType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
  </xs:group> 
  <xs:group name="EventProviderGroup">
    <xs:sequence>
      <xs:element name="EventProvider" type="EventProviderType" minOccurs="0" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="HeapEventProviderGroup">
    <xs:sequence>
      <xs:element name="HeapEventProvider" type="HeapEventProviderType" minOccurs="0" maxOccurs="1"></xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="SystemProviderIdType">
    <xs:sequence>
      <xs:group ref="SystemKeywordsGroup"></xs:group>
      <xs:group ref="StacksGroup"></xs:group>
      <xs:group ref="SystemPoolTagsGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HardwareCounterIdType">
    <xs:sequence>
      <xs:group ref="HardwareCounterCountersGroup"></xs:group>
      <xs:group ref="HardwareCounterEventsGroup"></xs:group>
      <xs:group ref="HardwareCounterSampledCountersGroup"></xs:group>
      <xs:group ref="LastBranchGroup"></xs:group>      
      <xs:group ref="ProcessorTraceGroup"></xs:group>      
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="EventProviderIdType">
    <xs:sequence>
      <xs:group ref="EventProviderKeywordsGroup"></xs:group>
      <xs:group ref="EventProviderCaptureStateOnStartGroup"></xs:group>
      <xs:group ref="EventProviderCaptureStateOnSaveGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="SystemCollectorIdType">
    <xs:sequence>
      <xs:group ref="SystemBufferElementGroup" minOccurs="0" maxOccurs="1"></xs:group>
      <xs:element name="SystemProviderId" type="SystemProviderIdType" minOccurs="0" maxOccurs="1"></xs:element>
      <xs:group ref="SystemProviderGroup" minOccurs="0" maxOccurs="1"></xs:group>
      <xs:element name="HardwareCounterId" type="HardwareCounterIdType" minOccurs="0" maxOccurs="1"></xs:element>
      <xs:group ref="HardwareCounterGroup" minOccurs="0" maxOccurs="1"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="EventProvidersGroup">
    <xs:sequence>
      <xs:element name="EventProviders" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="EventProviderId" type="EventProviderIdType" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:group ref="EventProviderGroup" minOccurs="0" maxOccurs="unbounded"></xs:group>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="HeapEventProvidersGroup">
    <xs:sequence>
      <xs:element name="HeapEventProviders" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="HeapEventProviderId" type="HeapEventProviderIdType" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:group ref="HeapEventProviderGroup" minOccurs="0" maxOccurs="unbounded"></xs:group>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="EventCollectorIdType">
    <xs:sequence>
      <xs:group ref="EventBufferElementGroup" minOccurs="0" maxOccurs="1"></xs:group>
      <xs:group ref="EventProvidersGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HeapEventProviderIdType">
    <xs:sequence>
      <xs:group ref="HeapEventProcessIdsGroup" minOccurs="0" maxOccurs="1"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HeapEventCollectorIdType">
    <xs:sequence>
      <xs:group ref="EventBufferElementGroup" minOccurs="0" maxOccurs="1"></xs:group>
      <xs:group ref="HeapEventProvidersGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="HypervisorEventCollectorIdType">
    <xs:sequence>
      <xs:group ref="HypervisorBufferElementGroup" minOccurs="0" maxOccurs="1"></xs:group>
      <xs:group ref="EventProvidersGroup"></xs:group>
    </xs:sequence>
    <xs:attribute name="Value" type="IdType" use="required"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="ProblemCategoryType">
    <xs:attribute name="Value" type="xs:string" use="required"></xs:attribute>
  </xs:complexType>
  <xs:group name="ProblemCategoriesGroup">
    <xs:sequence>
      <xs:element name="ProblemCategories" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ProblemCategory" minOccurs="1" maxOccurs="unbounded" type="ProblemCategoryType"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="CollectorsGroup">
    <xs:sequence>
      <xs:element name="Collectors" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SystemCollectorId" type="SystemCollectorIdType" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="EventCollectorId" type="EventCollectorIdType" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:element name="HeapEventCollectorId" type="HeapEventCollectorIdType" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:element name="HypervisorEventCollectorId" type="HypervisorEventCollectorIdType" minOccurs="0" maxOccurs="unbounded"></xs:element>
          </xs:sequence>
          <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="TraceMergePropertiesCustomEventType">
    <xs:attribute name="Value" type="TraceMergePropertiesCustomEventsEnumeration"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="DeletePreMergedTraceFilesType">
    <xs:attribute name="Value" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="FileCompressionType">
    <xs:attribute name="Value" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="InjectOnlyType">
    <xs:attribute name="Value" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="SkipMergeType">
    <xs:attribute name="Value" type="xs:boolean" use="optional"></xs:attribute>
  </xs:complexType>
  <xs:complexType name="TraceMergePropertiesType">
    <xs:sequence>
      <xs:element name="TraceMergeProperty" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="DeletePreMergedTraceFiles" minOccurs="0" maxOccurs="1" type="DeletePreMergedTraceFilesType"></xs:element>
            <xs:element name="FileCompression" minOccurs="0" maxOccurs="1" type="FileCompressionType"></xs:element>
            <xs:element name="InjectOnly" minOccurs="0" maxOccurs="1" type="InjectOnlyType"></xs:element>
            <xs:element name="SkipMerge" minOccurs="0" maxOccurs="1" type="SkipMergeType"></xs:element>
            <xs:element name="CustomEvents" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="CustomEvent" type="TraceMergePropertiesCustomEventType" minOccurs="1" maxOccurs="unbounded"></xs:element>
                </xs:sequence>
                <xs:attribute name="Operation" type="OperationEnumeration" use="optional"></xs:attribute>
              </xs:complexType>
              <xs:key name="TraceMergePropertyCustomEventsKey">
                <xs:selector xpath="./*"></xs:selector>
                <xs:field xpath="@Value"></xs:field>
              </xs:key>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
          <xs:attribute name="Name" type="xs:string" use="required"></xs:attribute>
          <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ProfilesType">
    <xs:sequence>
      <xs:element name="SystemCollector" type="SystemCollectorType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="EventCollector" type="EventCollectorType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="HeapEventCollector" type="HeapEventCollectorType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="HypervisorEventCollector" type="HypervisorEventCollectorType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="SystemProvider" type="SystemProviderType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="MicroArchitecturalConfig" type="MicroArchitecturalConfigType" minOccurs="0" maxOccurs="unbounded"></xs:element>      
      <xs:element name="HardwareCounter" type="HardwareCounterType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="EventProvider" type="EventProviderType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="HeapEventProvider" type="HeapEventProviderType" minOccurs="0" maxOccurs="unbounded"></xs:element>
      <xs:element name="Profile" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="ProblemCategoriesGroup"></xs:group>
            <xs:group ref="CollectorsGroup"></xs:group>
            <xs:element name="TraceMergeProperties" type="TraceMergePropertiesType" minOccurs="0" maxOccurs="1"></xs:element>
          </xs:sequence>
          <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
          <xs:attribute name="Name" type="IdType" use="required"></xs:attribute>
          <xs:attribute name="Description" type="xs:string" use="required"></xs:attribute>
          <xs:attribute name="Base" type="xs:string" use="optional"></xs:attribute>
          <xs:attribute name="LoggingMode" type="LoggingModeEnumeration" use="required"></xs:attribute>
          <xs:attribute name="DetailLevel" type="DetailLevelEnumeration" use="required"></xs:attribute>
          <xs:attribute name="Internal" type="xs:boolean" use="optional"></xs:attribute>
          <xs:attribute name="Default" type="xs:boolean" use="optional"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="TransitionTagType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[^\\/:\*\?\|\x0C\>\x22]+"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OnOffTransitionEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="On/Off - Boot"></xs:enumeration>
      <xs:enumeration value="On/Off - FastStartup"></xs:enumeration>
      <xs:enumeration value="On/Off - Shutdown"></xs:enumeration>
      <xs:enumeration value="On/Off - RebootCycle"></xs:enumeration>
      <xs:enumeration value="On/Off - Standby/Resume"></xs:enumeration>
      <xs:enumeration value="On/Off - Hibernate/Resume"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SimpleDelayValueType">
    <xs:restriction base="xs:unsignedShort">
      <xs:minInclusive value="1"></xs:minInclusive>
      <xs:maxInclusive value="3600"></xs:maxInclusive>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="OnOffTransitionConfigurationsType">
    <xs:sequence minOccurs="1" maxOccurs="6">
      <xs:element name="OnOffTransitionConfiguration">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PrepareSystem">
              <xs:complexType>
                <xs:attribute name="Value" type="xs:boolean" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="NumberOfRuns">
              <xs:complexType>
                <xs:attribute name="Value" type="SimpleValueType" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="PostBootDelay">
              <xs:complexType>
                <xs:attribute name="Value" type="SimpleDelayValueType" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="WakeupDelay">
              <xs:complexType>
                <xs:attribute name="Value" type="SimpleDelayValueType" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="TransitionTag">
              <xs:complexType>
                <xs:attribute name="Value" type="TransitionTagType" use="required" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="Id" type="IdType" use="required"></xs:attribute>
          <xs:attribute name="Name" type="xs:string" use="required"></xs:attribute>
          <xs:attribute name="Type" type="OnOffTransitionEnumeration" use="required"></xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="WindowsPerformanceRecorder">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Profiles" type="ProfilesType" minOccurs="0" maxOccurs="1"></xs:element>
        <xs:element name="TraceMergeProperties" type="TraceMergePropertiesType" minOccurs="0" maxOccurs="unbounded"></xs:element>
        <xs:element name="OnOffTransitionConfigurations" type="OnOffTransitionConfigurationsType" minOccurs="0" maxOccurs="1"></xs:element>
      </xs:sequence>
      <xs:attribute name="Version" type="xs:float" use="required"></xs:attribute>
      <xs:attribute name="Author" type="xs:string" use="optional"></xs:attribute>
      <xs:attribute name="Team" type="xs:string" use="optional"></xs:attribute>
      <xs:attribute name="Copyright" type="xs:string" use="optional"></xs:attribute>
      <xs:attribute name="Company" type="xs:string" use="optional"></xs:attribute>
      <xs:attribute name="Comments" type="xs:string" use="optional"></xs:attribute>
      <xs:attribute name="Tag" type="xs:string" use="optional"></xs:attribute>
    </xs:complexType>
    <xs:key name="IdKey">
      <xs:selector xpath="./*/*"></xs:selector>
      <xs:field xpath="@Id"></xs:field>
    </xs:key>
    <xs:key name="OnOffTransitionKey">
      <xs:selector xpath="./OnOffTransitionConfigurations/*"></xs:selector>
      <xs:field xpath="@Type"></xs:field>
    </xs:key>
  </xs:element>
</xs:schema>

记录配置文件 XML 参考