<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.188" PIVersion="1.0.0.0" href="file:///PerfSignature.xsn" name="urn:schemas-microsoft-com:office:infopath:PerfSig:" language="en-us" productVersion="12.0.0" ?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
<PerformanceSignature SchemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-02-10T03:14:31" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
  <SignatureId>3E2140E1-9B57-431B-BFBA-4D8D284DDE75</SignatureId>
  <Title>WaitAnalysisWorkItemExceptionss</Title>
  <AuthorAlias>xperf</AuthorAlias>
  <SignatureType>Basic</SignatureType>
  <Description>Wait Analysis Work Item Exception Stacks</Description>
  <TraceType>
    <Type>Common</Type>
  </TraceType>
  <Category>Wait (All Wait Classes) [Wait]</Category>
  <Component></Component>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CVSyncProvider::PostVSyncNotification</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  
  <!--
    _PostMessageExtended has been changed to a wrapper of _PostTransformableMessageExtended in blue and the stacks has been changed,
    so the new version of recognition should be added for detacting the work items after blue.
  -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CVSyncProvider::Run</Frame>
          <Frame>win32k.sys!_PostMessageExtended</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CVSyncProvider::Run</Frame>
          <Frame>win32kfull.sys!_PostMessageExtended</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>

  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CVSyncProvider::Run</Frame>
          <Frame>win32k.sys!_PostTransformableMessageExtended</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CVSyncProvider::Run</Frame>
          <Frame>win32kfull.sys!_PostTransformableMessageExtended</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>edgehtml.dll!CVSyncProvider::Run</Frame>
          <Frame>MinUser.dll!minPostMessageW</Frame>
          <Frame>nt!KeSetEvent</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>dwmcore.dll!CPartitionVerticalBlankScheduler::Run</Frame>
          <Frame>CoreMessaging.dll!AlpcServerConnection::PostBuffersToClient</Frame>
          <Frame>CoreMessaging.dll!AlpcConnection::PostBuffers</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>dwmcore.dll!CPartitionVerticalBlankScheduler::Run</Frame>
          <Frame>CoreMessaging.dll!Cn::Threading::InterconnectQueue::PostItem_LockedByCaller</Frame>
          <Frame>nt!KeSetEvent</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32k.sys!zzzBltValidBits</Frame>
          <Frame>win32k.sys!zzzSetFMouseMoved</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32kfull.sys!zzzBltValidBits</Frame>
          <Frame>win32kfull.sys!zzzSetFMouseMoved</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- In Blue, zzzSetFMouseMoved is refactored. It is just a simple wrapper of zzzSetFMouseMovedWorker now, so it is optimized in stacks -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32k.sys!zzzBltValidBits</Frame>
          <Frame>win32k.sys!zzzSetFMouseMovedWorker</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32kfull.sys!zzzBltValidBits</Frame>
          <Frame>win32kfull.sys!zzzSetFMouseMovedWorker</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>MSHTML.DLL!CTimerMan::ThreadExec</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!ExpWaitForResource</Frame>
        </FrameBlocks>
      </CSwitchStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>ntdll.dll!EnterCrit</Frame>
        </FrameBlocks>
      </CSwitchStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32k.sys!RawInputThread</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32kfull.sys!RawInputThread</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <!-- Win7 TimerExpiration stack-->
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>false</AllowSkippingFrames>
          <Frame>nt!KiTimerExpiration</Frame>
          <Frame>nt!KiProcessExpiredTimerList</Frame>
          <Frame>nt!KiReadyThread</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <!-- Win8 TimerExpiration stack-->
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>false</AllowSkippingFrames>
          <Frame>nt!KiTimerExpiration</Frame>
          <Frame>nt!KiExpireTimerTable</Frame>
          <Frame>nt!KiProcessExpiredTimerList</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <!-- Win10 TimerExpiration stack-->
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>false</AllowSkippingFrames>
          <Frame>nt!KiTimer2Expiration</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <!-- Win10 TimerExpiration stack-->
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>false</AllowSkippingFrames>
          <Frame>nt!KiRetireDpcList</Frame>
          <Frame>nt!KiProcessThreadWaitList</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!MmAccessFault</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32k.sys!ProcessQueuedMouseEvents</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>win32kfull.sys!ProcessQueuedMouseEvents</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!EtwpStackWalkApc</Frame>
        </FrameBlocks>
      </CSwitchStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!BroadcastSystemMessageW</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!MsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!BroadcastSystemMessageW</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!MmAccessFault</Frame>
        </FrameBlocks>
      </CSwitchStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>COMBASE.DLL!ASTAThreadWaitForCall</Frame>
          <Frame>COMBASE.DLL!ASTAWaitInExistingContext</Frame>
          <Frame>COMBASE.DLL!ASTAWaitContext::Wait</Frame>
          <Frame>COMBASE.DLL!ASTAWaitContext::KernelWait</Frame>
          <Frame>user32.dll!MsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>COMBASE.DLL!ThreadSignal</Frame>
          <Frame>ntdll.dll!ZwSetEvent</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>COMBASE.DLL!ASTAThreadWaitForHandles</Frame>
          <Frame>COMBASE.DLL!ASTAWaitInNewContext</Frame>
          <Frame>COMBASE.DLL!ASTAWaitContext::Wait</Frame>
          <Frame>COMBASE.DLL!ASTAWaitContext::KernelWait</Frame>
          <Frame>user32.dll!MsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!KiRetireDpcList</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>

  <!-- The message sent, which is triggered by EnumWindows, shouldn't be a work item. -->
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!EnumWindows</Frame>
          <Frame>win32k.sys!xxxSendMessageEx</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <!-- win32k.sys module is changed in OneCore -->
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!EnumWindows</Frame>
          <Frame>win32kfull.sys!xxxSendMessageEx</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>

  <!-- Timer triggered callback function makes a COM call. It shouldn't be a work item.-->
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>ntdll.dll!TppTimerpExecuteCallback</Frame>
          <Frame>TWINUI.dll!CSearchServicesProvider::s_StartSearchPaneCallback</Frame>
          <Frame>COMBASE.DLL!NdrExtpProxySendReceive</Frame>
          <Frame>user32.dll!ZwUserPostMessage</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  
  <!-- synchronous COM call. -->
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>combase.dll!CSyncClientCall::SendReceive</Frame>
          <Frame>user32.dll!MsgWaitForMultipleObjectsEx</Frame>
          <Frame>nt!KeWaitForMultipleObjects</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!KeSetEvent</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <Recognition>
    <Wait>
      <CSwitchStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>combase.dll!CSyncClientCall::SendReceive</Frame>
          <Frame>user32.dll!RealMsgWaitForMultipleObjectsEx</Frame>
          <Frame>nt!KeWaitForMultipleObjects</Frame>
        </FrameBlocks>
      </CSwitchStack>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!KeSetEvent</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>

  <!-- Win10 Disk DPC stack-->
  <Recognition>
    <Wait>
      <ReadyThreadStack>
        <FrameBlocks>
          <AllowSkippingFrames>true</AllowSkippingFrames>
          <Frame>nt!KiExecuteAllDpcs</Frame>
          <Frame>CLASSPNP.SYS!TransferPktComplete</Frame>
        </FrameBlocks>
      </ReadyThreadStack>
    </Wait>
  </Recognition>
  <AdditionalComments>This signature identifies stacks that will NOT be treated as work items.  Note that the purpose of the this file is to overrides hits from WaitWorkItem.xml</AdditionalComments>
</PerformanceSignature>
