<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Windows Driver Developer Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/bg-p/WindowsDriverDev</link>
    <description>Windows Driver Developer Blog articles</description>
    <pubDate>Thu, 30 Apr 2026 16:22:11 GMT</pubDate>
    <dc:creator>WindowsDriverDev</dc:creator>
    <dc:date>2026-04-30T16:22:11Z</dc:date>
    <item>
      <title>Announcing Preview WDK with VS2026</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-preview-wdk-with-vs2026/ba-p/4508117</link>
      <description>&lt;P&gt;We're excited to announce a preview release of the Windows Driver Kit (WDK) that, for the first time, is compatible with Visual Studio 2026 (18.4 and later). This continues our ongoing effort to modernize the driver development experience while giving hardware partners and driver developers early access to the latest toolchains.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;What's New in This Preview&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio 2026 Support&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This preview WDK is the first release to support Visual Studio 2026. Developers can take advantage of the newest Visual Studio platform to build, test, and package Windows drivers using familiar WDK workflows. Visual Studio 2026 brings improvements across performance, C++ tooling, diagnostics, and overall IDE reliability—all of which directly benefit large driver solutions and complex build pipelines. For more on this, see &lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fvisualstudio%2Freleases%2F2026%2Frelease-notes&amp;amp;data=05%7C02%7Cpchahar%40microsoft.com%7C667c7cf9aa0842aa402908de94d1e375%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639111826353488885%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=NQQdneYA%2FetHqcEGC0bXCKE1TNHabEC79Kj4ywUz4a0%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;Visual Studio 2026 Release Notes&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WDK Delivery and Availability&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The WDK ships in three packaging formats, all of which now support Visual Studio 2026 in this preview:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Format      &lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Where to Get It&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;SDK MSI&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fsoftware-download%2Fwindowsinsiderpreviewsdk&amp;amp;data=05%7C02%7Cpchahar%40microsoft.com%7C81b16e6bcb124182595108de94e7e87f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639111921016196118%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=%2BbsicETsSBQrVhIGNSjsTCJTiwcJkX8btvobPuM7yIE%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;Windows Insider Program&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;WDK NuGet &lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.nuget.org/packages/Microsoft.Windows.WDK.x64/10.0.28000.1761-preview" target="_blank" rel="noopener"&gt;Nuget.org&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;WDK MSI     &lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fsoftware-download%2FwindowsinsiderpreviewWDK&amp;amp;data=05%7C02%7Cpchahar%40microsoft.com%7C667c7cf9aa0842aa402908de94d1e375%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639111826353502758%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=ouhdiubwtMHiimMKvNjXDfqT4g8tt6sVEjoAoKLucUk%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;Windows Insider Program&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Enterprise WDK (EWDK) ISO     &lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fsoftware-download%2FwindowsinsiderpreviewWDK&amp;amp;data=05%7C02%7Cpchahar%40microsoft.com%7C667c7cf9aa0842aa402908de94d1e375%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639111826353512835%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=VzKzIIib8w9Rpy08jegPp5KdmSuLSnWgEKEGX9rF22I%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;Windows Insider Program&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The NuGet-based WDK is the recommended approach for modern and automated workflows. For developers who need traditional layouts or offline/self-contained build environments, the WDK MSI and EWDK ISO are available through the Windows Insider Program.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Build Tools Support with WDK and SDK MSIs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A common request has been better alignment between Visual Studio Build Tools and driver builds. In this preview, that experience is improved.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What's Supported&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;Visual Studio Build Tools can now be used alongside installed Windows SDK and Windows Driver Kit MSIs.&lt;/LI&gt;
&lt;LI&gt;Installing the "Windows Driver Kit" individual component via the Visual Studio Installer enables:&lt;/LI&gt;
&lt;UL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;Headless build machines&lt;/LI&gt;
&lt;LI&gt;CI agents without the full Visual Studio IDE&lt;/LI&gt;
&lt;LI&gt;Cleaner separation between development and build environments&lt;/LI&gt;
&lt;/UL&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Setup Guide&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;Download and Install &lt;A class="lia-external-url" href="https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2026" target="_blank"&gt;Visual Studio Build Tools for VS 2026&lt;/A&gt;.&amp;nbsp;
&lt;UL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;In the installer, select:
&lt;UL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;Individual Components → Windows Driver Kit&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Open NuGet Package Manager and search for Microsoft.Windows.WDK and select&amp;nbsp;
&lt;P&gt;10.0.28000.1761-preview&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Or if you wan to use MSIs proceed further.&lt;/LI&gt;
&lt;LI&gt;Install the Windows SDK MSI.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Install the Windows Driver Kit MSI (&lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fsoftware-download%2Fwindowsinsiderpreviewwdk&amp;amp;data=05%7C02%7Cpchahar%40microsoft.com%7C667c7cf9aa0842aa402908de94d1e375%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639111826353521712%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=eCryXevUEQiiPauNE1ePoA17FxIfVcJn6punRvCYKb0%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;preview&lt;/A&gt;).&lt;/LI&gt;
&lt;LI&gt;Proceed with building drivers using MSBuild as usual.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This setup works well for CI/CD pipelines and enterprise build environments where the full IDE is unnecessary.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Preview Notes&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-editing-info="{&amp;quot;applyListStyleFromLevel&amp;quot;:true}"&gt;
&lt;LI&gt;This is a preview release intended for evaluation and early adoption.&lt;/LI&gt;
&lt;LI&gt;APIs, tooling behavior, and compatibility details may evolve.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;We're looking forward to your feedback as you try this preview and bring your driver development workflows onto Visual Studio 2026.&lt;/P&gt;</description>
      <pubDate>Fri, 10 Apr 2026 18:41:56 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-preview-wdk-with-vs2026/ba-p/4508117</guid>
      <dc:creator>prashantchahar</dc:creator>
      <dc:date>2026-04-10T18:41:56Z</dc:date>
    </item>
    <item>
      <title>HLK Testing Updates for Software and Filter Drivers</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/hlk-testing-updates-for-software-and-filter-drivers/ba-p/4495781</link>
      <description>&lt;P&gt;All drivers that participate in the Windows Hardware Compatibility Program (WHCP) are expected to meet Microsoft’s baseline quality, reliability, and security requirements before they are signed and distributed. These requirements are enforced through Hardware Lab Kit (HLK) testing and certification workflows.&lt;/P&gt;
