<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Nan Zheng</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/nan_zheng/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/nan_zheng/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 04:08:21 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Mapped drive visible to all logon sessions unexpectedly.</title>
      <link>https://docs.microsoft.com/archive/blogs/nan_zheng/mapped-drive-visible-to-all-logon-sessions-unexpectedly</link>
      <pubDate>Mon, 29 Dec 2014 05:49:13 GMT</pubDate>
      <dc:creator><![CDATA[Nan Zheng(MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nan_zheng/2014/12/29/mapped-drive-visible-to-all-logon-sessions-unexpectedly/</guid>
      <description><![CDATA[Today, I will talk about an issue we run into recently.
Background:After you turn on User Account...]]></description>
      <content:encoded><![CDATA[<p>Today, I will talk about an issue we run into recently.</p>
<p><br />Background:<br />After you turn on User Account Control (UAC) in Windows Vista or Windows 7, programs may not be able to access some network locations. This problem may also occur when you use the command prompt to access a network location.&nbsp; When a member of the Administrators group logs on to a computer running Windows Vista or Windows 7 that has UAC enabled, the user runs as a standard user. When an administrator logs on to a computer running Windows Vista or Windows 7, the Local Security Authority (LSA) creates two access tokens. If LSA is notified that the user is a member of the Administrators group, LSA creates the second logon that has the administrator rights removed (filtered). This filtered access token is used to start the user's desktop. If a user is logged on to a computer running Windows Vista or Windows 7 and if UAC is enabled, a program that uses the user's filtered access token and a program that uses the user's full administrator access token can run at the same time. Because LSA created the access tokens during two separate logon sessions, the access tokens contain separate logon IDs. When network shares are mapped, they are linked to the current logon session for the current process access token. This means that if a user uses the command prompt (cmd.exe) together with the filtered access token to map a network share, the network share is not mapped for processes that run with the full administrator access token.<br />To get around this problem, configure the EnableLinkedConnections registry value. This value enables Windows Vista and Windows 7 to share network connections between the filtered access token and the full administrator access token for a member of the Administrators group. After you configure this registry value, LSA checks whether there is another access token that is associated with the current user session if a network resource is mapped to an access token. If LSA determines that there is a linked access token, it adds the network share to the linked location.</p>
<p><br />Problem:<br />Sets up server 2012 R2 and adds this registry to make admin users see the mapped drive which are configured by group policy preference.&nbsp;Next normal users are able to see mapped drives for admin users unexpectedly if and only if admin user logs into the box earlier and stays in that session. If admin user logs off the session, normal users won&rsquo;t be able to see the mapped drive then.</p>
<p><br />Findings:<br />Through the live debugging, we&rsquo;ve found mapped drives were created in \GLOBAL?? Directory of the object manager in the logon session of admin user, hereby the mapped drives are visible across all logon sessions. With further debugging, we&rsquo;ve nailed down the culprit, kernel redirector driver, which tried to impersonate the admin user in system work thread and failed the impersonation, then ended up creating the mapped drive objects in system account context that will create objects in \GLOBAL?? Directory as a result. But why it only happens with EnableLinkedConnections in place? The reason is EnableLinkedConnections is backed by kernel redirector drivers that are responsible to mapping remote network resource to local resource. While setting up the mapped drive, driver FSD thread would often impersonate the user and associates the current thread with user&rsquo;s access token. then kernel redirectors will check if EnableLinkedConnections&nbsp; is on. if yes,&nbsp;driver would often call ZwQueryInformationToken to get the TokenElevationType info pertaining to current token of the running thread first and get the linked token next.&nbsp; To our curiosity, ZwQueryInformationToken returned TokenElevationTypeDefault type which implies current user token didn't have linked token at all. Keep in mind, admin user will have two access tokens if UAC is turned on. So it contradicts with the theory in the background introduction.</p>
<p><br />At long last, we managed to figure out the reason of above puzzle. There were two additional UAC configurations along with the registry on the box:<br />1.&nbsp;&ldquo;admin approval mode for built-in administrator account&rdquo;<br />Enabled: The built-in Administrator account uses Admin Approval Mode. By default, any operation that requires elevation of privilege will prompt the user to approve the operation.<br />2.&nbsp; &ldquo;Turn on Admin Approval Mode&rdquo;<br />Disabled: Admin Approval Mode and all related UAC policy settings are disabled.</p>
<p>With above two settings on, it virtually disables UAC function even though it appears to be turned on.&nbsp; So admin users won&rsquo;t have two separate tokens and EnableLinkedConnections doesn&rsquo;t fit into this setup. </p>
<p>Resolution:<br />Remove EnableLinkedConnections on the server. </p>]]></content:encoded>
    </item>
    <item>
      <title>Get started with debugging Hyper-V Virtual Switch 1</title>
      <link>https://docs.microsoft.com/archive/blogs/nan_zheng/get-started-with-debugging-hyper-v-virtual-switch-1</link>
      <pubDate>Mon, 27 Oct 2014 01:53:00 GMT</pubDate>
      <dc:creator><![CDATA[Nan Zheng(MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nan_zheng/2014/10/27/get-started-with-debugging-hyper-v-virtual-switch-1/</guid>
      <description><![CDATA[This is the first post about the Hyper-V Virtual Switch from debugging point of view.
The Hyper-V...]]></description>
      <content:encoded><![CDATA[<p>This is the first post about the Hyper-V Virtual Switch from debugging point of view.</p>
<p>The Hyper-V Virtual Switch is a software-based layer-2 Ethernet network switch that is available in Hyper-V Manager when you install the Hyper-V server role. The switch includes programmatically managed and extensible capabilities to connect virtual machines to both virtual networks and the physical network. In addition, Hyper-V Virtual Switch provides policy enforcement for security, isolation, and service levels. Hyper-V Virtual Switch starts from windows server 2008 through Windows server 2012 R2. Although it keeps evolving, the fundamental architecture and concepts remain the same all the same. In a series of posts here, I will focus on debugging Windows server 2012 R2 Hyper-V Virtual Switch with real samples and troubleshooting best practices.</p>
<p><br />In the first place, we should have some basic ideas about the Virtual Switch in Windows server 2012 R2(and legacy OS too)</p>
<ul>
<li>Virtual Switch is not standalone or out-of-box, it runs inside the host OS of Hyper-V for it is built on top of existing Windows OS libraries like NDIS. From windows point of view, Virtual Switch is merely a kernel driver (vmswitch.sys) running on Hyper-V host OS. So it actually shares the prominent resources like CPU/Memory etc. with the other components running on the same OS. <br />A handful of offloading technologies are developed to mitigate the impact and resource dependency on Hyper-V OS. For example, VMQ <a href="https://blogs.technet.com/b/networking/archive/2013/09/24/vmq-deep-dive-1-of-3.aspx">https://blogs.technet.com/b/networking/archive/2013/09/24/vmq-deep-dive-1-of-3.aspx</a> is a typical solution to speed up the data transmit that bypasses the Virtual Switch to some extent or SR-IOV <a href="https://msdn.microsoft.com/en-us/library/windows/hardware/hh440148(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/hardware/hh440148(v=vs.85).aspx</a> that almost bypasses the virtual switch completely to save the precious CPU/memory resources on the host OS.</li>
<li>Virtual Switch is built on top of NDIS library. So we must get acquainted with the NDIS before digging into the virtual switch operation. Here is a great post about debugging NDIS <a href="https://blogs.msdn.com/b/ndis/archive/2010/03/05/getting-started-with-ndiskd.aspx">https://blogs.msdn.com/b/ndis/archive/2010/03/05/getting-started-with-ndiskd.aspx</a>. In addition, we also uses quite a few native Windows Debugger commands that facilitate the debugging purpose. If you are new to Windows kernel debugging, check out Ilias&rsquo;s thorough tutorial <a href="https://blogs.msdn.com/iliast/archive/2006/12/10/windbg-tutorials.aspx">https://blogs.msdn.com/iliast/archive/2006/12/10/windbg-tutorials.aspx</a>.&nbsp; You should follow that tutorial to get your kernel debugger attached to another computer.&nbsp; While you can use either Windbg.exe or Kd.exe, I highly suggest using Windbg</li>
</ul>
<p>Okay, let&rsquo;s unfold the first post. When you do connect to a Hyper-V host via live kernel debugging or open a memory dump via Windbg for debugging, you can double-check that the NDIS symbols are correctly loaded.&nbsp; Use .reload /f vmswitch.sys to force the debugger to download the vmswitch.pdb symbol file.&nbsp; Then use the !lmi vmswitch and look for the magic phrase &ldquo;Symbols loaded successfully&rdquo;.&nbsp; If everything went according to plan, you should get output similar to this:</p>
<p><br />26: kd&gt; .sympath <a href="https://msdl.microsoft.com/download/symbols">https://msdl.microsoft.com/download/symbols</a><br />Symbol search path is: <a href="https://msdl.microsoft.com/download/symbols">https://msdl.microsoft.com/download/symbols</a><br />Expanded Symbol search path is: <a href="https://msdl.microsoft.com/download/symbols">https://msdl.microsoft.com/download/symbols</a></p>
<p>************* Symbol Path validation summary **************<br />Response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time (ms)&nbsp;&nbsp;&nbsp;&nbsp; Location<br />Deferred&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://msdl.microsoft.com/download/symbols">https://msdl.microsoft.com/download/symbols</a></p>
<p>26: kd&gt; .reload /f vmswitch.sys</p>
<p>26: kd&gt; !lmi vmswitch<br />Loaded Module Info: [vmswitch] <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Module: vmswitch<br />&nbsp;&nbsp; Base Address: fffff8007607c000<br />&nbsp;&nbsp;&nbsp;&nbsp; Image Name: vmswitch.sys<br />&nbsp;&nbsp; Machine Type: 34404 (X64)<br />&nbsp;&nbsp;&nbsp;&nbsp; Time Stamp: 53905875 Thu Jun 05 19:45:57 2014<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size: ae000<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CheckSum: af005<br />Characteristics: 22&nbsp; <br />Debug Data Dirs: Type&nbsp; Size&nbsp;&nbsp;&nbsp;&nbsp; VA&nbsp; Pointer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODEVIEW&nbsp;&nbsp;&nbsp; 25, 6ae34,&nbsp;&nbsp; 6a034 RSDS - GUID: {5C41936C-CB8A-4FDD-A551-AAB433B8A341}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Age: 1, Pdb: vmswitch.pdb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLSID&nbsp;&nbsp;&nbsp;&nbsp; 4, 6ae70,&nbsp;&nbsp; 6a070 [Data not mapped]<br />&nbsp;&nbsp;&nbsp;&nbsp; Image Type: MEMORY&nbsp;&nbsp; - Image read successfully from loaded memory.<br /><span style="background-color: #ff6600;">&nbsp;&nbsp;&nbsp; Symbol Type: PDB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Symbols loaded successfully from image header.</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:\DevKit\wdk81\Debuggers\x64\sym\vmswitch.pdb\5C41936CCB8A4FDDA551AAB433B8A3411\vmswitch.pdb<br />&nbsp;&nbsp;&nbsp; Load Report: public symbols , not source indexed <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:\DevKit\wdk81\Debuggers\x64\sym\vmswitch.pdb\5C41936CCB8A4FDDA551AAB433B8A3411\vmswitch.pdb</p>
<p>Now that your debugger is set up correctly, we can start using nvkd.&nbsp; The first command we&rsquo;ll try is !nvkd.vswitch</p>
<p>2: kd&gt; !nvkd.help<br />Commands for C:\DevKit\wdk81\Debuggers\x64\WINXP\nvkd.dll:<br />&nbsp; !help&nbsp;&nbsp;&nbsp; - Displays information on available extension commands<br />&nbsp; !proc&nbsp;&nbsp;&nbsp; - Displays information about a given processor<br />&nbsp; !qosline - Displays information about a given QoS Line<br />&nbsp; !vmq&nbsp;&nbsp;&nbsp;&nbsp; - Displays information about a given VMQ (Virtual Machine Queue)<br />&nbsp; !vnbl&nbsp;&nbsp;&nbsp; - Displays Extensible Virtual Switch specific data of an NBL<br />&nbsp; !vnic&nbsp;&nbsp;&nbsp; - Displays information about one or more vnic(s)<br />&nbsp; !vport&nbsp;&nbsp; - Displays information about the given vport<br />&nbsp; !vswitch - Displays information about one of more vswitch(es) and child<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vports<br /><br />Then you can run command, !nvkd.vswitch to list out all virtual switches running on the Hyper-V host. It is what is displayed in debugger.</p>
<p>2: kd&gt; !nvkd.vswitch</p>
<p>Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FriendlyName<br /><span style="background-color: #ff6600;">VSWITCH&nbsp;&nbsp;&nbsp;&nbsp; fffffa80035d2000&nbsp;&nbsp;&nbsp; ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; External Demo</span><br /><span style="background-color: #ff6600;">VSWITCH&nbsp;&nbsp;&nbsp;&nbsp; fffffa8009a32000&nbsp;&nbsp;&nbsp; ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Internal Demo</span><br /><span style="background-color: #ff6600;">VSWITCH&nbsp;&nbsp;&nbsp;&nbsp; fffffa8007c4c000&nbsp;&nbsp;&nbsp; ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Private Demo</span></p>
<p><br />It is how it looks like in Hyper-V virtual switch management console:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/66/75/4578.Capture.JPG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-66-75/4578.Capture.JPG"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/66/75/4578.Capture.JPG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-66-75/4578.Capture.JPG" alt="" border="0" /></a></p>
<p><br />&nbsp;<br />So the debug extension !nvkd.vswitch depicts the virtual switches on the Hyper-V host and you can drill down with the virtual switch object address as below:</p>
<p><span style="background-color: #ff6600;">2: kd&gt; !nvkd.vswitch fffffa80035d2000</span></p>
<p>VSWITCH fffffa80035d2000&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Name: AC2DA35C-661A-40AE-82F2-1F62F70DBB2A<br />&nbsp;&nbsp;&nbsp; Friendly Name: External Demo<br />&nbsp;&nbsp;&nbsp; RefCount: 9</p>
<p>&nbsp;&nbsp;&nbsp; Extensibility<br />&nbsp;&nbsp;&nbsp; ProtocolState: 3 (VmsExtPtStateRunning)<br />&nbsp;&nbsp;&nbsp; MiniportState: 3 (VmsExtMpStateRunning)<br />&nbsp;&nbsp;&nbsp; DeviceId: {95141247-9BD1-4449-9223-C402789D94DD}<br />&nbsp;&nbsp;&nbsp; Miniport: fffffa8003fb01a0&nbsp;&nbsp; !ndiskd.miniport fffffa8003fb01a0 <br />&nbsp;&nbsp;&nbsp; Protocol Open: fffffa80043af010&nbsp;&nbsp; !ndiskd.mopen fffffa80043af010 <br />&nbsp;&nbsp;&nbsp; IovPreferred: 0</p>
<p>&nbsp;&nbsp;&nbsp; vPort List: Count (6)<br />&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp; Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsValidation&nbsp; MonitorMode&nbsp; FriendlyName<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8003d80000&nbsp; 0x0000&nbsp; Default&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Internal<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8003d7c000&nbsp; 0x0001&nbsp; Internal&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; External Demo<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8003d7a000&nbsp; 0x0002&nbsp; External&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Realtek PCI GBE Family Controller - Virtual Switch_External<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8008b35000&nbsp; 0x0003&nbsp; Synthetic Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dynamic Ethernet Switch Port<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa800416e000&nbsp; 0x0005&nbsp; Synthetic N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dynamic Ethernet Switch Port<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa800808c000&nbsp; 0x0004&nbsp; Synthetic Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dynamic Ethernet Switch Port</p>
<p><span style="background-color: #ff6600;">2: kd&gt; !nvkd.vswitch fffffa8009a32000</span></p>
<p>VSWITCH fffffa8009a32000&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Name: E0BB29CA-1F43-4CAC-8025-BDFDA3FD3825<br />&nbsp;&nbsp;&nbsp; Friendly Name: Internal Demo<br />&nbsp;&nbsp;&nbsp; RefCount: 5</p>
<p>&nbsp;&nbsp;&nbsp; Extensibility<br />&nbsp;&nbsp;&nbsp; ProtocolState: 3 (VmsExtPtStateRunning)<br />&nbsp;&nbsp;&nbsp; MiniportState: 3 (VmsExtMpStateRunning)<br />&nbsp;&nbsp;&nbsp; DeviceId: {4E700BA5-09D3-41D3-8EA3-B2FCB3AC0741}<br />&nbsp;&nbsp;&nbsp; Miniport: fffffa80099b81a0&nbsp;&nbsp; !ndiskd.miniport fffffa80099b81a0 <br />&nbsp;&nbsp;&nbsp; Protocol Open: fffffa80091ec7d0&nbsp;&nbsp; !ndiskd.mopen fffffa80091ec7d0 <br />&nbsp;&nbsp;&nbsp; IovPreferred: 0</p>
<p>&nbsp;&nbsp;&nbsp; vPort List: Count (2)<br />&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp; Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsValidation&nbsp; MonitorMode&nbsp; FriendlyName<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa80098cb000&nbsp; 0x0000&nbsp; Default&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Internal Demo<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8009542000&nbsp; 0x0001&nbsp; Internal&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Internal Demo</p>
<p><span style="background-color: #ff6600;">2: kd&gt; !nvkd.vswitch fffffa8007c4c000</span></p>
<p>VSWITCH fffffa8007c4c000&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Name: D48F7DC3-D15D-4A3E-BF98-7E46FB8A1E4D<br />&nbsp;&nbsp;&nbsp; Friendly Name: Private Demo<br />&nbsp;&nbsp;&nbsp; RefCount: 4</p>
<p>&nbsp;&nbsp;&nbsp; Extensibility<br />&nbsp;&nbsp;&nbsp; ProtocolState: 3 (VmsExtPtStateRunning)<br />&nbsp;&nbsp;&nbsp; MiniportState: 3 (VmsExtMpStateRunning)<br />&nbsp;&nbsp;&nbsp; DeviceId: {C264D298-D597-4BEE-BB6E-3DF414901E6B}<br />&nbsp;&nbsp;&nbsp; Miniport: fffffa80089571a0&nbsp;&nbsp; !ndiskd.miniport fffffa80089571a0 <br />&nbsp;&nbsp;&nbsp; Protocol Open: fffffa8008483330&nbsp;&nbsp; !ndiskd.mopen fffffa8008483330 <br />&nbsp;&nbsp;&nbsp; IovPreferred: 0</p>
<p>&nbsp;&nbsp;&nbsp; vPort List: Count (1)<br />&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp; Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsValidation&nbsp; MonitorMode&nbsp; FriendlyName<br />&nbsp;&nbsp;&nbsp; VPORT&nbsp; fffffa8008944000&nbsp; 0x0000&nbsp; Default&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Private Demo</p>
<p><br />The beauty of debugger extension is it provides a neat and coherent view of all important attributes of virtual switch. This is just the beginning of our journey, Please stay tuned for more walk-through in next posts.</p>
<p>[Update] Unfortunately, vmswitch.sys public symbol doesn't include the necessary information for public debugger to work with. nvkd.dll will work partially to print out the vmswitch data now.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>