&lt;P&gt;Historically, HLK testing coverage was most consistently applied to hardware device drivers. As a result, &lt;STRONG&gt;software drivers and filter drivers did not always receive the same level of automated test coverage&lt;/STRONG&gt;, even though they operate in equally privileged and security‑sensitive areas of the operating system.&lt;/P&gt;
&lt;P&gt;This gap has now been addressed.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;What Changed&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;To improve validation of file system mini‑filters and other Filter Manager (fltmgr) clients, new test capabilities were added that allow HLK and Windows Driver Test Framework (WDTF)–based scenarios to reason explicitly about filter drivers. These changes are available in 26H1 HLK and the upcoming 2026.03 WDK release under ERT.&lt;/P&gt;
&lt;P&gt;These updates include:&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Enhanced Driver Verifier &lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Filter Verifier is now enabled for File System MiniFilter and software drivers. Filter Verifier validates correct usage of Filter Manager APIs, enforces object-lifetime rules and integrates with Driver Verifier (DV) to surface violation during runtime testing.&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-teams="true"&gt;See &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/file-system-filter-verification" target="_blank" rel="noopener" aria-label="Link File System Filter Verification - Windows drivers | Microsoft Learn"&gt;File System Filter Verification&lt;/A&gt; , &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/dv-storport-verification" target="_blank" rel="noopener" aria-label="Link Storport Verification - Windows drivers | Microsoft Learn"&gt;Storport Verification&lt;/A&gt; and &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/i-o-verification" target="_blank" rel="noopener" aria-label="Link I/O Verification - Windows drivers | Microsoft Learn"&gt;I/O Verification&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What this enables&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When Filter Verifier is enabled and exercised through DV/WDTF testing, additional Driver Verifier checks are applied across the active device stack. These checks may surface violations such as:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Execution‑context violations&lt;/STRONG&gt;&lt;BR /&gt;Reported via Driver Verifier (for example, VRF_ExecutionContext!PollWorkerEntry) when a driver executes at an invalid IRQL or in an inappropriate threading context.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Leaked pool allocations&lt;/STRONG&gt;&lt;BR /&gt;Reported when verified drivers fail to release memory during unload or stress scenarios (for example, VRF_LEAKED_POOL_IMAGE_*).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Security‑isolation and object‑lifetime violations&lt;/STRONG&gt;&lt;BR /&gt;Reported when kernel objects such as FLT_CALLBACK_DATA or FILE_OBJECT are not correctly released.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;WDTF/DEVFUND Improvements&lt;/STRONG&gt;&lt;/H4&gt;
&lt;H5&gt;&lt;STRONG&gt;Expanded Test Coverage&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Windows Device Testing Framework (WDTF) is used to support the verification of Filesystem MiniFilters drivers. As part of this work, HLK coverage for software and filter drivers was significantly expanded, increasing the number of applicable HLK tests from&amp;nbsp;22 to 41. This expansion enables a broader set of existing DevFund scenarios to run against filesystem filter drivers, substantially improving validation coverage for correctness, reliability, and OS contract compliance.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;WDTF Action Plugins&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;New WDTF action plugins were introduced and integrated into FIlter Manager (Fltmgr) API based tests into DevFund in the HLK to enable more targeted validation of File System MiniFilter drivers. These tests leverage Filter Manager &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/user-mode-library" target="_blank" rel="noopener"&gt;User-Mode Library. &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The WDTF volume plugin has been updated with this new functionality. The new coverage will apply to the following filters&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;FSFilter Activity Monitor&lt;/LI&gt;
&lt;LI&gt;FSFilter Anti‑Virus&lt;/LI&gt;
&lt;LI&gt;FSFilter Bottom&lt;/LI&gt;
&lt;LI&gt;FSFilter Cluster File System&lt;/LI&gt;
&lt;LI&gt;FSFilter Compression&lt;/LI&gt;
&lt;LI&gt;FSFilter Content Screener&lt;/LI&gt;
&lt;LI&gt;FSFilter Continuous Backup&lt;/LI&gt;
&lt;LI&gt;FSFilter Copy Protection&lt;/LI&gt;
&lt;LI&gt;FSFilter Encryption&lt;/LI&gt;
&lt;LI&gt;FSFilter HSM&lt;/LI&gt;
&lt;LI&gt;FSFilter Imaging&lt;/LI&gt;
&lt;LI&gt;FSFilter Open File&lt;/LI&gt;
&lt;LI&gt;FSFilter Physical Quota Management&lt;/LI&gt;
&lt;LI&gt;FSFilter Quota Management&lt;/LI&gt;
&lt;LI&gt;FSFilter Replication&lt;/LI&gt;
&lt;LI&gt;FSFilter Security Enhancer&lt;/LI&gt;
&lt;LI&gt;FSFilter System Recovery&lt;/LI&gt;
&lt;LI&gt;FSFilter Top&lt;/LI&gt;
&lt;LI&gt;FSFilter Undelete&lt;/LI&gt;
&lt;LI&gt;FSFilter Virtualization&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These plugins allow tests to observe I/O behavior, apply Driver Verifier dynamically, and generate concurrent I/O patterns under stress conditions.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;WDTF Datagathers updates&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;WDTF datagathers were enhanced to enumerate active File System MiniFilter drivers on a per‑volume basis using Filter Manager APIs. This allows tests to accurately detect loaded filters, their attachment state, and associated filter communication ports, enabling DevFund and HLK tests to correctly target and validate filesystem filter drivers&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;WDTF IO Plugin Updates&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Several WDTF I/O plugins were updated to improve Filesystem MiniFilter validation:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The Volume WDTF plugin was updated to leverage Filter Manager (FltMgr) APIs when exercising File System MiniFilter functionality.&lt;/LI&gt;
&lt;LI&gt;Support was added for validating filter communication ports.&lt;/LI&gt;
&lt;LI&gt;FSCTL‑based I/O was introduced to better exercise filesystem‑specific control paths.&lt;/LI&gt;
&lt;LI&gt;The WDTF Driver Verifier plugin was enhanced to enable targeted verification during DevFund and HLK test execution, including:
&lt;UL&gt;
&lt;LI&gt;WDM I/O verification,&lt;/LI&gt;
&lt;LI&gt;Filter Verifier for filesystem filters,&lt;/LI&gt;
&lt;LI&gt;SCSI and Storport verifiers for disk and storage drivers.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This work ensures that&lt;STRONG&gt; &lt;/STRONG&gt;filter drivers—especially those operating in security‑sensitive paths—are exercised and validated using the same framework rigor as other kernel‑mode drivers.&lt;/P&gt;
&lt;P&gt;Previously, some tests did not enumerate for these driver classes due to tooling limitations. Those limitations have been removed, and HLK now applies the appropriate tests to these drivers where applicable.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Why This Matters&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Software and filter drivers play a critical role in system stability and security. Ensuring they are validated consistently helps improve ecosystem reliability and reduces the risk of system‑wide impact from driver failures.&lt;/P&gt;
&lt;P&gt;No new certification bar has been introduced. Instead, this change closes a gap where HLK behavior did not fully reflect the security and quality intent that already applied to kernel‑mode drivers.&lt;/P&gt;
&lt;P&gt;The goal is consistency:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Software drivers&lt;/LI&gt;
&lt;LI&gt;Filter drivers&lt;/LI&gt;
&lt;LI&gt;Hardware device drivers&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;are all held to the same baseline expectations when they participate in WHCP.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Call to Action&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;If you develop:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Kernel‑mode software drivers&lt;/LI&gt;
&lt;LI&gt;File system mini‑filters&lt;/LI&gt;
&lt;LI&gt;Security‑sensitive filter drivers&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;you may now see &lt;STRONG&gt;additional HLK tests enumerate&lt;/STRONG&gt; where they previously did not. This reflects corrected tooling behavior, not a policy change.&lt;/P&gt;
&lt;P&gt;If you encounter unexpected results or believe a test is being applied incorrectly, please engage through the standard driver support channels.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Apr 2026 21:04:32 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/hlk-testing-updates-for-software-and-filter-drivers/ba-p/4495781</guid>
      <dc:creator>Paul_Eze</dc:creator>
      <dc:date>2026-04-08T21:04:32Z</dc:date>
    </item>
    <item>
      <title>Announcing Device IOCTL/WMI Record and Playback Platform (DRPP)</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-device-ioctl-wmi-record-and-playback-platform-drpp/ba-p/4486505</link>
      <description>&lt;P&gt;​The Device IOCTL/WMI Record and Playback platform (DRPP) records the Device I/O Control Codes (IOCTLs, &lt;SPAN data-teams="true"&gt;kernel model IRP_MJ_DEVICE_CONTROL&lt;/SPAN&gt;) and WMI I/O Request Packets (IRPs, &lt;SPAN data-teams="true"&gt;kernel mode IRP_MJ_SYSTEM_CONTROL&lt;/SPAN&gt;) &lt;SPAN data-teams="true"&gt;that are successfully processed by the devnode &lt;/SPAN&gt;for one or more Device(s) Under Test (DUTs).&amp;nbsp;&lt;SPAN data-teams="true"&gt;The purpose of this security extension to the WDTF platform is to discover which Device I/O Control Codes and WMI IRPs cause the driver and/or device to perform a specific action as opposed to simply return an error&lt;/SPAN&gt;. &amp;nbsp;&lt;SPAN data-teams="true"&gt;These IOCTLs, IRPs are recorded to a file which can be written to when executing any WDTF based test such as Devfund". A new test can be written to replay this IO back to the Device under test thus saving time and machine cycles (since only ‘meaningful’ IOCTLs and WMI IRPs will be executed rather than all IOCTLs and IRPs). This platform is shipped as part of WDK.&lt;/SPAN&gt;.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The DRP&amp;nbsp;platform&amp;nbsp;consists of the following components:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;An &lt;SPAN data-teams="true"&gt;Upper Filter Device Object (FiDO)&lt;/SPAN&gt; installed on the DUT that records Device I/O Control Codes and WMI IRPs to a data file with target binding information.&lt;/LI&gt;
&lt;LI&gt;An IoSpy Action to enable and disable Filter Device Object(s) installed on the DUT.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-teams="true"&gt;A Fuzz test is used to generate the IOCTLs and WMI IRPs for DUT(s)&lt;/SPAN&gt;.&lt;/LI&gt;
&lt;LI&gt;An IoSpy Action to disable the Filter Device Object installed on one or more the DUTs.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;A Replay Action to playback any successfully processed IRPs or IOCTLs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The&amp;nbsp;features of the&amp;nbsp;platform&amp;nbsp;are&amp;nbsp;executed&amp;nbsp;in order&amp;nbsp;as a system which consists of the following phases:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Using WDK to prepare a system for driver development and testing which will consist of a developer box and a target machine, and the target machine will host the hardware/device under test.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Upper Filter Device Object (IoSpy) Enable Phase: enables/installs the IoSpy driver on the DUT.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Recording (training) Phase: records various details about the DUT, Device I/O Control Codes, and WMI IRPs to a file.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Playback Phase: uses the data file to intelligently test DUT(s).&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These phases are described in more detail through the rest of this document.&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;1. Setting up test and target machines&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG data-olk-copy-source="MailCompose"&gt;Provision the target from Visual Studio (sets debugger + surfaces KD key/port)&lt;/STRONG&gt;&amp;nbsp; ( &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/provision-a-target-computer" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/provision-a-target-computer&lt;/A&gt;)&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Install WDK using &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk&lt;/A&gt;&amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;On the &lt;STRONG&gt;host&lt;/STRONG&gt;, open &lt;STRONG&gt;Visual Studio&lt;/STRONG&gt;&amp;nbsp;→ &lt;STRONG&gt;Extensions&lt;/STRONG&gt;&amp;nbsp;→ &lt;STRONG&gt;Driver&lt;/STRONG&gt;&amp;nbsp;→ &lt;STRONG&gt;Test&lt;/STRONG&gt;&amp;nbsp;→ &lt;STRONG&gt;Configure Devices&lt;/STRONG&gt;.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Select &lt;STRONG&gt;Add new device&lt;/STRONG&gt;&amp;nbsp;→ set &lt;STRONG&gt;Network host name&lt;/STRONG&gt;&amp;nbsp;to the&amp;nbsp;target’s&amp;nbsp;computer name or local IP.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Check &lt;STRONG&gt;Provision device and choose debugger settings&lt;/STRONG&gt;&amp;nbsp;→ &lt;STRONG&gt;Next&lt;/STRONG&gt;.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Choose &lt;STRONG&gt;KDNET (Network)&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;required&amp;nbsp;settings will be prefilled, make sure&amp;nbsp;the host IP is set&amp;nbsp;correct. For KDNET, Visual Studio will configure the&amp;nbsp;network&amp;nbsp;transport and generate the &lt;STRONG&gt;KD key&lt;/STRONG&gt;&amp;nbsp;and &lt;STRONG&gt;port&lt;/STRONG&gt;&amp;nbsp;values used by&amp;nbsp;WinDbg. Provisioning may reboot the target multiple times. When finished, select &lt;STRONG&gt;Finish&lt;/STRONG&gt;, then &lt;STRONG&gt;restart&lt;/STRONG&gt;&amp;nbsp;the host if prompted.&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;After provisioning, the Configure Devices menu displays connection details for kernel debugging—&lt;STRONG&gt;KD key&lt;/STRONG&gt;&amp;nbsp;and &lt;STRONG&gt;debug port&lt;/STRONG&gt;. Use these values to attach &lt;STRONG&gt;WinDbg&amp;nbsp;(x64)&lt;/STRONG&gt;&amp;nbsp;from the host:&lt;/P&gt;
&lt;P&gt;Kernel Debugger (recommended)&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Launch &lt;STRONG&gt;WinDbg&amp;nbsp;(x64)&lt;/STRONG&gt;&amp;nbsp;as Administrator on the host.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;File → Kernel Debug → NET&lt;/STRONG&gt;.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Enter the &lt;STRONG&gt;Port&lt;/STRONG&gt;, and &lt;STRONG&gt;Key&lt;/STRONG&gt;&amp;nbsp;exactly as shown on the &lt;EM&gt;Target Machine Ready&lt;/EM&gt; screen&amp;nbsp;of&amp;nbsp;driver extension.&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;2. Upper Filter Device Object (IoSpy) the Enable Phase&lt;/STRONG&gt;&amp;nbsp;&lt;/H4&gt;
&lt;P&gt;IoSpy&amp;nbsp;is a filter driver&amp;nbsp;that creates&amp;nbsp;an&amp;nbsp;upper&amp;nbsp;Filter Device Object&amp;nbsp;(FiDO)&amp;nbsp;that records data about IOCTLs&amp;nbsp;and WMI requests made to the kernel-mode device or&amp;nbsp;devnode/DUT.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-teams="true"&gt;The IoSpy Action is used to install, uninstall the IoSpy driver’s upper FiDO on one or more DUTs&lt;/SPAN&gt;.&amp;nbsp;&amp;nbsp;The Device Query (DQ) parameter controls which DUT(s) the IoSpy filter driver’s FiDO is installed on.&amp;nbsp;&amp;nbsp;The diagram below shows how the IoSpy driver is enabled on a DUT and what the device stack looks like after the FiDO has been installed:&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is sample code of how to install the IoSpy FiDO on a ‘media’ class DUT on a given system using powershell 7.5.0:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;# Create the WDTF COM object&lt;/P&gt;
&lt;P&gt;$wdtf = New-Object -ComObject "WDTF2.WDTF"&lt;/P&gt;
&lt;P&gt;# Query for all started devices in the desired class&lt;/P&gt;
&lt;P&gt;# Use 'Camera' for cameras, or 'Media' if you want to keep the scope wider. See here for more&lt;/P&gt;
&lt;P&gt;# options for SDEL query &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/wdtf/simple-data-evaluation-language-overview" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/en-us/windows-hardware/drivers/wdtf/simple-data-evaluation-language-overview&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;$devices = $wdtf.DeviceDepot.Query("IsDevice AND Class='Media' AND IsStarted=True")&lt;/P&gt;
&lt;P&gt;# Loop through each device and enable IoSpy&lt;/P&gt;
&lt;P&gt;foreach ($device in $devices) {&lt;/P&gt;
&lt;P&gt;$ioSpy = $device.GetInterface("IoSpy")&lt;/P&gt;
&lt;P&gt;$ioSpy.Enable()&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below logging information is from this phase.&amp;nbsp;&amp;nbsp;This information is logged by an example test which uses the DRP platform, specifically the IoSpy driver:&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Query("IsDevice&amp;nbsp;AND Class='Media' AND&amp;nbsp;IsStarted=True")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Realtek&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BB&lt;/P&gt;
&lt;P&gt;C&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;GetInterface("IoSpy")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Enable()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data file&amp;nbsp;located&amp;nbsp;at :&amp;nbsp;\??\C:\iospy\IoSpyData_00000037&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;DisableDevice()&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;EnableDevice()&amp;nbsp;&amp;nbsp; :&amp;nbsp;&amp;nbsp;( get&amp;nbsp;status count:&amp;nbsp;&amp;nbsp;1 )&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;GetInterface("IoSpy")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Enable()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_IOSPY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data file&amp;nbsp;located&amp;nbsp;at :&amp;nbsp;\??\C:\iospy\IoSpyData_00000041&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;DisableDevice()&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_PNP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;3. Recording (training) Phase&lt;/STRONG&gt;&amp;nbsp;&lt;/H4&gt;
&lt;P&gt;The training phase is longer than the playback phase as we use the Fuzz Action to send many Device I/O Control Codes (IOCTLs) and WMI IRPs to the DUT.&amp;nbsp;&amp;nbsp;In this phase, we specifically identify the IOCTLs and IRPS that the DUT succeeded in and write this information to a data file specific to the DUT. &lt;SPAN data-teams="true"&gt;This is how the DRP extension to the WDTF platform determines which IOCTLs&lt;/SPAN&gt; and IRPs are ‘meaningful’ to the device- that is, the specific IOCTL or WMI IRP causes the device or driver to perform some action besides simply return an error.&lt;/P&gt;
&lt;P&gt;The diagram&amp;nbsp;below&amp;nbsp;shows how&amp;nbsp;the&amp;nbsp;IoSpy&amp;nbsp;driver&amp;nbsp;records&amp;nbsp;IRP&amp;nbsp;and IOCTL&amp;nbsp;processing for a DUT:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The logging information below is from this phase.&amp;nbsp;&amp;nbsp;This information is logged by a test which uses the DRP, specifically the IoSpy driver:&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Query("IsDevice&amp;nbsp;AND Class='Media' AND&amp;nbsp;IsStarted=True")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Realtek&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BBC&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;Device&amp;nbsp; NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;IoSpy&amp;nbsp;Info&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataFileName&amp;nbsp;&amp;nbsp; :&amp;nbsp;\??\C:\iospy\IoSpyData_00000037&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fsDataFilePresent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;Device&amp;nbsp; Microsoft® LifeCam VX-7000&amp;nbsp;&lt;STRONG&gt;USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;IoSpy&amp;nbsp;Info&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataFileName&amp;nbsp;&amp;nbsp; :&amp;nbsp;\??\C:\iospy\IoSpyData_00000041&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fsDataFilePresent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;Device&amp;nbsp; Realtek&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BBC&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;IoSpy&amp;nbsp;Info&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataFileName&amp;nbsp;&amp;nbsp; :&amp;nbsp;\??\C:\iospy\IoSpyData_0000003a&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fsDataFilePresent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;True&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Query("IsDevice&amp;nbsp;AND Class='Media' AND&amp;nbsp;IsStarted=True")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;HasInterface("FuzzTest")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;GetInterface("FuzzTest")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;Number of tests&amp;nbsp;found:5&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; Run tests&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTESTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;RunAll()&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTESTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTESTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;RunTestUntilStopped(SubOpens&amp;nbsp;Test)&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTESTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;64B94B2&amp;amp;0&amp;amp;0002&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; -&amp;nbsp;Start()&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft® LifeCam VX-7000&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp; - Starting fuzz test:&amp;nbsp;SubOpens&amp;nbsp;Test&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Target :&amp;nbsp;Microsoft® LifeCam VX-7000&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Found 2 interfaces.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Attempting to open interface: \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global. Access Mode=NO SYNC. Open Type=OTHER. Opened with access 1201bf [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global. Access Mode=DIRECT. Open Type=OTHER. Opened with access 120080 [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global. Access Mode=NO SYNC. Open Type=TREE_CONNECT. Opened with access 1201bf [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global\&amp;nbsp;. Access Mode=NO SYNC. Open Type=OTHER. Opened with access 1201bf [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global\&amp;nbsp;. Access Mode=DIRECT. Open Type=OTHER. Opened with access 120080 [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global\&amp;nbsp;. Access Mode=NO SYNC. Open Type=TREE_CONNECT. Opened with access 1201bf [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global\\. Access Mode=NO SYNC. Open Type=OTHER. Opened with access 1201bf [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;WDTF_FUZZTEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp;INFO&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp; Opened \DosDevices\usb#vid_045e&amp;amp;pid_0723&amp;amp;mi_02#6&amp;amp;64b94b2&amp;amp;0&amp;amp;0002#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global\\. Access Mode=DIRECT. Open Type=OTHER. Opened with access 120080 [0]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Run fuzzing from Visual Studio using the Driver Extension Menu&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As the target machine is already provisioned using Visual Studio.&amp;nbsp;Click on the Driver menu under Extensions and select&amp;nbsp;&lt;STRONG&gt;Driver → Test&amp;nbsp;→ New Test Group&lt;/STRONG&gt;&amp;nbsp;from the context menu.&amp;nbsp;Click add remove tests&amp;nbsp;Choose&amp;nbsp;&lt;STRONG&gt;Fuzz&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt;Tests&amp;nbsp;&lt;/STRONG&gt;from the list as they make sure to access all the code paths from the available test suites e.g.&amp;nbsp;&lt;EM&gt;DF&amp;nbsp;Fuzz Random IOCTL and Fuzz Zero Length buffer&lt;/EM&gt; test.&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp;Configure and Run the Test&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Set any required test parameters, such as the device query string (e.g., &lt;EM&gt;IsDevice&amp;nbsp;AND Class='Media' AND&amp;nbsp;IsStarted=True&lt;/EM&gt;&amp;nbsp;for media devices).&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Run&lt;/STRONG&gt;&amp;nbsp;to start the&amp;nbsp;Devfund&amp;nbsp;test. Visual Studio will deploy the test binaries, execute the test on the target, and collect results.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Review Results&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Test results, including logs and status, will appear in the Visual Studio Test Explorer or Output window.&amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;When the&amp;nbsp;devices&amp;nbsp;were&amp;nbsp;configured to be spied upon,&amp;nbsp;IoSpy&amp;nbsp;Data file is generated for all the devices which are under test.&amp;nbsp;Following&amp;nbsp;binding file and&amp;nbsp;IoSpy&amp;nbsp;data file information will be provided when&amp;nbsp;IoSpy&amp;nbsp;is enabled.&amp;nbsp;These files are not expected to be modified and they are not in human readable format.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Binding File Information Produced&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 1376px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;DisplayName&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;DeviceID&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;ClassGuid&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;DriverBinaryNamesAndVersion&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;IoSpy&amp;nbsp;Data File&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;NVIDIA&amp;nbsp;High Definition&amp;nbsp;Audio&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;{4d36e96c-e325-11ce-bfc1-08002be10318}&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ksthunk.sys 10.0.18218.1000 nvhda64v.sys 1.3.35.1&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;IoSpyData_00000043&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft® LifeCam VX-7000&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;24DE6407&amp;amp;0&amp;amp;0002&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;{4d36e96c-e325-11ce-bfc1-08002be10318}&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ksthunk.sys 10.0.18218.1000 usbaudio.sys 10.0.18218.1000&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;IoSpyData_00000044&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Realtek&amp;nbsp;High Definition&amp;nbsp;Audio&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BBC&amp;amp;0&amp;amp;0001&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;{4d36e96c-e325-11ce-bfc1-08002be10318}&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ksthunk.sys 10.0.18218.1000 rtkvhd64.sys 6.0.1.7544&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;IoSpyData_00000042&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft® LifeCam VX-7000&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_00\6&amp;amp;24DE6407&amp;amp;0&amp;amp;0000&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;wdmcompanionfilter.sys 10.0.18218.1000 ksthunk.sys 10.0.18218.1000 usbvideo.sys 10.0.18218.1000&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;IoSpyData_00000041&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H4&gt;&lt;STRONG&gt;4.Playback Phase&lt;/STRONG&gt;&amp;nbsp;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-teams="true"&gt;Now that we have a data&amp;nbsp;file and&amp;nbsp;binding information,&amp;nbsp;using the DRP extension to the WDTF platform we can&amp;nbsp;playback&amp;nbsp;these I/O&amp;nbsp;(IOCTLS and IRPs)&amp;nbsp;to any number of instance(s) of the same Device on any&amp;nbsp;number of&amp;nbsp;systems.&lt;/SPAN&gt;.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The diagram below shows how playback works for many DUTs on a single system:&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;C&lt;/STRONG&gt;&lt;STRONG&gt;onsole Output&amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The user will see the following output on the screen when running a test that uses the Replay&amp;nbsp;Action on&amp;nbsp;a ‘media’ class device, for example:&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : - Query("IsDevice AND Class='Media' AND IsStarted=True")&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: NVIDIA High Definition Audio HDAUDIO\FUNC_01&amp;amp;VEN_10DE&amp;amp;DEV_0051&amp;amp;SUBSYS_10DE1087&amp;amp;REV_1001\5&amp;amp;2A94585&amp;amp;0&amp;amp;0001&lt;/P&gt;
&lt;P&gt;WDTF_TARGETS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft« LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;24DE6407&amp;amp;0&amp;amp;0002&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : - GetInterface("IoReplay")&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft« LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;24DE6407&amp;amp;0&amp;amp;0002&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : DataFile: \??\C:\iospy\IoSpyData_0000003d&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : - IoReplayIOCTL()&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Microsoft« LifeCam VX-7000 USB\VID_045E&amp;amp;PID_0723&amp;amp;MI_02\6&amp;amp;24DE6407&amp;amp;0&amp;amp;0002&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data file located at : \??\C:\iospy\IoSpyData_0000003d&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result: Number of IOCTL entries: 2219286. Number of IOCTL to replay 69862&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : - GetInterface("IoReplay")&lt;/P&gt;
&lt;P&gt;WDTF_TARGET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Realtek High Definition Audio HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BBC&amp;amp;0&amp;amp;0001&lt;/P&gt;
&lt;P&gt;WDTF_TEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : DataFile: \??\C:\iospy\IoSpyData_00000037&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO : - IoReplayIOCTL()&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target: Realtek High Definition Audio HDAUDIO\FUNC_01&amp;amp;VEN_10EC&amp;amp;DEV_0899&amp;amp;SUBSYS_102805B7&amp;amp;REV_1000\4&amp;amp;220B1BBC&amp;amp;0&amp;amp;0001&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data file located at : \??\C:\iospy\IoSpyData_00000037&lt;/P&gt;
&lt;P&gt;WDTF_IoReplay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : INFO :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result: Number of IOCTL entries: 59936772. Number of IOCTL to replay 2285436&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is sample powershell script that is used to call the Replay action for a Microsoft LifeCam Camera or Media DUT, for example:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;# Create the WDTF COM object&lt;/P&gt;
&lt;P&gt;$wdtf = New-Object -ComObject "WDTF2.WDTF"&lt;/P&gt;
&lt;P&gt;# Query for all started Camera device or Media&lt;/P&gt;
&lt;P&gt;$devices = $wdtf.DeviceDepot.Query("IsDevice AND Class='Media’ AND IsStarted=True")&lt;/P&gt;
&lt;P&gt;# Loop through each device and replay all I/O&lt;/P&gt;
&lt;P&gt;foreach ($device in $devices) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ioReplay = $device.GetInterface("IoReplay")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ioReplay.IoReplayAll()&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Following powershell script can be used to disable IoSpy&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 59.1667%; height: 329px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;# Create the WDTF COM object&lt;/P&gt;
&lt;P&gt;$wdtf = New-Object -ComObject "WDTF2.WDTF"&amp;nbsp;&lt;/P&gt;
&lt;P&gt;# Query for all started Media devices&lt;/P&gt;
&lt;P&gt;$devices = $wdtf.DeviceDepot.Query("IsDevice AND Class='Media' AND IsStarted=True")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;# Loop through each device and disable IoSpy&lt;/P&gt;
&lt;P&gt;foreach ($device in $devices) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; $ioSpy = $device.GetInterface("IoSpy")&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; $ioSpy.Disable()&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-path-to-node="2"&gt;&lt;STRONG&gt;Why DRPP? Key Value Pillars for Driver Validation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-path-to-node="3"&gt;The Device IOCTL/WMI Record and Playback Platform (DRPP) introduces a more intelligent, modular approach to driver testing. By decoupling I/O capture from execution, the platform provides several strategic advantages for the ecosystem:&lt;/P&gt;
&lt;UL data-path-to-node="4"&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,0,0" data-index-in-node="0"&gt;Portable Bug Reproduction:&lt;/STRONG&gt; Generate standalone data and binding files to reproduce complex issues on remote machines. This "portable repro" allows engineers to investigate bugs on different systems without moving physical hardware.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,1,0" data-index-in-node="0"&gt;Simplified Test Infrastructure:&lt;/STRONG&gt; Run tests on a Device Under Test (DUT) without the overhead of the full Fuzz Test suite or specific Simple I/O plugins. This significantly reduces setup complexity and environment requirements.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,2,0" data-index-in-node="0"&gt;Accelerated Test Cycles:&lt;/STRONG&gt; DRPP focuses on replaying relevant, successful I/O rather than "blind" attempts. This targeted approach reduces total test time and ensures machine cycles are spent on meaningful code paths.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,3,0" data-index-in-node="0"&gt;Scalable Deployment:&lt;/STRONG&gt; Once captured, data files can be used to playback I/O across any number of DUTs on single or multiple systems simultaneously, making it ideal for large-scale validation labs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,4,0" data-index-in-node="0"&gt;Cross-Device Compatibility:&lt;/STRONG&gt; Data and binding files can be tailored to run across similar devices within the same class, allowing a single recording to validate an entire product line.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,5,0" data-index-in-node="0"&gt;Streamlined Security Collaboration:&lt;/STRONG&gt; Share capture files easily between teams to reproduce security vulnerabilities or Bug Checks (BSODs). This facilitates faster patching and better cross-organizational response.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,6,0" data-index-in-node="0"&gt;Filling the Plugin Gap:&lt;/STRONG&gt; Microsoft can reuse these data files in the WDK and HLK to provide rigorous testing for device classes that currently lack dedicated SimpleIO (WDTF) plugins.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="4,7,0" data-index-in-node="0"&gt;Data-Driven Security Insights:&lt;/STRONG&gt; By analyzing results from DRP and associated Fuzz Tests, we can identify "high-risk" device classes—those with higher security exposure—and prioritize hardening efforts accordingly.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-path-to-node="0"&gt;&lt;STRONG&gt;Extensions and Interoperability&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-path-to-node="1"&gt;The DRPP architecture is designed for integration into broader hardware development lifecycles and collaborative workflows:&lt;/P&gt;
&lt;UL data-path-to-node="2"&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="8,0,0" data-index-in-node="0"&gt;Data Sharing:&lt;/STRONG&gt; By installing the IoSpy recording driver in a lab environment, teams can capture and share data files across Microsoft and third-party organizations to streamline validation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="8,1,0" data-index-in-node="0"&gt;Security Testing:&lt;/STRONG&gt; Recorded data files can be reused to perform security testing, such as IOCTL buffer attacks, across any number of DUTs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="8,2,0" data-index-in-node="0"&gt;Replay:&lt;/STRONG&gt; Users can tailor binding data to allow for replay and security testing on similar devices within the same device setup class.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="8,3,0" data-index-in-node="0"&gt;Cloud Based Distribution:&lt;/STRONG&gt; Training data collected from Microsoft machines can be shared with third parties via Azure, significantly shortening the time required for security testing&lt;SPAN style="color: rgb(30, 30, 30);"&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-path-to-node="10"&gt;&lt;STRONG&gt;Future Opportunities&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-path-to-node="10"&gt;We are focused on increasing the flexibility of the platform through the following planned enhancements:&lt;/P&gt;
&lt;UL data-path-to-node="11"&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="11,0,0" data-index-in-node="0"&gt;Test Cycle Improvement:&lt;/STRONG&gt; Supplying pre-generated data files to IHVs to reduce their internal test cycles.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="11,1,0" data-index-in-node="0"&gt;Data Consolidation:&lt;/STRONG&gt; The ability to merge multiple data files for a given DUT or device class into a single test resource.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG data-path-to-node="11,2,0" data-index-in-node="0"&gt;Granular Control:&lt;/STRONG&gt; Enabling the ability to update binding files or remove specific IOCTL entries from a data file for more targeted testing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;References&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;U.S. Patent 10,922,249 B2. Available at: https://patents.google.com/patent/US10922249B2&lt;/P&gt;
&lt;P&gt;Contributors:&lt;/P&gt;
&lt;P&gt;Prashant Chahar, Con McGarvey&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2026 01:38:49 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-device-ioctl-wmi-record-and-playback-platform-drpp/ba-p/4486505</guid>
      <dc:creator>prashantchahar</dc:creator>
      <dc:date>2026-01-28T01:38:49Z</dc:date>
    </item>
    <item>
      <title>Towards Rust in Windows Drivers</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/towards-rust-in-windows-drivers/ba-p/4449718</link>
      <description>&lt;P&gt;&lt;STRONG&gt;November 2025 update:&lt;A class="lia-external-url" href="https://crates.io/crates/cargo-wdk" target="_blank"&gt; our cargo-wdk tool is now available on crates.io&lt;/A&gt;.&amp;nbsp; As with any cargo tool, it can be installed by running "cargo install cargo-wdk".&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Over the last several years, Microsoft and the industry as a whole have embraced Rust as a vital tool to reduce bugs, improve security, and encourage safe, maintainable programming.&amp;nbsp; With its compile-time guarantees around memory safety and strong ergonomics, Rust is a powerful tool for systems-level programming.&lt;/P&gt;
&lt;P&gt;We’ve received lots of feedback from driver developers who want to begin writing Windows drivers in Rust so they can take advantage of these benefits when working with the Windows kernel.&amp;nbsp; In response, the Windows team has been working to create a framework for writing and deploying drivers in Rust.&amp;nbsp; By building off the terrific efforts of&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/blog/SurfaceITPro/safer-drivers-stronger-devices/4431411" target="_blank" rel="noopener"&gt;the Surface team&lt;/A&gt;, we’re starting our journey to make Rust a first-class language for driver developers around the world.&lt;/P&gt;
&lt;P&gt;This blog post will cover the current state of Rust for Windows Drivers and discuss our vision for the future.&lt;/P&gt;
&lt;H2&gt;windows-drivers-rs and the WDK environment&lt;/H2&gt;
&lt;P&gt;Driver developers are used to writing drivers in C by linking to the libraries included in the Windows Driver Kit (WDK).&amp;nbsp; Our goal is to ensure that Rust developers can take advantage of the same libraries and headers in the WDK as C developers, granting them access to all the DDIs needed to write a Windows driver.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/" target="_blank" rel="noopener"&gt;windows-drivers-rs&lt;/A&gt;&amp;nbsp;is the primary Git repo for enabling developers to begin using Rust with the WDK.&amp;nbsp; Pioneered by Surface, this repo contributes the following crates to the ecosystem:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk-build" target="_blank" rel="noopener"&gt;wdk-build&lt;/A&gt;: A library to configure a Cargo build script that performs downstream linking of the WDK and generates Rust bindings.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk-sys" target="_blank" rel="noopener"&gt;wdk-sys&lt;/A&gt;: Direct FFI bindings to APIs available in the WDK. This includes both autogenerated ffi bindings from&amp;nbsp;bindgen, and also manual re-implementations of macros that bindgen fails to generate.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk" target="_blank" rel="noopener"&gt;wdk&lt;/A&gt;: Safe idiomatic bindings to APIs available in the WDK.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk-panic" target="_blank" rel="noopener"&gt;wdk-panic&lt;/A&gt;: Default panic handler implementations for programs built with WDK&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk-alloc" target="_blank" rel="noopener"&gt;wdk-alloc&lt;/A&gt;: A global allocator for use by drivers.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/blob/main/crates/wdk-macros" target="_blank" rel="noopener"&gt;wdk-macros&lt;/A&gt;: A collection of macros that help make it easier to interact with wdk-sys's direct bindings. This crate is re-exported via&amp;nbsp;wdk-sys&amp;nbsp;and crates should typically never need to directly depend on&amp;nbsp;wdk-macros.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/windows-drivers-rs/tree/main/crates/cargo-wdk" target="_blank" rel="noopener"&gt;cargo-wdk&lt;/A&gt;: A cargo tool to make setting up a Rust driver environment simpler.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Using these crates, driver developers can create valid WDM, KMDF, and UMDF driver binaries that load and run on a Windows 11 machine.&amp;nbsp; For example, this is what a driver entry routine looks like in&amp;nbsp;&lt;A href="https://github.com/microsoft/Windows-rust-driver-samples/blob/main/general/echo/kmdf/driver/DriverSync/src/driver.rs" target="_blank" rel="noopener"&gt;our KMDF sample&lt;/A&gt;:&lt;/P&gt;
&lt;LI-CODE lang="rust"&gt;/// `DriverEntry` initializes the driver and is the first routine called by the /// system after the driver is loaded. `DriverEntry` specifies the other entry /// points in the function driver, such as `EvtDevice` and `DriverUnload`. /// /// # Arguments /// /// * `driver` - represents the instance of the function driver that is loaded /// into memory. `DriverEntry` must initialize members of `DriverObject` /// before it returns to the caller. `DriverObject` is allocated by the system /// before the driver is loaded, and it is released by the system after the /// system unloads the function driver from memory. /// * `registry_path` - represents the driver specific path in the Registry. The /// function driver can use the path to store driver related data between /// reboots. The path does not store hardware instance specific data. /// /// # Return value: /// /// * `STATUS_SUCCESS` - if successful, /// * `STATUS_UNSUCCESSFUL` - otherwise. #[link_section = "INIT"] #[export_name = "DriverEntry"] // WDF expects a symbol with the name DriverEntry extern "system" fn driver_entry( driver: &amp;amp;mut DRIVER_OBJECT, registry_path: PCUNICODE_STRING, ) -&amp;gt; NTSTATUS { let mut driver_config = WDF_DRIVER_CONFIG { Size: WDF_DRIVER_CONFIG_SIZE, EvtDriverDeviceAdd: Some(echo_evt_device_add), ..WDF_DRIVER_CONFIG::default() }; let driver_handle_output = WDF_NO_HANDLE.cast::&amp;lt;WDFDRIVER&amp;gt;(); let nt_status = unsafe { call_unsafe_wdf_function_binding!( WdfDriverCreate, driver as PDRIVER_OBJECT, registry_path, WDF_NO_OBJECT_ATTRIBUTES, &amp;amp;raw mut driver_config, driver_handle_output, ) }; if !nt_success(nt_status) { println!("Error: WdfDriverCreate failed {nt_status:#010X}"); return nt_status; } echo_print_driver_version(); nt_status }&lt;/LI-CODE&gt;
&lt;P&gt;Drivers written in this manner still need to make use of unsafe blocks for interacting with the Windows operating system, but can take advantage of Rust’s rich type system as well as its safety guarantees for business logic implemented in safe Rust.&amp;nbsp; Though there is still significant work to be done on abstracting away these unsafe blocks (more on this below), these Rust drivers can load and run on Windows systems just like their C counterparts.&lt;/P&gt;
&lt;H2&gt;Introducing cargo-wdk&lt;/H2&gt;
&lt;P&gt;Traditionally, drivers developed in C have access to various templates in Visual Studio to get up and running quickly.&amp;nbsp; To help make Rust driver development similarly convenient, the Rust for Drivers team has developed&amp;nbsp;&lt;A href="https://github.com/microsoft/windows-drivers-rs/tree/main/crates/cargo-wdk" target="_blank" rel="noopener"&gt;cargo-wdk&lt;/A&gt;.&amp;nbsp; This cargo extension enables developers to create empty driver projects with all the necessary linkage, build steps, and dependencies pre-populated.&amp;nbsp; It also is capable of calling WDK tools like InfVerif, much as would be done when building a driver in C in Visual Studio.&amp;nbsp; The animation below demonstrates the process:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The above GIF demonstrates a basic cargo-wdk workload. The developer can create a KMDF driver template by calling "cargo wdk new --kmdf". By then calling "cargo wdk build", cargo-wdk invokes INFVerif on the driver and surfaces any errors, as it would in Visual Studio. The developer then edits the INF appropriately, runs cargo-wdk again, and sees that the driver is built alongside the appropriate certificates.&lt;/P&gt;
&lt;P&gt;Our long-term goal for cargo-wdk is to enable a developer working in a cargo environment to have access to all the same build tools and configuration options as a developer working in Visual Studio. Some of our medium-term feature plans include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Automatic installation of dependencies such as the WDK itself&lt;/LI&gt;
&lt;LI&gt;NT_TARGET_VERSION support&lt;/LI&gt;
&lt;LI&gt;Additional driver templates&lt;/LI&gt;
&lt;LI&gt;Full ARM64 support&lt;/LI&gt;
&lt;LI&gt;Increased configurability of build and package steps&lt;/LI&gt;
&lt;LI&gt;Driver deployment to test machines&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;The next steps: going from unsafe Rust to safe Rust&lt;/H2&gt;
&lt;P&gt;Today, &lt;A href="https://github.com/microsoft/windows-drivers-rs" target="_blank" rel="noopener"&gt;windows-drivers-rs&lt;/A&gt; provides all the building blocks you need to write some kinds of drivers in Rust, but it still requires writing significant amounts of unsafe Rust.&amp;nbsp; Although unsafe Rust still provides benefits such as strong type-checking, zero-cost abstractions, and good FFI compatibility, we recognize that many developers are seeking an experience where the majority of driver code can be written in safe Rust.&amp;nbsp; We also believe that Rust’s type system and borrow checker can be used to prevent certain classes of bugs that could previously only be caught via additional static analysis.&amp;nbsp; As such, we have ongoing efforts to expand the scope of &lt;A href="https://github.com/microsoft/windows-drivers-rs" target="_blank" rel="noopener"&gt;windows-drivers-rs&lt;/A&gt;&amp;nbsp; and create safe abstractions for kernel-mode structs and DDIs:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For many device classes in Windows, drivers are written using the Windows Driver Framework (WDF). This covers both kernel-mode drivers (KMDF) and user-mode drivers (UMDF). The WDF team is working on designing safe Rust abstractions in consultation with Rust experts. The goal is to design interfaces that let developers write more idiomatic Rust code. By providing safe Rust bindings and abstractions, developers can take advantage of the language’s safety and reliability features to write more secure and reliable code. This should greatly reduce the amount of unsafe code blocks required and provide additional compile time safety.&lt;/LI&gt;
&lt;LI&gt;Other teams within Microsoft are working to develop safe structs and APIs beyond WDF to be used in both core Windows kernel development and in third-party driver development. Some of this work &lt;A href="https://learn.microsoft.com/en-us/windows/whats-new/whats-new-windows-11-version-24h2#rust-in-the-windows-kernel" target="_blank" rel="noopener"&gt;ships today&lt;/A&gt; in the Windows kernel.&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Due to the complexity and generic nature of the Windows kernel APIs, we expect this design process to take time as we work across multiple teams to find safe, sound ways to expose the Windows API surface.&amp;nbsp; This means that the first wrapper we develop is not always going to be the final wrapper we ship.&amp;nbsp; As an example, here is one team’s experimental wrapper for &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/eprocess" target="_blank" rel="noopener"&gt;LookasideList&lt;/A&gt; structs in use today internally:&lt;/P&gt;
&lt;LI-CODE lang="rust"&gt;impl&amp;lt;T&amp;gt; LookasideList&amp;lt;T&amp;gt; { /// Creates a new lookaside list for type `T`. /// /// # Arguments /// * `pool_type` - The type of memory pool (e.g., NonPagedPoolNx). /// * `tag` - A four-byte tag used for memory tracking. /// /// # Returns /// * `Ok(Arc&amp;lt;Self&amp;gt;)` if initialization succeeds. /// * `Err(status)` if initialization fails. pub fn new(pool_type: POOL_TYPE, tag: u32) -&amp;gt; Result&amp;lt;Arc&amp;lt;Self&amp;gt;&amp;gt; { if size_of::&amp;lt;T&amp;gt;() == 0 { return Err(STATUS_NOT_SUPPORTED); } // Allocate uninitialized memory for LookasideList&amp;lt;T&amp;gt;, but use MaybeUninit&amp;lt;T&amp;gt; correctly. let arc = Arc::new(MaybeUninit::&amp;lt;LookasideList&amp;lt;T&amp;gt;&amp;gt;::uninit())?; // SAFETY: Initialize the LookasideList&amp;lt;T&amp;gt; in place. let status = unsafe { ExInitializeLookasideListEx( (*arc.as_ptr()).assume_init_ref().inner.get(), None, None, pool_type, 0, size_of::&amp;lt;T&amp;gt;() as SIZE_T, tag, 0, ) }; if !NT_SUCCESS(status) { return Err(status); } // SAFETY: Now the MaybeUninit&amp;lt;T&amp;gt; is fully initialized, so we can assume initialization safely. Ok(unsafe { arc.assume_init() }) } /// Allocates a new instance of `T` from the lookaside list. /// /// # Returns /// * `Ok(ptr)` if allocation succeeds. /// * `Err(STATUS_NO_MEMORY)` if allocation fails. fn allocate(&amp;amp;self) -&amp;gt; Result&amp;lt;*mut T&amp;gt; { // SAFETY: The inner pointer is valid and pinned, so it won't move. Lookaside list is internally synchronized. let ptr = unsafe { ExAllocateFromLookasideListEx(self.inner.get()) } as *mut T; if ptr.is_null() { Err(STATUS_NO_MEMORY) } else { Ok(ptr) } } /// Frees a previously allocated instance of `T` back to the lookaside list. /// /// The pointer must have been allocated from this lookaside list. /// /// # Safety /// /// `ptr` must come from a previous call to `LookasideList::allocate`, it hasn't been freed yet and won't be used anymore. unsafe fn free(&amp;amp;self, ptr: *mut T) { // The inner pointer is valid and pinned, so it won't move. Lookaside list is internally synchronized. // Cast to *mut _ is because ExFreeToLookasideListEx expects a void *. ExFreeToLookasideListEx(self.inner.get(), ptr as *mut _); } } impl&amp;lt;T&amp;gt; Drop for LookasideList&amp;lt;T&amp;gt; { /// Cleans up the lookaside list when it goes out of scope. fn drop(&amp;amp;mut self) { // SAFETY: The lookaside list was initialized on new. unsafe { ExDeleteLookasideListEx(self.inner.get()) }; } }&lt;/LI-CODE&gt;
&lt;P&gt;Though we believe this wrapper to be sound &lt;EM&gt;for the purposes of the team that developed it&lt;/EM&gt;, it requires further review and testing before we can publish it as the “official” wrapper for these APIs.&amp;nbsp; Thus the above should be considered a &lt;EM&gt;possible look&lt;/EM&gt; at what Rust abstractions for our kernel mode might look like, and not final code.&lt;/P&gt;
&lt;P&gt;In the long term, as we make design decisions and finalize our wrappers, our intent is to publish these wrapper crates on crates.io as first-class members of the Rust ecosystem.&lt;/P&gt;
&lt;H2&gt;Our long-term vision&lt;/H2&gt;
&lt;P&gt;We believe that memory-safe languages such as Rust represent the future of secure software engineering.&amp;nbsp; Today’s security landscape demands reliability and safety guarantees at every surface from the edge to the cloud, and device drivers play a role at every layer in the stack.&amp;nbsp; At the same time, we recognize that there are many driver models and scenarios that Windows needs to support, and it will take time to fully develop Rust bindings and tooling for all of them.&lt;/P&gt;
&lt;P&gt;We encourage you to keep an eye on this blog and our&amp;nbsp;&lt;A href="https://github.com/microsoft/windows-drivers-rs" target="_blank" rel="noopener"&gt;windows-drivers-rs GitHub repo&lt;/A&gt;&amp;nbsp;for the latest information and tools involved in Rust development for the Windows kernel.&amp;nbsp; Over the coming months, we will publish more information about best practices for using Rust in your driver, submitting Rust drivers to WHCP, using CodeQL for static analysis, and more.&lt;/P&gt;
&lt;P&gt;We look forward to advancing the state of the art in memory safety with you all!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Nov 2025 23:24:23 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/towards-rust-in-windows-drivers/ba-p/4449718</guid>
      <dc:creator>nate_deisinger</dc:creator>
      <dc:date>2025-11-14T23:24:23Z</dc:date>
    </item>
    <item>
      <title>Announcing Updated Static Analysis Requirement for Windows Driver Certification</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-updated-static-analysis-requirement-for-windows/ba-p/4433579</link>
      <description>&lt;P&gt;As part of our ongoing commitment to improving the quality and reliability of Windows drivers, Microsoft has updated the static analysis requirements for driver certification in the &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/get-ready-for-windows-11-version-25h2/4426437" target="_blank" rel="noopener" data-lia-auto-title="upcoming Windows release" data-lia-auto-title-active="0"&gt;upcoming Windows release&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Static analysis is a foundational requirement of &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/windows-hardware/design/compatibility/" target="_blank" rel="noopener"&gt;Windows Hardware Compatibility Program&lt;/A&gt;. The validation is performed using the &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/6ab6df93-423c-4af6-ad48-8ea1049155ae" target="_blank" rel="noopener"&gt;Static Tools Logo Test&lt;/A&gt;, which leverages &lt;A href="https://github.blog/news-insights/company-news/github-welcomes-semmle/" target="_blank" rel="noopener"&gt;CodeQL&lt;/A&gt;&lt;A href="https://github.blog/news-insights/company-news/github-welcomes-semmle/" target="_blank" rel="noopener"&gt;&amp;nbsp;&lt;/A&gt;to identify potential issues in driver code before deployment.&lt;/P&gt;
&lt;P&gt;Microsoft periodically reviews and improves the windows driver static analysis requirement. These updates help us stay ahead of the ever-evolving threat landscape while maintaining strong security and reliability standards&lt;/P&gt;
&lt;P&gt;The key highlight in the update are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Static Driver Analysis checks now apply to software and filter drivers, including antivirus and anti-cheat drivers.&lt;/LI&gt;
&lt;LI&gt;In addition to the existing “&lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/codeql-queries" target="_blank" rel="noopener"&gt;must-fix&lt;/A&gt;” CodeQL queries required for the Microsoft's static driver analysis testing, partners are now required to run a new set of checks called “must-run.”&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This article outlines how to obtain the latest CodeQL query pack and validate your drivers against the updated Microsoft static analysis requirement.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Prerequisites&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Before running the updated static analysis tests, ensure the following components are in place:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;CodeQL CLI &lt;A class="lia-external-url" href="https://github.com/github/codeql-cli-binaries/releases/tag/v2.22.1" target="_blank" rel="noopener"&gt;v 2.22.1&lt;/A&gt; or greater&lt;/LI&gt;
&lt;LI&gt;Microsoft Windows Drivers CodeQL Query Pack version &lt;A href="https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/pkgs/container/windows-drivers" target="_blank" rel="noopener"&gt;1.6.0&lt;/A&gt; or greater&lt;/LI&gt;
&lt;LI&gt;Driver source code&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;&lt;STRONG&gt;Getting Started&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;To analyze your driver using the updated static analysis checks:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Install the CodeQL CLI and Microsoft Windows Driver CodeQL Query Pack according to this &lt;A href="https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/development" target="_blank" rel="noopener"&gt;installation guide&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Build your CodeQL database&lt;/LI&gt;
&lt;LI&gt;Analyze your CodeQL database using updated query suites&lt;/LI&gt;
&lt;LI&gt;Review and address any issues flagged by the analysis to ensure compliance with WHCP certification requirements.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Early adoption will ensure a smoother Windows driver certification process and improve the overall quality and security of the Windows hardware ecosystem.&lt;/P&gt;
&lt;P&gt;For questions or support, please contact your Microsoft representative or create a GitHub repo&lt;A href="https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/issues" target="_blank" rel="noopener"&gt; issue.&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 12 Aug 2025 18:44:53 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/announcing-updated-static-analysis-requirement-for-windows/ba-p/4433579</guid>
      <dc:creator>Paul_Eze</dc:creator>
      <dc:date>2025-08-12T18:44:53Z</dc:date>
    </item>
    <item>
      <title>Building Windows Driver Projects with CI and CD</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/building-windows-driver-projects-with-ci-and-cd/ba-p/4379200</link>
      <description>&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Prerequisites&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:360,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Before diving into the process, ensure you have the following prerequisites:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For local devbox scenarios&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Windows 11 system&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Visual Studio 2022 with C++ workload installed and other components, see &lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;For github&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;A repository with windows driver projects&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Using WDK NuGet Packages&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:360,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;WDK NuGet packages are latest edition to the packaging technology provided by Microsoft. Read more about that in this &lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/windowsdriverdev/wdk-nuget-a-new-way-to-develop-drivers-on-windows/4192209" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;blog&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; Here's a quick summary on how to get started with them:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Finding the Latest WDK NuGet Packages&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To find the latest version of WDK NuGet packages, visit nuget.org and search for "Microsoft.Windows.WDK". Note the latest version number for use in your projects.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Challenges with Native C++ Projects&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;NuGet packages were primarily designed for .NET projects, and the PackageReference feature is not supported with native C++ projects. This can lead to issues when maintaining multiple projects in a source repository like GitHub, as updating NuGet versions would require editing every project file that references the NuGet package.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Solving the Problem with &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Directory.Build.props&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The GitHub repository &lt;/SPAN&gt;&lt;A href="https://github.com/microsoft/Windows-driver-samples" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://github.com/microsoft/Windows-driver-samples&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; presents a solution to this problem. By using a Directory.Build.props file at the root directory level, which MSBuild imports by default, you can centralize the NuGet package references.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Sample `Directory.Build.props`:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;
&lt;TABLE border="1" width="112.794%"&gt;&lt;COLGROUP&gt;&lt;COL width="100%" /&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Project&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Import Project="packages\Microsoft.Windows.WDK.x64.10.0.26100.2454\build\native\Microsoft.Windows.WDK.x64.props" Condition="Exists('packages\Microsoft.Windows.WDK.x64.10.0.26100.2454\build\native\Microsoft.Windows.WDK.x64.props') and '$(Platform)' == 'x64'"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Import Project="packages\Microsoft.Windows.WDK.arm64.10.0.26100.2454\build\native\Microsoft.Windows.WDK.arm64.props" Condition="Exists('packages\Microsoft.Windows.WDK.arm64.10.0.26100.2454\build\native\Microsoft.Windows.WDK.arm64.props') and '$(Platform)' == 'ARM64'"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Import Project="packages\Microsoft.Windows.SDK.CPP.x64.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.x64.props" Condition="Exists('packages\Microsoft.Windows.SDK.CPP.x64.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.x64.props') and '$(Platform)' == 'x64'"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Import Project="packages\Microsoft.Windows.SDK.CPP.arm64.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.arm64.props" Condition="Exists('packages\Microsoft.Windows.SDK.CPP.arm64.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.arm64.props') and '$(Platform)' == 'ARM64'"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Import Project="packages\Microsoft.Windows.SDK.CPP.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.props" Condition="Exists('packages\Microsoft.Windows.SDK.CPP.10.0.26100.2454\build\native\Microsoft.Windows.SDK.cpp.props')"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;/Project&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This file points to the location of the NuGet packages inside the packages folder at the root.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;We still need to use the packages.config file, which will contain the NuGet packages' IDs and versions e.g.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;
&lt;TABLE border="1" width="100%"&gt;&lt;COLGROUP&gt;&lt;COL width="99.8529%" /&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;packages&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp; &amp;lt;package id="Microsoft.Windows.SDK.CPP" version="10.0.26100.2454" targetFramework="native" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp; &amp;lt;package id="Microsoft.Windows.SDK.CPP.x64" version="10.0.26100.2454" targetFramework="native" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp; &amp;lt;package id="Microsoft.Windows.WDK.x64" version="10.0.26100.2454" targetFramework="native" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;/packages&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This file will help restore the packages on disk using the command:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;nuget restore .\packages.config -PackagesDirectory .\packages\&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Building the Projects Locally&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Add a packages.config file to the root directory and provide the list of NuGets required for building the projects. For example to build x64 driver you will need x64 version of SDK and WDK NuGets, take a hint from the example above.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Add a Directory.Build.props file to the root directory and the content similar to the sample provided above.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To build the driver project you need to do the following later which we will convert to a github action&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI data-leveltext="%1." data-font="" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Using the Visual Studio&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Developer Command Prompt&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;, restore the packages using:&lt;/SPAN&gt; &lt;EM&gt;nuget restore .\packages.config -PackagesDirectory .\packages\&lt;SPAN style="font-weight: var(--lia-blog-font-weight); font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base);" data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-leveltext="%1." data-font="" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;EM&gt;msbuild&lt;/EM&gt; &lt;EM&gt;/t:build path\to\your\project.vcxproj&lt;/EM&gt;&amp;nbsp;&lt;SPAN style="font-style: var(--lia-blog-font-style); font-weight: var(--lia-blog-font-weight); font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base);" data-contrast="auto"&gt;This command will build the project with the restored NuGets.&lt;/SPAN&gt;&lt;SPAN style="font-style: var(--lia-blog-font-style); font-weight: var(--lia-blog-font-weight); font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Setting Up Continuous Integration with GitHub Actions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:360,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To automate the build process with every pull request, we can create a GitHub Action in our repository. Here’s a step-by-step guide:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Creating a GitHub Action for CI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; In your GitHub repository, navigate to the `.github/workflows` directory. If it doesn’t exist, create it.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Create a new file, e.g., `ci.yml`.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Example content of `ci.yml`:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;yaml&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;name: CI Build&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;on:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;pull_request:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;branches:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;- main&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;jobs:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;build:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;runs-on: windows-latest&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;steps:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;- name: Checkout code&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;uses: actions/checkout@v2&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;- name: Setup NuGet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;uses: NuGet/setup-nuget@v1&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;- name: Restore NuGet packages&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;run: nuget restore .\packages.config -PackagesDirectory .\packages\&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;- name: Build solution&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;run: msbuild /t:build path\to\your\solution.sln&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This GitHub Action will:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Trigger on every pull request to the main branch&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Checkout the code&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Setup NuGet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Restore NuGet packages&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Build the solution&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Conclusion&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:360,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;By following this guide, you can efficiently manage and build your Windows driver projects using WDK NuGet packages and automate the process with GitHub Actions for CI. This setup not only simplifies dependency management but also ensures a consistent build process across different environments and development stages.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 15 Feb 2025 05:23:24 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/building-windows-driver-projects-with-ci-and-cd/ba-p/4379200</guid>
      <dc:creator>prashantchahar</dc:creator>
      <dc:date>2025-02-15T05:23:24Z</dc:date>
    </item>
    <item>
      <title>Building Drivers for Previous OS Releases Using the Latest Windows Driver Kit (WDK)</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/building-drivers-for-previous-os-releases-using-the-latest/ba-p/4374910</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The Windows Driver Kit (WDK) is an essential tool for driver developers, providing the necessary headers, libraries, and tools to build drivers for Windows. With each major OS release, the WDK is updated to include the latest Driver Model DDIs and APIs that support the latest innovations across device classes &amp;nbsp;and fixes for previously released OS versions. This means that with the latest WDK, developers can build drivers not only for the current OS version but also for down-level supported OSes. One of the key advantages of this approach is that it allows developers to build drivers for both current and previous OS releases while benefiting from the latest security and other updates, enhancements and fixes.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Previously it had been a pain point for the driver community to upgrade to the latest WDKs and to manage Side by Side installations as they wanted to build for specific versions. With WDK NuGets it is now seamless to get the headers, libs and build tools for both SDK and WDK and to upgrade to newer versions directly from the Visual Studio, follow&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/install-the-wdk-using-nuget" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://learn.microsoft.com/en-us/windows-hardware/drivers/install-the-wdk-using-nuget&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; for more information.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Building a driver that targets a down-level supported OS version is straightforward and fully supported by Microsoft. Developers need to set the _NT_TARGET_VERSION property corresponding to the target OS, also provided in appendix A. This property can be set in Visual Studio or directly in the vcxproj file. By default this property is set to target the latest version of the OS so if a driver needs to target latest OS version there is no need to change this property.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Setting _NT_TARGET_VERSION in Visual Studio with WDK extension&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To build drivers for a specific OS version using Visual Studio, follow these steps:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Open your driver project in Visual Studio.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Right-click on the driver project in the Solution Explorer and select "Properties".&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to "Driver Settings" under "Configuration Properties".&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Set the _NT_TARGET_VERSION to the desired OS version.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Here's a visual snippet to guide you through the process:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Setting _NT_TARGET_VERSION in the vcxproj File&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If you prefer not to use Visual Studio, you can manually set the _NT_TARGET_VERSION in the vcxproj file. This can be done by adding the following line under the appropriate PropertyGroup for the platform and configuration you need to build for:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp; &amp;lt;_NT_TARGET_VERSION&amp;gt;&lt;STRONG&gt;Desired OS version&lt;/STRONG&gt;&amp;lt;/_NT_TARGET_VERSION&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Example&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For example, to target Windows 10, version 1903, you would set _NT_TARGET_VERSION to 0x0A00:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp; &amp;lt;_NT_TARGET_VERSION&amp;gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;0x0A00&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;/_NT_TARGET_VERSION&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conclusion&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;By leveraging the latest WDK, driver developers can ensure their drivers are up-to-date with the latest security patches and improvements in the driver model headers and libs while maintaining compatibility with previous OS versions. Whether using Visual Studio or editing the vcxproj file directly, setting the _NT_TARGET_VERSION is a straightforward process that enhances the flexibility and reliability of driver development. &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;As the development environment evolves with updated APIs, compilers, and linkers, it's an exciting opportunity to ensure that the rebuilt drivers perform optimally. Thorough testing of the drivers will help us adapt to these changes and maintain high standards of functionality and reliability&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Limitations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft suspended the support for x86 and ARM32 kernel mode components starting Windows&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt; 10.0.22000, so latest WDK will not support building x86 and ARM32 kernel mode components.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Microsoft stopped support for building drivers for Windows 7,8 and 8.1 as they are out of support, hence starting Windows 10.0.22621.0 developers can’t use latest WDK to build drivers targeting Windows 7, 8, 8.1.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Appendix A&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;OS Version&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;_NT_TARGET_VERSION&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.26100&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA000010&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.22621&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA00000C&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.22000&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA00000B&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.20348&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA00000A&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.19041&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA000008&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.18362&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA000007&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.17763&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA000006&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.17134&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA000005&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.16299&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA000004&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.15063&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA000003&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.14393&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0xA000002&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Windows 10.0.10586&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;0xA000001&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Windows 10.0.10240&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;0x0A00&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Aug 2025 23:58:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/building-drivers-for-previous-os-releases-using-the-latest/ba-p/4374910</guid>
      <dc:creator>prashantchahar</dc:creator>
      <dc:date>2025-08-14T23:58:39Z</dc:date>
    </item>
    <item>
      <title>Redefine Possibilities: The Windows Driver Kit Agility Release is Here!</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/redefine-possibilities-the-windows-driver-kit-agility-release-is/ba-p/4251607</link>
      <description>&lt;P&gt;Microsoft is excited to announce the release Windows 11 24H2 WDK update (version 10.0.26100.1591). This release marks the beginning of an agile WDK release workstream, where updated Windows Driver Kits will be made available more frequently. These regular kit updates will enhance the reliability, security, and quality of our hardware ecosystem.&lt;/P&gt;
&lt;P&gt;Each new version of the WDK release can be downloaded from the &lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk" target="_self"&gt;WDK download page&lt;/A&gt;. The latest WDK version (N) will supersede the previously released version (N-1), and the download link will always reflect the most current version. The change log for each release can be found&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/windows-hardware/drivers/wdk-release-notes" target="_self"&gt;here&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Users can install and run the newly released WDK on Windows 10 and later versions. Additionally, this kit can be used to build drivers for Windows 10, Windows Server 2016, and all subsequent client and server versions.&lt;/P&gt;</description>
      <pubDate>Thu, 10 Oct 2024 20:07:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/redefine-possibilities-the-windows-driver-kit-agility-release-is/ba-p/4251607</guid>
      <dc:creator>Paul_Eze</dc:creator>
      <dc:date>2024-10-10T20:07:02Z</dc:date>
    </item>
    <item>
      <title>WDK NuGet: A new way to develop drivers on Windows</title>
      <link>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/wdk-nuget-a-new-way-to-develop-drivers-on-windows/ba-p/4192209</link>
      <description>&lt;P&gt;We are excited to introduce the WDK NuGet, a new offering that enables developers to build drivers for Windows.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;The WDK is the essential tool for developing, testing and deploying drivers on the Windows platform. It provides the headers, libraries, tools and metadata that you need to create drivers for Windows devices.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;Previously, the WDK was available as an MSI installer or an ISO file.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;The WDK NuGet contains the compiled code, libraries, headers, tools and metadata for driver development. You can easily consume the WDK NuGet package by adding it to your project and then calling its functionality in your project code.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;The WDK NuGet offer some advantages over the traditional WDK offerings:&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="margin-bottom: 8px; margin-top: 20px;"&gt;It is smaller in size, which reduces the download and setup time.&lt;/LI&gt;
&lt;LI style="margin-bottom: 8px;"&gt;It is portable across different machines and environments.&lt;/LI&gt;
&lt;LI style="margin-bottom: 8px;"&gt;It can be integrated with large CI/CD pipelines and source control systems.&lt;/LI&gt;
&lt;LI style="margin-bottom: 8px;"&gt;It better support an agile WDK release model, it can be easily updated latest WDK features and fixes.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P style="margin-top: 20px;"&gt;The WDK NuGet is now publicly available on nuget.org, where you can find the latest and previous versions of the package.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;To get started with the WDK NuGet, you need to have Visual Studio 2022 or later installed on your machine. You can then follow the steps in this &lt;A href="https://learn.microsoft.com/windows-hardware/drivers/install-the-wdk-using-nuget" target="_blank" rel="noopener"&gt;Microsoft Learn documentation&lt;/A&gt; to install the WDK NuGet package and create your first driver project.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;We are also working on improving the developer experience while developing their driver projects from Visual Studio by adding WDK as a Visual Studio individual workload. This will make it easier to install and update the WDK NuGet package from the Visual Studio installer.&lt;/P&gt;
&lt;P style="margin-top: 20px;"&gt;We hope you enjoy the WDK NuGet package and find it useful for your driver development needs. We welcome your feedback and suggestions on how to make it better.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jul 2024 22:43:20 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/windows-driver-developer-blog/wdk-nuget-a-new-way-to-develop-drivers-on-windows/ba-p/4192209</guid>
      <dc:creator>Paul_Eze</dc:creator>
      <dc:date>2024-07-15T22:43:20Z</dc:date>
    </item>
  </channel>
</rss>

