summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei Mao <[email protected]>2023-01-11 18:21:11 -0800
committerWei Mao <[email protected]>2023-01-13 00:25:06 -0800
commitb617d6b6b37a1db17fa120065ab3189e91fbb440 (patch)
tree1567a035ca630f36eb0a7bfd6cd7e75170155124
parent5c647868e2f8968e2a490bc02da304020405fcce (diff)
[UMDF v1] Remove usb/umdf_filter_kmdf, usb/umdf_filter_umdf, usb/umdf_fx2
-rw-r--r--usb/umdf_filter_kmdf/Package/package.VcxProj90
-rw-r--r--usb/umdf_filter_kmdf/Package/package.VcxProj.Filters21
-rw-r--r--usb/umdf_filter_kmdf/README.md82
-rw-r--r--usb/umdf_filter_kmdf/inc/WUDFOsrUsbPublic.h32
-rw-r--r--usb/umdf_filter_kmdf/inc/list.h77
-rw-r--r--usb/umdf_filter_kmdf/inc/public.h217
-rw-r--r--usb/umdf_filter_kmdf/inc/usb_hw.h233
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/Device.c1051
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/bulkrwr.c436
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/driver.c301
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/interrupt.c184
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/ioctl.c1063
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.h335
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.man309
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.rc18
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj256
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj.Filters46
-rw-r--r--usb/umdf_filter_kmdf/kmdf_driver/trace.h115
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/OsrUsbFilter.rc17
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj293
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters46
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilterOnKmDriver.inxbin6574 -> 0 bytes
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/comsup.cpp352
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/comsup.h216
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/device.cpp243
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/device.h114
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/dllsup.cpp184
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/driver.cpp207
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/driver.h145
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/exports.def4
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/internal.h111
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/queue.cpp538
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter/queue.h253
-rw-r--r--usb/umdf_filter_kmdf/umdf_filter_kmdf.sln59
-rw-r--r--usb/umdf_filter_umdf/Package/package.VcxProj90
-rw-r--r--usb/umdf_filter_umdf/Package/package.VcxProj.Filters21
-rw-r--r--usb/umdf_filter_umdf/README.md56
-rw-r--r--usb/umdf_filter_umdf/inc/WUDFOsrUsbPublic.h32
-rw-r--r--usb/umdf_filter_umdf/inc/list.h77
-rw-r--r--usb/umdf_filter_umdf/inc/public.h217
-rw-r--r--usb/umdf_filter_umdf/inc/usb_hw.h233
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/ControlQueue.cpp564
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/ControlQueue.h101
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/Device.cpp2091
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/Device.h604
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/Driver.cpp220
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/Driver.h149
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.ctl1
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.rc21
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.cpp425
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.h163
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj281
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj.Filters52
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/comsup.cpp345
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/comsup.h216
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/dllsup.cpp204
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/exports.def4
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/internal.h170
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/queue.cpp147
-rw-r--r--usb/umdf_filter_umdf/umdf_driver/queue.h93
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/OsrUsbFilter.rc17
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj293
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters46
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilterOnUmFx2Driver.inxbin6906 -> 0 bytes
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/comsup.cpp352
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/comsup.h216
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/device.cpp243
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/device.h114
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/dllsup.cpp184
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/driver.cpp207
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/driver.h145
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/exports.def4
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/internal.h111
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/queue.cpp538
-rw-r--r--usb/umdf_filter_umdf/umdf_filter/queue.h253
-rw-r--r--usb/umdf_filter_umdf/umdf_filter_umdf.sln59
-rw-r--r--usb/umdf_fx2/README.md373
-rw-r--r--usb/umdf_fx2/deviceMetadata/B4D697F5-1C56-4807-ACCD-B28C09D37FF0.devicemetadata-msbin105893 -> 0 bytes
-rw-r--r--usb/umdf_fx2/driver/ControlQueue.cpp564
-rw-r--r--usb/umdf_fx2/driver/ControlQueue.h101
-rw-r--r--usb/umdf_fx2/driver/Device.cpp2091
-rw-r--r--usb/umdf_fx2/driver/Device.h604
-rw-r--r--usb/umdf_fx2/driver/Driver.cpp220
-rw-r--r--usb/umdf_fx2/driver/Driver.h149
-rw-r--r--usb/umdf_fx2/driver/OsrUsbFx2.ctl1
-rw-r--r--usb/umdf_fx2/driver/OsrUsbFx2.rc21
-rw-r--r--usb/umdf_fx2/driver/ReadWriteQueue.cpp425
-rw-r--r--usb/umdf_fx2/driver/ReadWriteQueue.h163
-rw-r--r--usb/umdf_fx2/driver/WUDFOsrUsbFx2.inxbin6916 -> 0 bytes
-rw-r--r--usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj281
-rw-r--r--usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj.Filters52
-rw-r--r--usb/umdf_fx2/driver/comsup.cpp345
-rw-r--r--usb/umdf_fx2/driver/comsup.h216
-rw-r--r--usb/umdf_fx2/driver/dllsup.cpp204
-rw-r--r--usb/umdf_fx2/driver/exports.def4
-rw-r--r--usb/umdf_fx2/driver/internal.h170
-rw-r--r--usb/umdf_fx2/driver/queue.cpp147
-rw-r--r--usb/umdf_fx2/driver/queue.h93
-rw-r--r--usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj223
-rw-r--r--usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj.Filters30
-rw-r--r--usb/umdf_fx2/exe/dump.c444
-rw-r--r--usb/umdf_fx2/exe/testapp.c1368
-rw-r--r--usb/umdf_fx2/exe/testapp.rc13
-rw-r--r--usb/umdf_fx2/inc/WUDFOsrUsbPublic.h32
-rw-r--r--usb/umdf_fx2/inc/list.h77
-rw-r--r--usb/umdf_fx2/inc/public.h217
-rw-r--r--usb/umdf_fx2/inc/usb_hw.h233
-rw-r--r--usb/umdf_fx2/umdf_fx2.sln46
108 files changed, 0 insertions, 25914 deletions
diff --git a/usb/umdf_filter_kmdf/Package/package.VcxProj b/usb/umdf_filter_kmdf/Package/package.VcxProj
deleted file mode 100644
index 128c8ff6..00000000
--- a/usb/umdf_filter_kmdf/Package/package.VcxProj
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\kmdf_driver\osrusbfx2.vcxproj">
- <Project>{837F98CF-D3A4-472C-BACC-47950340E57B}</Project>
- </ProjectReference>
- <ProjectReference Include="..\umdf_filter\WUDFOsrUsbFilter.vcxproj">
- <Project>{ADCCB27A-E522-4367-86B9-9C9DF2636B93}</Project>
- </ProjectReference>
- </ItemGroup>
- <PropertyGroup Label="PropertySheets">
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Utility</ConfigurationType>
- <DriverType>Package</DriverType>
- <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
- <Configuration>Debug</Configuration>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Globals">
- <ProjectGuid>{10E372EF-AE85-4528-919C-A261253EDDAE}</ProjectGuid>
- <SampleGuid>{4535F3DF-5A13-4953-9565-74B05B8FA4C6}</SampleGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>true</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>false</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>true</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>false</UseDebugLibraries>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup />
- <PropertyGroup>
- <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
- <ImportToStore>False</ImportToStore>
- <InstallMode>None</InstallMode>
- <HardwareIdString />
- <CommandLine />
- <ScriptPath />
- <DeployFiles />
- <ScriptName />
- <ScriptDeviceQuery>%PathToInf%</ScriptDeviceQuery>
- <EnableVerifier>False</EnableVerifier>
- <AllDrivers>False</AllDrivers>
- <VerifyProjectOutput>True</VerifyProjectOutput>
- <VerifyDrivers />
- <VerifyFlags>133563</VerifyFlags>
- </PropertyGroup>
- <ItemDefinitionGroup>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_kmdf/Package/package.VcxProj.Filters b/usb/umdf_filter_kmdf/Package/package.VcxProj.Filters
deleted file mode 100644
index fde842eb..00000000
--- a/usb/umdf_filter_kmdf/Package/package.VcxProj.Filters
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{0ED5A10B-EA82-464B-939C-FD3665A42A97}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{8283F5F0-093B-48C9-A2FC-EA7455F9A36D}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{0B52CF91-796F-49F5-9C6E-23FC9C521570}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{7C0D1D60-5B24-411C-BA58-9FED667338B0}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_kmdf/README.md b/usb/umdf_filter_kmdf/README.md
deleted file mode 100644
index 4f7d0e41..00000000
--- a/usb/umdf_filter_kmdf/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-page_type: sample
-description: "Demonstrates how to load a UMDF filter driver as an upper filter driver above the kmdf_fx2 sample driver."
-languages:
-- cpp
-products:
-- windows
-- windows-wdk
----
-
-# Sample UMDF Filter above KMDF Function Driver for OSR USB-FX2 (UMDF Version 1)
-
-The umdf\_filter\_kmdf sample demonstrates how to load a UMDF filter driver as an upper filter driver above the kmdf\_fx2 sample driver.
-
-The sample includes Event Tracing for Windows (ETW) tracing support, and is written for the [OSR USB-FX2 Learning Kit](https://www.osronline.com/hardware/OSRFX2_32.pdf0.
-
-## Build the sample
-
-The default Solution build configuration is **Debug** and **Win32**.
-
-1. Open the driver project or solution in Visual Studio (find *filtername*.sln or *filtername*.vcxproj).
-
-1. Right-click the solution in the **Solutions Explorer** and select **Configuration Manager**.
-
-1. From the **Configuration Manager**, select the **Active Solution Configuration** (for example, Debug or Release) and the **Active Solution Platform** (for example, Win32) that correspond to the type of build you are interested in.
-
-1. From the **Build** menu, click **Build Solution** (Ctrl+Shift+B).
-
-## Overview
-
-- The device is based on the development board supplied with the Cypress EZ-USB FX2 Development Kit (CY3681).
-
-- It contains 1 interface and 3 endpoints (Interrupt IN, Bulk Out, Bulk IN).
-
-- Firmware supports vendor commands to query or set LED Bar graph display and 7-segment LED display, and to query toggle switch states.
-
-- Interrupt Endpoint:
-
- - Sends an 8-bit value that represents the state of the switches.
-
- - Sent on startup, resume from suspend, and whenever the switch pack setting changes.
-
- - Firmware does not de-bounce the switch pack.
-
- - One switch change can result in multiple bytes being sent.
-
- - Bits are in the reverse order of the labels on the pack (for example, bit 0x80 is labeled 1 on the pack).
-
-- Bulk Endpoints are configured for loopback:
-
- - The device moves data from IN endpoint to OUT endpoint.
-
- - The device does not change the values of the data it receives nor does it internally create any data.
-
- - Endpoints are always double buffered.
-
- - Maximum packet size depends on speed (64 full speed, 512 high speed).
-
-- ETW events:
-
- - Included osrusbfx2.man, which describes events added.
-
- - Three events are targeted to the event log:
-
- - Failure during the add device routine.
-
- - Failure to start the OSR device on a USB 1.1 controller.
-
- - Invocation of the "re-enumerate device" IOCTL.
-
- - Read/write start/stop events can be used to measure the time taken.
-
-## Testing the driver
-
-You can test this sample either by using the [Custom driver access](https://go.microsoft.com/fwlink/p/?linkid=2114373) sample application, or by using the osrusbfx2.exe test application. For information on how to build and use the osrusbfx2.exe application, see the test instructions for the [kmdf\_fx2](https://docs.microsoft.com/samples/microsoft/windows-driver-samples/sample-kmdf-function-driver-for-osr-usb-fx2/) sample.
-
-## Code tour
-
-| Folder | Description |
-| --- | --- |
-| usb\umdf_filter_kmdf\kmdf_driver | This directory contains source code for the kmdf_fx2 sample driver. |
-| usb\umdf_filter_kmdf\umdf_filter | This directory contains the UMDF filter driver. |
diff --git a/usb/umdf_filter_kmdf/inc/WUDFOsrUsbPublic.h b/usb/umdf_filter_kmdf/inc/WUDFOsrUsbPublic.h
deleted file mode 100644
index 6681fa14..00000000
--- a/usb/umdf_filter_kmdf/inc/WUDFOsrUsbPublic.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- WUDFOsrUsbPublic.h
-
-Abstract:
-
- This module contains the common declarations shared by driver
- and user applications for the UMDF OSR device sample.
-
- Note that this driver does NOT use the same device interface GUID
- as the KMDF OSR USB sample.
-
-Environment:
-
- user and kernel
-
---*/
-
-#pragma once
-
-//
-// Define an Interface Guid so that app can find the device and talk to it.
-//
-
-// {573E8C73-0CB4-4471-A1BF-FAB26C31D384}
-DEFINE_GUID(GUID_DEVINTERFACE_OSRUSBFX2,
- 0x573e8c73, 0xcb4, 0x4471, 0xa1, 0xbf, 0xfa, 0xb2, 0x6c, 0x31, 0xd3, 0x84);
-
diff --git a/usb/umdf_filter_kmdf/inc/list.h b/usb/umdf_filter_kmdf/inc/list.h
deleted file mode 100644
index 38d0b1e9..00000000
--- a/usb/umdf_filter_kmdf/inc/list.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- list.h
-
-Abstract:
-
- This module contains doubly linked list macros
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-
-FORCEINLINE
-VOID
-InitializeListHead(
- IN PLIST_ENTRY ListHead
- )
-{
- ListHead->Flink = ListHead->Blink = ListHead;
-}
-
-FORCEINLINE
-BOOLEAN
-RemoveEntryList(
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
- PLIST_ENTRY Flink;
-
- Flink = Entry->Flink;
- Blink = Entry->Blink;
- Blink->Flink = Flink;
- Flink->Blink = Blink;
- return (BOOLEAN)(Flink == Blink);
-}
-
-FORCEINLINE
-VOID
-InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Flink;
-
- Flink = ListHead->Flink;
- Entry->Flink = Flink;
- Entry->Blink = ListHead;
- Flink->Blink = Entry;
- ListHead->Flink = Entry;
-}
-
-FORCEINLINE
-VOID
-InsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
-
- Blink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = Blink;
- Blink->Flink = Entry;
- ListHead->Blink = Entry;
-}
diff --git a/usb/umdf_filter_kmdf/inc/public.h b/usb/umdf_filter_kmdf/inc/public.h
deleted file mode 100644
index 2c3f6805..00000000
--- a/usb/umdf_filter_kmdf/inc/public.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- public.h
-
-Abstract:
-
- Public definitions for the OSR_FX2 device operations.
-
-Environment:
-
- User & Kernel mode
-
---*/
-
-#ifndef _PUBLIC_H
-#define _PUBLIC_H
-
-#include <initguid.h>
-
-#include "WudfOsrUsbPublic.h"
-
-
-//
-// Define the structures that will be used by the IOCTL
-// interface to the driver
-//
-
-//
-// BAR_GRAPH_STATE
-//
-// BAR_GRAPH_STATE is a bit field structure with each
-// bit corresponding to one of the bar graph on the
-// OSRFX2 Development Board
-//
-#include <pshpack1.h>
-
-#pragma warning( push )
-#pragma warning( disable : 4201 ) // nameless struct/union
-#pragma warning( disable : 4214 ) // bit-field type other than int
-
-typedef struct _BAR_GRAPH_STATE {
-
- union {
-
- struct {
- //
- // Individual bars starting from the
- // top of the stack of bars
- //
- // NOTE: There are actually 10 bars,
- // but the very top two do not light
- // and are not counted here
- //
- UCHAR Bar1 : 1;
- UCHAR Bar2 : 1;
- UCHAR Bar3 : 1;
- UCHAR Bar4 : 1;
- UCHAR Bar5 : 1;
- UCHAR Bar6 : 1;
- UCHAR Bar7 : 1;
- UCHAR Bar8 : 1;
- };
-
- //
- // The state of all the bar graph as a single
- // UCHAR
- //
- UCHAR BarsAsUChar;
-
- };
-
-}BAR_GRAPH_STATE, *PBAR_GRAPH_STATE;
-
-//
-// SWITCH_STATE
-//
-// SWITCH_STATE is a bit field structure with each
-// bit corresponding to one of the switches on the
-// OSRFX2 Development Board
-//
-typedef struct _SWITCH_STATE {
-
- union {
- struct {
- //
- // Individual switches starting from the
- // left of the set of switches
- //
- UCHAR Switch1 : 1;
- UCHAR Switch2 : 1;
- UCHAR Switch3 : 1;
- UCHAR Switch4 : 1;
- UCHAR Switch5 : 1;
- UCHAR Switch6 : 1;
- UCHAR Switch7 : 1;
- UCHAR Switch8 : 1;
- };
-
- //
- // The state of all the switches as a single
- // UCHAR
- //
- UCHAR SwitchesAsUChar;
-
- };
-
-
-}SWITCH_STATE, *PSWITCH_STATE;
-
-//
-// Seven segment display bit values.
-//
-
-//
-// Undefine conflicting MFC constant
-//
-#undef SS_CENTER
-#undef SS_LEFT
-#undef SS_RIGHT
-
-#define SS_TOP 0x01
-#define SS_TOP_LEFT 0x40
-#define SS_TOP_RIGHT 0x02
-#define SS_CENTER 0x20
-#define SS_BOTTOM_LEFT 0x10
-#define SS_BOTTOM_RIGHT 0x04
-#define SS_BOTTOM 0x80
-#define SS_DOT 0x08
-
-//
-// FILE_PLAYBACK
-//
-// FILE_PLAYBACK structure contains the parameters for the PLAY_FILE I/O Control.
-//
-
-typedef struct _FILE_PLAYBACK
-{
- //
- // The delay between changes in the display, in milliseconds.
- //
-
- USHORT Delay;
-
- //
- // The data file path.
- //
-
- WCHAR Path[1];
-} FILE_PLAYBACK, *PFILE_PLAYBACK;
-
-#include <poppack.h>
-
-#define IOCTL_INDEX 0x800
-#define FILE_DEVICE_OSRUSBFX2 65500U
-
-#define IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_RESET_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 1, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_REENUMERATE_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 3, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 4, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 5, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_READ_SWITCHES CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 6, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 7, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 8, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 9, \
- METHOD_OUT_DIRECT, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_PLAY_FILE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 10, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#pragma warning(pop)
-
-#endif
-
diff --git a/usb/umdf_filter_kmdf/inc/usb_hw.h b/usb/umdf_filter_kmdf/inc/usb_hw.h
deleted file mode 100644
index d6e983f1..00000000
--- a/usb/umdf_filter_kmdf/inc/usb_hw.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- Usb.h
-
-Abstract:
-
- Contains prototypes for interfacing with a USB connected device. These
- are copied from the KMDF WDFUSB.H header file (but with the WDF specific
- portions removed)
-
-Environment:
-
- kernel mode only
-
---*/
-
-#pragma once
-
-typedef enum _WINUSB_BMREQUEST_DIRECTION {
- BmRequestHostToDevice = BMREQUEST_HOST_TO_DEVICE,
- BmRequestDeviceToHost = BMREQUEST_DEVICE_TO_HOST,
-} WINUSB_BMREQUEST_DIRECTION;
-
-typedef enum _WINUSB_BMREQUEST_TYPE {
- BmRequestStandard = BMREQUEST_STANDARD,
- BmRequestClass = BMREQUEST_CLASS,
- BmRequestVendor = BMREQUEST_VENDOR,
-} WINUSB_BMREQUEST_TYPE;
-
-typedef enum _WINUSB_BMREQUEST_RECIPIENT {
- BmRequestToDevice = BMREQUEST_TO_DEVICE,
- BmRequestToInterface = BMREQUEST_TO_INTERFACE,
- BmRequestToEndpoint = BMREQUEST_TO_ENDPOINT,
- BmRequestToOther = BMREQUEST_TO_OTHER,
-} WINUSB_BMREQUEST_RECIPIENT;
-
-typedef enum _WINUSB_DEVICE_TRAITS {
- WINUSB_DEVICE_TRAIT_SELF_POWERED = 0x00000001,
- WINUSB_DEVICE_TRAIT_REMOTE_WAKE_CAPABLE = 0x00000002,
- WINUSB_DEVICE_TRAIT_AT_HIGH_SPEED = 0x00000004,
-} WINUSB_DEVICE_TRAITS;
-
-typedef enum _WdfUsbTargetDeviceSelectInterfaceType {
- WdfUsbTargetDeviceSelectInterfaceTypeInterface = 0x10,
- WdfUsbTargetDeviceSelectInterfaceTypeUrb = 0x11,
-} WdfUsbTargetDeviceSelectInterfaceType;
-
-
-
-typedef union _WINUSB_CONTROL_SETUP_PACKET {
- struct {
- union {
- #pragma warning(disable:4214) // bit field types other than int
- struct {
- //
- // Valid values are BMREQUEST_TO_DEVICE, BMREQUEST_TO_INTERFACE,
- // BMREQUEST_TO_ENDPOINT, BMREQUEST_TO_OTHER
- //
- BYTE Recipient:2;
-
- BYTE Reserved:3;
-
- //
- // Valid values are BMREQUEST_STANDARD, BMREQUEST_CLASS,
- // BMREQUEST_VENDOR
- //
- BYTE Type:2;
-
- //
- // Valid values are BMREQUEST_HOST_TO_DEVICE,
- // BMREQUEST_DEVICE_TO_HOST
- //
- BYTE Dir:1;
- } Request;
- #pragma warning(default:4214) // bit field types other than int
- BYTE Byte;
- } bm;
-
- BYTE bRequest;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wValue;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wIndex;
-
- USHORT wLength;
- } Packet;
-
- struct {
- BYTE Bytes[8];
- } Generic;
-
- WINUSB_SETUP_PACKET WinUsb;
-
-} WINUSB_CONTROL_SETUP_PACKET, *PWINUSB_CONTROL_SETUP_PACKET;
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_CLASS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestClass;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_VENDOR(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestVendor;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_FEATURE(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT FeatureSelector,
- USHORT Index,
- BOOLEAN SetFeature
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestHostToDevice;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- if (SetFeature) {
- Packet->Packet.bRequest = USB_REQUEST_SET_FEATURE;
- }
- else {
- Packet->Packet.bRequest = USB_REQUEST_CLEAR_FEATURE;
- }
-
- Packet->Packet.wValue.Value = FeatureSelector;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_GET_STATUS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestDeviceToHost;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- Packet->Packet.bRequest = USB_REQUEST_GET_STATUS;
- Packet->Packet.wIndex.Value = Index;
- Packet->Packet.wValue.Value = 0;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/Device.c b/usb/umdf_filter_kmdf/kmdf_driver/Device.c
deleted file mode 100644
index 8516ef09..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/Device.c
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- Device.c
-
-Abstract:
-
- USB device driver for OSR USB-FX2 Learning Kit
-
-Environment:
-
- Kernel mode only
-
-
---*/
-
-#include <osrusbfx2.h>
-#include <devpkey.h>
-
-#if defined(EVENT_TRACING)
-#include "device.tmh"
-#endif
-
-#ifdef ALLOC_PRAGMA
-#pragma alloc_text(PAGE, OsrFxEvtDeviceAdd)
-#pragma alloc_text(PAGE, OsrFxEvtDevicePrepareHardware)
-#pragma alloc_text(PAGE, OsrFxEvtDeviceD0Exit)
-#pragma alloc_text(PAGE, SelectInterfaces)
-#pragma alloc_text(PAGE, OsrFxSetPowerPolicy)
-#pragma alloc_text(PAGE, OsrFxReadFdoRegistryKeyValue)
-#pragma alloc_text(PAGE, GetDeviceEventLoggingNames)
-#pragma alloc_text(PAGE, OsrFxValidateConfigurationDescriptor)
-#endif
-
-
-NTSTATUS
-OsrFxEvtDeviceAdd(
- WDFDRIVER Driver,
- PWDFDEVICE_INIT DeviceInit
- )
-/*++
-Routine Description:
-
- EvtDeviceAdd is called by the framework in response to AddDevice
- call from the PnP manager. We create and initialize a device object to
- represent a new instance of the device. All the software resources
- should be allocated in this callback.
-
-Arguments:
-
- Driver - Handle to a framework driver object created in DriverEntry
-
- DeviceInit - Pointer to a framework-allocated WDFDEVICE_INIT structure.
-
-Return Value:
-
- NTSTATUS
-
---*/
-{
- WDF_PNPPOWER_EVENT_CALLBACKS pnpPowerCallbacks;
- WDF_OBJECT_ATTRIBUTES attributes;
- NTSTATUS status;
- WDFDEVICE device;
- WDF_DEVICE_PNP_CAPABILITIES pnpCaps;
- WDF_IO_QUEUE_CONFIG ioQueueConfig;
- PDEVICE_CONTEXT pDevContext;
- WDFQUEUE queue;
- GUID activity;
- UNICODE_STRING symbolicLinkName;
- WDFSTRING symbolicLinkString;
- DEVPROP_BOOLEAN isRestricted;
-
- UNREFERENCED_PARAMETER(Driver);
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,"--> OsrFxEvtDeviceAdd routine\n");
-
- //
- // Initialize the pnpPowerCallbacks structure. Callback events for PNP
- // and Power are specified here. If you don't supply any callbacks,
- // the Framework will take appropriate default actions based on whether
- // DeviceInit is initialized to be an FDO, a PDO or a filter device
- // object.
- //
-
- WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
- //
- // For usb devices, PrepareHardware callback is the to place select the
- // interface and configure the device.
- //
- pnpPowerCallbacks.EvtDevicePrepareHardware = OsrFxEvtDevicePrepareHardware;
-
- //
- // These two callbacks start and stop the wdfusb pipe continuous reader
- // as we go in and out of the D0-working state.
- //
-
- pnpPowerCallbacks.EvtDeviceD0Entry = OsrFxEvtDeviceD0Entry;
- pnpPowerCallbacks.EvtDeviceD0Exit = OsrFxEvtDeviceD0Exit;
- pnpPowerCallbacks.EvtDeviceSelfManagedIoFlush = OsrFxEvtDeviceSelfManagedIoFlush;
-
- WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpPowerCallbacks);
-
- WdfDeviceInitSetIoType(DeviceInit, WdfDeviceIoBuffered);
-
- //
- // Now specify the size of device extension where we track per device
- // context.DeviceInit is completely initialized. So call the framework
- // to create the device and attach it to the lower stack.
- //
- WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DEVICE_CONTEXT);
-
- status = WdfDeviceCreate(&DeviceInit, &attributes, &device);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceCreate failed with Status code %!STATUS!\n", status);
- return status;
- }
-
- //
- // Setup the activity ID so that we can log events using it.
- //
-
- activity = DeviceToActivityId(device);
-
- //
- // Get the DeviceObject context by using accessor function specified in
- // the WDF_DECLARE_CONTEXT_TYPE_WITH_NAME macro for DEVICE_CONTEXT.
- //
- pDevContext = GetDeviceContext(device);
-
- //
- // Get the device's friendly name and location so that we can use it in
- // error logging. If this fails then it will setup dummy strings.
- //
-
- GetDeviceEventLoggingNames(device);
-
- //
- // Tell the framework to set the SurpriseRemovalOK in the DeviceCaps so
- // that you don't get the popup in usermode when you surprise remove the device.
- //
- WDF_DEVICE_PNP_CAPABILITIES_INIT(&pnpCaps);
- pnpCaps.SurpriseRemovalOK = WdfTrue;
-
- WdfDeviceSetPnpCapabilities(device, &pnpCaps);
-
- //
- // Create a parallel default queue and register an event callback to
- // receive ioctl requests. We will create separate queues for
- // handling read and write requests. All other requests will be
- // completed with error status automatically by the framework.
- //
- WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
- WdfIoQueueDispatchParallel);
-
- ioQueueConfig.EvtIoDeviceControl = OsrFxEvtIoDeviceControl;
-
- //
- // By default, Static Driver Verifier (SDV) displays a warning if it
- // doesn't find the EvtIoStop callback on a power-managed queue.
- // The 'assume' below causes SDV to suppress this warning. If the driver
- // has not explicitly set PowerManaged to WdfFalse, the framework creates
- // power-managed queues when the device is not a filter driver. Normally
- // the EvtIoStop is required for power-managed queues, but for this driver
- // it is not needed b/c the driver doesn't hold on to the requests for
- // long time or forward them to other drivers.
- // If the EvtIoStop callback is not implemented, the framework waits for
- // all driver-owned requests to be done before moving in the Dx/sleep
- // states or before removing the device, which is the correct behavior
- // for this type of driver. If the requests were taking an indeterminate
- // amount of time to complete, or if the driver forwarded the requests
- // to a lower driver/another stack, the queue should have an
- // EvtIoStop/EvtIoResume.
- //
- __analysis_assume(ioQueueConfig.EvtIoStop != 0);
- status = WdfIoQueueCreate(device,
- &ioQueueConfig,
- WDF_NO_OBJECT_ATTRIBUTES,
- &queue);// pointer to default queue
- __analysis_assume(ioQueueConfig.EvtIoStop == 0);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfIoQueueCreate failed %!STATUS!\n", status);
- goto Error;
- }
-
- //
- // We will create a separate sequential queue and configure it
- // to receive read requests. We also need to register a EvtIoStop
- // handler so that we can acknowledge requests that are pending
- // at the target driver.
- //
- WDF_IO_QUEUE_CONFIG_INIT(&ioQueueConfig, WdfIoQueueDispatchSequential);
-
- ioQueueConfig.EvtIoRead = OsrFxEvtIoRead;
- ioQueueConfig.EvtIoStop = OsrFxEvtIoStop;
-
- status = WdfIoQueueCreate(
- device,
- &ioQueueConfig,
- WDF_NO_OBJECT_ATTRIBUTES,
- &queue // queue handle
- );
-
- if (!NT_SUCCESS (status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfIoQueueCreate failed 0x%x\n", status);
- goto Error;
- }
-
- status = WdfDeviceConfigureRequestDispatching(
- device,
- queue,
- WdfRequestTypeRead);
-
- if(!NT_SUCCESS (status)){
- NT_ASSERT(NT_SUCCESS(status));
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceConfigureRequestDispatching failed 0x%x\n", status);
- goto Error;
- }
-
-
- //
- // We will create another sequential queue and configure it
- // to receive write requests.
- //
- WDF_IO_QUEUE_CONFIG_INIT(&ioQueueConfig, WdfIoQueueDispatchSequential);
-
- ioQueueConfig.EvtIoWrite = OsrFxEvtIoWrite;
- ioQueueConfig.EvtIoStop = OsrFxEvtIoStop;
-
- status = WdfIoQueueCreate(
- device,
- &ioQueueConfig,
- WDF_NO_OBJECT_ATTRIBUTES,
- &queue // queue handle
- );
-
- if (!NT_SUCCESS (status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfIoQueueCreate failed 0x%x\n", status);
- goto Error;
- }
-
- status = WdfDeviceConfigureRequestDispatching(
- device,
- queue,
- WdfRequestTypeWrite);
-
- if(!NT_SUCCESS (status)){
- NT_ASSERT(NT_SUCCESS(status));
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceConfigureRequestDispatching failed 0x%x\n", status);
- goto Error;
- }
-
- //
- // Register a manual I/O queue for handling Interrupt Message Read Requests.
- // This queue will be used for storing Requests that need to wait for an
- // interrupt to occur before they can be completed.
- //
- WDF_IO_QUEUE_CONFIG_INIT(&ioQueueConfig, WdfIoQueueDispatchManual);
-
- //
- // This queue is used for requests that dont directly access the device. The
- // requests in this queue are serviced only when the device is in a fully
- // powered state and sends an interrupt. So we can use a non-power managed
- // queue to park the requests since we dont care whether the device is idle
- // or fully powered up.
- //
- ioQueueConfig.PowerManaged = WdfFalse;
-
- status = WdfIoQueueCreate(device,
- &ioQueueConfig,
- WDF_NO_OBJECT_ATTRIBUTES,
- &pDevContext->InterruptMsgQueue
- );
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfIoQueueCreate failed 0x%x\n", status);
- goto Error;
- }
-
- //
- // Register a device interface so that app can find our device and talk to it.
- //
- status = WdfDeviceCreateDeviceInterface(device,
- (LPGUID) &GUID_DEVINTERFACE_OSRUSBFX2,
- NULL); // Reference String
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceCreateDeviceInterface failed %!STATUS!\n", status);
- goto Error;
- }
-
- //
- // Create the lock that we use to serialize calls to ResetDevice(). As an
- // alternative to using a WDFWAITLOCK to serialize the calls, a sequential
- // WDFQUEUE can be created and reset IOCTLs would be forwarded to it.
- //
- WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
- attributes.ParentObject = device;
-
- status = WdfWaitLockCreate(&attributes, &pDevContext->ResetDeviceWaitLock);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfWaitLockCreate failed %!STATUS!\n", status);
- goto Error;
- }
-
- //
- // Get the string for the device interface and set the restricted
- // property on it to allow applications bound with device metadata
- // to access the interface.
- //
- if (g_pIoSetDeviceInterfacePropertyData != NULL) {
-
- status = WdfStringCreate(NULL,
- WDF_NO_OBJECT_ATTRIBUTES,
- &symbolicLinkString);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfStringCreate failed %!STATUS!\n", status);
- goto Error;
- }
-
- status = WdfDeviceRetrieveDeviceInterfaceString(device,
- (LPGUID) &GUID_DEVINTERFACE_OSRUSBFX2,
- NULL,
- symbolicLinkString);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceRetrieveDeviceInterfaceString failed %!STATUS!\n", status);
- goto Error;
- }
-
- WdfStringGetUnicodeString(symbolicLinkString, &symbolicLinkName);
-
- isRestricted = DEVPROP_TRUE;
-
- status = g_pIoSetDeviceInterfacePropertyData(&symbolicLinkName,
- &DEVPKEY_DeviceInterface_Restricted,
- 0,
- 0,
- DEVPROP_TYPE_BOOLEAN,
- sizeof(isRestricted),
- &isRestricted );
-
- WdfObjectDelete(symbolicLinkString);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "IoSetDeviceInterfacePropertyData failed %!STATUS!\n", status);
- goto Error;
- }
- }
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- OsrFxEvtDeviceAdd\n");
-
- return status;
-
-Error:
-
- //
- // Log fail to add device to the event log
- //
- EventWriteFailAddDevice(&activity,
- pDevContext->DeviceName,
- pDevContext->Location,
- status);
-
- return status;
-}
-
-NTSTATUS
-OsrFxEvtDevicePrepareHardware(
- WDFDEVICE Device,
- WDFCMRESLIST ResourceList,
- WDFCMRESLIST ResourceListTranslated
- )
-/*++
-
-Routine Description:
-
- In this callback, the driver does whatever is necessary to make the
- hardware ready to use. In the case of a USB device, this involves
- reading and selecting descriptors.
-
-Arguments:
-
- Device - handle to a device
-
- ResourceList - handle to a resource-list object that identifies the
- raw hardware resources that the PnP manager assigned
- to the device
-
- ResourceListTranslated - handle to a resource-list object that
- identifies the translated hardware resources
- that the PnP manager assigned to the device
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- PDEVICE_CONTEXT pDeviceContext;
- WDF_USB_DEVICE_INFORMATION deviceInfo;
- ULONG waitWakeEnable;
-
- UNREFERENCED_PARAMETER(ResourceList);
- UNREFERENCED_PARAMETER(ResourceListTranslated);
- waitWakeEnable = FALSE;
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> EvtDevicePrepareHardware\n");
-
- pDeviceContext = GetDeviceContext(Device);
-
- //
- // Create a USB device handle so that we can communicate with the
- // underlying USB stack. The WDFUSBDEVICE handle is used to query,
- // configure, and manage all aspects of the USB device.
- // These aspects include device properties, bus properties,
- // and I/O creation and synchronization. We only create device the first
- // the PrepareHardware is called. If the device is restarted by pnp manager
- // for resource rebalance, we will use the same device handle but then select
- // the interfaces again because the USB stack could reconfigure the device on
- // restart.
- //
- if (pDeviceContext->UsbDevice == NULL) {
- WDF_USB_DEVICE_CREATE_CONFIG config;
-
- WDF_USB_DEVICE_CREATE_CONFIG_INIT(&config,
- USBD_CLIENT_CONTRACT_VERSION_602);
-
- status = WdfUsbTargetDeviceCreateWithParameters(Device,
- &config,
- WDF_NO_OBJECT_ATTRIBUTES,
- &pDeviceContext->UsbDevice);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfUsbTargetDeviceCreateWithParameters failed with Status code %!STATUS!\n", status);
- return status;
- }
-
- //
- // TODO: If you are fetching configuration descriptor from device for
- // selecting a configuration or to parse other descriptors, call OsrFxValidateConfigurationDescriptor
- // to do basic validation on the descriptors before you access them .
- //
- }
-
- //
- // Retrieve USBD version information, port driver capabilites and device
- // capabilites such as speed, power, etc.
- //
- WDF_USB_DEVICE_INFORMATION_INIT(&deviceInfo);
-
- status = WdfUsbTargetDeviceRetrieveInformation(
- pDeviceContext->UsbDevice,
- &deviceInfo);
- if (NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "IsDeviceHighSpeed: %s\n",
- (deviceInfo.Traits & WDF_USB_DEVICE_TRAIT_AT_HIGH_SPEED) ? "TRUE" : "FALSE");
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,
- "IsDeviceSelfPowered: %s\n",
- (deviceInfo.Traits & WDF_USB_DEVICE_TRAIT_SELF_POWERED) ? "TRUE" : "FALSE");
-
- waitWakeEnable = deviceInfo.Traits &
- WDF_USB_DEVICE_TRAIT_REMOTE_WAKE_CAPABLE;
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,
- "IsDeviceRemoteWakeable: %s\n",
- waitWakeEnable ? "TRUE" : "FALSE");
- //
- // Save these for use later.
- //
- pDeviceContext->UsbDeviceTraits = deviceInfo.Traits;
- }
- else {
- pDeviceContext->UsbDeviceTraits = 0;
- }
-
- status = SelectInterfaces(Device);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "SelectInterfaces failed 0x%x\n", status);
- return status;
- }
-
- //
- // Enable wait-wake and idle timeout if the device supports it
- //
- if (waitWakeEnable) {
- status = OsrFxSetPowerPolicy(Device);
- if (!NT_SUCCESS (status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "OsrFxSetPowerPolicy failed %!STATUS!\n", status);
- return status;
- }
- }
-
- status = OsrFxConfigContReaderForInterruptEndPoint(pDeviceContext);
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- EvtDevicePrepareHardware\n");
-
- return status;
-}
-
-
-NTSTATUS
-OsrFxEvtDeviceD0Entry(
- WDFDEVICE Device,
- WDF_POWER_DEVICE_STATE PreviousState
- )
-/*++
-
-Routine Description:
-
- EvtDeviceD0Entry event callback must perform any operations that are
- necessary before the specified device is used. It will be called every
- time the hardware needs to be (re-)initialized.
-
- This function is not marked pageable because this function is in the
- device power up path. When a function is marked pagable and the code
- section is paged out, it will generate a page fault which could impact
- the fast resume behavior because the client driver will have to wait
- until the system drivers can service this page fault.
-
- This function runs at PASSIVE_LEVEL, even though it is not paged. A
- driver can optionally make this function pageable if DO_POWER_PAGABLE
- is set. Even if DO_POWER_PAGABLE isn't set, this function still runs
- at PASSIVE_LEVEL. In this case, though, the function absolutely must
- not do anything that will cause a page fault.
-
-Arguments:
-
- Device - Handle to a framework device object.
-
- PreviousState - Device power state which the device was in most recently.
- If the device is being newly started, this will be
- PowerDeviceUnspecified.
-
-Return Value:
-
- NTSTATUS
-
---*/
-{
- PDEVICE_CONTEXT pDeviceContext;
- NTSTATUS status;
- BOOLEAN isTargetStarted;
-
- pDeviceContext = GetDeviceContext(Device);
- isTargetStarted = FALSE;
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_POWER,
- "-->OsrFxEvtEvtDeviceD0Entry - coming from %s\n",
- DbgDevicePowerString(PreviousState));
-
- //
- // Since continuous reader is configured for this interrupt-pipe, we must explicitly start
- // the I/O target to get the framework to post read requests.
- //
- status = WdfIoTargetStart(WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe));
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_POWER, "Failed to start interrupt pipe %!STATUS!\n", status);
- goto End;
- }
-
- isTargetStarted = TRUE;
-
-End:
-
- if (!NT_SUCCESS(status)) {
- //
- // Failure in D0Entry will lead to device being removed. So let us stop the continuous
- // reader in preparation for the ensuing remove.
- //
- if (isTargetStarted) {
- WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe), WdfIoTargetCancelSentIo);
- }
- }
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_POWER, "<--OsrFxEvtEvtDeviceD0Entry\n");
-
- return status;
-}
-
-
-NTSTATUS
-OsrFxEvtDeviceD0Exit(
- WDFDEVICE Device,
- WDF_POWER_DEVICE_STATE TargetState
- )
-/*++
-
-Routine Description:
-
- This routine undoes anything done in EvtDeviceD0Entry. It is called
- whenever the device leaves the D0 state, which happens when the device is
- stopped, when it is removed, and when it is powered off.
-
- The device is still in D0 when this callback is invoked, which means that
- the driver can still touch hardware in this routine.
-
-
- EvtDeviceD0Exit event callback must perform any operations that are
- necessary before the specified device is moved out of the D0 state. If the
- driver needs to save hardware state before the device is powered down, then
- that should be done here.
-
- This function runs at PASSIVE_LEVEL, though it is generally not paged. A
- driver can optionally make this function pageable if DO_POWER_PAGABLE is set.
-
- Even if DO_POWER_PAGABLE isn't set, this function still runs at
- PASSIVE_LEVEL. In this case, though, the function absolutely must not do
- anything that will cause a page fault.
-
-Arguments:
-
- Device - Handle to a framework device object.
-
- TargetState - Device power state which the device will be put in once this
- callback is complete.
-
-Return Value:
-
- Success implies that the device can be used. Failure will result in the
- device stack being torn down.
-
---*/
-{
- PDEVICE_CONTEXT pDeviceContext;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_POWER,
- "-->OsrFxEvtDeviceD0Exit - moving to %s\n",
- DbgDevicePowerString(TargetState));
-
- pDeviceContext = GetDeviceContext(Device);
-
- WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe), WdfIoTargetCancelSentIo);
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_POWER, "<--OsrFxEvtDeviceD0Exit\n");
-
- return STATUS_SUCCESS;
-}
-
-VOID
-OsrFxEvtDeviceSelfManagedIoFlush(
- _In_ WDFDEVICE Device
- )
-/*++
-
-Routine Description:
-
- This routine handles flush activity for the device's
- self-managed I/O operations.
-
-Arguments:
-
- Device - Handle to a framework device object.
-
-Return Value:
-
- None
-
---*/
-{
- // Service the interrupt message queue to drain any outstanding
- // requests
- OsrUsbIoctlGetInterruptMessage(Device, STATUS_DEVICE_REMOVED);
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-USBD_STATUS
-OsrFxValidateConfigurationDescriptor(
- _In_reads_bytes_(BufferLength) PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc,
- _In_ ULONG BufferLength,
- _Inout_ PUCHAR *Offset
- )
-/*++
-
-Routine Description:
-
- Validates a USB Configuration Descriptor
-
-Parameters:
-
- ConfigDesc: Pointer to the entire USB Configuration descriptor returned by the device
-
- BufferLength: Known size of buffer pointed to by ConfigDesc (Not wTotalLength)
-
- Offset: if the USBD_STATUS returned is not USBD_STATUS_SUCCESS, offet will
- be set to the address within the ConfigDesc buffer where the failure occured.
-
-Return Value:
-
- USBD_STATUS
- Success implies the configuration descriptor is valid.
-
---*/
-{
-
-
- USBD_STATUS status = USBD_STATUS_SUCCESS;
- USHORT ValidationLevel = 3;
-
- PAGED_CODE();
-
- //
- // Call USBD_ValidateConfigurationDescriptor to validate the descriptors which are present in this supplied configuration descriptor.
- // USBD_ValidateConfigurationDescriptor validates that all descriptors are completely contained within the configuration descriptor buffer.
- // It also checks for interface numbers, number of endpoints in an interface etc.
- // Please refer to msdn documentation for this function for more information.
- //
-
- status = USBD_ValidateConfigurationDescriptor( ConfigDesc, BufferLength , ValidationLevel , Offset , POOL_TAG );
- if (!(NT_SUCCESS (status)) ){
- return status;
- }
-
- //
- // TODO: You should validate the correctness of other descriptors which are not taken care by USBD_ValidateConfigurationDescriptor
- // Check that all such descriptors have size >= sizeof(the descriptor they point to)
- // Check for any association between them if required
- //
-
- return status;
-}
-
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-OsrFxSetPowerPolicy(
- _In_ WDFDEVICE Device
- )
-{
- WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
- WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS wakeSettings;
- NTSTATUS status = STATUS_SUCCESS;
-
- PAGED_CODE();
-
- //
- // Init the idle policy structure.
- //
- WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings, IdleUsbSelectiveSuspend);
- idleSettings.IdleTimeout = 10000; // 10-sec
-
- status = WdfDeviceAssignS0IdleSettings(Device, &idleSettings);
- if ( !NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceSetPowerPolicyS0IdlePolicy failed %x\n", status);
- return status;
- }
-
- //
- // Init wait-wake policy structure.
- //
- WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&wakeSettings);
-
- status = WdfDeviceAssignSxWakeSettings(Device, &wakeSettings);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfDeviceAssignSxWakeSettings failed %x\n", status);
- return status;
- }
-
- return status;
-}
-
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SelectInterfaces(
- _In_ WDFDEVICE Device
- )
-/*++
-
-Routine Description:
-
- This helper routine selects the configuration, interface and
- creates a context for every pipe (end point) in that interface.
-
-Arguments:
-
- Device - Handle to a framework device
-
-Return Value:
-
- NT status value
-
---*/
-{
- WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
- NTSTATUS status = STATUS_SUCCESS;
- PDEVICE_CONTEXT pDeviceContext;
- WDFUSBPIPE pipe;
- WDF_USB_PIPE_INFORMATION pipeInfo;
- UCHAR index;
- UCHAR numberConfiguredPipes;
-
- PAGED_CODE();
-
- pDeviceContext = GetDeviceContext(Device);
-
- WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE( &configParams);
-
- status = WdfUsbTargetDeviceSelectConfig(pDeviceContext->UsbDevice,
- WDF_NO_OBJECT_ATTRIBUTES,
- &configParams);
- if(!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "WdfUsbTargetDeviceSelectConfig failed %!STATUS! \n",
- status);
-
- //
- // Since the Osr USB fx2 device is capable of working at high speed, the only reason
- // the device would not be working at high speed is if the port doesn't
- // support it. If the port doesn't support high speed it is a 1.1 port
- //
- if ((pDeviceContext->UsbDeviceTraits & WDF_USB_DEVICE_TRAIT_AT_HIGH_SPEED) == 0) {
- GUID activity = DeviceToActivityId(Device);
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- " On a 1.1 USB port on Windows Vista"
- " this is expected as the OSR USB Fx2 board's Interrupt EndPoint descriptor"
- " doesn't conform to the USB specification. Windows Vista detects this and"
- " returns an error. \n"
- );
- EventWriteSelectConfigFailure(
- &activity,
- pDeviceContext->DeviceName,
- pDeviceContext->Location,
- status
- );
- }
-
- return status;
- }
-
- pDeviceContext->UsbInterface =
- configParams.Types.SingleInterface.ConfiguredUsbInterface;
-
- numberConfiguredPipes = configParams.Types.SingleInterface.NumberConfiguredPipes;
-
- //
- // Get pipe handles
- //
- for(index=0; index < numberConfiguredPipes; index++) {
-
- WDF_USB_PIPE_INFORMATION_INIT(&pipeInfo);
-
- pipe = WdfUsbInterfaceGetConfiguredPipe(
- pDeviceContext->UsbInterface,
- index, //PipeIndex,
- &pipeInfo
- );
- //
- // Tell the framework that it's okay to read less than
- // MaximumPacketSize
- //
- WdfUsbTargetPipeSetNoMaximumPacketSizeCheck(pipe);
-
- if(WdfUsbPipeTypeInterrupt == pipeInfo.PipeType) {
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL,
- "Interrupt Pipe is 0x%p\n", pipe);
- pDeviceContext->InterruptPipe = pipe;
- }
-
- if(WdfUsbPipeTypeBulk == pipeInfo.PipeType &&
- WdfUsbTargetPipeIsInEndpoint(pipe)) {
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL,
- "BulkInput Pipe is 0x%p\n", pipe);
- pDeviceContext->BulkReadPipe = pipe;
- }
-
- if(WdfUsbPipeTypeBulk == pipeInfo.PipeType &&
- WdfUsbTargetPipeIsOutEndpoint(pipe)) {
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL,
- "BulkOutput Pipe is 0x%p\n", pipe);
- pDeviceContext->BulkWritePipe = pipe;
- }
-
- }
-
- //
- // If we didn't find all the 3 pipes, fail the start.
- //
- if(!(pDeviceContext->BulkWritePipe
- && pDeviceContext->BulkReadPipe && pDeviceContext->InterruptPipe)) {
- status = STATUS_INVALID_DEVICE_STATE;
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "Device is not configured properly %!STATUS!\n",
- status);
-
- return status;
- }
-
- return status;
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-VOID
-GetDeviceEventLoggingNames(
- _In_ WDFDEVICE Device
- )
-/*++
-
-Routine Description:
-
- Retrieve the friendly name and the location string into WDFMEMORY objects
- and store them in the device context.
-
-Arguments:
-
-Return Value:
-
- None
-
---*/
-{
- PDEVICE_CONTEXT pDevContext = GetDeviceContext(Device);
-
- WDF_OBJECT_ATTRIBUTES objectAttributes;
-
- WDFMEMORY deviceNameMemory = NULL;
- WDFMEMORY locationMemory = NULL;
-
- NTSTATUS status;
-
- PAGED_CODE();
-
- //
- // We want both memory objects to be children of the device so they will
- // be deleted automatically when the device is removed.
- //
-
- WDF_OBJECT_ATTRIBUTES_INIT(&objectAttributes);
- objectAttributes.ParentObject = Device;
-
- //
- // First get the length of the string. If the FriendlyName
- // is not there then get the lenght of device description.
- //
-
- status = WdfDeviceAllocAndQueryProperty(Device,
- DevicePropertyFriendlyName,
- NonPagedPoolNx,
- &objectAttributes,
- &deviceNameMemory);
-
- if (!NT_SUCCESS(status))
- {
- status = WdfDeviceAllocAndQueryProperty(Device,
- DevicePropertyDeviceDescription,
- NonPagedPoolNx,
- &objectAttributes,
- &deviceNameMemory);
- }
-
- if (NT_SUCCESS(status))
- {
- pDevContext->DeviceNameMemory = deviceNameMemory;
- pDevContext->DeviceName = WdfMemoryGetBuffer(deviceNameMemory, NULL);
- }
- else
- {
- pDevContext->DeviceNameMemory = NULL;
- pDevContext->DeviceName = L"(error retrieving name)";
- }
-
- //
- // Retrieve the device location string.
- //
-
- status = WdfDeviceAllocAndQueryProperty(Device,
- DevicePropertyLocationInformation,
- NonPagedPoolNx,
- WDF_NO_OBJECT_ATTRIBUTES,
- &locationMemory);
-
- if (NT_SUCCESS(status))
- {
- pDevContext->LocationMemory = locationMemory;
- pDevContext->Location = WdfMemoryGetBuffer(locationMemory, NULL);
- }
- else
- {
- pDevContext->LocationMemory = NULL;
- pDevContext->Location = L"(error retrieving location)";
- }
-
- return;
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-PCHAR
-DbgDevicePowerString(
- _In_ WDF_POWER_DEVICE_STATE Type
- )
-{
- switch (Type)
- {
- case WdfPowerDeviceInvalid:
- return "WdfPowerDeviceInvalid";
- case WdfPowerDeviceD0:
- return "WdfPowerDeviceD0";
- case WdfPowerDeviceD1:
- return "WdfPowerDeviceD1";
- case WdfPowerDeviceD2:
- return "WdfPowerDeviceD2";
- case WdfPowerDeviceD3:
- return "WdfPowerDeviceD3";
- case WdfPowerDeviceD3Final:
- return "WdfPowerDeviceD3Final";
- case WdfPowerDevicePrepareForHibernation:
- return "WdfPowerDevicePrepareForHibernation";
- case WdfPowerDeviceMaximum:
- return "WdfPowerDeviceMaximum";
- default:
- return "UnKnown Device Power State";
- }
-}
-
-
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/bulkrwr.c b/usb/umdf_filter_kmdf/kmdf_driver/bulkrwr.c
deleted file mode 100644
index eabda192..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/bulkrwr.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- bulkrwr.c
-
-Abstract:
-
- This file has routines to perform reads and writes.
- The read and writes are targeted bulk to endpoints.
-
-Environment:
-
- Kernel mode
-
---*/
-
-#include <osrusbfx2.h>
-
-
-#if defined(EVENT_TRACING)
-#include "bulkrwr.tmh"
-#endif
-
-#pragma warning(disable:4267)
-
-VOID
-OsrFxEvtIoRead(
- _In_ WDFQUEUE Queue,
- _In_ WDFREQUEST Request,
- _In_ size_t Length
- )
-/*++
-
-Routine Description:
-
- Called by the framework when it receives Read or Write requests.
-
-Arguments:
-
- Queue - Default queue handle
- Request - Handle to the read/write request
- Lenght - Length of the data buffer associated with the request.
- The default property of the queue is to not dispatch
- zero lenght read & write requests to the driver and
- complete is with status success. So we will never get
- a zero length request.
-
-Return Value:
-
-
---*/
-{
- WDFUSBPIPE pipe;
- NTSTATUS status;
- WDFMEMORY reqMemory;
- PDEVICE_CONTEXT pDeviceContext;
- GUID activity = RequestToActivityId(Request);
-
- UNREFERENCED_PARAMETER(Queue);
-
- //
- // Log read start event, using IRP activity ID if available or request
- // handle otherwise.
- //
-
- EventWriteReadStart(&activity, WdfIoQueueGetDevice(Queue), (ULONG)Length);
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_READ, "-->OsrFxEvtIoRead\n");
-
- //
- // First validate input parameters.
- //
- if (Length > TEST_BOARD_TRANSFER_BUFFER_SIZE) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ, "Transfer exceeds %d\n",
- TEST_BOARD_TRANSFER_BUFFER_SIZE);
- status = STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- pDeviceContext = GetDeviceContext(WdfIoQueueGetDevice(Queue));
-
- pipe = pDeviceContext->BulkReadPipe;
-
- status = WdfRequestRetrieveOutputMemory(Request, &reqMemory);
- if(!NT_SUCCESS(status)){
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ,
- "WdfRequestRetrieveOutputMemory failed %!STATUS!\n", status);
- goto Exit;
- }
-
- //
- // The format call validates to make sure that you are reading or
- // writing to the right pipe type, sets the appropriate transfer flags,
- // creates an URB and initializes the request.
- //
- status = WdfUsbTargetPipeFormatRequestForRead(pipe,
- Request,
- reqMemory,
- NULL // Offsets
- );
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ,
- "WdfUsbTargetPipeFormatRequestForRead failed 0x%x\n", status);
- goto Exit;
- }
-
- WdfRequestSetCompletionRoutine(
- Request,
- EvtRequestReadCompletionRoutine,
- pipe);
- //
- // Send the request asynchronously.
- //
- if (WdfRequestSend(Request, WdfUsbTargetPipeGetIoTarget(pipe), WDF_NO_SEND_OPTIONS) == FALSE) {
- //
- // Framework couldn't send the request for some reason.
- //
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ, "WdfRequestSend failed\n");
- status = WdfRequestGetStatus(Request);
- goto Exit;
- }
-
-
-Exit:
- if (!NT_SUCCESS(status)) {
- //
- // log event read failed
- //
- EventWriteReadFail(&activity, WdfIoQueueGetDevice(Queue), status);
- WdfRequestCompleteWithInformation(Request, status, 0);
- }
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_READ, "<-- OsrFxEvtIoRead\n");
-
- return;
-}
-
-VOID
-EvtRequestReadCompletionRoutine(
- _In_ WDFREQUEST Request,
- _In_ WDFIOTARGET Target,
- _In_ PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
- _In_ WDFCONTEXT Context
- )
-/*++
-
-Routine Description:
-
- This is the completion routine for reads
- If the irp completes with success, we check if we
- need to recirculate this irp for another stage of
- transfer.
-
-Arguments:
-
- Context - Driver supplied context
- Device - Device handle
- Request - Request handle
- Params - request completion params
-
-Return Value:
- None
-
---*/
-{
- NTSTATUS status;
- size_t bytesRead = 0;
- GUID activity = RequestToActivityId(Request);
- PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
-
- UNREFERENCED_PARAMETER(Target);
- UNREFERENCED_PARAMETER(Context);
-
- status = CompletionParams->IoStatus.Status;
-
- usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
-
- bytesRead = usbCompletionParams->Parameters.PipeRead.Length;
-
- if (NT_SUCCESS(status)){
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_READ,
- "Number of bytes read: %I64d\n", (INT64)bytesRead);
- } else {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ,
- "Read failed - request status 0x%x UsbdStatus 0x%x\n",
- status, usbCompletionParams->UsbdStatus);
-
- }
-
- //
- // Log read stop event, using IRP activity ID if available or request
- // handle otherwise.
- //
-
- EventWriteReadStop(&activity,
- WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request)),
- bytesRead,
- status,
- usbCompletionParams->UsbdStatus);
-
- WdfRequestCompleteWithInformation(Request, status, bytesRead);
-
- return;
-}
-
-VOID
-OsrFxEvtIoWrite(
- _In_ WDFQUEUE Queue,
- _In_ WDFREQUEST Request,
- _In_ size_t Length
- )
-/*++
-
-Routine Description:
-
- Called by the framework when it receives Read or Write requests.
-
-Arguments:
-
- Queue - Default queue handle
- Request - Handle to the read/write request
- Lenght - Length of the data buffer associated with the request.
- The default property of the queue is to not dispatch
- zero lenght read & write requests to the driver and
- complete is with status success. So we will never get
- a zero length request.
-
-Return Value:
-
-
---*/
-{
- NTSTATUS status;
- WDFUSBPIPE pipe;
- WDFMEMORY reqMemory;
- PDEVICE_CONTEXT pDeviceContext;
- GUID activity = RequestToActivityId(Request);
-
- UNREFERENCED_PARAMETER(Queue);
-
-
- //
- // Log write start event, using IRP activity ID if available or request
- // handle otherwise.
- //
- EventWriteWriteStart(&activity, WdfIoQueueGetDevice(Queue), (ULONG)Length);
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_WRITE, "-->OsrFxEvtIoWrite\n");
-
- //
- // First validate input parameters.
- //
- if (Length > TEST_BOARD_TRANSFER_BUFFER_SIZE) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_READ, "Transfer exceeds %d\n",
- TEST_BOARD_TRANSFER_BUFFER_SIZE);
- status = STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- pDeviceContext = GetDeviceContext(WdfIoQueueGetDevice(Queue));
-
- pipe = pDeviceContext->BulkWritePipe;
-
- status = WdfRequestRetrieveInputMemory(Request, &reqMemory);
- if(!NT_SUCCESS(status)){
- TraceEvents(TRACE_LEVEL_ERROR, DBG_WRITE, "WdfRequestRetrieveInputBuffer failed\n");
- goto Exit;
- }
-
- status = WdfUsbTargetPipeFormatRequestForWrite(pipe,
- Request,
- reqMemory,
- NULL); // Offset
-
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_WRITE,
- "WdfUsbTargetPipeFormatRequestForWrite failed 0x%x\n", status);
- goto Exit;
- }
-
- WdfRequestSetCompletionRoutine(
- Request,
- EvtRequestWriteCompletionRoutine,
- pipe);
-
- //
- // Send the request asynchronously.
- //
- if (WdfRequestSend(Request, WdfUsbTargetPipeGetIoTarget(pipe), WDF_NO_SEND_OPTIONS) == FALSE) {
- //
- // Framework couldn't send the request for some reason.
- //
- TraceEvents(TRACE_LEVEL_ERROR, DBG_WRITE, "WdfRequestSend failed\n");
- status = WdfRequestGetStatus(Request);
- goto Exit;
- }
-
-Exit:
-
- if (!NT_SUCCESS(status)) {
- //
- // log event write failed
- //
- EventWriteWriteFail(&activity, WdfIoQueueGetDevice(Queue), status);
-
- WdfRequestCompleteWithInformation(Request, status, 0);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_WRITE, "<-- OsrFxEvtIoWrite\n");
-
- return;
-}
-
-VOID
-EvtRequestWriteCompletionRoutine(
- _In_ WDFREQUEST Request,
- _In_ WDFIOTARGET Target,
- _In_ PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
- _In_ WDFCONTEXT Context
- )
-/*++
-
-Routine Description:
-
- This is the completion routine for writes
- If the irp completes with success, we check if we
- need to recirculate this irp for another stage of
- transfer.
-
-Arguments:
-
- Context - Driver supplied context
- Device - Device handle
- Request - Request handle
- Params - request completion params
-
-Return Value:
- None
-
---*/
-{
- NTSTATUS status;
- size_t bytesWritten = 0;
- GUID activity = RequestToActivityId(Request);
- PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
-
- UNREFERENCED_PARAMETER(Target);
- UNREFERENCED_PARAMETER(Context);
-
- status = CompletionParams->IoStatus.Status;
-
- //
- // For usb devices, we should look at the Usb.Completion param.
- //
- usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
-
- bytesWritten = usbCompletionParams->Parameters.PipeWrite.Length;
-
- if (NT_SUCCESS(status)){
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_WRITE,
- "Number of bytes written: %I64d\n", (INT64)bytesWritten);
- } else {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_WRITE,
- "Write failed: request Status 0x%x UsbdStatus 0x%x\n",
- status, usbCompletionParams->UsbdStatus);
- }
-
- //
- // Log write stop event, using IRP activtiy ID if available or request
- // handle otherwise
- //
- EventWriteWriteStop(&activity,
- WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request)),
- bytesWritten,
- status,
- usbCompletionParams->UsbdStatus);
-
-
- WdfRequestCompleteWithInformation(Request, status, bytesWritten);
-
- return;
-}
-
-
-VOID
-OsrFxEvtIoStop(
- _In_ WDFQUEUE Queue,
- _In_ WDFREQUEST Request,
- _In_ ULONG ActionFlags
- )
-/*++
-
-Routine Description:
-
- This callback is invoked on every inflight request when the device
- is suspended or removed. Since our inflight read and write requests
- are actually pending in the target device, we will just acknowledge
- its presence. Until we acknowledge, complete, or requeue the requests
- framework will wait before allowing the device suspend or remove to
- proceeed. When the underlying USB stack gets the request to suspend or
- remove, it will fail all the pending requests.
-
-Arguments:
-
- Queue - handle to queue object that is associated with the I/O request
-
- Request - handle to a request object
-
- ActionFlags - bitwise OR of one or more WDF_REQUEST_STOP_ACTION_FLAGS flags
-
-Return Value:
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(Queue);
- UNREFERENCED_PARAMETER(ActionFlags);
-
- if (ActionFlags & WdfRequestStopActionSuspend ) {
- WdfRequestStopAcknowledge(Request, FALSE); // Don't requeue
- } else if(ActionFlags & WdfRequestStopActionPurge) {
- WdfRequestCancelSentRequest(Request);
- }
- return;
-}
-
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/driver.c b/usb/umdf_filter_kmdf/kmdf_driver/driver.c
deleted file mode 100644
index 25be851e..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/driver.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- Driver.c
-
-Abstract:
-
- Main module.
-
- This driver is for Open System Resources USB-FX2 Learning Kit designed
- and built by OSR specifically for use in teaching software developers how to write
- drivers for USB devices.
-
- The board supports a single configuration. The board automatically
- detects the speed of the host controller, and supplies either the
- high or full speed configuration based on the host controller's speed.
-
- The firmware supports 3 endpoints:
-
- Endpoint number 1 is used to indicate the state of the 8-switch
- switch-pack on the OSR USB-FX2 board. A single byte representing
- the switch state is sent (a) when the board is first started,
- (b) when the board resumes after selective-suspend,
- (c) whenever the state of the switches is changed.
-
- Endpoints 6 and 8 perform an internal loop-back function.
- Data that is sent to the board at EP6 is returned to the host on EP8.
-
- For further information on the endpoints, please refer to the spec
- http://www.osronline.com/hardware/OSRFX2_32.pdf.
-
- Vendor ID of the device is 0x4705 and Product ID is 0x210.
-
-Environment:
-
- Kernel mode only
-
---*/
-
-#include <osrusbfx2.h>
-
-#if defined(EVENT_TRACING)
-//
-// The trace message header (.tmh) file must be included in a source file
-// before any WPP macro calls and after defining a WPP_CONTROL_GUIDS
-// macro (defined in trace.h). During the compilation, WPP scans the source
-// files for DoTraceMessage() calls and builds a .tmh file which stores a unique
-// data GUID for each message, the text resource string for each message,
-// and the data types of the variables passed in for each message. This file
-// is automatically generated and used during post-processing.
-//
-#include "driver.tmh"
-#else
-ULONG DebugLevel = TRACE_LEVEL_INFORMATION;
-ULONG DebugFlag = 0xff;
-#endif
-
-PFN_IO_GET_ACTIVITY_ID_IRP g_pIoGetActivityIdIrp;
-PFN_IO_SET_DEVICE_INTERFACE_PROPERTY_DATA g_pIoSetDeviceInterfacePropertyData;
-
-#ifdef ALLOC_PRAGMA
-#pragma alloc_text(INIT, DriverEntry)
-#pragma alloc_text(PAGE, OsrFxEvtDriverContextCleanup)
-#endif
-
-NTSTATUS
-DriverEntry(
- PDRIVER_OBJECT DriverObject,
- PUNICODE_STRING RegistryPath
- )
-/*++
-
-Routine Description:
- DriverEntry initializes the driver and is the first routine called by the
- system after the driver is loaded.
-
-Parameters Description:
-
- DriverObject - 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.
-
- RegistryPath - 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 or another NTSTATUS error code otherwise.
-
---*/
-{
- WDF_DRIVER_CONFIG config;
- NTSTATUS status;
- WDF_OBJECT_ATTRIBUTES attributes;
- UNICODE_STRING funcName;
-
- //
- // Initialize WPP Tracing
- //
- WPP_INIT_TRACING( DriverObject, RegistryPath );
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT,
- "OSRUSBFX2 Driver Sample - Driver Framework Edition.\n");
-
- //
- // IRP activity ID functions are available on some versions, save them into
- // globals (or NULL if not available)
- //
- RtlInitUnicodeString(&funcName, L"IoGetActivityIdIrp");
- g_pIoGetActivityIdIrp = (PFN_IO_GET_ACTIVITY_ID_IRP) (ULONG_PTR)
- MmGetSystemRoutineAddress(&funcName);
-
- //
- // The Device interface property set is available on some version, save it
- // into globals (or NULL if not available)
- //
- RtlInitUnicodeString(&funcName, L"IoSetDeviceInterfacePropertyData");
- g_pIoSetDeviceInterfacePropertyData = (PFN_IO_SET_DEVICE_INTERFACE_PROPERTY_DATA) (ULONG_PTR)
- MmGetSystemRoutineAddress(&funcName);
-
- //
- // Register with ETW (unified tracing)
- //
- EventRegisterOSRUSBFX2();
-
- //
- // Initialize driver config to control the attributes that
- // are global to the driver. Note that framework by default
- // provides a driver unload routine. If you create any resources
- // in the DriverEntry and want to be cleaned in driver unload,
- // you can override that by manually setting the EvtDriverUnload in the
- // config structure. In general xxx_CONFIG_INIT macros are provided to
- // initialize most commonly used members.
- //
-
- WDF_DRIVER_CONFIG_INIT(
- &config,
- OsrFxEvtDeviceAdd
- );
-
- //
- // Register a cleanup callback so that we can call WPP_CLEANUP when
- // the framework driver object is deleted during driver unload.
- //
- WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
- attributes.EvtCleanupCallback = OsrFxEvtDriverContextCleanup;
-
- //
- // Create a framework driver object to represent our driver.
- //
- status = WdfDriverCreate(
- DriverObject,
- RegistryPath,
- &attributes, // Driver Object Attributes
- &config, // Driver Config Info
- WDF_NO_HANDLE // hDriver
- );
-
- if (!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_INIT,
- "WdfDriverCreate failed with status 0x%x\n", status);
- //
- // Cleanup tracing here because DriverContextCleanup will not be called
- // as we have failed to create WDFDRIVER object itself.
- // Please note that if your return failure from DriverEntry after the
- // WDFDRIVER object is created successfully, you don't have to
- // call WPP cleanup because in those cases DriverContextCleanup
- // will be executed when the framework deletes the DriverObject.
- //
- WPP_CLEANUP(DriverObject);
- EventUnregisterOSRUSBFX2();
- }
-
- return status;
-}
-
-VOID
-OsrFxEvtDriverContextCleanup(
- WDFOBJECT Driver
- )
-/*++
-Routine Description:
-
- Free resources allocated in DriverEntry that are not automatically
- cleaned up by the framework.
-
-Arguments:
-
- Driver - handle to a WDF Driver object.
-
-Return Value:
-
- VOID.
-
---*/
-{
- //
- // EvtCleanupCallback for WDFDRIVER is always called at PASSIVE_LEVEL
- //
- _IRQL_limited_to_(PASSIVE_LEVEL);
-
- PAGED_CODE ();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT,
- "--> OsrFxEvtDriverContextCleanup\n");
-
- WPP_CLEANUP( WdfDriverWdmGetDriverObject( (WDFDRIVER)Driver ));
-
- UNREFERENCED_PARAMETER(Driver); // For the case when WPP is not being used.
-
- EventUnregisterOSRUSBFX2();
-}
-
-#if !defined(EVENT_TRACING)
-
-VOID
-TraceEvents (
- _In_ ULONG DebugPrintLevel,
- _In_ ULONG DebugPrintFlag,
- _Printf_format_string_
- _In_ PCSTR DebugMessage,
- ...
- )
-
-/*++
-
-Routine Description:
-
- Debug print for the sample driver.
-
-Arguments:
-
- DebugPrintLevel - print level between 0 and 3, with 3 the most verbose
- DebugPrintFlag - message mask
- DebugMessage - format string of the message to print
- ... - values used by the format string
-
-Return Value:
-
- None.
-
- --*/
- {
-#if DBG
-#define TEMP_BUFFER_SIZE 1024
- va_list list;
- CHAR debugMessageBuffer[TEMP_BUFFER_SIZE];
- NTSTATUS status;
-
- va_start(list, DebugMessage);
-
- if (DebugMessage) {
-
- //
- // Using new safe string functions instead of _vsnprintf.
- // This function takes care of NULL terminating if the message
- // is longer than the buffer.
- //
- status = RtlStringCbVPrintfA( debugMessageBuffer,
- sizeof(debugMessageBuffer),
- DebugMessage,
- list );
- if(!NT_SUCCESS(status)) {
-
- DbgPrint (_DRIVER_NAME_": RtlStringCbVPrintfA failed 0x%x\n", status);
- return;
- }
- if (DebugPrintLevel <= TRACE_LEVEL_ERROR ||
- (DebugPrintLevel <= DebugLevel &&
- ((DebugPrintFlag & DebugFlag) == DebugPrintFlag))) {
- DbgPrint("%s %s", _DRIVER_NAME_, debugMessageBuffer);
- }
- }
- va_end(list);
-
- return;
-#else
- UNREFERENCED_PARAMETER(DebugPrintLevel);
- UNREFERENCED_PARAMETER(DebugPrintFlag);
- UNREFERENCED_PARAMETER(DebugMessage);
-#endif
-}
-
-#endif
-
-
-
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/interrupt.c b/usb/umdf_filter_kmdf/kmdf_driver/interrupt.c
deleted file mode 100644
index 00ea3550..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/interrupt.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- Interrupt.c
-
-Abstract:
-
- This modules has routines configure a continuous reader on an
- interrupt pipe to asynchronously read toggle switch states.
-
-Environment:
-
- Kernel mode
-
---*/
-
-#include <osrusbfx2.h>
-
-#if defined(EVENT_TRACING)
-#include "interrupt.tmh"
-#endif
-
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-OsrFxConfigContReaderForInterruptEndPoint(
- _In_ PDEVICE_CONTEXT DeviceContext
- )
-/*++
-
-Routine Description:
-
- This routine configures a continuous reader on the
- interrupt endpoint. It's called from the PrepareHarware event.
-
-Arguments:
-
-
-Return Value:
-
- NT status value
-
---*/
-{
- WDF_USB_CONTINUOUS_READER_CONFIG contReaderConfig;
- NTSTATUS status;
-
- WDF_USB_CONTINUOUS_READER_CONFIG_INIT(&contReaderConfig,
- OsrFxEvtUsbInterruptPipeReadComplete,
- DeviceContext, // Context
- sizeof(UCHAR)); // TransferLength
-
- contReaderConfig.EvtUsbTargetPipeReadersFailed = OsrFxEvtUsbInterruptReadersFailed;
-
- //
- // Reader requests are not posted to the target automatically.
- // Driver must explictly call WdfIoTargetStart to kick start the
- // reader. In this sample, it's done in D0Entry.
- // By defaut, framework queues two requests to the target
- // endpoint. Driver can configure up to 10 requests with CONFIG macro.
- //
- status = WdfUsbTargetPipeConfigContinuousReader(DeviceContext->InterruptPipe,
- &contReaderConfig);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
- "OsrFxConfigContReaderForInterruptEndPoint failed %x\n",
- status);
- return status;
- }
-
- return status;
-}
-
-VOID
-OsrFxEvtUsbInterruptPipeReadComplete(
- WDFUSBPIPE Pipe,
- WDFMEMORY Buffer,
- size_t NumBytesTransferred,
- WDFCONTEXT Context
- )
-/*++
-
-Routine Description:
-
- This the completion routine of the continour reader. This can
- called concurrently on multiprocessor system if there are
- more than one readers configured. So make sure to protect
- access to global resources.
-
-Arguments:
-
- Buffer - This buffer is freed when this call returns.
- If the driver wants to delay processing of the buffer, it
- can take an additional referrence.
-
- Context - Provided in the WDF_USB_CONTINUOUS_READER_CONFIG_INIT macro
-
-Return Value:
-
- NT status value
-
---*/
-{
- PUCHAR switchState = NULL;
- WDFDEVICE device;
- PDEVICE_CONTEXT pDeviceContext = Context;
-
- UNREFERENCED_PARAMETER(Pipe);
-
- device = WdfObjectContextGetObject(pDeviceContext);
-
- //
- // Make sure that there is data in the read packet. Depending on the device
- // specification, it is possible for it to return a 0 length read in
- // certain conditions.
- //
-
- if (NumBytesTransferred == 0) {
- TraceEvents(TRACE_LEVEL_WARNING, DBG_INIT,
- "OsrFxEvtUsbInterruptPipeReadComplete Zero length read "
- "occured on the Interrupt Pipe's Continuous Reader\n"
- );
- return;
- }
-
-
- NT_ASSERT(NumBytesTransferred == sizeof(UCHAR));
-
- switchState = WdfMemoryGetBuffer(Buffer, NULL);
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT,
- "OsrFxEvtUsbInterruptPipeReadComplete SwitchState %x\n",
- *switchState);
-
- pDeviceContext->CurrentSwitchState = *switchState;
-
- //
- // Handle any pending Interrupt Message IOCTLs. Note that the OSR USB device
- // will generate an interrupt message when the the device resumes from a low
- // power state. So if the Interrupt Message IOCTL was sent after the device
- // has gone to a low power state, the pending Interrupt Message IOCTL will
- // get completed in the function call below, before the user twiddles the
- // dip switches on the OSR USB device. If this is not the desired behavior
- // for your driver, then you could handle this condition by maintaining a
- // state variable on D0Entry to track interrupt messages caused by power up.
- //
- OsrUsbIoctlGetInterruptMessage(device, STATUS_SUCCESS);
-
-}
-
-BOOLEAN
-OsrFxEvtUsbInterruptReadersFailed(
- _In_ WDFUSBPIPE Pipe,
- _In_ NTSTATUS Status,
- _In_ USBD_STATUS UsbdStatus
- )
-{
- WDFDEVICE device = WdfIoTargetGetDevice(WdfUsbTargetPipeGetIoTarget(Pipe));
- PDEVICE_CONTEXT pDeviceContext = GetDeviceContext(device);
-
- UNREFERENCED_PARAMETER(UsbdStatus);
-
- //
- // Clear the current switch state.
- //
- pDeviceContext->CurrentSwitchState = 0;
-
- //
- // Service the pending interrupt switch change request
- //
- OsrUsbIoctlGetInterruptMessage(device, Status);
-
- return TRUE;
-}
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/ioctl.c b/usb/umdf_filter_kmdf/kmdf_driver/ioctl.c
deleted file mode 100644
index e36bcef1..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/ioctl.c
+++ /dev/null
@@ -1,1063 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- Ioctl.c
-
-Abstract:
-
- USB device driver for OSR USB-FX2 Learning Kit
-
-Environment:
-
- Kernel mode only
-
---*/
-
-#include <osrusbfx2.h>
-
-#if defined(EVENT_TRACING)
-#include "ioctl.tmh"
-#endif
-
-#pragma alloc_text(PAGE, OsrFxEvtIoDeviceControl)
-#pragma alloc_text(PAGE, ResetPipe)
-#pragma alloc_text(PAGE, ResetDevice)
-#pragma alloc_text(PAGE, ReenumerateDevice)
-#pragma alloc_text(PAGE, GetBarGraphState)
-#pragma alloc_text(PAGE, SetBarGraphState)
-#pragma alloc_text(PAGE, GetSevenSegmentState)
-#pragma alloc_text(PAGE, SetSevenSegmentState)
-#pragma alloc_text(PAGE, GetSwitchState)
-
-VOID
-OsrFxEvtIoDeviceControl(
- _In_ WDFQUEUE Queue,
- _In_ WDFREQUEST Request,
- _In_ size_t OutputBufferLength,
- _In_ size_t InputBufferLength,
- _In_ ULONG IoControlCode
- )
-/*++
-
-Routine Description:
-
- This event is called when the framework receives IRP_MJ_DEVICE_CONTROL
- requests from the system.
-
-Arguments:
-
- Queue - Handle to the framework queue object that is associated
- with the I/O request.
- Request - Handle to a framework request object.
-
- OutputBufferLength - length of the request's output buffer,
- if an output buffer is available.
- InputBufferLength - length of the request's input buffer,
- if an input buffer is available.
-
- IoControlCode - the driver-defined or system-defined I/O control code
- (IOCTL) that is associated with the request.
-Return Value:
-
- VOID
-
---*/
-{
- WDFDEVICE device;
- PDEVICE_CONTEXT pDevContext;
- size_t bytesReturned = 0;
- PBAR_GRAPH_STATE barGraphState = NULL;
- PSWITCH_STATE switchState = NULL;
- PUCHAR sevenSegment = NULL;
- BOOLEAN requestPending = FALSE;
- NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST;
-
- UNREFERENCED_PARAMETER(InputBufferLength);
- UNREFERENCED_PARAMETER(OutputBufferLength);
-
- //
- // If your driver is at the top of its driver stack, EvtIoDeviceControl is called
- // at IRQL = PASSIVE_LEVEL.
- //
- _IRQL_limited_to_(PASSIVE_LEVEL);
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL, "--> OsrFxEvtIoDeviceControl\n");
- //
- // initialize variables
- //
- device = WdfIoQueueGetDevice(Queue);
- pDevContext = GetDeviceContext(device);
-
- switch(IoControlCode) {
-
- case IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR: {
-
- PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor = NULL;
- USHORT requiredSize = 0;
-
- //
- // First get the size of the config descriptor
- //
- status = WdfUsbTargetDeviceRetrieveConfigDescriptor(
- pDevContext->UsbDevice,
- NULL,
- &requiredSize);
-
- if (status != STATUS_BUFFER_TOO_SMALL) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "WdfUsbTargetDeviceRetrieveConfigDescriptor failed 0x%x\n", status);
- break;
- }
-
- //
- // Get the buffer - make sure the buffer is big enough
- //
- status = WdfRequestRetrieveOutputBuffer(Request,
- (size_t)requiredSize, // MinimumRequired
- &configurationDescriptor,
- NULL);
- if(!NT_SUCCESS(status)){
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "WdfRequestRetrieveOutputBuffer failed 0x%x\n", status);
- break;
- }
-
- status = WdfUsbTargetDeviceRetrieveConfigDescriptor(
- pDevContext->UsbDevice,
- configurationDescriptor,
- &requiredSize);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "WdfUsbTargetDeviceRetrieveConfigDescriptor failed 0x%x\n", status);
- break;
- }
-
- bytesReturned = requiredSize;
-
- }
- break;
-
- case IOCTL_OSRUSBFX2_RESET_DEVICE:
-
- status = ResetDevice(device);
- break;
-
- case IOCTL_OSRUSBFX2_REENUMERATE_DEVICE:
-
- //
- // Otherwise, call our function to reenumerate the
- // device
- //
- status = ReenumerateDevice(pDevContext);
-
- bytesReturned = 0;
- break;
-
- case IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY:
-
- //
- // Make sure the caller's output buffer is large enough
- // to hold the state of the bar graph
- //
- status = WdfRequestRetrieveOutputBuffer(Request,
- sizeof(BAR_GRAPH_STATE),
- &barGraphState,
- NULL);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's output buffer is too small for this IOCTL, expecting an BAR_GRAPH_STATE\n");
- break;
- }
- //
- // Call our function to get the bar graph state
- //
- status = GetBarGraphState(pDevContext, barGraphState);
-
- //
- // If we succeeded return the user their data
- //
- if (NT_SUCCESS(status)) {
-
- bytesReturned = sizeof(BAR_GRAPH_STATE);
-
- } else {
-
- bytesReturned = 0;
-
- }
- break;
-
- case IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY:
-
- status = WdfRequestRetrieveInputBuffer(Request,
- sizeof(BAR_GRAPH_STATE),
- &barGraphState,
- NULL);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's input buffer is too small for this IOCTL, expecting an BAR_GRAPH_STATE\n");
- break;
- }
-
- //
- // Call our routine to set the bar graph state
- //
- status = SetBarGraphState(pDevContext, barGraphState);
-
- //
- // There's no data returned for this call
- //
- bytesReturned = 0;
- break;
-
- case IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY:
-
- status = WdfRequestRetrieveOutputBuffer(Request,
- sizeof(UCHAR),
- &sevenSegment,
- NULL);
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's output buffer is too small for this IOCTL, expecting an UCHAR\n");
- break;
- }
-
- //
- // Call our function to get the 7 segment state
- //
- status = GetSevenSegmentState(pDevContext, sevenSegment);
-
- //
- // If we succeeded return the user their data
- //
- if (NT_SUCCESS(status)) {
-
- bytesReturned = sizeof(UCHAR);
-
- } else {
-
- bytesReturned = 0;
-
- }
- break;
-
- case IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY:
-
- status = WdfRequestRetrieveInputBuffer(Request,
- sizeof(UCHAR),
- &sevenSegment,
- NULL);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's input buffer is too small for this IOCTL, expecting an UCHAR\n");
- bytesReturned = sizeof(UCHAR);
- break;
- }
-
- //
- // Call our routine to set the 7 segment state
- //
- status = SetSevenSegmentState(pDevContext, sevenSegment);
-
- //
- // There's no data returned for this call
- //
- bytesReturned = 0;
- break;
-
- case IOCTL_OSRUSBFX2_READ_SWITCHES:
-
- status = WdfRequestRetrieveOutputBuffer(Request,
- sizeof(SWITCH_STATE),
- &switchState,
- NULL);// BufferLength
-
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's output buffer is too small for this IOCTL, expecting a SWITCH_STATE\n");
- bytesReturned = sizeof(SWITCH_STATE);
- break;
-
- }
-
- //
- // Call our routine to get the state of the switches
- //
- status = GetSwitchState(pDevContext, switchState);
-
- //
- // If successful, return the user their data
- //
- if (NT_SUCCESS(status)) {
-
- bytesReturned = sizeof(SWITCH_STATE);
-
- } else {
- //
- // Don't return any data
- //
- bytesReturned = 0;
- }
- break;
-
- case IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE:
-
- //
- // Forward the request to an interrupt message queue and dont complete
- // the request until an interrupt from the USB device occurs.
- //
- status = WdfRequestForwardToIoQueue(Request, pDevContext->InterruptMsgQueue);
- if (NT_SUCCESS(status)) {
- requestPending = TRUE;
- }
-
- break;
-
- default :
- status = STATUS_INVALID_DEVICE_REQUEST;
- break;
- }
-
- if (requestPending == FALSE) {
- WdfRequestCompleteWithInformation(Request, status, bytesReturned);
- }
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL, "<-- OsrFxEvtIoDeviceControl\n");
-
- return;
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ResetPipe(
- _In_ WDFUSBPIPE Pipe
- )
-/*++
-
-Routine Description:
-
- This routine resets the pipe.
-
-Arguments:
-
- Pipe - framework pipe handle
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
-
- PAGED_CODE();
-
- //
- // This routine synchronously submits a URB_FUNCTION_RESET_PIPE
- // request down the stack.
- //
- status = WdfUsbTargetPipeResetSynchronously(Pipe,
- WDF_NO_HANDLE, // WDFREQUEST
- NULL // PWDF_REQUEST_SEND_OPTIONS
- );
-
- if (NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL, "ResetPipe - success\n");
- status = STATUS_SUCCESS;
- }
- else {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL, "ResetPipe - failed\n");
- }
-
- return status;
-}
-
-VOID
-StopAllPipes(
- IN PDEVICE_CONTEXT DeviceContext
- )
-{
- WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(DeviceContext->InterruptPipe),
- WdfIoTargetCancelSentIo);
- WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(DeviceContext->BulkReadPipe),
- WdfIoTargetCancelSentIo);
- WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(DeviceContext->BulkWritePipe),
- WdfIoTargetCancelSentIo);
-}
-
-NTSTATUS
-StartAllPipes(
- IN PDEVICE_CONTEXT DeviceContext
- )
-{
- NTSTATUS status;
-
- status = WdfIoTargetStart(WdfUsbTargetPipeGetIoTarget(DeviceContext->InterruptPipe));
- if (!NT_SUCCESS(status)) {
- return status;
- }
-
- status = WdfIoTargetStart(WdfUsbTargetPipeGetIoTarget(DeviceContext->BulkReadPipe));
- if (!NT_SUCCESS(status)) {
- return status;
- }
-
- status = WdfIoTargetStart(WdfUsbTargetPipeGetIoTarget(DeviceContext->BulkWritePipe));
- if (!NT_SUCCESS(status)) {
- return status;
- }
-
- return status;
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ResetDevice(
- _In_ WDFDEVICE Device
- )
-/*++
-
-Routine Description:
-
- This routine calls WdfUsbTargetDeviceResetPortSynchronously to reset the device if it's still
- connected.
-
-Arguments:
-
- Device - Handle to a framework device
-
-Return Value:
-
- NT status value
-
---*/
-{
- PDEVICE_CONTEXT pDeviceContext;
- NTSTATUS status;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL, "--> ResetDevice\n");
-
- pDeviceContext = GetDeviceContext(Device);
-
- //
- // A NULL timeout indicates an infinite wake
- //
- status = WdfWaitLockAcquire(pDeviceContext->ResetDeviceWaitLock, NULL);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL, "ResetDevice - could not acquire lock\n");
- return status;
- }
-
- StopAllPipes(pDeviceContext);
-
- status = WdfUsbTargetDeviceResetPortSynchronously(pDeviceContext->UsbDevice);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL, "ResetDevice failed - 0x%x\n", status);
- }
-
- status = StartAllPipes(pDeviceContext);
- if (!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL, "Failed to start all pipes - 0x%x\n", status);
- }
-
- WdfWaitLockRelease(pDeviceContext->ResetDeviceWaitLock);
-
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_IOCTL, "<-- ResetDevice\n");
- return status;
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ReenumerateDevice(
- _In_ PDEVICE_CONTEXT DevContext
- )
-/*++
-
-Routine Description
-
- This routine re-enumerates the USB device.
-
-Arguments:
-
- pDevContext - One of our device extensions
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
- GUID activity;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,"--> ReenumerateDevice\n");
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_REENUMERATE, // Request
- 0, // Value
- 0); // Index
-
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- WDF_NO_HANDLE, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- NULL, // MemoryDescriptor
- NULL); // BytesTransferred
-
- if(!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "ReenumerateDevice: Failed to Reenumerate - 0x%x \n", status);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,"<-- ReenumerateDevice\n");
-
- //
- // Send event to eventlog
- //
-
- activity = DeviceToActivityId(WdfObjectContextGetObject(DevContext));
- EventWriteDeviceReenumerated(&activity,
- DevContext->DeviceName,
- DevContext->Location,
- status);
-
- return status;
-
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetBarGraphState(
- _In_ PDEVICE_CONTEXT DevContext,
- _Out_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
-Routine Description
-
- This routine gets the state of the bar graph on the board
-
-Arguments:
-
- DevContext - One of our device extensions
-
- BarGraphState - Struct that receives the bar graph's state
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
- WDF_MEMORY_DESCRIPTOR memDesc;
- ULONG bytesTransferred;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "--> GetBarGraphState\n");
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_BARGRAPH_DISPLAY, // Request
- 0, // Value
- 0); // Index
-
- //
- // Set the buffer to 0, the board will OR in everything that is set
- //
- BarGraphState->BarsAsUChar = 0;
-
-
- WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc,
- BarGraphState,
- sizeof(BAR_GRAPH_STATE));
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- WDF_NO_HANDLE, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- &memDesc,
- &bytesTransferred);
-
- if(!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "GetBarGraphState: Failed to GetBarGraphState - 0x%x \n", status);
-
- } else {
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,
- "GetBarGraphState: LED mask is 0x%x\n", BarGraphState->BarsAsUChar);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "<-- GetBarGraphState\n");
-
- return status;
-
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SetBarGraphState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
-Routine Description
-
- This routine sets the state of the bar graph on the board
-
-Arguments:
-
- DevContext - One of our device extensions
-
- BarGraphState - Struct that describes the bar graph's desired state
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
- WDF_MEMORY_DESCRIPTOR memDesc;
- ULONG bytesTransferred;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "--> SetBarGraphState\n");
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_BARGRAPH_DISPLAY, // Request
- 0, // Value
- 0); // Index
-
- WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc,
- BarGraphState,
- sizeof(BAR_GRAPH_STATE));
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- NULL, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- &memDesc,
- &bytesTransferred);
-
- if(!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "SetBarGraphState: Failed - 0x%x \n", status);
-
- } else {
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,
- "SetBarGraphState: LED mask is 0x%x\n", BarGraphState->BarsAsUChar);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "<-- SetBarGraphState\n");
-
- return status;
-
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetSevenSegmentState(
- _In_ PDEVICE_CONTEXT DevContext,
- _Out_ PUCHAR SevenSegment
- )
-/*++
-
-Routine Description
-
- This routine gets the state of the 7 segment display on the board
- by sending a synchronous control command.
-
- NOTE: It's not a good practice to send a synchronous request in the
- context of the user thread because if the transfer takes long
- time to complete, you end up holding the user thread.
-
- I'm choosing to do synchronous transfer because a) I know this one
- completes immediately b) and for demonstration.
-
-Arguments:
-
- DevContext - One of our device extensions
-
- SevenSegment - receives the state of the 7 segment display
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
-
- WDF_MEMORY_DESCRIPTOR memDesc;
- ULONG bytesTransferred;
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "GetSetSevenSegmentState: Enter\n");
-
- PAGED_CODE();
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_7SEGMENT_DISPLAY, // Request
- 0, // Value
- 0); // Index
-
- //
- // Set the buffer to 0, the board will OR in everything that is set
- //
- *SevenSegment = 0;
-
- WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc,
- SevenSegment,
- sizeof(UCHAR));
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- NULL, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- &memDesc,
- &bytesTransferred);
-
- if(!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "GetSevenSegmentState: Failed to get 7 Segment state - 0x%x \n", status);
- } else {
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,
- "GetSevenSegmentState: 7 Segment mask is 0x%x\n", *SevenSegment);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "GetSetSevenSegmentState: Exit\n");
-
- return status;
-
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SetSevenSegmentState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PUCHAR SevenSegment
- )
-/*++
-
-Routine Description
-
- This routine sets the state of the 7 segment display on the board
-
-Arguments:
-
- DevContext - One of our device extensions
-
- SevenSegment - desired state of the 7 segment display
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
- WDF_MEMORY_DESCRIPTOR memDesc;
- ULONG bytesTransferred;
-
- PAGED_CODE();
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "--> SetSevenSegmentState\n");
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_7SEGMENT_DISPLAY, // Request
- 0, // Value
- 0); // Index
-
- WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc,
- SevenSegment,
- sizeof(UCHAR));
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- NULL, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- &memDesc,
- &bytesTransferred);
-
- if(!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "SetSevenSegmentState: Failed to set 7 Segment state - 0x%x \n", status);
-
- } else {
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,
- "SetSevenSegmentState: 7 Segment mask is 0x%x\n", *SevenSegment);
-
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "<-- SetSevenSegmentState\n");
-
- return status;
-
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetSwitchState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PSWITCH_STATE SwitchState
- )
-/*++
-
-Routine Description
-
- This routine gets the state of the switches on the board
-
-Arguments:
-
- DevContext - One of our device extensions
-
-Return Value:
-
- NT status value
-
---*/
-{
- NTSTATUS status;
- WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
- WDF_REQUEST_SEND_OPTIONS sendOptions;
- WDF_MEMORY_DESCRIPTOR memDesc;
- ULONG bytesTransferred;
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "--> GetSwitchState\n");
-
- PAGED_CODE();
-
- WDF_REQUEST_SEND_OPTIONS_INIT(
- &sendOptions,
- WDF_REQUEST_SEND_OPTION_TIMEOUT
- );
-
- WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
- &sendOptions,
- DEFAULT_CONTROL_TRANSFER_TIMEOUT
- );
-
- WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_SWITCHES, // Request
- 0, // Value
- 0); // Index
-
- SwitchState->SwitchesAsUChar = 0;
-
- WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc,
- SwitchState,
- sizeof(SWITCH_STATE));
-
- status = WdfUsbTargetDeviceSendControlTransferSynchronously(
- DevContext->UsbDevice,
- NULL, // Optional WDFREQUEST
- &sendOptions,
- &controlSetupPacket,
- &memDesc,
- &bytesTransferred);
-
- if(!NT_SUCCESS(status)) {
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "GetSwitchState: Failed to Get switches - 0x%x \n", status);
-
- } else {
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL,
- "GetSwitchState: Switch mask is 0x%x\n", SwitchState->SwitchesAsUChar);
- }
-
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_IOCTL, "<-- GetSwitchState\n");
-
- return status;
-
-}
-
-
-VOID
-OsrUsbIoctlGetInterruptMessage(
- _In_ WDFDEVICE Device,
- _In_ NTSTATUS ReaderStatus
- )
-/*++
-
-Routine Description
-
- This method handles the completion of the pended request for the IOCTL
- IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE.
-
-Arguments:
-
- Device - Handle to a framework device.
-
-Return Value:
-
- None.
-
---*/
-{
- NTSTATUS status;
- WDFREQUEST request;
- PDEVICE_CONTEXT pDevContext;
- size_t bytesReturned = 0;
- PSWITCH_STATE switchState = NULL;
-
- pDevContext = GetDeviceContext(Device);
-
- do {
-
- //
- // Check if there are any pending requests in the Interrupt Message Queue.
- // If a request is found then complete the pending request.
- //
- status = WdfIoQueueRetrieveNextRequest(pDevContext->InterruptMsgQueue, &request);
-
- if (NT_SUCCESS(status)) {
- status = WdfRequestRetrieveOutputBuffer(request,
- sizeof(SWITCH_STATE),
- &switchState,
- NULL);// BufferLength
-
- if (!NT_SUCCESS(status)) {
-
- TraceEvents(TRACE_LEVEL_ERROR, DBG_IOCTL,
- "User's output buffer is too small for this IOCTL, expecting a SWITCH_STATE\n");
- bytesReturned = sizeof(SWITCH_STATE);
-
- } else {
-
- //
- // Copy the state information saved by the continuous reader.
- //
- if (NT_SUCCESS(ReaderStatus)) {
- switchState->SwitchesAsUChar = pDevContext->CurrentSwitchState;
- bytesReturned = sizeof(SWITCH_STATE);
- } else {
- bytesReturned = 0;
- }
- }
-
- //
- // Complete the request. If we failed to get the output buffer then
- // complete with that status. Otherwise complete with the status from the reader.
- //
- WdfRequestCompleteWithInformation(request,
- NT_SUCCESS(status) ? ReaderStatus : status,
- bytesReturned);
- status = STATUS_SUCCESS;
-
- } else if (status != STATUS_NO_MORE_ENTRIES) {
- KdPrint(("WdfIoQueueRetrieveNextRequest status %08x\n", status));
- }
-
- request = NULL;
-
- } while (status == STATUS_SUCCESS);
-
- return;
-
-}
-
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.h b/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.h
deleted file mode 100644
index 909e347d..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.h
+++ /dev/null
@@ -1,335 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- private.h
-
-Abstract:
-
- Contains structure definitions and function prototypes private to
- the driver.
-
-Environment:
-
- Kernel mode
-
---*/
-
-#include <initguid.h>
-#include <ntddk.h>
-#include "usbdi.h"
-#include "usbdlib.h"
-#include "public.h"
-#include "driverspecs.h"
-#include <wdf.h>
-#include <wdfusb.h>
-#define NTSTRSAFE_LIB
-#include <ntstrsafe.h>
-
-#include "trace.h"
-
-//
-// Include auto-generated ETW event functions (created by MC.EXE from
-// osrusbfx2.man)
-//
-#include "fx2Events.h"
-
-#ifndef _PRIVATE_H
-#define _PRIVATE_H
-
-#define POOL_TAG (ULONG) 'FRSO'
-#define _DRIVER_NAME_ "OSRUSBFX2"
-
-#define TEST_BOARD_TRANSFER_BUFFER_SIZE (64*1024)
-#define DEVICE_DESC_LENGTH 256
-
-extern const __declspec(selectany) LONGLONG DEFAULT_CONTROL_TRANSFER_TIMEOUT = 5 * -1 * WDF_TIMEOUT_TO_SEC;
-
-//
-// Define the vendor commands supported by our device
-//
-#define USBFX2LK_READ_7SEGMENT_DISPLAY 0xD4
-#define USBFX2LK_READ_SWITCHES 0xD6
-#define USBFX2LK_READ_BARGRAPH_DISPLAY 0xD7
-#define USBFX2LK_SET_BARGRAPH_DISPLAY 0xD8
-#define USBFX2LK_IS_HIGH_SPEED 0xD9
-#define USBFX2LK_REENUMERATE 0xDA
-#define USBFX2LK_SET_7SEGMENT_DISPLAY 0xDB
-
-//
-// Define the features that we can clear
-// and set on our device
-//
-#define USBFX2LK_FEATURE_EPSTALL 0x00
-#define USBFX2LK_FEATURE_WAKE 0x01
-
-//
-// Order of endpoints in the interface descriptor
-//
-#define INTERRUPT_IN_ENDPOINT_INDEX 0
-#define BULK_OUT_ENDPOINT_INDEX 1
-#define BULK_IN_ENDPOINT_INDEX 2
-
-//
-// A structure representing the instance information associated with
-// this particular device.
-//
-
-typedef struct _DEVICE_CONTEXT {
-
- WDFUSBDEVICE UsbDevice;
-
- WDFUSBINTERFACE UsbInterface;
-
- WDFUSBPIPE BulkReadPipe;
-
- WDFUSBPIPE BulkWritePipe;
-
- WDFUSBPIPE InterruptPipe;
-
- WDFWAITLOCK ResetDeviceWaitLock;
-
- UCHAR CurrentSwitchState;
-
- WDFQUEUE InterruptMsgQueue;
-
- ULONG UsbDeviceTraits;
-
- //
- // The following fields are used during event logging to
- // report the events relative to this specific instance
- // of the device.
- //
-
- WDFMEMORY DeviceNameMemory;
- PCWSTR DeviceName;
-
- WDFMEMORY LocationMemory;
- PCWSTR Location;
-
-} DEVICE_CONTEXT, *PDEVICE_CONTEXT;
-
-WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_CONTEXT, GetDeviceContext)
-
-extern ULONG DebugLevel;
-
-typedef
-NTSTATUS
-(*PFN_IO_GET_ACTIVITY_ID_IRP) (
- _In_ PIRP Irp,
- _Out_ LPGUID Guid
- );
-
-typedef
-NTSTATUS
-(*PFN_IO_SET_DEVICE_INTERFACE_PROPERTY_DATA) (
- _In_ PUNICODE_STRING SymbolicLinkName,
- _In_ CONST DEVPROPKEY *PropertyKey,
- _In_ LCID Lcid,
- _In_ ULONG Flags,
- _In_ DEVPROPTYPE Type,
- _In_ ULONG Size,
- _In_opt_ PVOID Data
- );
-
-//
-// Global function pointer set in DriverEntry
-// Check for NULL before using
-//
-extern PFN_IO_GET_ACTIVITY_ID_IRP g_pIoGetActivityIdIrp;
-
-extern PFN_IO_SET_DEVICE_INTERFACE_PROPERTY_DATA g_pIoSetDeviceInterfacePropertyData;
-
-DRIVER_INITIALIZE DriverEntry;
-
-EVT_WDF_OBJECT_CONTEXT_CLEANUP OsrFxEvtDriverContextCleanup;
-
-EVT_WDF_DRIVER_DEVICE_ADD OsrFxEvtDeviceAdd;
-
-EVT_WDF_DEVICE_PREPARE_HARDWARE OsrFxEvtDevicePrepareHardware;
-
-EVT_WDF_IO_QUEUE_IO_READ OsrFxEvtIoRead;
-
-EVT_WDF_IO_QUEUE_IO_WRITE OsrFxEvtIoWrite;
-
-EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL OsrFxEvtIoDeviceControl;
-
-EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine;
-
-EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine;
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ResetPipe(
- _In_ WDFUSBPIPE Pipe
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ResetDevice(
- _In_ WDFDEVICE Device
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SelectInterfaces(
- _In_ WDFDEVICE Device
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-ReenumerateDevice(
- _In_ PDEVICE_CONTEXT DevContext
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetBarGraphState(
- _In_ PDEVICE_CONTEXT DevContext,
- _Out_ PBAR_GRAPH_STATE BarGraphState
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SetBarGraphState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PBAR_GRAPH_STATE BarGraphState
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetSevenSegmentState(
- _In_ PDEVICE_CONTEXT DevContext,
- _Out_ PUCHAR SevenSegment
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-SetSevenSegmentState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PUCHAR SevenSegment
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-GetSwitchState(
- _In_ PDEVICE_CONTEXT DevContext,
- _In_ PSWITCH_STATE SwitchState
- );
-
-VOID
-OsrUsbIoctlGetInterruptMessage(
- _In_ WDFDEVICE Device,
- _In_ NTSTATUS ReaderStatus
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-OsrFxSetPowerPolicy(
- _In_ WDFDEVICE Device
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-OsrFxConfigContReaderForInterruptEndPoint(
- _In_ PDEVICE_CONTEXT DeviceContext
- );
-
-EVT_WDF_USB_READER_COMPLETION_ROUTINE OsrFxEvtUsbInterruptPipeReadComplete;
-
-EVT_WDF_USB_READERS_FAILED OsrFxEvtUsbInterruptReadersFailed;
-
-EVT_WDF_IO_QUEUE_IO_STOP OsrFxEvtIoStop;
-
-EVT_WDF_DEVICE_D0_ENTRY OsrFxEvtDeviceD0Entry;
-
-EVT_WDF_DEVICE_D0_EXIT OsrFxEvtDeviceD0Exit;
-
-EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH OsrFxEvtDeviceSelfManagedIoFlush;
-
-_IRQL_requires_(PASSIVE_LEVEL)
-BOOLEAN
-OsrFxReadFdoRegistryKeyValue(
- _In_ PWDFDEVICE_INIT DeviceInit,
- _In_ PWCHAR Name,
- _Out_ PULONG Value
- );
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-VOID
-OsrFxEnumerateChildren(
- _In_ WDFDEVICE Device
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-VOID
-GetDeviceEventLoggingNames(
- _In_ WDFDEVICE Device
- );
-
-_IRQL_requires_(PASSIVE_LEVEL)
-PCHAR
-DbgDevicePowerString(
- _In_ WDF_POWER_DEVICE_STATE Type
- );
-
-
-_IRQL_requires_(PASSIVE_LEVEL)
-USBD_STATUS
-OsrFxValidateConfigurationDescriptor(
- _In_reads_bytes_(BufferLength) PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc,
- _In_ ULONG BufferLength,
- _Inout_ PUCHAR *Offset
- );
-
-FORCEINLINE
-GUID
-RequestToActivityId(
- _In_ WDFREQUEST Request
- )
-{
- GUID activity = {0};
- NTSTATUS status = STATUS_SUCCESS;
-
- if (g_pIoGetActivityIdIrp != NULL) {
-
- //
- // Use activity ID generated by application (or IO manager)
- //
- status = g_pIoGetActivityIdIrp(WdfRequestWdmGetIrp(Request), &activity);
- }
-
- if (g_pIoGetActivityIdIrp == NULL || !NT_SUCCESS(status)) {
-
- //
- // Fall back to using the WDFREQUEST handle as the activity ID
- //
- RtlCopyMemory(&activity, &Request, sizeof(WDFREQUEST));
- }
-
-
- return activity;
-}
-
-FORCEINLINE
-GUID
-DeviceToActivityId(
- _In_ WDFDEVICE Device
- )
-{
- GUID activity = {0};
- RtlCopyMemory(&activity, &Device, sizeof(WDFDEVICE));
- return activity;
-}
-
-
-#endif
-
-
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.man b/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.man
deleted file mode 100644
index 176dfc89..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.man
+++ /dev/null
@@ -1,309 +0,0 @@
-<?xml version='1.0' encoding='utf-8' standalone='yes'?>
-<instrumentationManifest
- xmlns="http://schemas.microsoft.com/win/2004/08/events"
- xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd"
- >
- <instrumentation>
- <events>
- <provider
- guid="{69cd60e3-430f-4da4-b1b3-e3bdaf945875}"
- messageFileName="%Systemroot%\System32\drivers\osrusbfx2.SYS"
- name="OSRUSBFX2"
- resourceFileName="%SystemRoot%\System32\drivers\osrusbfx2.SYS"
- symbol="OSRUSBFX2_PROVIDER"
- >
- <channels>
- <channel
- chid="Analytic"
- enabled="false"
- name="OsrUsbfx2/Analytic"
- symbol="OSRUSBFX2_ANALYTIC"
- type="Analytic"
- />
- <channel
- chid="operational"
- enabled="true"
- isolation="System"
- message="$(string.OSRUSBFX2_OPERATIONAL.Name)"
- name="OsrUsbFx2/Operational"
- symbol="OSRUSBFX2_OPERATIONAL"
- type="Operational"
- />
- </channels>
- <keywords>
- <keyword
- mask="0x0000000000000010"
- message="$(string.OSRUSBFX2_DEVICE_INFO_KEYWORD.message)"
- name="deviceinfo"
- symbol="OSRUSBFX2_DEVICE_INFO_KEYWORD"
- />
- <keyword
- mask="0x0000000000000040"
- message="$(string.OSRUSBFX2_READ_WRITE_KEYWORD.message)"
- name="readwrite"
- symbol="OSRUSBFX2_READ_WRITE_KEYWORD"
- />
- </keywords>
- <opcodes>
- <!-- Defining our own custom opcode instead of using standard opcodes defined by winmeta.xml -->
- <opcode
- name="add"
- symbol="OSRUSBFX2_DEVICE_ADD"
- value="10"
- />
- <opcode
- name="fail"
- symbol="OSRUSBFX2_FAIL"
- value="11"
- />
- </opcodes>
- <tasks>
- <!-- Support for XP and W2K3 : MC.exe will create a MOF file -->
- <!-- Requires an associated eventGUID attribute for each task that is defined -->
- <!-- For the MOF file : -->
- <!-- Semantically, the event GUID represents a set of logical events that are logged by the provider. -->
- <task
- eventGUID="{872c3c43-6899-4f1d-89b8-51a82f6db657}"
- name="deviceInit"
- symbol="OSRUSBFX2_DEVICE_INIT"
- value="1"
- />
- <task
- eventGUID="{872c3c45-6899-4f1d-89b8-51a82f6db657}"
- name="read"
- symbol="OSRUSBFX2_READ"
- value="2"
- />
- <task
- eventGUID="{872c3c46-6899-4f1d-89b8-51a82f6db657}"
- name="write"
- symbol="OSRUSBFX2_WRITE"
- value="3"
- />
- </tasks>
- <templates>
- <template tid="tid_DeviceStatus">
- <data
- inType="win:UnicodeString"
- name="FriendlyName"
- outType="xs:string"
- />
- <data
- inType="win:UnicodeString"
- name="Location"
- outType="xs:string"
- />
- <data
- inType="win:UInt32"
- name="NTStatus"
- outType="xs:HexInt32"
- />
- </template>
- <template tid="tid_ReadWrite">
- <data
- inType="win:Pointer"
- name="Device"
- outType="win:HexInt64"
- />
- <data
- inType="win:UInt32"
- name="Length"
- outType="xs:unsignedInt"
- />
- </template>
- <template tid="tid_ReadWriteFail">
- <data
- inType="win:Pointer"
- name="Device"
- outType="win:HexInt64"
- />
- <data
- inType="win:UInt32"
- name="NTStatus"
- outType="xs:HexInt32"
- />
- </template>
- <template tid="tid_ReadWriteCompletion">
- <data
- inType="win:Pointer"
- name="Device"
- outType="win:HexInt64"
- />
- <data
- inType="win:UInt32"
- name="Length"
- outType="xs:unsignedInt"
- />
- <data
- inType="win:UInt32"
- name="NTStatus"
- outType="xs:HexInt32"
- />
- <data
- inType="win:UInt32"
- name="UsbdStatus"
- outType="xs:unsignedInt"
- />
- </template>
- </templates>
- <events>
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.ReadStart.EventMessage)"
- level="win:Informational"
- opcode="win:Start"
- symbol="ReadStart"
- task="read"
- template="tid_ReadWrite"
- value="1"
- />
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.ReadStop.EventMessage)"
- level="win:Informational"
- opcode="win:Stop"
- symbol="ReadStop"
- task="read"
- template="tid_ReadWriteCompletion"
- value="2"
- />
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.ReadFail.EventMessage)"
- level="win:Error"
- opcode="fail"
- symbol="ReadFail"
- task="read"
- template="tid_ReadWriteFail"
- value="3"
- />
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.WriteStart.EventMessage)"
- level="win:Informational"
- opcode="win:Start"
- symbol="WriteStart"
- task="write"
- template="tid_ReadWrite"
- value="4"
- />
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.WriteStop.EventMessage)"
- level="win:Informational"
- opcode="win:Stop"
- symbol="WriteStop"
- task="write"
- template="tid_ReadWriteCompletion"
- value="5"
- />
- <event
- channel="Analytic"
- keywords="readwrite"
- message="$(string.WriteFail.EventMessage)"
- level="win:Error"
- opcode="fail"
- symbol="WriteFail"
- task="write"
- template="tid_ReadWriteFail"
- value="6"
- />
- <event
- channel="operational"
- keywords="deviceinfo"
- level="win:Error"
- message="$(string.DeviceFailAdd.EventMessage)"
- opcode="add"
- symbol="FailAddDevice"
- task="deviceInit"
- template="tid_DeviceStatus"
- value="100"
- />
- <event
- channel="operational"
- keywords="deviceinfo"
- message="$(string.DeviceReenumerated.EventMessage)"
- opcode="win:Start"
- symbol="DeviceReenumerated"
- task="deviceInit"
- template="tid_DeviceStatus"
- value="101"
- />
- <event
- channel="operational"
- keywords="deviceinfo"
- level="win:Error"
- message="$(string.SelectConfigFailure.Message)"
- opcode="fail"
- symbol="SelectConfigFailure"
- task="deviceInit"
- template="tid_DeviceStatus"
- value="102"
- />
- </events>
- </provider>
- </events>
- </instrumentation>
- <localization xmlns="http://schemas.microsoft.com/win/2004/08/events">
- <resources culture="en-US">
- <stringTable>
- <string
- id="OSRUSBFX2_DEVICE_INFO_KEYWORD.message"
- value="Device events: fail to load, reenumerate"
- />
- <string
- id="OSRUSBFX2_READ_WRITE_KEYWORD.message"
- value="Read, Write events"
- />
- <string
- id="OSRUSBFX2_OPERATIONAL.Name"
- value="Operational channel eventlog"
- />
- <string
- id="ReadStart.EventMessage"
- value="Read. Device = %1, Length = %2"
- />
- <string
- id="ReadStop.EventMessage"
- value="Read complete. Device = %1, Length = %2, Status = %3, UsbStatus = %4"
- />
- <string
- id="ReadFail.EventMessage"
- value="Read error. Device = %1, Status = %2"
- />
- <string
- id="WriteStart.EventMessage"
- value="Write. Device = %1, Length = %2"
- />
- <string
- id="WriteStop.EventMessage"
- value="Write complete. Device = %1, Length = %2, Status = %3, UsbStatus = %4"
- />
- <string
- id="WriteFail.EventMessage"
- value="Write error. Device = %1, Status = %2"
- />
- <string
- id="DeviceReenumerated.EventMessage"
- value="Device %1 (location %2) was reenumerated"
- />
- <string
- id="DeviceFailAdd.EventMessage"
- value="Fail to add device %1 (location %2), status %3"
- />
- <string
- id="SelectConfigFailure.Message"
- value="This error occurs when an OSR USB Fx2 board is attached to a USB 1.1 port on a machine running Windows Vista. This error occurs because the OSR USB Fx2 board's Interrupt end-point descriptor does not conform to the USB specification. Windows Vista detects this and returns an error. You should plug the device into a USB 2.0 (or higher) port."
- />
- </stringTable>
- </resources>
- </localization>
-</instrumentationManifest>
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.rc b/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.rc
deleted file mode 100644
index 092ec195..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.rc
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <windows.h>
-
-#include <ntverp.h>
-
-#define VER_FILETYPE VFT_DRV
-#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
-#define VER_FILEDESCRIPTION_STR "WDF Sample Driver for OSR USB-FX2 Learning Kit"
-#define VER_INTERNALNAME_STR "osrusbfx2.sys"
-#define VER_ORIGINALFILENAME_STR "osrusbfx2.sys"
-
-#include "common.ver"
-
-//
-// Include auto-generated string resources (created by MC.EXE from
-// osrusbfx2.man)
-//
-
-#include "fx2Events.rc"
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj b/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj
deleted file mode 100644
index bbceb79b..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{837F98CF-D3A4-472C-BACC-47950340E57B}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
- <SupportsPackaging>false</SupportsPackaging>
- <RequiresPackageProject>true</RequiresPackageProject>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{3EBA8CBF-2E65-4819-9EEA-E10825BB0705}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>KMDF</DriverType>
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Driver</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>KMDF</DriverType>
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Driver</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>KMDF</DriverType>
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Driver</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>KMDF</DriverType>
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Driver</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems">
- <ClCompile Include="driver.c; device.c; ioctl.c; bulkrwr.c; Interrupt.c">
- <WppEnabled>true</WppEnabled>
- <WppKernelMode>true</WppKernelMode>
- <WppTraceFunction>TraceEvents(LEVEL,FLAGS,MSG,...)</WppTraceFunction>
- <WppGenerateUsingTemplateFile>{km-WdfDefault.tpl}*.tmh</WppGenerateUsingTemplateFile>
- </ClCompile>
- <MessageCompile Include="osrusbfx2.man">
- <GenerateKernelModeLoggingMacros>true</GenerateKernelModeLoggingMacros>
- <GenerateMofFile>true</GenerateMofFile>
- <HeaderFilePath>.\$(IntDir)</HeaderFilePath>
- <GeneratedHeaderPath>true</GeneratedHeaderPath>
- <RCFilePath>.\$(IntDir)</RCFilePath>
- <GeneratedRCAndMessagesPath>true</GeneratedRCAndMessagesPath>
- <GeneratedFilesBaseName>fx2Events</GeneratedFilesBaseName>
- <UseBaseNameOfInput>true</UseBaseNameOfInput>
- </MessageCompile>
- <OtherWpp Include="osrusbfx2.rc">
- <WppEnabled>true</WppEnabled>
- <WppKernelMode>true</WppKernelMode>
- <WppTraceFunction>TraceEvents(LEVEL,FLAGS,MSG,...)</WppTraceFunction>
- <WppGenerateUsingTemplateFile>{km-WdfDefault.tpl}*.tmh</WppGenerateUsingTemplateFile>
- </OtherWpp>
- </ItemGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>osrusbfx2</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>osrusbfx2</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>osrusbfx2</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>osrusbfx2</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LIB_PATH)\usbd.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LIB_PATH)\usbd.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LIB_PATH)\usbd.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;.</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);EVENT_TRACING</PreprocessorDefinitions>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LIB_PATH)\usbd.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ALLOW_DATE_TIME>1</ALLOW_DATE_TIME>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ALLOW_DATE_TIME>1</ALLOW_DATE_TIME>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ALLOW_DATE_TIME>1</ALLOW_DATE_TIME>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ALLOW_DATE_TIME>1</ALLOW_DATE_TIME>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ResourceCompile Include="osrusbfx2.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inf" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project>
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj.Filters b/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj.Filters
deleted file mode 100644
index baf7ab2e..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/osrusbfx2.vcxproj.Filters
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{F859293F-10B7-4E6D-99E2-120A09448FF9}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{3DCE0FEA-C37D-448E-B9E4-B69865E71B5F}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{A1BB449A-54EF-4B2B-BD68-2254963FF387}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{A03D3DFA-E9BD-48A3-BEDE-E8AAED283D03}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="bulkrwr.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="device.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="driver.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="Interrupt.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="ioctl.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <MessageCompile Include="osrusbfx2.man">
- <Filter>Resource Files</Filter>
- </MessageCompile>
- <ResourceCompile Include="osrusbfx2.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_kmdf/kmdf_driver/trace.h b/usb/umdf_filter_kmdf/kmdf_driver/trace.h
deleted file mode 100644
index 518ff5f1..00000000
--- a/usb/umdf_filter_kmdf/kmdf_driver/trace.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- TRACE.h
-
-Abstract:
-
- Header file for the debug tracing related function defintions and macros.
-
-Environment:
-
- Kernel mode
-
---*/
-
-#include <evntrace.h> // For TRACE_LEVEL definitions
-
-#if !defined(EVENT_TRACING)
-
-//
-// TODO: These defines are missing in evntrace.h
-// in some DDK build environments (XP).
-//
-#if !defined(TRACE_LEVEL_NONE)
- #define TRACE_LEVEL_NONE 0
- #define TRACE_LEVEL_CRITICAL 1
- #define TRACE_LEVEL_FATAL 1
- #define TRACE_LEVEL_ERROR 2
- #define TRACE_LEVEL_WARNING 3
- #define TRACE_LEVEL_INFORMATION 4
- #define TRACE_LEVEL_VERBOSE 5
- #define TRACE_LEVEL_RESERVED6 6
- #define TRACE_LEVEL_RESERVED7 7
- #define TRACE_LEVEL_RESERVED8 8
- #define TRACE_LEVEL_RESERVED9 9
-#endif
-
-
-//
-// Define Debug Flags
-//
-#define DBG_INIT 0x00000001
-#define DBG_PNP 0x00000002
-#define DBG_POWER 0x00000004
-#define DBG_WMI 0x00000008
-#define DBG_CREATE_CLOSE 0x00000010
-#define DBG_IOCTL 0x00000020
-#define DBG_WRITE 0x00000040
-#define DBG_READ 0x00000080
-
-
-VOID
-TraceEvents (
- _In_ ULONG DebugPrintLevel,
- _In_ ULONG DebugPrintFlag,
- _Printf_format_string_
- _In_ PCSTR DebugMessage,
- ...
- );
-
-#define WPP_INIT_TRACING(DriverObject, RegistryPath)
-#define WPP_CLEANUP(DriverObject)
-
-#else
-//
-// If software tracing is defined in the sources file..
-// WPP_DEFINE_CONTROL_GUID specifies the GUID used for this driver.
-// *** REPLACE THE GUID WITH YOUR OWN UNIQUE ID ***
-// WPP_DEFINE_BIT allows setting debug bit masks to selectively print.
-// The names defined in the WPP_DEFINE_BIT call define the actual names
-// that are used to control the level of tracing for the control guid
-// specified.
-//
-// NOTE: If you are adopting this sample for your driver, please generate
-// a new guid, using tools\other\i386\guidgen.exe present in the
-// DDK.
-//
-// Name of the logger is OSRUSBFX2 and the guid is
-// {D23A0C5A-D307-4f0e-AE8E-E2A355AD5DAB}
-// (0xd23a0c5a, 0xd307, 0x4f0e, 0xae, 0x8e, 0xe2, 0xa3, 0x55, 0xad, 0x5d, 0xab);
-//
-
-#define WPP_CHECK_FOR_NULL_STRING //to prevent exceptions due to NULL strings
-
-#define WPP_CONTROL_GUIDS \
- WPP_DEFINE_CONTROL_GUID(OsrUsbFxTraceGuid,(d23a0c5a,d307,4f0e,ae8e,E2A355AD5DAB), \
- WPP_DEFINE_BIT(DBG_INIT) /* bit 0 = 0x00000001 */ \
- WPP_DEFINE_BIT(DBG_PNP) /* bit 1 = 0x00000002 */ \
- WPP_DEFINE_BIT(DBG_POWER) /* bit 2 = 0x00000004 */ \
- WPP_DEFINE_BIT(DBG_WMI) /* bit 3 = 0x00000008 */ \
- WPP_DEFINE_BIT(DBG_CREATE_CLOSE) /* bit 4 = 0x00000010 */ \
- WPP_DEFINE_BIT(DBG_IOCTL) /* bit 5 = 0x00000020 */ \
- WPP_DEFINE_BIT(DBG_WRITE) /* bit 6 = 0x00000040 */ \
- WPP_DEFINE_BIT(DBG_READ) /* bit 7 = 0x00000080 */ \
- /* You can have up to 32 defines. If you want more than that,\
- you have to provide another trace control GUID */\
- )
-
-
-#define WPP_LEVEL_FLAGS_LOGGER(lvl,flags) WPP_LEVEL_LOGGER(flags)
-#define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) (WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level >= lvl)
-
-
-#endif
-
-
-
diff --git a/usb/umdf_filter_kmdf/umdf_filter/OsrUsbFilter.rc b/usb/umdf_filter_kmdf/umdf_filter/OsrUsbFilter.rc
deleted file mode 100644
index cec032d9..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/OsrUsbFilter.rc
+++ /dev/null
@@ -1,17 +0,0 @@
-//---------------------------------------------------------------------------
-// OsrUsbFilter.rc
-//
-// Copyright (c) Microsoft Corporation, All Rights Reserved
-//---------------------------------------------------------------------------
-
-
-#include <windows.h>
-#include <ntverp.h>
-
-#define VER_FILETYPE VFT_DLL
-#define VER_FILESUBTYPE VFT_UNKNOWN
-#define VER_FILEDESCRIPTION_STR "WDF:UMDF OsrUsbFilter User-Mode Driver Sample"
-#define VER_INTERNALNAME_STR "OsrUsbFilter"
-#define VER_ORIGINALFILENAME_STR "OsrUsbFilter.dll"
-
-#include "common.ver"
diff --git a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj b/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj
deleted file mode 100644
index 38798dfe..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{502F5F25-02A2-4047-8DD1-EB3DF0CC7127}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <UMDF_VERSION_MAJOR>1</UMDF_VERSION_MAJOR>
- <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
- <SupportsPackaging>false</SupportsPackaging>
- <RequiresPackageProject>true</RequiresPackageProject>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{45297D7C-3015-4F09-B0E7-469440EB9458}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems">
- <ClCompile Include="dllsup.cpp; comsup.cpp; driver.cpp; device.cpp; queue.cpp">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </ClCompile>
- <OtherWpp Include="OsrUsbFilter.rc">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </OtherWpp>
- </ItemGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFilter.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inx" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters b/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters
deleted file mode 100644
index 7a4a8f8d..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{3CE4C3CE-9C1D-4790-B2EF-784C3412310A}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{4A9BD78B-5831-48AA-8C22-28BEBBC8A7AB}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{ACD57755-0E18-4D24-A740-0D944929A053}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{2084F476-D6F1-485F-B9A6-581DD86D24F1}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="comsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="device.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dllsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="driver.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="queue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <None Include="exports.def">
- <Filter>Source Files</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFilter.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilterOnKmDriver.inx b/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilterOnKmDriver.inx
deleted file mode 100644
index 6153e18b..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/WUDFOsrUsbFilterOnKmDriver.inx
+++ /dev/null
Binary files differ
diff --git a/usb/umdf_filter_kmdf/umdf_filter/comsup.cpp b/usb/umdf_filter_kmdf/umdf_filter/comsup.cpp
deleted file mode 100644
index 76a4b940..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/comsup.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.cpp
-
-Abstract:
-
- This module contains implementations for the functions and methods
- used for providing COM support.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "comsup.tmh"
-
-//
-// This is the number of characters in a GUID string including the trailing
-// NULL.
-//
-
-#define GUID_STRING_CCH (sizeof("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"))
-
-//
-// Implementation of CUnknown methods.
-//
-
-CUnknown::CUnknown(
- VOID
- ) : m_ReferenceCount(1)
-/*++
-
- Routine Description:
-
- Constructor for an instance of the CUnknown class. This simply initializes
- the reference count of the object to 1. The caller is expected to
- call Release() if it wants to delete the object once it has been allocated.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- // do nothing.
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CUnknown::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method provides the basic support for query interface on CUnknown.
- If the interface requested is IUnknown it references the object and
- returns an interface pointer. Otherwise it returns an error.
-
- Arguments:
-
- InterfaceId - the IID being requested
-
- Object - a location to store the interface pointer to return.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IUnknown)))
- {
- *Object = QueryIUnknown();
- return S_OK;
- }
- else
- {
- *Object = NULL;
- return E_NOINTERFACE;
- }
-}
-
-IUnknown *
-CUnknown::QueryIUnknown(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IUnknown interface.
-
- This allows other methods to convert a CUnknown pointer into an IUnknown
- pointer without a typecast and without calling QueryInterface and dealing
- with the return value.
-
- Arguments:
-
- None
-
- Return Value:
-
- A pointer to the object's IUnknown interface.
-
---*/
-{
- AddRef();
- return static_cast<IUnknown *>(this);
-}
-
-ULONG
-STDMETHODCALLTYPE
-CUnknown::AddRef(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method adds one to the object's reference count.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. The caller should only use this for debugging
- as the object's actual reference count can change while the caller
- examines the return value.
-
---*/
-{
- return InterlockedIncrement(&m_ReferenceCount);
-}
-
-_Use_decl_annotations_
-ULONG
-STDMETHODCALLTYPE
-CUnknown::Release(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method subtracts one to the object's reference count. If the count
- goes to zero, this method deletes the object.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. If the caller uses this value it should only be
- to check for zero (i.e. this call caused or will cause deletion) or
- non-zero (i.e. some other call may have caused deletion, but this one
- didn't).
-
---*/
-{
- ULONG count = InterlockedDecrement(&m_ReferenceCount);
-
- if (count == 0)
- {
- delete this;
- }
- return count;
-}
-
-//
-// Implementation of CClassFactory methods.
-//
-
-//
-// Define storage for the factory's static lock count variable.
-//
-
-LONG CClassFactory::s_LockCount = 0;
-
-IClassFactory *
-CClassFactory::QueryIClassFactory(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IClassFactory interface.
-
- This allows other methods to convert a CClassFactory pointer into an
- IClassFactory pointer without a typecast and without dealing with the
- return value QueryInterface.
-
- Arguments:
-
- None
-
- Return Value:
-
- A referenced pointer to the object's IClassFactory interface.
-
---*/
-{
- AddRef();
- return static_cast<IClassFactory *>(this);
-}
-
-HRESULT
-CClassFactory::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method attempts to retrieve the requested interface from the object.
-
- If the interface is found then the reference count on that interface (and
- thus the object itself) is incremented.
-
- Arguments:
-
- InterfaceId - the interface the caller is requesting.
-
- Object - a location to store the interface pointer.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- //
- // This class only supports IClassFactory so check for that.
- //
-
- if (IsEqualIID(InterfaceId, __uuidof(IClassFactory)))
- {
- *Object = QueryIClassFactory();
- return S_OK;
- }
- else
- {
- //
- // See if the base class supports the interface.
- //
-
- return CUnknown::QueryInterface(InterfaceId, Object);
- }
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::CreateInstance(
- _In_opt_ IUnknown * /* OuterObject */,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This COM method is the factory routine - it creates instances of the driver
- callback class and returns the specified interface on them.
-
- Arguments:
-
- OuterObject - only used for aggregation, which our driver callback class
- does not support.
-
- InterfaceId - the interface ID the caller would like to get from our
- new object.
-
- Object - a location to store the referenced interface pointer to the new
- object.
-
- Return Value:
-
- Status.
-
---*/
-{
- HRESULT hr;
-
- PCMyDriver driver;
-
- *Object = NULL;
-
- hr = CMyDriver::CreateInstance(&driver);
-
- if (SUCCEEDED(hr))
- {
- hr = driver->QueryInterface(InterfaceId, Object);
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::LockServer(
- _In_ BOOL Lock
- )
-/*++
-
- Routine Description:
-
- This COM method can be used to keep the DLL in memory. However since the
- driver's DllCanUnloadNow function always returns false, this has little
- effect. Still it tracks the number of lock and unlock operations.
-
- Arguments:
-
- Lock - Whether the caller wants to lock or unlock the "server"
-
- Return Value:
-
- S_OK
-
---*/
-{
- if (Lock)
- {
- InterlockedIncrement(&s_LockCount);
- }
- else
- {
- InterlockedDecrement(&s_LockCount);
- }
- return S_OK;
-}
-
diff --git a/usb/umdf_filter_kmdf/umdf_filter/comsup.h b/usb/umdf_filter_kmdf/umdf_filter/comsup.h
deleted file mode 100644
index 890b576a..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/comsup.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.h
-
-Abstract:
-
- This module contains classes and functions use for providing COM support
- code.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Forward type declarations. They are here rather than in internal.h as
-// you only need them if you choose to use these support classes.
-//
-
-typedef class CUnknown *PCUnknown;
-typedef class CClassFactory *PCClassFactory;
-
-//
-// Base class to implement IUnknown. You can choose to derive your COM
-// classes from this class, or simply implement IUnknown in each of your
-// classes.
-//
-
-class CUnknown : public IUnknown
-{
-
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The reference count for this object. Initialized to 1 in the
- // constructor.
- //
-
- LONG m_ReferenceCount;
-
-//
-// Protected data members and methods. These are accessible by the subclasses
-// but not by other classes.
-//
-protected:
-
- //
- // The constructor and destructor are protected to ensure that only the
- // subclasses of CUnknown can create and destroy instances.
- //
-
- CUnknown(
- VOID
- );
-
- //
- // The destructor MUST be virtual. Since any instance of a CUnknown
- // derived class should only be deleted from within CUnknown::Release,
- // the destructor MUST be virtual or only CUnknown::~CUnknown will get
- // invoked on deletion.
- //
- // If you see that your CMyDevice specific destructor is never being
- // called, make sure you haven't deleted the virtual destructor here.
- //
-
- virtual
- ~CUnknown(
- VOID
- )
- {
- // Do nothing
- }
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IUnknown *
- QueryIUnknown(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- );
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
-
-//
-// Class factory support class. Create an instance of this from your
-// DllGetClassObject method and modify the implementation to create
-// an instance of your driver event handler class.
-//
-
-class CClassFactory : public CUnknown, public IClassFactory
-{
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The lock count. This is shared across all instances of IClassFactory
- // and can be queried through the public IsLocked method.
- //
-
- static LONG s_LockCount;
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IClassFactory *
- QueryIClassFactory(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // IClassFactory methods.
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- CreateInstance(
- _In_opt_ IUnknown *OuterObject,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- LockServer(
- _In_ BOOL Lock
- );
-};
diff --git a/usb/umdf_filter_kmdf/umdf_filter/device.cpp b/usb/umdf_filter_kmdf/umdf_filter/device.cpp
deleted file mode 100644
index 126637ce..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/device.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Device.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR USB Sample Filter driver's
- device callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "device.tmh"
-
-HRESULT
-CMyDevice::CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit,
- _Out_ PCMyDevice *Device
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR USB Sample Filter driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- PCMyDevice device;
- HRESULT hr;
-
- //
- // Allocate a new instance of the device class.
- //
-
- device = new CMyDevice();
-
- if (NULL == device)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- hr = device->Initialize(FxDriver, FxDeviceInit);
-
- if (SUCCEEDED(hr))
- {
- *Device = device;
- }
- else
- {
- device->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Initialize(
- _In_ IWDFDriver * FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object and creates the
- partner device object.
-
- The method should perform any device-specific configuration that:
- * could fail (these can't be done in the constructor)
- * must be done before the partner object is created -or-
- * can be done after the partner object is created and which aren't
- influenced by any device-level parameters the parent (the driver
- in this case) might set.
-
- Arguments:
-
- FxDeviceInit - the settings for this device.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFDevice *fxDevice;
- HRESULT hr;
-
- //
- // Configure things like the locking model before we go to create our
- // partner device.
- //
-
- //
- // We don't need device level locking since we do not keep any state
- // across the requests
- //
-
- FxDeviceInit->SetLockingConstraint(None);
-
- //
- // Mark ourselves as a filter
- //
-
- FxDeviceInit->SetFilter();
-
-
- //
- // We are a filter; we don't want to be the power policy owner
- //
-
- FxDeviceInit->SetPowerPolicyOwnership(FALSE);
-
- //
- // QueryIUnknown references the IUnknown interface that it returns
- // (which is the same as referencing the device). We pass that to
- // CreateDevice, which takes its own reference if everything works.
- //
-
- {
- IUnknown *unknown = this->QueryIUnknown();
-
- hr = FxDriver->CreateDevice(FxDeviceInit, unknown, &fxDevice);
-
- unknown->Release();
- }
-
- //
- // If that succeeded then set our FxDevice member variable.
- //
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice = fxDevice;
-
- //
- // Drop the reference we got from CreateDevice. Since this object
- // is partnered with the framework object they have the same
- // lifespan - there is no need for an additional reference.
- //
-
- fxDevice->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Configure(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called after the device callback object has been initialized
- and returned to the driver. It would setup the device's queues and their
- corresponding callback objects.
-
- Arguments:
-
- FxDevice - the framework device object for which we're handling events.
-
- Return Value:
-
- status
-
---*/
-{
- PCMyQueue defaultQueue;
-
- HRESULT hr;
-
- hr = CMyQueue::CreateInstance(m_FxDevice, &defaultQueue);
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- hr = defaultQueue->Configure();
-
- defaultQueue->Release();
-
- return hr;
-}
-
-HRESULT
-CMyDevice::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Since the OSR USB Sample Filter driver doesn't support any of the device events, this
- method simply calls the base class's BaseQueryInterface.
-
- If OSR USB Sample Filter is extended to include device event interfaces then this
- method must be changed to check the IID and return pointers to them as
- appropriate.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- return CUnknown::QueryInterface(InterfaceId, Object);
-}
diff --git a/usb/umdf_filter_kmdf/umdf_filter/device.h b/usb/umdf_filter_kmdf/umdf_filter/device.h
deleted file mode 100644
index f7a50b1d..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/device.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Device.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR USB Sample Filter
- driver's device callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Class for the iotrace driver.
-//
-
-class CMyDevice : public CUnknown
-{
-
-//
-// Private data members.
-//
-private:
-
- IWDFDevice *m_FxDevice;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyDevice(
- VOID
- )
- {
- m_FxDevice = NULL;
- }
-
- HRESULT
- Initialize(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit,
- _Out_ PCMyDevice *Device
- );
-
- HRESULT
- Configure(
- VOID
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_kmdf/umdf_filter/dllsup.cpp b/usb/umdf_filter_kmdf/umdf_filter/dllsup.cpp
deleted file mode 100644
index d71d5fe8..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/dllsup.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- dllsup.cpp
-
-Abstract:
-
- This module contains the implementation of the OSR USB Sample Filter
- Driver's entry point and its exported functions for providing COM support.
-
- This module can be copied without modification to a new UMDF driver. It
- depends on some of the code in comsup.cpp & comsup.h to handle DLL
- registration and creating the first class factory.
-
- This module is dependent on the following defines:
-
- MYDRIVER_TRACING_ID - A wide string passed to WPP when initializing
- tracing. For example the skeleton uses
- L"Microsoft\\UMDF\\Skeleton"
-
- MYDRIVER_CLASS_ID - A GUID encoded in struct format used to
- initialize the driver's ClassID.
-
- These are defined in internal.h for the OSR USB Sample Filter sample. If
- you choose to use a different primary include file, you should ensure
- they are defined there as well.
-
-Environment:
-
- WDF User-Mode Driver Framework (WDF:UMDF)
-
---*/
-
-#include "internal.h"
-#include "dllsup.tmh"
-
-const GUID CLSID_MyDriverCoClass = MYDRIVER_CLASS_ID;
-
-//
-// Global variable to hold the module handle for this DLL. Initialized during
-// DllMain and never cleared. This is used when registering and unregistering
-// the driver's COM information.
-//
-
-HINSTANCE g_ModuleHandle = NULL;
-
-BOOL
-WINAPI
-DllMain(
- HINSTANCE /* ModuleHandle */,
- DWORD Reason,
- PVOID /* Reserved */
- )
-/*++
-
- Routine Description:
-
- This is the entry point and exit point for the I/O trace driver. This
- does very little as the I/O trace driver has minimal global data.
-
- This method initializes tracing.
-
- Arguments:
-
- ModuleHandle - the DLL handle for this module.
-
- Reason - the reason this entry point was called.
-
- Reserved - unused
-
- Return Value:
-
- TRUE
-
---*/
-{
-
- if (DLL_PROCESS_ATTACH == Reason)
- {
- //
- // Initialize tracing.
- //
-
- WPP_INIT_TRACING(MYDRIVER_TRACING_ID);
- }
- else if (DLL_PROCESS_DETACH == Reason)
- {
- //
- // Cleanup tracing.
- //
-
- WPP_CLEANUP();
- }
-
- return TRUE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllGetClassObject(
- REFCLSID ClassId,
- REFIID InterfaceId,
- LPVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This routine is called by COM in order to instantiate the OSR USB Sample
- Filter driver callback object and do an initial query interface on it.
-
- This method only creates an instance of the driver's class factory, as this
- is the minimum required to support UMDF.
-
- Arguments:
-
- ClassId - the CLSID of the object being "gotten"
-
- InterfaceId - the interface the caller wants from that object.
-
- Interface - a location to store the referenced interface pointer
-
- Return Value:
-
- S_OK if the function succeeds or error indicating the cause of the
- failure.
-
---*/
-{
- PCClassFactory factory;
-
- HRESULT hr = S_OK;
-
- *Interface = NULL;
-
- //
- // If the CLSID doesn't match that of our "coclass" (defined in the IDL
- // file) then we can't create the object the caller wants. This may
- // indicate that the COM registration is incorrect, and another CLSID
- // is referencing this drvier.
- //
-
- if (IsEqualCLSID(ClassId, CLSID_MyDriverCoClass) == false)
- {
- Trace(
- TRACE_LEVEL_ERROR,
- L"ERROR: Called to create instance of unrecognized class (%!GUID!)",
- &ClassId
- );
-
- return CLASS_E_CLASSNOTAVAILABLE;
- }
-
- //
- // Create an instance of the class factory for the caller.
- //
-
- factory = new CClassFactory();
-
- if (NULL == factory)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Query the object we created for the interface the caller wants. After
- // that we release the object. This will drive the reference count to
- // 1 (if the QI succeeded an referenced the object) or 0 (if the QI failed).
- // In the later case the object is automatically deleted.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = factory->QueryInterface(InterfaceId, Interface);
- factory->Release();
- }
-
- return hr;
-}
-
diff --git a/usb/umdf_filter_kmdf/umdf_filter/driver.cpp b/usb/umdf_filter_kmdf/umdf_filter/driver.cpp
deleted file mode 100644
index c5910c05..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/driver.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Driver.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR USB Sample Filter
- driver's core driver callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "driver.tmh"
-
-HRESULT
-CMyDriver::CreateInstance(
- _Out_ PCMyDriver *Driver
- )
-/*++
-
- Routine Description:
-
- This static method is invoked in order to create and initialize a new
- instance of the driver class. The caller should arrange for the object
- to be released when it is no longer in use.
-
- Arguments:
-
- Driver - a location to store a referenced pointer to the new instance
-
- Return Value:
-
- S_OK if successful, or error otherwise.
-
---*/
-{
- PCMyDriver driver;
- HRESULT hr;
-
- //
- // Allocate the callback object.
- //
-
- driver = new CMyDriver();
-
- if (NULL == driver)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the callback object.
- //
-
- hr = driver->Initialize();
-
- if (SUCCEEDED(hr))
- {
- //
- // Store a pointer to the new, initialized object in the output
- // parameter.
- //
-
- *Driver = driver;
- }
- else
- {
-
- //
- // Release the reference on the driver object to get it to delete
- // itself.
- //
-
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDriver::Initialize(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called to initialize a newly created driver callback object
- before it is returned to the creator. Unlike the constructor, the
- Initialize method contains operations which could potentially fail.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- return S_OK;
-}
-
-HRESULT
-CMyDriver::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This method returns a pointer to the requested interface on the callback
- object..
-
- Arguments:
-
- InterfaceId - the IID of the interface to query/reference
-
- Interface - a location to store the interface pointer.
-
- Return Value:
-
- S_OK if the interface is supported.
- E_NOINTERFACE if it is not supported.
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IDriverEntry)))
- {
- *Interface = QueryIDriverEntry();
- return S_OK;
- }
- else
- {
- return CUnknown::QueryInterface(InterfaceId, Interface);
- }
-}
-
-HRESULT
-CMyDriver::OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- The FX invokes this method when it wants to install our driver on a device
- stack. This method creates a device callback object, then calls the Fx
- to create an Fx device object and associate the new callback object with
- it.
-
- Arguments:
-
- FxWdfDriver - the Fx driver object.
-
- FxDeviceInit - the initialization information for the device.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr;
-
- PCMyDevice device = NULL;
-
- //
- // Create a new instance of our device callback object
- //
-
- hr = CMyDevice::CreateInstance(FxWdfDriver, FxDeviceInit, &device);
-
- //
- // If that succeeded then call the device's construct method. This
- // allows the device to create any queues or other structures that it
- // needs now that the corresponding fx device object has been created.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = device->Configure();
- }
-
- //
- // Release the reference on the device callback object now that it's been
- // associated with an fx device object.
- //
-
- if (NULL != device)
- {
- device->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_filter_kmdf/umdf_filter/driver.h b/usb/umdf_filter_kmdf/umdf_filter/driver.h
deleted file mode 100644
index 08f36a71..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/driver.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Driver.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR USB Sample Filter
- driver's callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// This class handles driver events for the OSR USB Sample Filter driver. In particular
-// it supports the OnDeviceAdd event, which occurs when the driver is called
-// to setup per-device handlers for a new device stack.
-//
-
-class CMyDriver : public CUnknown, public IDriverEntry
-{
-//
-// Private data members.
-//
-private:
-
-//
-// Private methods.
-//
-private:
-
- //
- // Returns a refernced pointer to the IDriverEntry interface.
- //
-
- IDriverEntry *
- QueryIDriverEntry(
- VOID
- )
- {
- AddRef();
- return static_cast<IDriverEntry*>(this);
- }
-
- HRESULT
- Initialize(
- VOID
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _Out_ PCMyDriver *Driver
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IDriverEntry methods
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnInitialize(
- _In_ IWDFDriver* /*FxWdfDriver*/
- )
- {
- return S_OK;
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnDeinitialize(
- _In_ IWDFDriver * /*FxWdfDriver*/
- )
- {
- return;
- }
-
- //
- // IUnknown methods.
- //
- // We have to implement basic ones here that redirect to the
- // base class becuase of the multiple inheritance.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_kmdf/umdf_filter/exports.def b/usb/umdf_filter_kmdf/umdf_filter/exports.def
deleted file mode 100644
index 0fc42817..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/exports.def
+++ /dev/null
@@ -1,4 +0,0 @@
-; Skeleton.def : Declares the module parameters.
-
-EXPORTS
- DllGetClassObject PRIVATE
diff --git a/usb/umdf_filter_kmdf/umdf_filter/internal.h b/usb/umdf_filter_kmdf/umdf_filter/internal.h
deleted file mode 100644
index 516f6d7f..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/internal.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Internal.h
-
-Abstract:
-
- This module contains the local type definitions for the UMDF OSR USB Sample Filter
- driver.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
-//
-// Include the WUDF headers
-//
-
-#include "wudfddi.h"
-
-//
-// Use specstrings for in/out annotation of function parameters.
-//
-
-#include "specstrings.h"
-
-//
-// Forward definitions of classes in the other header files.
-//
-
-typedef class CMyDriver *PCMyDriver;
-typedef class CMyDevice *PCMyDevice;
-typedef class CMyQueue *PCMyQueue;
-
-//
-// Define the tracing flags.
-//
-
-#define WPP_CONTROL_GUIDS \
- WPP_DEFINE_CONTROL_GUID( \
- MyDriverTraceControl, (73cdcaa5,ce52,43f2,aa2d,5f5a84e22213), \
- \
- WPP_DEFINE_BIT(MYDRIVER_ALL_INFO) \
- )
-
-#define WPP_FLAG_LEVEL_LOGGER(flag, level) \
- WPP_LEVEL_LOGGER(flag)
-
-#define WPP_FLAG_LEVEL_ENABLED(flag, level) \
- (WPP_LEVEL_ENABLED(flag) && \
- WPP_CONTROL(WPP_BIT_ ## flag).Level >= level)
-
-//
-// This comment block is scanned by the trace preprocessor to define our
-// Trace function.
-//
-// begin_wpp config
-// FUNC Trace{FLAG=MYDRIVER_ALL_INFO}(LEVEL, MSG, ...);
-// end_wpp
-//
-
-//
-// Driver specific #defines
-//
-
-#define MYDRIVER_TRACING_ID L"Microsoft\\UMDF\\OsrUsbFilter"
-#define MYDRIVER_COM_DESCRIPTION L"UMDF OSR USB Sample Filter Driver"
-#define MYDRIVER_CLASS_ID {0x422d8dbc, 0x520d, 0x4d7e, {0x8f, 0x53, 0x92, 0x0e, 0x5c, 0x86, 0x7e, 0x6c}}
-
-//
-// Include the type specific headers.
-//
-
-#include "comsup.h"
-#include "driver.h"
-#include "device.h"
-#include "queue.h"
-
-__forceinline
-#ifdef _PREFAST_
-__declspec(noreturn)
-#endif
-VOID
-WdfTestNoReturn(
- VOID
- )
-{
- // do nothing.
-}
-
-#define WUDF_SAMPLE_DRIVER_ASSERT(p) \
-{ \
- if ( !(p) ) \
- { \
- DebugBreak(); \
- WdfTestNoReturn(); \
- } \
-}
-
-#define SAFE_RELEASE(p) {if ((p)) { (p)->Release(); (p) = NULL; }}
diff --git a/usb/umdf_filter_kmdf/umdf_filter/queue.cpp b/usb/umdf_filter_kmdf/umdf_filter/queue.cpp
deleted file mode 100644
index 5642ec74..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/queue.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Queue.cpp
-
-Abstract:
-
- This module contains the implementation of the OSR USB Filter Sample driver's
- queue callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "queue.h"
-
-#include "queue.tmh"
-
-HRESULT
-CMyQueue::CreateInstance(
- _In_ IWDFDevice * FxDevice,
- _Out_ CMyQueue **Queue
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR USB Filter Sample driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- CMyQueue *queue;
-
- HRESULT hr = S_OK;
-
- //
- // Allocate a new instance of the device class.
- //
-
- queue = new CMyQueue();
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize(FxDevice);
- }
-
- if (SUCCEEDED(hr))
- {
- queue->AddRef();
- *Queue = queue;
- }
-
- if (NULL != queue)
- {
- queue->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- HRESULT hr;
-
-
- if(IsEqualIID(InterfaceId, __uuidof(IQueueCallbackDefaultIoHandler)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackDefaultIoHandler();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackWrite)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackWrite();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IRequestCallbackRequestCompletion)))
- {
- hr = S_OK;
- *Object = QueryIRequestCallbackRequestCompletion();
-
- }
- else
- {
- hr = CUnknown::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::Initialize(
- _In_ IWDFDevice *FxDevice
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object. Any operations which
- need to be performed before the caller can use the callback object, but
- which couldn't be done in the constructor becuase they could fail would
- be placed here.
-
- Arguments:
-
- FxDevice - the device which this Queue is for.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFIoQueue *fxQueue;
- HRESULT hr;
-
- //
- // Create the framework queue
- //
-
- IUnknown *unknown = QueryIUnknown();
- hr = FxDevice->CreateIoQueue(
- unknown,
- TRUE, // bDefaultQueue
- WdfIoQueueDispatchParallel,
- FALSE, // bPowerManaged
- TRUE, // bAllowZeroLengthRequests
- &fxQueue
- );
- if (FAILED(hr))
- {
- Trace(
- TRACE_LEVEL_ERROR,
- "%!FUNC!: Could not create default I/O queue, %!hresult!",
- hr
- );
- }
-
- unknown->Release();
-
- if (SUCCEEDED(hr))
- {
- m_FxQueue = fxQueue;
-
- //
- // m_FxQueue is kept as a Weak reference to framework Queue object to avoid
- // circular reference. This object's lifetime is contained within
- // framework Queue object's lifetime
- //
-
- fxQueue->Release();
- }
-
- if (SUCCEEDED(hr))
- {
- FxDevice->GetDefaultIoTarget(&m_FxIoTarget);
- }
-
- return hr;
-}
-
-void
-CMyQueue::InvertBits(
- _Inout_ IWDFMemory* FxMemory,
- _In_ SIZE_T NumBytes
- )
-/*++
-
- Routine Description:
-
- This helper method inverts bits in the buffer of an FxMemory object
-
- Arguments:
-
- FxMemory - Framework memory object whose buffer's bits are to be inverted
-
- NumBytes - Number of bytes for which bits are to be inverted
-
- Return Value:
-
- None
-
---*/
-{
- PBYTE Buffer = (PBYTE)
- FxMemory->GetDataBuffer(NULL);
-
- for (SIZE_T i = 0; i < NumBytes; i++)
- {
- memset(Buffer + i, ~(Buffer[i]), sizeof(*Buffer));
- }
-}
-
-void
-CMyQueue::OnWrite(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest,
- _In_ SIZE_T NumOfBytesToWrite
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework Queue object to deliver the Write request
- This method inverts the bits in write buffer and forwards the request down the device stack
- In case of any failure prior to ForwardRequest, it completets the request with failure
-
- Arguments:
-
- pWdfQueue - Framework Queue which is delivering the request
-
- pWdfRequest - Framework Request
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- IWDFMemory * FxInputMemory = NULL;
-
- FxRequest->GetInputMemory(&FxInputMemory);
-
- //
- // Invert bits of the buffer to be written to device
- //
-
- InvertBits(FxInputMemory, NumOfBytesToWrite);
-
- //
- // Forward request down the stack
- // When the device below completes the request we will get notified in OnComplete
- // and then we will complete the request
- //
-
- ForwardRequest(FxRequest);
-
- FxInputMemory->Release();
-}
-
-//
-// IQueueCallbackDefaultIoHandler method
-//
-
-void
-CMyQueue::OnDefaultIoHandler(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework Queue object to deliver all the I/O
- Requests for which we do not have a specific handler
- (In our case anything other than Write)
-
- Arguments:
-
- pWdfQueue - Framework Queue which is delivering the request
-
- pWdfRequest - Framework Request
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- //
- // We just forward the request down the stack
- // When the device below completes the request we will get notified in OnComplete
- // and then we will complete the request
- //
-
- ForwardRequest(FxRequest);
-}
-
-void
-CMyQueue::ForwardRequest(
- _In_ IWDFIoRequest* FxRequest
- )
-/*++
-
- Routine Description:
-
- This helper method forwards the request down the stack
-
- Arguments:
-
- pWdfRequest - Request to be forwarded
-
- Return Value:
-
- None
-
- Remarks:
-
- The request gets forwarded to the next device in the stack which can be:
- 1. Next device in user-mode stack
- 2. Top device in kernel-mode stack (Redirector's Down Device)
-
- In this routine we:
- 1. Set a completion callback
- 2. Copy request parameters to next stack location
- 3. Asynchronously send the request without any timeout
-
- When the lower request gets completed we will be notified via the
- completion callback, where we will complete our request
-
- In case of failure this routine completes the request
-
---*/
-{
- //
- //First set the completion callback
- //
-
- IRequestCallbackRequestCompletion *completionCallback =
- QueryIRequestCallbackRequestCompletion();
-
- FxRequest->SetCompletionCallback(
- completionCallback,
- NULL //pContext
- );
-
- completionCallback->Release();
-
- //
- //Copy current i/o stack locations parameters to the next stack location
- //
-
- FxRequest->FormatUsingCurrentType(
- );
-
- //
- //Send down the request
- //
- HRESULT hrSend = S_OK;
-
- hrSend = FxRequest->Send(
- m_FxIoTarget,
- 0, //No flag
- 0 //No timeout
- );
-
- if (FAILED(hrSend))
- {
- //
- //If send failed we need to complete the request with failure
- //
- FxRequest->CompleteWithInformation(hrSend, 0);
- }
-
- return;
-}
-
-void
-CMyQueue::HandleReadRequestCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoRequestCompletionParams* CompletionParams
- )
-/*++
-
- Routine Description:
-
- This helper method is called by OnCompletion method to complete Read request
- We invert the bits in the read buffer
- This is so that the client reads back the data it wrote since
- we inverted bits during write to device
-
- Arguments:
-
- FxRequest - Request object of our layer
-
- CompletionParams - Parameters with which the lower Request got completed
-
- Return Value:
-
- None
-
- Remarks:
-
- This method always completes the request since no one else would get a chance to
- complete the request
- In case of failure it completes the request with failure
-
---*/
-{
- HRESULT hrCompletion = CompletionParams->GetCompletionStatus();
- ULONG_PTR BytesRead = CompletionParams->GetInformation();
-
- //
- // Check
- // 1. whether the lower device succeeded the Request (otherwise we will just complete
- // the Request with failure
- // 2. If data read is of non-zero length, for us to bother to invert its bits
- //
-
- if (SUCCEEDED(hrCompletion) &&
- (0 != BytesRead)
- )
- {
- IWDFMemory *FxOutputMemory;
-
- FxRequest->GetOutputMemory(&FxOutputMemory );
-
- InvertBits(FxOutputMemory, BytesRead);
-
- FxOutputMemory->Release();
- }
-
- //
- // Complete the request
- //
-
- FxRequest->CompleteWithInformation(
- hrCompletion,
- BytesRead
- );
-}
-
-
-void
-CMyQueue::OnCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoTarget* FxIoTarget,
- IWDFRequestCompletionParams* CompletionParams,
- PVOID Context
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework I/O Target object when
- the lower device completets the Request
-
- Arguments:
-
- pWdfRequest - Request object of our layer
-
- pIoTarget - I/O Target object invoking this callback
-
- pParams - Parameters with which the lower Request got completed
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxIoTarget);
- UNREFERENCED_PARAMETER(Context);
-
- //
- // If it is a read request, we invert the bits read since we inverted them during write
- // so that application would read the same data as it wrote
- //
-
- if (WdfRequestRead == FxRequest->GetType())
- {
- IWDFIoRequestCompletionParams * IoCompletionParams = NULL;
- HRESULT hrQI = CompletionParams->QueryInterface(IID_PPV_ARGS(&IoCompletionParams));
- WUDF_SAMPLE_DRIVER_ASSERT(SUCCEEDED(hrQI));
-
- HandleReadRequestCompletion(
- FxRequest,
- IoCompletionParams
- );
-
- SAFE_RELEASE(IoCompletionParams);
- }
- else
- {
-
- //
- // Otherwise we just complete our Request object with the same parameters
- // with which the lower Request got completed
- //
-
- FxRequest->CompleteWithInformation(
- CompletionParams->GetCompletionStatus(),
- CompletionParams->GetInformation()
- );
- }
-}
-
diff --git a/usb/umdf_filter_kmdf/umdf_filter/queue.h b/usb/umdf_filter_kmdf/umdf_filter/queue.h
deleted file mode 100644
index 216264e9..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter/queue.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Queue.h
-
-Abstract:
-
- This module contains the type definitions for the OSR USB Filter Sample
- driver's queue callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Class for the queue callbacks.
-// It implements
-// IQueueCallbackDeviceIoControl
-// IRequestCallbackRequestCompletion
-// Queue callbacks
-//
-// This class also implements IRequestCallbackRequestCompletion callback
-// to get the request completion notification when request is sent down the
-// stack. This callback can be implemented on a separate object as well.
-// This callback is implemented here only for conenience.
-//
-class CMyQueue :
- public CUnknown,
- public IQueueCallbackWrite,
- public IQueueCallbackDefaultIoHandler,
- public IRequestCallbackRequestCompletion
-{
-
-//
-// Private data members.
-//
-private:
-
- //
- // Weak reference to framework Queue object which this object implements callbacks for
- // This is kept as a weak reference to avoid circular reference
- // This object's lifetime is contained within framework Queue object's lifetime
- //
-
- IWDFIoQueue *m_FxQueue;
-
- //
- // I/O Target to which we forward requests. Represents next device in the
- // device stack
- //
-
- IWDFIoTarget *m_FxIoTarget;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyQueue() :
- m_FxQueue(NULL),
- m_FxIoTarget(NULL)
- {
- }
-
- virtual ~CMyQueue()
- {
- if (NULL != m_FxIoTarget)
- {
- m_FxIoTarget->Release();
- }
- }
-
- //
- // QueryInterface helpers
- //
-
- IRequestCallbackRequestCompletion *
- QueryIRequestCallbackRequestCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IRequestCallbackRequestCompletion*>(this);
- }
-
- IQueueCallbackWrite *
- QueryIQueueCallbackWrite(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackWrite *>(this);
- }
-
- IQueueCallbackDefaultIoHandler *
- QueryIQueueCallbackDefaultIoHandler(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackDefaultIoHandler *>(this);
- }
-
- //
- // Initialize
- //
-
- HRESULT
- Initialize(
- _In_ IWDFDevice *FxDevice
- );
-
- //
- // Helper method to forward request down the stack
- //
-
- void
- ForwardRequest(
- _In_ IWDFIoRequest *pWdfRequest
- );
-
- //
- // Helper method to inverts bits in the buffer of a framework Memory object
- //
-
- void
- InvertBits(
- _Inout_ IWDFMemory* FxMemory,
- _In_ SIZE_T NumBytes
- );
-
- //
- // Helper method to handle Read request completion
- //
-
- void
- HandleReadRequestCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoRequestCompletionParams* CompletionParams
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this class
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDevice *FxDevice,
- _Out_ CMyQueue **Queue
- );
-
-
- HRESULT
- Configure(
- VOID
- )
- {
- return S_OK;
- }
-
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // IQueueCallbackWrite method
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnWrite(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest,
- _In_ SIZE_T NumOfBytesToWrite
- );
-
-
- //
- // IQueueCallbackDefaultIoHandler method
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnDefaultIoHandler(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest
- );
-
- //
- //IRequestCallbackRequestCompletion
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoTarget* FxIoTarget,
- IWDFRequestCompletionParams* CompletionParams,
- PVOID Context
- );
-};
-
diff --git a/usb/umdf_filter_kmdf/umdf_filter_kmdf.sln b/usb/umdf_filter_kmdf/umdf_filter_kmdf.sln
deleted file mode 100644
index 5a39a03d..00000000
--- a/usb/umdf_filter_kmdf/umdf_filter_kmdf.sln
+++ /dev/null
@@ -1,59 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0
-MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package", "Package", "{0C11CE20-E0CC-403B-B957-FB72E3AD659A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Umdf_filter", "Umdf_filter", "{FD04F724-4BA6-4E88-B269-53F28C44E2F2}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kmdf_driver", "Kmdf_driver", "{8FED241E-8771-423B-8ED2-EF4873FAED48}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "Package\package.VcxProj", "{10E372EF-AE85-4528-919C-A261253EDDAE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WUDFOsrUsbFilter", "umdf_filter\WUDFOsrUsbFilter.vcxproj", "{ADCCB27A-E522-4367-86B9-9C9DF2636B93}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osrusbfx2", "kmdf_driver\osrusbfx2.vcxproj", "{837F98CF-D3A4-472C-BACC-47950340E57B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- Debug|x64 = Debug|x64
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Debug|Win32.ActiveCfg = Debug|Win32
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Debug|Win32.Build.0 = Debug|Win32
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Release|Win32.ActiveCfg = Release|Win32
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Release|Win32.Build.0 = Release|Win32
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Debug|x64.ActiveCfg = Debug|x64
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Debug|x64.Build.0 = Debug|x64
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Release|x64.ActiveCfg = Release|x64
- {10E372EF-AE85-4528-919C-A261253EDDAE}.Release|x64.Build.0 = Release|x64
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Debug|Win32.ActiveCfg = Debug|Win32
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Debug|Win32.Build.0 = Debug|Win32
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Release|Win32.ActiveCfg = Release|Win32
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Release|Win32.Build.0 = Release|Win32
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Debug|x64.ActiveCfg = Debug|x64
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Debug|x64.Build.0 = Debug|x64
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Release|x64.ActiveCfg = Release|x64
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93}.Release|x64.Build.0 = Release|x64
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Debug|Win32.ActiveCfg = Debug|Win32
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Debug|Win32.Build.0 = Debug|Win32
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Release|Win32.ActiveCfg = Release|Win32
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Release|Win32.Build.0 = Release|Win32
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Debug|x64.ActiveCfg = Debug|x64
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Debug|x64.Build.0 = Debug|x64
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Release|x64.ActiveCfg = Release|x64
- {837F98CF-D3A4-472C-BACC-47950340E57B}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {10E372EF-AE85-4528-919C-A261253EDDAE} = {0C11CE20-E0CC-403B-B957-FB72E3AD659A}
- {ADCCB27A-E522-4367-86B9-9C9DF2636B93} = {FD04F724-4BA6-4E88-B269-53F28C44E2F2}
- {837F98CF-D3A4-472C-BACC-47950340E57B} = {8FED241E-8771-423B-8ED2-EF4873FAED48}
- EndGlobalSection
-EndGlobal
diff --git a/usb/umdf_filter_umdf/Package/package.VcxProj b/usb/umdf_filter_umdf/Package/package.VcxProj
deleted file mode 100644
index e659f6f2..00000000
--- a/usb/umdf_filter_umdf/Package/package.VcxProj
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\umdf_driver\WUDFOsrUsbFx2.vcxproj">
- <Project>{6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}</Project>
- </ProjectReference>
- <ProjectReference Include="..\umdf_filter\WUDFOsrUsbFilter.vcxproj">
- <Project>{502F5F25-02A2-4047-8DD1-EB3DF0CC7127}</Project>
- </ProjectReference>
- </ItemGroup>
- <PropertyGroup Label="PropertySheets">
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Utility</ConfigurationType>
- <DriverType>Package</DriverType>
- <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
- <Configuration>Debug</Configuration>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Globals">
- <ProjectGuid>{A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}</ProjectGuid>
- <SampleGuid>{46304089-31EE-4493-8063-28C9498B0AA5}</SampleGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>true</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>false</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>true</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>false</UseDebugLibraries>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup />
- <PropertyGroup>
- <DebuggerFlavor>DbgengRemoteDebugger</DebuggerFlavor>
- <ImportToStore>False</ImportToStore>
- <InstallMode>None</InstallMode>
- <HardwareIdString />
- <CommandLine />
- <ScriptPath />
- <DeployFiles />
- <ScriptName />
- <ScriptDeviceQuery>%PathToInf%</ScriptDeviceQuery>
- <EnableVerifier>False</EnableVerifier>
- <AllDrivers>False</AllDrivers>
- <VerifyProjectOutput>True</VerifyProjectOutput>
- <VerifyDrivers />
- <VerifyFlags>133563</VerifyFlags>
- </PropertyGroup>
- <ItemDefinitionGroup>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/Package/package.VcxProj.Filters b/usb/umdf_filter_umdf/Package/package.VcxProj.Filters
deleted file mode 100644
index c76e39bb..00000000
--- a/usb/umdf_filter_umdf/Package/package.VcxProj.Filters
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{C029FC84-457F-450E-ADA9-6D80AE7CD763}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{7D823922-0DAE-4B96-8DB9-0746C3D33ACA}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{C9031396-E1B6-4B90-94EC-0D504E07410E}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{3B2590BD-4AA9-4039-8CA3-4C189ACEF76A}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/README.md b/usb/umdf_filter_umdf/README.md
deleted file mode 100644
index b16d8686..00000000
--- a/usb/umdf_filter_umdf/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-page_type: sample
-description: "Demonstrates how to load a UMDF filter driver as an upper filter driver above the umdf_fx2 sample driver."
-languages:
-- cpp
-products:
-- windows
-- windows-wdk
----
-
-# Sample UMDF Filter above UMDF Function Driver for OSR USB-FX2 (UMDF Version 1)
-
-The umdf\_filter\_umdf sample demonstrates how to load a User-Mode Driver Framework (UMDF) filter driver as an upper filter driver above the umdf\_fx2 sample driver.
-
-This sample is written for the [OSR USB-FX2 Learning Kit](https://www.osronline.com/hardware/OSRFX2_32.pdf).
-
-## Overview
-
-- The device is based on the development board supplied with the Cypress EZ-USB FX2 Development Kit (CY3681).
-
-- It contains 1 interface and 3 endpoints (Interrupt IN, Bulk Out, Bulk IN).
-
-- Firmware supports vendor commands to query or set LED Bar graph display and 7-segment LED display, and to query toggle switch states.
-
-- Interrupt Endpoint:
-
- - Sends an 8-bit value that represents the state of the switches.
-
- - Sent on startup, resume from suspend, and whenever the switch pack setting changes.
-
- - Firmware does not de-bounce the switch pack.
-
- - One switch change can result in multiple bytes being sent.
-
- - Bits are in the reverse order of the labels on the pack (for example, bit 0x80 is labeled 1 on the pack).
-
-- Bulk Endpoints are configured for loopback:
-
- - The device moves data from IN endpoint to OUT endpoint.
-
- - The device does not change the values of the data it receives nor does it internally create any data.
-
- - Endpoints are always double buffered.
-
- - Maximum packet size depends on speed (64 full speed, 512 high speed).
-
-## Testing the driver
-
-You can test this sample either by using the [Custom driver access](https://go.microsoft.com/fwlink/p/?linkid=2114373) sample application, or by using the osrusbfx2.exe test application. For information on how to build and use the osrusbfx2.exe application, see the test instructions for the [umdf\_fx2](https://docs.microsoft.com/samples/microsoft/windows-driver-samples/sample-umdf-filter-above-umdf-function-driver-for-osr-usb-fx2-umdf-version-1/) sample.
-
-## Sample Contents
-
-| Folder | Description |
-| --- | --- |
-| usb\umdf_filter_umdf\umdf_driver | This directory contains source code for the umdf_fx2 sample driver. |
-| usb\umdf_filter_umdf\umdf_filter | This directory contains the UMDF filter driver. |
diff --git a/usb/umdf_filter_umdf/inc/WUDFOsrUsbPublic.h b/usb/umdf_filter_umdf/inc/WUDFOsrUsbPublic.h
deleted file mode 100644
index 6681fa14..00000000
--- a/usb/umdf_filter_umdf/inc/WUDFOsrUsbPublic.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- WUDFOsrUsbPublic.h
-
-Abstract:
-
- This module contains the common declarations shared by driver
- and user applications for the UMDF OSR device sample.
-
- Note that this driver does NOT use the same device interface GUID
- as the KMDF OSR USB sample.
-
-Environment:
-
- user and kernel
-
---*/
-
-#pragma once
-
-//
-// Define an Interface Guid so that app can find the device and talk to it.
-//
-
-// {573E8C73-0CB4-4471-A1BF-FAB26C31D384}
-DEFINE_GUID(GUID_DEVINTERFACE_OSRUSBFX2,
- 0x573e8c73, 0xcb4, 0x4471, 0xa1, 0xbf, 0xfa, 0xb2, 0x6c, 0x31, 0xd3, 0x84);
-
diff --git a/usb/umdf_filter_umdf/inc/list.h b/usb/umdf_filter_umdf/inc/list.h
deleted file mode 100644
index 38d0b1e9..00000000
--- a/usb/umdf_filter_umdf/inc/list.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- list.h
-
-Abstract:
-
- This module contains doubly linked list macros
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-
-FORCEINLINE
-VOID
-InitializeListHead(
- IN PLIST_ENTRY ListHead
- )
-{
- ListHead->Flink = ListHead->Blink = ListHead;
-}
-
-FORCEINLINE
-BOOLEAN
-RemoveEntryList(
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
- PLIST_ENTRY Flink;
-
- Flink = Entry->Flink;
- Blink = Entry->Blink;
- Blink->Flink = Flink;
- Flink->Blink = Blink;
- return (BOOLEAN)(Flink == Blink);
-}
-
-FORCEINLINE
-VOID
-InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Flink;
-
- Flink = ListHead->Flink;
- Entry->Flink = Flink;
- Entry->Blink = ListHead;
- Flink->Blink = Entry;
- ListHead->Flink = Entry;
-}
-
-FORCEINLINE
-VOID
-InsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
-
- Blink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = Blink;
- Blink->Flink = Entry;
- ListHead->Blink = Entry;
-}
diff --git a/usb/umdf_filter_umdf/inc/public.h b/usb/umdf_filter_umdf/inc/public.h
deleted file mode 100644
index 2c3f6805..00000000
--- a/usb/umdf_filter_umdf/inc/public.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- public.h
-
-Abstract:
-
- Public definitions for the OSR_FX2 device operations.
-
-Environment:
-
- User & Kernel mode
-
---*/
-
-#ifndef _PUBLIC_H
-#define _PUBLIC_H
-
-#include <initguid.h>
-
-#include "WudfOsrUsbPublic.h"
-
-
-//
-// Define the structures that will be used by the IOCTL
-// interface to the driver
-//
-
-//
-// BAR_GRAPH_STATE
-//
-// BAR_GRAPH_STATE is a bit field structure with each
-// bit corresponding to one of the bar graph on the
-// OSRFX2 Development Board
-//
-#include <pshpack1.h>
-
-#pragma warning( push )
-#pragma warning( disable : 4201 ) // nameless struct/union
-#pragma warning( disable : 4214 ) // bit-field type other than int
-
-typedef struct _BAR_GRAPH_STATE {
-
- union {
-
- struct {
- //
- // Individual bars starting from the
- // top of the stack of bars
- //
- // NOTE: There are actually 10 bars,
- // but the very top two do not light
- // and are not counted here
- //
- UCHAR Bar1 : 1;
- UCHAR Bar2 : 1;
- UCHAR Bar3 : 1;
- UCHAR Bar4 : 1;
- UCHAR Bar5 : 1;
- UCHAR Bar6 : 1;
- UCHAR Bar7 : 1;
- UCHAR Bar8 : 1;
- };
-
- //
- // The state of all the bar graph as a single
- // UCHAR
- //
- UCHAR BarsAsUChar;
-
- };
-
-}BAR_GRAPH_STATE, *PBAR_GRAPH_STATE;
-
-//
-// SWITCH_STATE
-//
-// SWITCH_STATE is a bit field structure with each
-// bit corresponding to one of the switches on the
-// OSRFX2 Development Board
-//
-typedef struct _SWITCH_STATE {
-
- union {
- struct {
- //
- // Individual switches starting from the
- // left of the set of switches
- //
- UCHAR Switch1 : 1;
- UCHAR Switch2 : 1;
- UCHAR Switch3 : 1;
- UCHAR Switch4 : 1;
- UCHAR Switch5 : 1;
- UCHAR Switch6 : 1;
- UCHAR Switch7 : 1;
- UCHAR Switch8 : 1;
- };
-
- //
- // The state of all the switches as a single
- // UCHAR
- //
- UCHAR SwitchesAsUChar;
-
- };
-
-
-}SWITCH_STATE, *PSWITCH_STATE;
-
-//
-// Seven segment display bit values.
-//
-
-//
-// Undefine conflicting MFC constant
-//
-#undef SS_CENTER
-#undef SS_LEFT
-#undef SS_RIGHT
-
-#define SS_TOP 0x01
-#define SS_TOP_LEFT 0x40
-#define SS_TOP_RIGHT 0x02
-#define SS_CENTER 0x20
-#define SS_BOTTOM_LEFT 0x10
-#define SS_BOTTOM_RIGHT 0x04
-#define SS_BOTTOM 0x80
-#define SS_DOT 0x08
-
-//
-// FILE_PLAYBACK
-//
-// FILE_PLAYBACK structure contains the parameters for the PLAY_FILE I/O Control.
-//
-
-typedef struct _FILE_PLAYBACK
-{
- //
- // The delay between changes in the display, in milliseconds.
- //
-
- USHORT Delay;
-
- //
- // The data file path.
- //
-
- WCHAR Path[1];
-} FILE_PLAYBACK, *PFILE_PLAYBACK;
-
-#include <poppack.h>
-
-#define IOCTL_INDEX 0x800
-#define FILE_DEVICE_OSRUSBFX2 65500U
-
-#define IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_RESET_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 1, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_REENUMERATE_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 3, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 4, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 5, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_READ_SWITCHES CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 6, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 7, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 8, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 9, \
- METHOD_OUT_DIRECT, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_PLAY_FILE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 10, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#pragma warning(pop)
-
-#endif
-
diff --git a/usb/umdf_filter_umdf/inc/usb_hw.h b/usb/umdf_filter_umdf/inc/usb_hw.h
deleted file mode 100644
index d6e983f1..00000000
--- a/usb/umdf_filter_umdf/inc/usb_hw.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- Usb.h
-
-Abstract:
-
- Contains prototypes for interfacing with a USB connected device. These
- are copied from the KMDF WDFUSB.H header file (but with the WDF specific
- portions removed)
-
-Environment:
-
- kernel mode only
-
---*/
-
-#pragma once
-
-typedef enum _WINUSB_BMREQUEST_DIRECTION {
- BmRequestHostToDevice = BMREQUEST_HOST_TO_DEVICE,
- BmRequestDeviceToHost = BMREQUEST_DEVICE_TO_HOST,
-} WINUSB_BMREQUEST_DIRECTION;
-
-typedef enum _WINUSB_BMREQUEST_TYPE {
- BmRequestStandard = BMREQUEST_STANDARD,
- BmRequestClass = BMREQUEST_CLASS,
- BmRequestVendor = BMREQUEST_VENDOR,
-} WINUSB_BMREQUEST_TYPE;
-
-typedef enum _WINUSB_BMREQUEST_RECIPIENT {
- BmRequestToDevice = BMREQUEST_TO_DEVICE,
- BmRequestToInterface = BMREQUEST_TO_INTERFACE,
- BmRequestToEndpoint = BMREQUEST_TO_ENDPOINT,
- BmRequestToOther = BMREQUEST_TO_OTHER,
-} WINUSB_BMREQUEST_RECIPIENT;
-
-typedef enum _WINUSB_DEVICE_TRAITS {
- WINUSB_DEVICE_TRAIT_SELF_POWERED = 0x00000001,
- WINUSB_DEVICE_TRAIT_REMOTE_WAKE_CAPABLE = 0x00000002,
- WINUSB_DEVICE_TRAIT_AT_HIGH_SPEED = 0x00000004,
-} WINUSB_DEVICE_TRAITS;
-
-typedef enum _WdfUsbTargetDeviceSelectInterfaceType {
- WdfUsbTargetDeviceSelectInterfaceTypeInterface = 0x10,
- WdfUsbTargetDeviceSelectInterfaceTypeUrb = 0x11,
-} WdfUsbTargetDeviceSelectInterfaceType;
-
-
-
-typedef union _WINUSB_CONTROL_SETUP_PACKET {
- struct {
- union {
- #pragma warning(disable:4214) // bit field types other than int
- struct {
- //
- // Valid values are BMREQUEST_TO_DEVICE, BMREQUEST_TO_INTERFACE,
- // BMREQUEST_TO_ENDPOINT, BMREQUEST_TO_OTHER
- //
- BYTE Recipient:2;
-
- BYTE Reserved:3;
-
- //
- // Valid values are BMREQUEST_STANDARD, BMREQUEST_CLASS,
- // BMREQUEST_VENDOR
- //
- BYTE Type:2;
-
- //
- // Valid values are BMREQUEST_HOST_TO_DEVICE,
- // BMREQUEST_DEVICE_TO_HOST
- //
- BYTE Dir:1;
- } Request;
- #pragma warning(default:4214) // bit field types other than int
- BYTE Byte;
- } bm;
-
- BYTE bRequest;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wValue;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wIndex;
-
- USHORT wLength;
- } Packet;
-
- struct {
- BYTE Bytes[8];
- } Generic;
-
- WINUSB_SETUP_PACKET WinUsb;
-
-} WINUSB_CONTROL_SETUP_PACKET, *PWINUSB_CONTROL_SETUP_PACKET;
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_CLASS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestClass;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_VENDOR(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestVendor;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_FEATURE(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT FeatureSelector,
- USHORT Index,
- BOOLEAN SetFeature
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestHostToDevice;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- if (SetFeature) {
- Packet->Packet.bRequest = USB_REQUEST_SET_FEATURE;
- }
- else {
- Packet->Packet.bRequest = USB_REQUEST_CLEAR_FEATURE;
- }
-
- Packet->Packet.wValue.Value = FeatureSelector;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_GET_STATUS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestDeviceToHost;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- Packet->Packet.bRequest = USB_REQUEST_GET_STATUS;
- Packet->Packet.wIndex.Value = Index;
- Packet->Packet.wValue.Value = 0;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/ControlQueue.cpp b/usb/umdf_filter_umdf/umdf_driver/ControlQueue.cpp
deleted file mode 100644
index f4058941..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/ControlQueue.cpp
+++ /dev/null
@@ -1,564 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ControlQueue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "winioctl.h"
-
-#include "ControlQueue.tmh"
-
-CMyControlQueue::CMyControlQueue(
- _In_ PCMyDevice Device
- ) : CMyQueue(Device)
-{
-
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CMyControlQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
-
- if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackDeviceIoControl)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackDeviceIoControl();
-
- }
- else
- {
- hr = CMyQueue::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyControlQueue::CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyControlQueue *Queue
- )
-/*++
-
-Routine Description:
-
-
- CreateInstance creates an instance of the queue object.
-
-Aruments:
-
- ppUkwn - OUT parameter is an IUnknown interface to the queue object
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- PCMyControlQueue queue = NULL;
- HRESULT hr = S_OK;
-
- queue = new CMyControlQueue(Device);
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Call the queue callback object to initialize itself. This will create
- // its partner queue framework object.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize();
- }
-
- if (SUCCEEDED(hr))
- {
- *Queue = queue;
- }
- else
- {
- SAFE_RELEASE(queue);
- }
-
- return hr;
-}
-
-HRESULT
-CMyControlQueue::Initialize(
- VOID
- )
-{
- HRESULT hr;
-
- //
- // First initialize the base class. This will create the partner FxIoQueue
- // object and setup automatic forwarding of I/O controls.
- //
-
- //
- // The framework (UMDF) will not deliver a
- // request to the driver that arrives on a power-managed queue, unless
- // the device is in a powered-up state. If you receive a request on a
- // power-managed queue after the device has idled out,
- // the framework will not be able to power-up and present the request
- // to the driver unless it is the power policy owner (PPO).
- // Since this driver is the PPO it can use power managed queues
- //
-
- hr = __super::Initialize(WdfIoQueueDispatchSequential,
- false,
- true /* use power managed queue */);
-
- //
- // return the status.
- //
-
- return hr;
-}
-
-VOID
-STDMETHODCALLTYPE
-CMyControlQueue::OnDeviceIoControl(
- _In_ IWDFIoQueue *FxQueue,
- _In_ IWDFIoRequest *FxRequest,
- _In_ ULONG ControlCode,
- _In_ SIZE_T InputBufferSizeInBytes,
- _In_ SIZE_T OutputBufferSizeInBytes
- )
-/*++
-
-Routine Description:
-
-
- DeviceIoControl dispatch routine
-
-Aruments:
-
- FxQueue - Framework Queue instance
- FxRequest - Framework Request instance
- ControlCode - IO Control Code
- InputBufferSizeInBytes - Lenth of input buffer
- OutputBufferSizeInBytes - Lenth of output buffer
-
- Always succeeds DeviceIoIoctl
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- IWDFMemory *memory = NULL;
- PVOID buffer;
-
- SIZE_T bigBufferCb;
-
- ULONG information = 0;
-
- bool completeRequest = true;
-
- HRESULT hr = S_OK;
-
- switch (ControlCode)
- {
- case IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR:
- {
- //
- // Get the output buffer.
- //
-
- FxRequest->GetOutputMemory(&memory );
-
- //
- // request the descriptor.
- //
-
- ULONG bufferCb;
-
- //
- // Get the buffer address then release the memory object.
- // The memory object remains valid until the request is
- // completed.
- //
-
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- if (bigBufferCb > ULONG_MAX)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- break;
- }
- else
- {
- bufferCb = (ULONG) bigBufferCb;
- }
-
- hr = m_Device->GetUsbTargetDevice()->RetrieveDescriptor(
- USB_CONFIGURATION_DESCRIPTOR_TYPE,
- 0,
- 0,
- &bufferCb,
- (PUCHAR) buffer
- );
-
- if (SUCCEEDED(hr))
- {
- information = bufferCb;
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the result of the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(BAR_GRAPH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->GetBarGraphDisplay((PBAR_GRAPH_STATE) buffer);
- }
-
- //
- // If that worked then record how many bytes of data we're
- // returning.
- //
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(BAR_GRAPH_STATE);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (InputBufferSizeInBytes < sizeof(BAR_GRAPH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetInputMemory(&memory);
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->SetBarGraphDisplay((PBAR_GRAPH_STATE) buffer);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the result of the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SEVEN_SEGMENT))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
- hr = m_Device->GetSevenSegmentDisplay((PSEVEN_SEGMENT) buffer);
- }
-
- //
- // If that worked then record how many bytes of data we're
- // returning.
- //
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(SEVEN_SEGMENT);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (InputBufferSizeInBytes < sizeof(SEVEN_SEGMENT))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetInputMemory(&memory );
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->SetSevenSegmentDisplay((PSEVEN_SEGMENT) buffer);
- }
- break;
- }
-
- case IOCTL_OSRUSBFX2_READ_SWITCHES:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SWITCH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->ReadSwitchState((PSWITCH_STATE) buffer);
- }
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(SWITCH_STATE);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE:
- {
- //
- // Make sure the buffer is big enough to hold the switch
- // state.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SWITCH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- //
- // Forward the request to the switch state change queue.
- //
-
- hr = FxRequest->ForwardToIoQueue(
- m_Device->GetSwitchChangeQueue()
- );
-
- if (SUCCEEDED(hr))
- {
- completeRequest = false;
- }
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_RESET_DEVICE:
- case IOCTL_OSRUSBFX2_REENUMERATE_DEVICE:
- {
- //
- // WinUSB does not allow us to reset or re-enumerate the device.
- // Return not-supported for the error in both of these cases.
- //
-
- hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
- break;
- }
-
- case IOCTL_OSRUSBFX2_PLAY_FILE:
- {
- //
- // This IOCTL demonstrates how to use impersonation to access
- // resources using the credentials provided by the client. Note
- // that for impersonation to work it has to be enabled in the device
- // INF and the client must allow impersonation when they open the
- // device.
- //
- // This IOCTL opens a file using the path provided by the client
- // and then plays the characters in that file out to the seven segment
- // display in a worker thread.
- //
-
- PFILE_PLAYBACK playback;
- SIZE_T playbackCb;
- size_t realPlaybackCb;
-
- FxRequest->GetInputMemory(&memory);
-
- if (memory == NULL)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Get the playback structure from the input buffer.
- //
-
- playback = (PFILE_PLAYBACK) memory->GetDataBuffer(&playbackCb);
-
- memory->Release();
-
- //
- // Make sure the length is at least as big as the fixed portion
- // of the input structure.
- //
-
- if (playbackCb < (FIELD_OFFSET(FILE_PLAYBACK, Path)))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Make sure the file name is at least one character long.
- //
-
- playbackCb -= FIELD_OFFSET(FILE_PLAYBACK, Path);
-
- if (playbackCb < sizeof(WCHAR))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Verify that the string provided is valid.
- //
-
- hr = StringCbLength(playback->Path,
- min(playbackCb, (STRSAFE_MAX_CCH * sizeof(WCHAR))),
- &realPlaybackCb);
-
- if (FAILED(hr))
- {
- break;
- }
-
- hr = m_Device->PlaybackFile(playback, FxRequest);
-
- break;
- }
-
-
-
- default:
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION);
- break;
- }
- }
-
- if (completeRequest)
- {
- FxRequest->CompleteWithInformation(hr, information);
- }
-
- return;
-}
diff --git a/usb/umdf_filter_umdf/umdf_driver/ControlQueue.h b/usb/umdf_filter_umdf/umdf_driver/ControlQueue.h
deleted file mode 100644
index 251521e1..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/ControlQueue.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ControlQueue.h
-
-Abstract:
-
- This file defines the queue callback object for handling device I/O
- control requests. This is a serialized queue.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Queue Callback Object.
-//
-
-class CMyControlQueue : public IQueueCallbackDeviceIoControl,
- public CMyQueue
-{
- HRESULT
- Initialize(
- VOID
- );
-
-public:
-
- CMyControlQueue(
- _In_ PCMyDevice Device
- );
-
- virtual
- ~CMyControlQueue(
- VOID
- )
- {
- return;
- }
-
- static
- HRESULT
- CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyControlQueue *Queue
- );
-
- HRESULT
- Configure(
- VOID
- )
- {
- return S_OK;
- }
-
- IQueueCallbackDeviceIoControl *
- QueryIQueueCallbackDeviceIoControl(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackDeviceIoControl *>(this);
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // Wdf Callbacks
- //
-
- //
- // IQueueCallbackDeviceIoControl
- //
- STDMETHOD_ (void, OnDeviceIoControl)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ ULONG ControlCode,
- _In_ SIZE_T InputBufferSizeInBytes,
- _In_ SIZE_T OutputBufferSizeInBytes
- );
-};
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/Device.cpp b/usb/umdf_filter_umdf/umdf_driver/Device.cpp
deleted file mode 100644
index 101b3b79..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/Device.cpp
+++ /dev/null
@@ -1,2091 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Device.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2 driver's
- device callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-#include "internal.h"
-#include "initguid.h"
-#include "usb_hw.h"
-#include <devpkey.h>
-
-#include "device.tmh"
-#define CONCURRENT_READS 2
-
-CMyDevice::~CMyDevice(
- )
-{
- SAFE_RELEASE(m_pIoTargetInterruptPipeStateMgmt);
-}
-
-HRESULT
-CMyDevice::CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit,
- _Out_ PCMyDevice *Device
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR Fx2 driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- PCMyDevice device;
- HRESULT hr;
-
- //
- // Allocate a new instance of the device class.
- //
-
- device = new CMyDevice();
-
- if (NULL == device)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- hr = device->Initialize(FxDriver, FxDeviceInit);
-
- if (SUCCEEDED(hr))
- {
- *Device = device;
- }
- else
- {
- device->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Initialize(
- _In_ IWDFDriver * FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object and creates the
- partner device object.
-
- The method should perform any device-specific configuration that:
- * could fail (these can't be done in the constructor)
- * must be done before the partner object is created -or-
- * can be done after the partner object is created and which aren't
- influenced by any device-level parameters the parent (the driver
- in this case) might set.
-
- Arguments:
-
- FxDeviceInit - the settings for this device.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFDevice2 *fxDevice = NULL;
-
- HRESULT hr = S_OK;
-
- //
- // TODO: Any per-device initialization which must be done before
- // creating the partner object.
- //
-
- //
- // Set no locking unless you need an automatic callbacks synchronization
- //
-
- FxDeviceInit->SetLockingConstraint(None);
-
- //
- // TODO: If you're writing a filter driver then indicate that here.
- // And then don't claim power policy ownership below
- //
- // FxDeviceInit->SetFilter();
- //
-
- //
- // Set the Fx2 driver as the power policy owner.
- //
-
- FxDeviceInit->SetPowerPolicyOwnership(TRUE);
-
- //
- // Create a new FX device object and assign the new callback object to
- // handle any device level events that occur.
- //
-
- //
- // QueryIUnknown references the IUnknown interface that it returns
- // (which is the same as referencing the device). We pass that to
- // CreateDevice, which takes its own reference if everything works.
- //
-
- if (SUCCEEDED(hr))
- {
- IUnknown *unknown = this->QueryIUnknown();
- IWDFDevice* device1;
-
- hr = FxDriver->CreateDevice(FxDeviceInit, unknown, &device1);
-
- //
- // Convert the interface to version 2
- //
-
- if (SUCCEEDED(hr)) {
- device1->QueryInterface(IID_PPV_ARGS(&fxDevice));
- _Analysis_assume_(fxDevice != NULL);
- device1->Release();
- }
-
- unknown->Release();
- }
-
- //
- // If that succeeded then set our FxDevice member variable.
- //
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice = fxDevice;
-
- //
- // Drop the reference we got from CreateDevice. Since this object
- // is partnered with the framework object they have the same
- // lifespan - there is no need for an additional reference.
- //
-
- fxDevice->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Configure(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called after the device callback object has been initialized
- and returned to the driver. It would setup the device's queues and their
- corresponding callback objects.
-
- Arguments:
-
- FxDevice - the framework device object for which we're handling events.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr = S_OK;
-
- //
- // Get the bus type GUID for the device and confirm that we're attached to
- // USB.
- //
- // NOTE: Since this device only supports USB we'd normally trust our INF
- // to ensure this.
- //
- // But if the device also supported 1394 then we could
- // use this to determine which type of bus we were attached to.
- //
-
- hr = GetBusTypeGuid();
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- //
- // Create the read-write queue.
- //
-
- hr = CMyReadWriteQueue::CreateInstance(this, &m_ReadWriteQueue);
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- //
- // We use default queue for read/write
- //
-
- hr = m_ReadWriteQueue->Configure();
-
- m_ReadWriteQueue->Release();
-
- //
- // Create the control queue and configure forwarding for IOCTL requests.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = CMyControlQueue::CreateInstance(this, &m_ControlQueue);
-
- if (SUCCEEDED(hr))
- {
- hr = m_ControlQueue->Configure();
- if (SUCCEEDED(hr))
- {
- m_FxDevice->ConfigureRequestDispatching(
- m_ControlQueue->GetFxQueue(),
- WdfRequestDeviceIoControl,
- true
- );
- }
- m_ControlQueue->Release();
- }
- }
-
- //
- // Create a manual I/O queue to hold requests for notification when
- // the switch state changes.
- //
-
- hr = m_FxDevice->CreateIoQueue(NULL,
- FALSE,
- WdfIoQueueDispatchManual,
- FALSE,
- FALSE,
- &m_SwitchChangeQueue);
-
-
- //
- // Release creation reference as object tree will keep a reference
- //
-
- m_SwitchChangeQueue->Release();
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->CreateDeviceInterface(&GUID_DEVINTERFACE_OSRUSBFX2,
- NULL);
- }
-
- //
- // Mark the interface as restricted to allow access to applications bound
- // using device metadata. Failures here are not fatal so we log them but
- // ignore them otherwise.
- //
- if (SUCCEEDED(hr))
- {
- WDF_PROPERTY_STORE_ROOT RootSpecifier;
- IWDFUnifiedPropertyStoreFactory * pUnifiedPropertyStoreFactory = NULL;
- IWDFUnifiedPropertyStore * pUnifiedPropertyStore = NULL;
- DEVPROP_BOOLEAN isRestricted = DEVPROP_TRUE;
- HRESULT hrSetProp;
-
- hrSetProp = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pUnifiedPropertyStoreFactory));
-
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrSetProp));
-
- RootSpecifier.LengthCb = sizeof(RootSpecifier);
- RootSpecifier.RootClass = WdfPropertyStoreRootClassDeviceInterfaceKey;
- RootSpecifier.Qualifier.DeviceInterfaceKey.InterfaceGUID = &GUID_DEVINTERFACE_OSRUSBFX2;
- RootSpecifier.Qualifier.DeviceInterfaceKey.ReferenceString = NULL;
-
- hrSetProp = pUnifiedPropertyStoreFactory->RetrieveUnifiedDevicePropertyStore(&RootSpecifier,
- &pUnifiedPropertyStore);
-
- if (SUCCEEDED(hrSetProp))
- {
- hrSetProp = pUnifiedPropertyStore->SetPropertyData(&DEVPKEY_DeviceInterface_Restricted,
- 0, // Lcid
- 0, // Flags
- DEVPROP_TYPE_BOOLEAN,
- sizeof(isRestricted),
- &isRestricted);
- }
-
- if (FAILED(hrSetProp))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Could not set restricted property %!HRESULT!",
- hrSetProp
- );
- }
-
- SAFE_RELEASE(pUnifiedPropertyStoreFactory);
- SAFE_RELEASE(pUnifiedPropertyStore);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- HRESULT hr;
-
- if (IsEqualIID(InterfaceId, __uuidof(IPnpCallbackHardware)))
- {
- *Object = QueryIPnpCallbackHardware();
- hr = S_OK;
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IPnpCallback)))
- {
- *Object = QueryIPnpCallback();
- hr = S_OK;
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IPnpCallbackSelfManagedIo)))
- {
- *Object = QueryIPnpCallbackSelfManagedIo();
- hr = S_OK;
- }
- else if(IsEqualIID(InterfaceId, __uuidof(IUsbTargetPipeContinuousReaderCallbackReadersFailed)))
- {
- *Object = QueryContinousReaderFailureCompletion();
- hr = S_OK;
- }
- else if(IsEqualIID(InterfaceId, __uuidof(IUsbTargetPipeContinuousReaderCallbackReadComplete)))
- {
- *Object = QueryContinousReaderCompletion();
- hr = S_OK;
- }
- else
- {
- hr = CUnknown::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnPrepareHardware(
- _In_ IWDFDevice * /* FxDevice */
- )
-/*++
-
-Routine Description:
-
- This routine is invoked to ready the driver
- to talk to hardware. It opens the handle to the
- device and talks to it using the WINUSB interface.
- It invokes WINUSB to discver the interfaces and stores
- the information related to bulk endpoints.
-
-Arguments:
-
- FxDevice : Pointer to the WDF device interface
-
-Return Value:
-
- HRESULT
-
---*/
-{
- PWSTR deviceName = NULL;
- DWORD deviceNameCch = 0;
-
- HRESULT hr;
-
- //
- // Get the device name.
- // Get the length to allocate first
- //
-
- hr = m_FxDevice->RetrieveDeviceName(NULL, &deviceNameCch);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get device name %!HRESULT!",
- hr
- );
- }
-
- //
- // Allocate the buffer
- //
-
- if (SUCCEEDED(hr))
- {
- deviceName = new WCHAR[deviceNameCch];
-
- if (deviceName == NULL)
- {
- hr = E_OUTOFMEMORY;
- }
- }
-
- //
- // Get the actual name
- //
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->RetrieveDeviceName(deviceName, &deviceNameCch);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get device name %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Device name %S",
- deviceName
- );
- }
-
- //
- // Create USB I/O Targets and configure them
- //
-
- if (SUCCEEDED(hr))
- {
- hr = CreateUsbIoTargets();
- }
-
- if (SUCCEEDED(hr))
- {
- ULONG length = sizeof(m_Speed);
-
- hr = m_pIUsbTargetDevice->RetrieveDeviceInformation(DEVICE_SPEED,
- &length,
- &m_Speed);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get usb device speed information %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Speed - %x\n",
- m_Speed
- );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = ConfigureUsbPipes();
- }
-
- // Setup power-management settings on the device.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = SetPowerManagement();
- }
-
- //
- //
- // Clear the seven segement display to indicate that we're done with
- // prepare hardware.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = IndicateDeviceReady();
- }
-
- if (SUCCEEDED(hr))
- {
- hr = ConfigContReaderForInterruptEndPoint();
- }
-
- delete[] deviceName;
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnReleaseHardware(
- _In_ IWDFDevice * /* FxDevice */
- )
-/*++
-
-Routine Description:
-
- This routine is invoked when the device is being removed or stopped
- It releases all resources allocated for this device.
-
-Arguments:
-
- FxDevice - Pointer to the Device object.
-
-Return Value:
-
- HRESULT - Always succeeds.
-
---*/
-{
- //
- // Delete USB Target Device WDF Object, this will in turn
- // delete all the children - interface and the pipe objects
- //
- // This makes sure that
- // 1. We drain the the pending read which does not come from an I/O queue
- // 2. We remove USB target objects from object tree (and thereby free them)
- // before any potential subsequent OnPrepareHardware creates new ones
- //
- // m_pIUsbTargetDevice could be NULL if OnPrepareHardware failed so we need
- // to guard against that
- //
-
- if (m_pIUsbTargetDevice)
- {
- m_pIUsbTargetDevice->DeleteWdfObject();
- }
-
- return S_OK;
-}
-
-HRESULT
-CMyDevice::CreateUsbIoTargets(
- )
-/*++
-
-Routine Description:
-
- This routine creates Usb device, interface and pipe objects
-
-Arguments:
-
- None
-
-Return Value:
-
- HRESULT
---*/
-{
- HRESULT hr;
- UCHAR NumEndPoints = 0;
- IWDFUsbTargetFactory * pIUsbTargetFactory = NULL;
- IWDFUsbTargetDevice * pIUsbTargetDevice = NULL;
- IWDFUsbInterface * pIUsbInterface = NULL;
- IWDFUsbTargetPipe * pIUsbPipe = NULL;
-
- hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pIUsbTargetFactory));
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get usb target factory %!HRESULT!",
- hr
- );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = pIUsbTargetFactory->CreateUsbTargetDevice(
- &pIUsbTargetDevice);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to create USB Device I/O Target %!HRESULT!",
- hr
- );
- }
- else
- {
- m_pIUsbTargetDevice = pIUsbTargetDevice;
-
- //
- // Release the creation reference as object tree will maintain a reference
- //
-
- pIUsbTargetDevice->Release();
- }
- }
-
- if (SUCCEEDED(hr))
- {
- UCHAR NumInterfaces = pIUsbTargetDevice->GetNumInterfaces();
-
- WUDF_TEST_DRIVER_ASSERT(1 == NumInterfaces);
-
- hr = pIUsbTargetDevice->RetrieveUsbInterface(0, &pIUsbInterface);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to retrieve USB interface from USB Device I/O Target %!HRESULT!",
- hr
- );
- }
- else
- {
- m_pIUsbInterface = pIUsbInterface;
-
- pIUsbInterface->Release(); //release creation reference
- }
- }
-
- if (SUCCEEDED(hr))
- {
- NumEndPoints = pIUsbInterface->GetNumEndPoints();
-
- if (NumEndPoints != NUM_OSRUSB_ENDPOINTS) {
- hr = E_UNEXPECTED;
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Has %d endpoints, expected %d, returning %!HRESULT! ",
- NumEndPoints,
- NUM_OSRUSB_ENDPOINTS,
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- for (UCHAR PipeIndex = 0; PipeIndex < NumEndPoints; PipeIndex++)
- {
- hr = pIUsbInterface->RetrieveUsbPipeObject(PipeIndex,
- &pIUsbPipe);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to retrieve USB Pipe for PipeIndex %d, %!HRESULT!",
- PipeIndex,
- hr
- );
- }
- else
- {
- if ( pIUsbPipe->IsInEndPoint() )
- {
- if ( UsbdPipeTypeInterrupt == pIUsbPipe->GetType() )
- {
- m_pIUsbInterruptPipe = pIUsbPipe;
-
- WUDF_TEST_DRIVER_ASSERT (m_pIoTargetInterruptPipeStateMgmt == NULL);
-
- hr = m_pIUsbInterruptPipe->QueryInterface(__uuidof(
- IWDFIoTargetStateManagement),
- reinterpret_cast<void**>(&m_pIoTargetInterruptPipeStateMgmt)
- );
- if (FAILED(hr))
- {
- m_pIoTargetInterruptPipeStateMgmt = NULL;
- }
- }
- else if ( UsbdPipeTypeBulk == pIUsbPipe->GetType() )
- {
- m_pIUsbInputPipe = pIUsbPipe;
- }
- else
- {
- pIUsbPipe->DeleteWdfObject();
- }
- }
- else if ( pIUsbPipe->IsOutEndPoint() && (UsbdPipeTypeBulk == pIUsbPipe->GetType()) )
- {
- m_pIUsbOutputPipe = pIUsbPipe;
- }
- else
- {
- pIUsbPipe->DeleteWdfObject();
- }
-
- SAFE_RELEASE(pIUsbPipe); //release creation reference
- }
- }
-
- if (NULL == m_pIUsbInputPipe || NULL == m_pIUsbOutputPipe)
- {
- hr = E_UNEXPECTED;
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Input or output pipe not found, returning %!HRESULT!",
- hr
- );
- }
- }
-
- SAFE_RELEASE(pIUsbTargetFactory);
-
- return hr;
-}
-
-HRESULT
-CMyDevice::ConfigureUsbPipes(
- )
-/*++
-
-Routine Description:
-
- This routine retrieves the IDs for the bulk end points of the USB device.
-
-Arguments:
-
- None
-
-Return Value:
-
- HRESULT
---*/
-{
- HRESULT hr = S_OK;
- LONG timeout;
-
- //
- // Set timeout policies for input/output pipes
- //
-
- if (SUCCEEDED(hr))
- {
- timeout = ENDPOINT_TIMEOUT;
-
- hr = m_pIUsbInputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
- sizeof(timeout),
- &timeout);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set timeout policy for input pipe %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- timeout = ENDPOINT_TIMEOUT;
-
- hr = m_pIUsbOutputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
- sizeof(timeout),
- &timeout);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set timeout policy for output pipe %!HRESULT!",
- hr
- );
- }
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::IndicateDeviceReady(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method lights the period on the device's seven-segment display to
- indicate that the driver's PrepareHardware method has completed.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- SEVEN_SEGMENT display = {0};
-
- HRESULT hr;
-
- //
- // First read the contents of the seven segment display.
- //
-
- hr = GetSevenSegmentDisplay(&display);
-
- if (SUCCEEDED(hr))
- {
- display.Segments |= 0x08;
-
- hr = SetSevenSegmentDisplay(&display);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::GetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the contents of the buffer - the controller OR's in every
- // light that's set.
- //
-
- BarGraphState->BarsAsUChar = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_BARGRAPH_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) BarGraphState,
- sizeof(BAR_GRAPH_STATE),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
- Routine Description:
-
- This method synchronously sets the bar graph display on the OSR USB-FX2
- device using the buffers in the FxRequest as input.
-
- Arguments:
-
- FxRequest - the request to set the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesTransferred;
-
- HRESULT hr = S_OK;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_BARGRAPH_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) BarGraphState,
- sizeof(BAR_GRAPH_STATE),
- &bytesTransferred
- );
-
-
- return hr;
-}
-
-HRESULT
-CMyDevice::GetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the output buffer - the device will or in the bits for
- // the lights that are set.
- //
-
- SevenSegment->Segments = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_7SEGMENT_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SevenSegment,
- sizeof(SEVEN_SEGMENT),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- )
-/*++
-
- Routine Description:
-
- This method synchronously sets the bar graph display on the OSR USB-FX2
- device using the buffers in the FxRequest as input.
-
- Arguments:
-
- FxRequest - the request to set the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesTransferred;
-
- HRESULT hr = S_OK;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_7SEGMENT_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SevenSegment,
- sizeof(SEVEN_SEGMENT),
- &bytesTransferred
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::ReadSwitchState(
- _In_ PSWITCH_STATE SwitchState
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the output buffer - the device will or in the bits for
- // the lights that are set.
- //
-
- SwitchState->SwitchesAsUChar = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_SWITCHES,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SwitchState,
- sizeof(SWITCH_STATE),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SendControlTransferSynchronously(
- _In_ PWINUSB_SETUP_PACKET SetupPacket,
- _Inout_updates_(BufferLength) PBYTE Buffer,
- _In_ ULONG BufferLength,
- _Out_ PULONG LengthTransferred
- )
-{
- HRESULT hr = S_OK;
- HRESULT hrRequest = S_OK;
- IWDFIoRequest *pWdfRequest = NULL;
- IWDFDriver * FxDriver = NULL;
- IWDFMemory * FxMemory = NULL;
- IWDFRequestCompletionParams * FxComplParams = NULL;
- IWDFUsbRequestCompletionParams * FxUsbComplParams = NULL;
-
- *LengthTransferred = 0;
-
- hr = m_FxDevice->CreateRequest( NULL, //pCallbackInterface
- NULL, //pParentObject
- &pWdfRequest);
- hrRequest = hr;
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice->GetDriver(&FxDriver);
-
- hr = FxDriver->CreatePreallocatedWdfMemory( Buffer,
- BufferLength,
- NULL, //pCallbackInterface
- pWdfRequest, //pParetObject
- &FxMemory );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = m_pIUsbTargetDevice->FormatRequestForControlTransfer( pWdfRequest,
- SetupPacket,
- FxMemory,
- NULL); //TransferOffset
- }
-
- if (SUCCEEDED(hr))
- {
- hr = pWdfRequest->Send( m_pIUsbTargetDevice,
- WDF_REQUEST_SEND_OPTION_SYNCHRONOUS,
- 0); //Timeout
- }
-
- if (SUCCEEDED(hr))
- {
- pWdfRequest->GetCompletionParams(&FxComplParams);
-
- hr = FxComplParams->GetCompletionStatus();
- }
-
- if (SUCCEEDED(hr))
- {
- HRESULT hrQI = FxComplParams->QueryInterface(IID_PPV_ARGS(&FxUsbComplParams));
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrQI));
-
- WUDF_TEST_DRIVER_ASSERT( WdfUsbRequestTypeDeviceControlTransfer ==
- FxUsbComplParams->GetCompletedUsbRequestType() );
-
- FxUsbComplParams->GetDeviceControlTransferParameters( NULL,
- LengthTransferred,
- NULL,
- NULL );
- }
-
- SAFE_RELEASE(FxUsbComplParams);
- SAFE_RELEASE(FxComplParams);
- SAFE_RELEASE(FxMemory);
-
- if (SUCCEEDED(hrRequest))
- {
- pWdfRequest->DeleteWdfObject();
- }
- SAFE_RELEASE(pWdfRequest);
-
- SAFE_RELEASE(FxDriver);
-
- return hr;
-}
-
-WDF_IO_TARGET_STATE
-CMyDevice::GetTargetState(
- IWDFIoTarget * pTarget
- )
-{
- IWDFIoTargetStateManagement * pStateMgmt = NULL;
- WDF_IO_TARGET_STATE state;
-
- HRESULT hrQI = pTarget->QueryInterface(IID_PPV_ARGS(&pStateMgmt));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pStateMgmt));
-
- state = pStateMgmt->GetState();
-
- SAFE_RELEASE(pStateMgmt);
-
- return state;
-}
-
-VOID
-CMyDevice::ServiceSwitchChangeQueue(
- _In_ SWITCH_STATE NewState,
- _In_ HRESULT CompletionStatus,
- _In_opt_ IWDFFile *SpecificFile
- )
-/*++
-
- Routine Description:
-
- This method processes switch-state change notification requests as
- part of reading the OSR device's interrupt pipe. As each read completes
- this pulls all pending I/O off the switch change queue and completes
- each request with the current switch state.
-
- Arguments:
-
- NewState - the state of the switches
-
- CompletionStatus - all pending operations are completed with this status.
-
- SpecificFile - if provided only requests for this file object will get
- completed.
-
- Return Value:
-
- None
-
---*/
-{
- IWDFIoRequest *fxRequest;
-
- HRESULT enumHr = S_OK;
-
- do
- {
- HRESULT hr;
-
- //
- // Get the next request.
- //
-
- if (NULL != SpecificFile)
- {
- enumHr = m_SwitchChangeQueue->RetrieveNextRequestByFileObject(
- SpecificFile,
- &fxRequest
- );
- }
- else
- {
- enumHr = m_SwitchChangeQueue->RetrieveNextRequest(&fxRequest);
- }
-
- //
- // if we got one then complete it.
- //
-
- if (SUCCEEDED(enumHr))
- {
- if (SUCCEEDED(CompletionStatus))
- {
- IWDFMemory *fxMemory;
-
- //
- // First copy the result to the request buffer.
- //
-
- fxRequest->GetOutputMemory(&fxMemory );
-
- hr = fxMemory->CopyFromBuffer(0,
- &NewState,
- sizeof(SWITCH_STATE));
- fxMemory->Release();
- }
- else
- {
- hr = CompletionStatus;
- }
-
- //
- // Complete the request with the status of the copy (or the completion
- // status if that was an error).
- //
-
- if (SUCCEEDED(hr))
- {
- fxRequest->CompleteWithInformation(hr, sizeof(SWITCH_STATE));
- }
- else
- {
- fxRequest->Complete(hr);
- }
-
- fxRequest->Release();
- }
- }
- while (SUCCEEDED(enumHr));
-}
-
-HRESULT
-CMyDevice::SetPowerManagement(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method enables the idle and wake functionality
- using UMDF. UMDF has been set as the power policy
- owner (PPO) for the device stack and we are using power
- managed queues.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- HRESULT hr;
-
- //
- // Enable USB selective suspend on the device.
- //
-
- hr = m_FxDevice->AssignS0IdleSettings( IdleUsbSelectiveSuspend,
- PowerDeviceMaximum,
- IDLE_TIMEOUT_IN_MSEC,
- IdleAllowUserControl,
- WdfUseDefault);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to assign S0 idle settings for the device %!HRESULT!",
- hr
- );
- }
-
- //
- // Enable Sx wake settings
- //
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->AssignSxWakeSettings( PowerDeviceMaximum,
- WakeAllowUserControl,
- WdfUseDefault);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set Sx Wake Settings for the device %!HRESULT!",
- hr
- );
- }
-
- }
-
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnD0Entry(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- UNREFERENCED_PARAMETER(previousState);
-
- //
- // Start/Stop the I/O target if you support a continuous reader.
- // The rest of the I/O is fed through power managed queues. The queue
- // itself will stop feeding I/O to targets (and will wait for any pending
- // I/O to complete before going into low power state), hence targets
- // don�t need to be stopped/started. The continuous reader I/O is outside
- // of power managed queues so we need to Stop the I/O target on D0Exit and
- // start it on D0Entry. Please note that bulk pipe target doesn't need to
- // be stopped/started because I/O submitted to this pipe comes from power
- // managed I/O queue, which delivers I/O only in power on state.
- //
-
- m_pIoTargetInterruptPipeStateMgmt->Start();
-
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnD0Exit(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- UNREFERENCED_PARAMETER(previousState);
-
- //
- // Stop the I/O target always succeedes.
- //
- m_pIoTargetInterruptPipeStateMgmt->Stop(WdfIoTargetCancelSentIo);
- return S_OK;
-}
-
-void
-CMyDevice::OnSurpriseRemoval(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return;
-}
-
-HRESULT
-CMyDevice::OnQueryRemove(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnQueryStop(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-//
-// Self Managed Io Callbacks
-//
-
-VOID
-CMyDevice::OnSelfManagedIoCleanup(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return;
-}
-
-VOID
-CMyDevice::OnSelfManagedIoFlush(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
-
- //
- // Complete every switch change operation with an error.
- //
- ServiceSwitchChangeQueue(m_SwitchState,
- HRESULT_FROM_WIN32(ERROR_DEVICE_REMOVED),
- NULL);
-
- return;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoInit(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoRestart(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoStop(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoSuspend(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-
-
-HRESULT
-CMyDevice::ConfigContReaderForInterruptEndPoint(
- VOID
- )
-/*++
-
-Routine Description:
-
- This routine configures a continuous reader on the
- interrupt endpoint. It's called from the PrepareHarware event.
-
-Arguments:
-
-
-Return Value:
-
- HRESULT value
-
---*/
-{
- HRESULT hr, hrQI;
- IUsbTargetPipeContinuousReaderCallbackReadComplete *pOnCompletionCallback = NULL;
- IUsbTargetPipeContinuousReaderCallbackReadersFailed *pOnFailureCallback= NULL;
- IWDFUsbTargetPipe2 * pIUsbInterruptPipe2;
-
- hrQI = this->QueryInterface(IID_PPV_ARGS(&pOnCompletionCallback));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pOnCompletionCallback));
-
- hrQI = this->QueryInterface(IID_PPV_ARGS(&pOnFailureCallback));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pOnFailureCallback));
-
- hrQI = m_pIUsbInterruptPipe->QueryInterface(IID_PPV_ARGS(&pIUsbInterruptPipe2));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pIUsbInterruptPipe2));
-
- //
- // Reader requests are not posted to the target automatically.
- // Driver must explictly call WdfIoTargetStart to kick start the
- // reader. In this sample, it's done in D0Entry.
- // By defaut, framework queues two requests to the target
- // endpoint. Driver can configure up to 10 requests with the
- // parameter CONCURRENT_READS
- //
- hr = pIUsbInterruptPipe2->ConfigureContinuousReader( sizeof(m_SwitchStateBuffer),
- 0,//header
- 0,//trailer
- CONCURRENT_READS,
- NULL,
- pOnCompletionCallback,
- m_pIUsbInterruptPipe,
- pOnFailureCallback
- );
-
- if (FAILED(hr)) {
- TraceEvents(TRACE_LEVEL_ERROR, TEST_TRACE_DEVICE,
- "OsrFxConfigContReaderForInterruptEndPoint failed %!HRESULT!",
- hr);
- }
-
- SAFE_RELEASE(pOnCompletionCallback);
- SAFE_RELEASE(pOnFailureCallback);
- SAFE_RELEASE(pIUsbInterruptPipe2);
-
- return hr;
-}
-
-
-BOOL
-CMyDevice::OnReaderFailure(
- IWDFUsbTargetPipe * pPipe,
- HRESULT hrCompletion
- )
-{
- UNREFERENCED_PARAMETER(pPipe);
-
- m_InterruptReadProblem = hrCompletion;
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Failure completed with %!HRESULT!",
- hrCompletion
- );
-
- ServiceSwitchChangeQueue(m_SwitchState,
- hrCompletion,
- NULL);
-
- return TRUE;
-}
-
-VOID
-CMyDevice::OnReaderCompletion(
- IWDFUsbTargetPipe * pPipe,
- IWDFMemory * pMemory,
- SIZE_T NumBytesTransferred,
- PVOID Context
- )
-{
- WUDF_TEST_DRIVER_ASSERT(pPipe == (IWDFUsbTargetPipe *)Context);
-
- //
- // Make sure that there is data in the read packet. Depending on the device
- // specification, it is possible for it to return a 0 length read in
- // certain conditions.
- //
-
- if (NumBytesTransferred == 0) {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Zero length read occured on the Interrupt Pipe's "
- "Continuous Reader\n"
- );
- return;
- }
-
- WUDF_TEST_DRIVER_ASSERT(NumBytesTransferred == sizeof(m_SwitchState));
-
- //
- // Get the switch state
- //
-
- PVOID pBuff = pMemory->GetDataBuffer(NULL);
-
- CopyMemory(&m_SwitchState, pBuff, sizeof(m_SwitchState));
-
-
- //
- // Satisfy application request for switch change notification
- //
-
- ServiceSwitchChangeQueue(m_SwitchState,
- S_OK,
- NULL);
-
- //
- // Make sure that the request that got completed is the one that we reuse
- // Don't Delete the request because it gets reused
- //
-}
-
-
-HRESULT
-CMyDevice::GetBusTypeGuid(
- VOID
- )
-/*++
-
- Routine Description:
-
- This routine gets the device instance ID then invokes SetupDi to
- retrieve the bus type guid for the device. The bus type guid is
- stored in object.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- ULONG instanceIdCch = 0;
- PWSTR instanceId = NULL;
-
- HDEVINFO deviceInfoSet = NULL;
- SP_DEVINFO_DATA deviceInfo = {sizeof(SP_DEVINFO_DATA)};
-
- HRESULT hr;
-
- //
- // Retrieve the device instance ID.
- //
-
- hr = m_FxDevice->RetrieveDeviceInstanceId(NULL, &instanceIdCch);
-
- if (FAILED(hr))
- {
- goto Exit;
- }
-
- instanceId = new WCHAR[instanceIdCch];
-
- if (instanceId == NULL)
- {
- hr = E_OUTOFMEMORY;
- goto Exit;
- }
-
- hr = m_FxDevice->RetrieveDeviceInstanceId(instanceId, &instanceIdCch);
-
- if (FAILED(hr))
- {
- goto Exit2;
- }
-
- //
- // Call SetupDI to open the device info.
- //
-
- deviceInfoSet = SetupDiCreateDeviceInfoList(NULL, NULL);
-
- if (deviceInfoSet == INVALID_HANDLE_VALUE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit2;
- }
-
- if (SetupDiOpenDeviceInfo(deviceInfoSet,
- instanceId,
- NULL,
- 0,
- &deviceInfo) == FALSE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit3;
- }
-
- if (SetupDiGetDeviceRegistryProperty(deviceInfoSet,
- &deviceInfo,
- SPDRP_BUSTYPEGUID,
- NULL,
- (PBYTE) &m_BusTypeGuid,
- sizeof(m_BusTypeGuid),
- NULL) == FALSE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit3;
- }
-
-Exit3:
- SetupDiDestroyDeviceInfoList(deviceInfoSet);
-
-Exit2:
-
- delete[] instanceId;
-
-Exit:
-
- return hr;
-}
-
-HRESULT
-CMyDevice::PlaybackFile(
- _In_ PFILE_PLAYBACK PlayInfo,
- _In_ IWDFIoRequest *FxRequest
- )
-/*++
-
- Routine Description:
-
- This method impersonates the caller, opens the file and prints each
- character to the seven segement display.
-
- Arguments:
-
- PlayInfo - the playback info from the request.
-
- FxRequest - the request (used for impersonation)
-
- Return Value:
-
- Status
-
---*/
-
-{
- PLAYBACK_IMPERSONATION_CONTEXT context = {PlayInfo, NULL, S_OK};
- IWDFIoRequest2* fxRequest2;
-
- HRESULT hr;
-
- // Convert FxRequest to FxRequest2. No error can occur here.
- FxRequest->QueryInterface(IID_PPV_ARGS(&fxRequest2));
- _Analysis_assume_(fxRequest2 != NULL);
-
- //
- // Impersonate and open the playback file.
- //
-
- hr = FxRequest->Impersonate(
- SecurityImpersonation,
- this->QueryIImpersonateCallback(),
- &context
- );
- if (FAILED(hr))
- {
- goto exit;
- }
-
- //
- // Release the reference that was added in QueryIImpersonateCallback()
- //
- this->Release();
-
- hr = context.Hr;
-
- if (FAILED(hr))
- {
- goto exit;
- }
-
- //
- // The impersonation callback succeeded - tell code analysis that the
- // file handle is non-null
- //
-
- _Analysis_assume_(context.FileHandle != NULL);
-
- //
- // Read from the file one character at a time until we hit
- // EOF or the request is cancelled.
- //
-
- do
- {
- UCHAR c;
- ULONG bytesRead;
-
- //
- // Check for cancellation.
- //
-
- if (fxRequest2->IsCanceled())
- {
- hr = HRESULT_FROM_WIN32(ERROR_CANCELLED);
- }
- else
- {
- BOOL result;
-
- //
- // Read a character from the file and see if we can
- // encode it on the display.
- //
-
- result = ReadFile(context.FileHandle,
- &c,
- sizeof(c),
- &bytesRead,
- NULL);
-
- if (result)
- {
- SEVEN_SEGMENT segment;
- BAR_GRAPH_STATE barGraph;
-
- if (bytesRead > 0)
- {
- #pragma prefast(suppress:__WARNING_USING_UNINIT_VAR,"Above this->Release() method does not actually free 'this'")
- if(EncodeSegmentValue(c, &segment) == true)
- {
- barGraph.BarsAsUChar = c;
-
- SetSevenSegmentDisplay(&segment);
- SetBarGraphDisplay(&barGraph);
- }
-
- Sleep(PlayInfo->Delay);
- }
- else
- {
- hr = S_OK;
- break;
- }
- }
- else
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- }
- }
-
- } while(SUCCEEDED(hr));
-
- CloseHandle(context.FileHandle);
-
-exit:
-
- fxRequest2->Release();
- return hr;
-}
-
-VOID
-CMyDevice::OnImpersonate(
- _In_ PVOID Context
- )
-/*++
-
- Routine Description:
-
- This routine handles the impersonation for the PLAY FILE I/O control.
-
- Arguments:
-
- Context - pointer to the impersonation context
-
- Return Value:
-
- None
-
---*/
-{
- PPLAYBACK_IMPERSONATION_CONTEXT context;
-
- context = (PPLAYBACK_IMPERSONATION_CONTEXT) Context;
-
- context->FileHandle = CreateFile(context->PlaybackInfo->Path,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
-
- if (context->FileHandle == INVALID_HANDLE_VALUE)
- {
- DWORD error = GetLastError();
- context->Hr = HRESULT_FROM_WIN32(error);
- }
- else
- {
- context->Hr = S_OK;
- }
-
- return;
-}
-
-#define SS_LEFT (SS_TOP_LEFT | SS_BOTTOM_LEFT)
-#define SS_RIGHT (SS_TOP_RIGHT | SS_BOTTOM_RIGHT)
-
-bool
-CMyDevice::EncodeSegmentValue(
- _In_ UCHAR Character,
- _Out_ SEVEN_SEGMENT *SevenSegment
- )
-{
- UCHAR letterMap[] = {
- (SS_TOP | SS_BOTTOM_LEFT | SS_RIGHT | SS_CENTER | SS_BOTTOM), // a
- (SS_LEFT | SS_CENTER | SS_BOTTOM | SS_BOTTOM_RIGHT), // b
- (SS_CENTER | SS_BOTTOM_LEFT | SS_BOTTOM), // c
- (SS_BOTTOM_LEFT | SS_CENTER | SS_BOTTOM | SS_RIGHT), // d
- (SS_LEFT | SS_TOP | SS_CENTER | SS_BOTTOM), // e
- (SS_LEFT | SS_TOP | SS_CENTER), // f
- (SS_TOP | SS_TOP_LEFT | SS_CENTER | SS_BOTTOM | SS_RIGHT), // g
- (SS_LEFT | SS_RIGHT | SS_CENTER), // h
- (SS_BOTTOM_LEFT), // i
- (SS_BOTTOM | SS_RIGHT), // j
- (SS_LEFT | SS_CENTER | SS_BOTTOM), // k
- (SS_LEFT | SS_BOTTOM), // l
- (SS_LEFT | SS_TOP | SS_RIGHT), // m
- (SS_BOTTOM_LEFT | SS_CENTER | SS_BOTTOM_RIGHT), // n
- (SS_BOTTOM_LEFT | SS_BOTTOM_RIGHT | SS_CENTER | SS_BOTTOM), // o
- (SS_LEFT | SS_TOP | SS_CENTER | SS_TOP_RIGHT), // p
- (SS_TOP_LEFT | SS_TOP | SS_CENTER | SS_RIGHT), // q
- (SS_BOTTOM_LEFT | SS_CENTER), // r
- (SS_TOP_LEFT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_RIGHT), // s
- (SS_TOP | SS_RIGHT), // t
- (SS_LEFT | SS_RIGHT | SS_BOTTOM), // u
- (SS_BOTTOM_LEFT | SS_BOTTOM | SS_BOTTOM_RIGHT), // v
- (SS_LEFT | SS_BOTTOM | SS_BOTTOM_RIGHT), // w
- (SS_LEFT | SS_CENTER | SS_RIGHT), // x
- (SS_TOP_LEFT | SS_CENTER | SS_RIGHT), // y
- (SS_TOP_RIGHT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_LEFT), // z
- };
-
- UCHAR numberMap[] = {
- (SS_LEFT | SS_TOP | SS_BOTTOM | SS_RIGHT | SS_DOT), // 0
- (SS_RIGHT | SS_DOT), // 1
- (SS_TOP |
- SS_TOP_RIGHT | SS_CENTER | SS_BOTTOM_LEFT |
- SS_BOTTOM | SS_DOT), // 2
- (SS_TOP | SS_CENTER | SS_BOTTOM | SS_RIGHT | SS_DOT), // 3
- (SS_TOP_LEFT | SS_CENTER | SS_RIGHT | SS_DOT), // 4
- (SS_TOP_LEFT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_RIGHT | SS_DOT), // 5
- (SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_LEFT | SS_BOTTOM_RIGHT | SS_DOT), // 6
- (SS_TOP | SS_RIGHT | SS_DOT), // 7
- (SS_TOP | SS_BOTTOM | SS_CENTER |
- SS_LEFT | SS_RIGHT | SS_DOT), // 8
- (SS_TOP_LEFT | SS_TOP | SS_CENTER | SS_RIGHT | SS_DOT), // 9
- };
-
- if ((Character >= 'a') && (Character <= 'z'))
- {
- SevenSegment->Segments = letterMap[Character - 'a'];
- return true;
- }
- else if ((Character >= 'A') && (Character <= 'Z'))
- {
- SevenSegment->Segments = letterMap[Character - 'A'];
- return true;
- }
- else if ((Character >= '0') && (Character <= '9'))
- {
- SevenSegment->Segments = numberMap[Character - '0'];
- return true;
- }
- else
- {
- SevenSegment->Segments = 0;
- return false;
- }
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/Device.h b/usb/umdf_filter_umdf/umdf_driver/Device.h
deleted file mode 100644
index 641a04de..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/Device.h
+++ /dev/null
@@ -1,604 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Device.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR Fx2 sample
- driver's device callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-#include "internal.h"
-
-#define ENDPOINT_TIMEOUT 10000
-#define NUM_OSRUSB_ENDPOINTS 3
-
-//
-// Define the vendor commands supported by our device
-//
-#define USBFX2LK_READ_7SEGMENT_DISPLAY 0xD4
-#define USBFX2LK_READ_SWITCHES 0xD6
-#define USBFX2LK_READ_BARGRAPH_DISPLAY 0xD7
-#define USBFX2LK_SET_BARGRAPH_DISPLAY 0xD8
-#define USBFX2LK_IS_HIGH_SPEED 0xD9
-#define USBFX2LK_REENUMERATE 0xDA
-#define USBFX2LK_SET_7SEGMENT_DISPLAY 0xDB
-
-typedef struct {
- UCHAR Segments;
-} SEVEN_SEGMENT, *PSEVEN_SEGMENT;
-
-//
-// Context for the impersonation callback.
-//
-
-typedef struct
-{
- PFILE_PLAYBACK PlaybackInfo;
-
- HANDLE FileHandle;
-
- HRESULT Hr;
-} PLAYBACK_IMPERSONATION_CONTEXT, *PPLAYBACK_IMPERSONATION_CONTEXT;
-
-//
-// Class for the driver.
-//
-
-class CMyDevice :
- public CUnknown,
- public IPnpCallbackHardware,
- public IPnpCallback,
- public IPnpCallbackSelfManagedIo,
- public IUsbTargetPipeContinuousReaderCallbackReadersFailed,
- public IUsbTargetPipeContinuousReaderCallbackReadComplete,
- public IImpersonateCallback
-{
-//
-// Private data members.
-//
-private:
- //
- // Weak reference to framework device
- // Use IWDFDevice2 so we can set power policy settings
- //
- IWDFDevice2 *m_FxDevice;
-
- //
- // Weak reference to the control queue
- //
- PCMyReadWriteQueue m_ReadWriteQueue;
-
- //
- // Weak reference to the control queue
- //
- PCMyControlQueue m_ControlQueue;
-
- //
- // The bus type for this device (used here for
- // illustrative purposes only)
- //
-
- GUID m_BusTypeGuid;
-
- //
- // USB Device I/O Target
- //
- IWDFUsbTargetDevice * m_pIUsbTargetDevice;
-
- //
- // USB Interface
- //
- IWDFUsbInterface * m_pIUsbInterface;
-
- //
- // USB Input pipe for Reads
- //
- IWDFUsbTargetPipe * m_pIUsbInputPipe;
-
- //
- // USB Output pipe for writes
- //
- IWDFUsbTargetPipe * m_pIUsbOutputPipe;
-
- //
- // USB interrupt pipe
- //
- IWDFUsbTargetPipe * m_pIUsbInterruptPipe;
-
- //
- // Use I/O target state management interfaces if you are going to
- // support a continuous reader.
- //
-
- //
- // USB interrupt pipe state management
- //
- IWDFIoTargetStateManagement * m_pIoTargetInterruptPipeStateMgmt;
-
- //
- // Device Speed (Low, Full, High)
- //
- UCHAR m_Speed;
-
- //
- // Current switch state
- //
- SWITCH_STATE m_SwitchState;
-
- //
- // Request to be used for pending reads from interrupt pipe
- // (to get switch state change notifications)
- //
-
- IWDFIoRequest * m_RequestForPendingRead;
-
- //
- // If reads stopped because of a transient problem, the error status
- // is stored here.
- //
-
- HRESULT m_InterruptReadProblem;
-
- //
- // Switch state buffer - this might hold the transient value
- // m_SwitchState holds stable value of the switch state
- //
- SWITCH_STATE m_SwitchStateBuffer;
-
- //
- // A manual queue to hold requests for changes in the I/O switch state.
- //
-
- IWDFIoQueue * m_SwitchChangeQueue;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyDevice(
- VOID
- ) :
- m_FxDevice(NULL),
- m_ControlQueue(NULL),
- m_ReadWriteQueue(NULL),
- m_SwitchChangeQueue(NULL),
- m_pIUsbTargetDevice(NULL),
- m_pIUsbInterface(NULL),
- m_pIUsbInputPipe(NULL),
- m_pIUsbOutputPipe(NULL),
- m_pIUsbInterruptPipe(NULL),
- m_Speed(0),
- m_InterruptReadProblem(S_OK),
- m_RequestForPendingRead(NULL),
- m_pIoTargetInterruptPipeStateMgmt(NULL)
- {
- ZeroMemory(&m_BusTypeGuid, sizeof(m_BusTypeGuid));
- }
-
- ~CMyDevice(
- );
-
- HRESULT
- Initialize(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- //
- // Helper methods
- //
-
- HRESULT
- GetBusTypeGuid(
- VOID
- );
-
- HRESULT
- CreateUsbIoTargets(
- VOID
- );
-
-
- HRESULT
- ConfigureUsbPipes(
- );
-
- HRESULT
- SetPowerManagement(
- VOID
- );
-
- HRESULT
- IndicateDeviceReady(
- VOID
- );
-
- //
- // Helper functions
- //
-
- HRESULT
- SendControlTransferSynchronously(
- _In_ PWINUSB_SETUP_PACKET SetupPacket,
- _Inout_updates_(BufferLength) PBYTE Buffer,
- _In_ ULONG BufferLength,
- _Out_ PULONG LengthTransferred
- );
-
- static
- WDF_IO_TARGET_STATE
- GetTargetState(
- IWDFIoTarget * pTarget
- );
-
- VOID
- ServiceSwitchChangeQueue(
- _In_ SWITCH_STATE NewState,
- _In_ HRESULT CompletionStatus,
- _In_opt_ IWDFFile *SpecificFile
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit,
- _Out_ PCMyDevice *Device
- );
-
- IWDFDevice *
- GetFxDevice(
- VOID
- )
- {
- return m_FxDevice;
- }
-
- HRESULT
- Configure(
- VOID
- );
-
- IPnpCallback *
- QueryIPnpCallback(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallback *>(this);
- }
-
- IPnpCallbackHardware *
- QueryIPnpCallbackHardware(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallbackHardware *>(this);
- }
-
- IPnpCallbackSelfManagedIo *
- QueryIPnpCallbackSelfManagedIo(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallbackSelfManagedIo *>(this);
- }
-
-
- IUsbTargetPipeContinuousReaderCallbackReadersFailed *
- QueryContinousReaderFailureCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IUsbTargetPipeContinuousReaderCallbackReadersFailed *>(this);
- }
-
- IUsbTargetPipeContinuousReaderCallbackReadComplete *
- QueryContinousReaderCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IUsbTargetPipeContinuousReaderCallbackReadComplete *>(this);
- }
-
- IImpersonateCallback *
- QueryIImpersonateCallback(
- VOID
- )
- {
- AddRef();
- return static_cast<IImpersonateCallback *>(this);
- }
-
- HRESULT
- GetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- );
-
- HRESULT
- SetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- );
-
- HRESULT
- GetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- );
-
- HRESULT
- SetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- );
-
- HRESULT
- ReadSwitchState(
- _In_ PSWITCH_STATE SwitchState
- );
-
- bool
- EncodeSegmentValue(
- _In_ UCHAR Character,
- _Out_ SEVEN_SEGMENT *SevenSegment
- );
-
- HRESULT
- PlaybackFile(
- _In_ PFILE_PLAYBACK PlaybackInfo,
- _In_ IWDFIoRequest *FxRequest
- );
-
- //
- //returns a weak reference to the target USB device
- //DO NOT release it
- //
- IWDFUsbTargetDevice *
- GetUsbTargetDevice(
- )
- {
- return m_pIUsbTargetDevice;
- }
-
- //
- //returns a weak reference to input pipe
- //DO NOT release it
- //
- IWDFUsbTargetPipe *
- GetInputPipe(
- )
- {
- return m_pIUsbInputPipe;
- }
-
- //
- //returns a weak reference to output pipe
- //DO NOT release it
- //
- IWDFUsbTargetPipe *
- GetOutputPipe(
- )
- {
- return m_pIUsbOutputPipe;
- }
-
- IWDFIoQueue *
- GetSwitchChangeQueue(
- VOID
- )
- {
- return m_SwitchChangeQueue;
- }
-
- PSWITCH_STATE
- GetCurrentSwitchState(
- VOID
- )
- {
- return &m_SwitchState;
- }
-
-
- HRESULT
- ConfigContReaderForInterruptEndPoint(
- VOID
- );
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
- //
- // IPnpCallbackHardware
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnPrepareHardware(
- _In_ IWDFDevice *FxDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnReleaseHardware(
- _In_ IWDFDevice *FxDevice
- );
-
-
- //
- // IPnpCallback
- //
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnD0Entry(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnD0Exit(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- );
-
- virtual
- void
- STDMETHODCALLTYPE
- OnSurpriseRemoval(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnQueryRemove(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnQueryStop(
- _In_ IWDFDevice* pWdfDevice
- );
-
- //
- // IPnpCallbackSelfManagedIo
- //
- virtual
- VOID
- STDMETHODCALLTYPE
- OnSelfManagedIoCleanup(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnSelfManagedIoFlush(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoInit(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoRestart(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoStop(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoSuspend(
- _In_ IWDFDevice* pWdfDevice
- );
-
- //
- // IUsbTargetPipeContinuousReaderCallbackReadersFailed
- //
- virtual
- BOOL
- STDMETHODCALLTYPE
- OnReaderFailure(
- IWDFUsbTargetPipe * pPipe,
- HRESULT hrCompletion
- );
-
- //
- // IUsbTargetPipeContinuousReaderCallbackReadComplete
- //
- virtual
- VOID
- STDMETHODCALLTYPE
- OnReaderCompletion(
- IWDFUsbTargetPipe * pPipe,
- IWDFMemory * pMemory,
- SIZE_T NumBytesTransferred,
- PVOID Context
- );
-
- // IImpersonateCallback
- virtual
- VOID
- STDMETHODCALLTYPE
- OnImpersonate(
- _In_ PVOID Context
- );
-};
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/Driver.cpp b/usb/umdf_filter_umdf/umdf_driver/Driver.cpp
deleted file mode 100644
index d6635242..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/Driver.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Driver.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2 driver's
- core driver callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "driver.tmh"
-
-HRESULT
-CMyDriver::CreateInstance(
- _Out_ PCMyDriver *Driver
- )
-/*++
-
- Routine Description:
-
- This static method is invoked in order to create and initialize a new
- instance of the driver class. The caller should arrange for the object
- to be released when it is no longer in use.
-
- Arguments:
-
- Driver - a location to store a referenced pointer to the new instance
-
- Return Value:
-
- S_OK if successful, or error otherwise.
-
---*/
-{
- PCMyDriver driver;
- HRESULT hr;
-
- //
- // Allocate the callback object.
- //
-
- driver = new CMyDriver();
-
- if (NULL == driver)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the callback object.
- //
-
- hr = driver->Initialize();
-
- if (SUCCEEDED(hr))
- {
- //
- // Store a pointer to the new, initialized object in the output
- // parameter.
- //
-
- *Driver = driver;
- }
- else
- {
-
- //
- // Release the reference on the driver object to get it to delete
- // itself.
- //
-
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDriver::Initialize(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called to initialize a newly created driver callback object
- before it is returned to the creator. Unlike the constructor, the
- Initialize method contains operations which could potentially fail.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- return S_OK;
-}
-
-HRESULT
-CMyDriver::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This method returns a pointer to the requested interface on the callback
- object..
-
- Arguments:
-
- InterfaceId - the IID of the interface to query/reference
-
- Interface - a location to store the interface pointer.
-
- Return Value:
-
- S_OK if the interface is supported.
- E_NOINTERFACE if it is not supported.
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IDriverEntry)))
- {
- *Interface = QueryIDriverEntry();
- return S_OK;
- }
- else
- {
- return CUnknown::QueryInterface(InterfaceId, Interface);
- }
-}
-
-HRESULT
-CMyDriver::OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- The FX invokes this method when it wants to install our driver on a device
- stack. This method creates a device callback object, then calls the Fx
- to create an Fx device object and associate the new callback object with
- it.
-
- Arguments:
-
- FxWdfDriver - the Fx driver object.
-
- FxDeviceInit - the initialization information for the device.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr;
-
- PCMyDevice device = NULL;
-
- //
- // TODO: Do any per-device initialization (reading settings from the
- // registry for example) that's necessary before creating your
- // device callback object here. Otherwise you can leave such
- // initialization to the initialization of the device event
- // handler.
- //
-
- //
- // Create a new instance of our device callback object
- //
-
- hr = CMyDevice::CreateInstance(FxWdfDriver, FxDeviceInit, &device);
-
- //
- // TODO: Change any per-device settings that the object exposes before
- // calling Configure to let it complete its initialization.
- //
-
- //
- // If that succeeded then call the device's construct method. This
- // allows the device to create any queues or other structures that it
- // needs now that the corresponding fx device object has been created.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = device->Configure();
- }
-
- //
- // Release the reference on the device callback object now that it's been
- // associated with an fx device object.
- //
-
- if (NULL != device)
- {
- device->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_filter_umdf/umdf_driver/Driver.h b/usb/umdf_filter_umdf/umdf_driver/Driver.h
deleted file mode 100644
index d9cafb4e..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/Driver.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Driver.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR Fx2 sample's
- driver callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// This class handles driver events for the OSR Fx2 sample. In particular
-// it supports the OnDeviceAdd event, which occurs when the driver is called
-// to setup per-device handlers for a new device stack.
-//
-
-class CMyDriver : public CUnknown, public IDriverEntry
-{
-//
-// Private data members.
-//
-private:
-
-//
-// Private methods.
-//
-private:
-
- //
- // Returns a refernced pointer to the IDriverEntry interface.
- //
-
- IDriverEntry *
- QueryIDriverEntry(
- VOID
- )
- {
- AddRef();
- return static_cast<IDriverEntry*>(this);
- }
-
- HRESULT
- Initialize(
- VOID
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _Out_ PCMyDriver *Driver
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IDriverEntry methods
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnInitialize(
- _In_ IWDFDriver *FxWdfDriver
- )
- {
- UNREFERENCED_PARAMETER(FxWdfDriver);
-
- return S_OK;
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnDeinitialize(
- _In_ IWDFDriver *FxWdfDriver
- )
- {
- UNREFERENCED_PARAMETER(FxWdfDriver);
-
- return;
- }
-
- //
- // IUnknown methods.
- //
- // We have to implement basic ones here that redirect to the
- // base class becuase of the multiple inheritance.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.ctl b/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.ctl
deleted file mode 100644
index 4dab56ae..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.ctl
+++ /dev/null
@@ -1 +0,0 @@
-da5fbdfd-1eae-4ecf-b426-a3818f325ddb WudfOsrUsbFx2TraceGuid
diff --git a/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.rc b/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.rc
deleted file mode 100644
index 36f10ea9..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/OsrUsbFx2.rc
+++ /dev/null
@@ -1,21 +0,0 @@
-//---------------------------------------------------------------------------
-// OsrUsbDevice.rc
-//
-// Copyright (c) Microsoft Corporation, All Rights Reserved
-//---------------------------------------------------------------------------
-
-
-#include <windows.h>
-#include <ntverp.h>
-
-//
-// TODO: Change the file description and file names to match your binary.
-//
-
-#define VER_FILETYPE VFT_DLL
-#define VER_FILESUBTYPE VFT_UNKNOWN
-#define VER_FILEDESCRIPTION_STR "WDF:UMDF OSR USB Fx2 User-Mode Driver Sample"
-#define VER_INTERNALNAME_STR "WUDFOsrUsbFx2"
-#define VER_ORIGINALFILENAME_STR "WUDFOsrUsbFx2.dll"
-
-#include "common.ver"
diff --git a/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.cpp b/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.cpp
deleted file mode 100644
index 46144829..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.cpp
+++ /dev/null
@@ -1,425 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the read/write/ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "ReadWriteQueue.tmh"
-
-VOID
-CMyReadWriteQueue::OnCompletion(
- _In_ IWDFIoRequest* pWdfRequest,
- _In_ IWDFIoTarget* pIoTarget,
- _In_ IWDFRequestCompletionParams* pParams,
- _In_ PVOID pContext
- )
-{
- UNREFERENCED_PARAMETER(pIoTarget);
- UNREFERENCED_PARAMETER(pContext);
-
- pWdfRequest->CompleteWithInformation(
- pParams->GetCompletionStatus(),
- pParams->GetInformation()
- );
-}
-
-void
-CMyReadWriteQueue::ForwardFormattedRequest(
- _In_ IWDFIoRequest* pRequest,
- _In_ IWDFIoTarget* pIoTarget
- )
-{
- //
- //First set the completion callback
- //
-
- IRequestCallbackRequestCompletion * pCompletionCallback = NULL;
- HRESULT hrQI = this->QueryInterface(IID_PPV_ARGS(&pCompletionCallback));
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrQI) && (NULL != pCompletionCallback));
-
- pRequest->SetCompletionCallback(
- pCompletionCallback,
- NULL
- );
-
- pCompletionCallback->Release();
- pCompletionCallback = NULL;
-
- //
- //Send down the request
- //
-
- HRESULT hrSend = S_OK;
- hrSend = pRequest->Send(pIoTarget,
- 0, //flags
- 0); //timeout
-
- if (FAILED(hrSend))
- {
- pRequest->CompleteWithInformation(hrSend, 0);
- }
-
- return;
-}
-
-
-CMyReadWriteQueue::CMyReadWriteQueue(
- _In_ PCMyDevice Device
- ) :
- CMyQueue(Device)
-{
-}
-
-//
-// Queue destructor.
-// Free up the buffer, wait for thread to terminate and
-//
-
-CMyReadWriteQueue::~CMyReadWriteQueue(
- VOID
- )
-/*++
-
-Routine Description:
-
-
- IUnknown implementation of Release
-
-Aruments:
-
-
-Return Value:
-
- ULONG (reference count after Release)
-
---*/
-{
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC! Entry"
- );
-
-}
-
-
-HRESULT
-STDMETHODCALLTYPE
-CMyReadWriteQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
-
- if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackWrite)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackWrite();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackRead)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackRead();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IRequestCallbackRequestCompletion)))
- {
- hr = S_OK;
- *Object = QueryIRequestCallbackRequestCompletion();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackIoStop)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackIoStop();
- }
- else
- {
- hr = CMyQueue::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyReadWriteQueue::CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyReadWriteQueue *Queue
- )
-/*++
-
-Routine Description:
-
-
- CreateInstance creates an instance of the queue object.
-
-Aruments:
-
- ppUkwn - OUT parameter is an IUnknown interface to the queue object
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- PCMyReadWriteQueue queue;
- HRESULT hr = S_OK;
-
- queue = new CMyReadWriteQueue(Device);
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Call the queue callback object to initialize itself. This will create
- // its partner queue framework object.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize();
- }
-
- if (SUCCEEDED(hr))
- {
- *Queue = queue;
- }
- else
- {
- SAFE_RELEASE(queue);
- }
-
- return hr;
-}
-
-HRESULT
-CMyReadWriteQueue::Initialize(
- )
-{
- HRESULT hr;
-
- //
- // First initialize the base class. This will create the partner FxIoQueue
- // object and setup automatic forwarding of I/O controls.
- //
-
- hr = __super::Initialize(WdfIoQueueDispatchParallel,
- true,
- true);
-
- //
- // return the status.
- //
-
- return hr;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnWrite(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T BytesToWrite
- )
-/*++
-
-Routine Description:
-
-
- Write dispatch routine
- IQueueCallbackWrite
-
-Aruments:
-
- pWdfQueue - Framework Queue instance
- pWdfRequest - Framework Request instance
- BytesToWrite - Lenth of bytes in the write buffer
-
- Allocate and copy data to local buffer
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Queue %p Request %p BytesToTransfer %d\n",
- this,
- pWdfRequest,
- (ULONG)(ULONG_PTR)BytesToWrite
- );
-
- HRESULT hr = S_OK;
- IWDFMemory * pInputMemory = NULL;
- IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
-
- pWdfRequest->GetInputMemory(&pInputMemory);
-
- hr = pOutputPipe->FormatRequestForWrite(
- pWdfRequest,
- NULL, //pFile
- pInputMemory,
- NULL, //Memory offset
- NULL //DeviceOffset
- );
-
- if (FAILED(hr))
- {
- pWdfRequest->Complete(hr);
- }
- else
- {
- ForwardFormattedRequest(pWdfRequest, pOutputPipe);
- }
-
- SAFE_RELEASE(pInputMemory);
-
- return;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnRead(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T BytesToRead
- )
-/*++
-
-Routine Description:
-
-
- Read dispatch routine
- IQueueCallbackRead
-
-Aruments:
-
- pWdfQueue - Framework Queue instance
- pWdfRequest - Framework Request instance
- BytesToRead - Lenth of bytes in the read buffer
-
- Copy available data into the read buffer
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Queue %p Request %p BytesToTransfer %d\n",
- this,
- pWdfRequest,
- (ULONG)(ULONG_PTR)BytesToRead
- );
-
- HRESULT hr = S_OK;
- IWDFMemory * pOutputMemory = NULL;
-
- pWdfRequest->GetOutputMemory(&pOutputMemory);
-
- hr = m_Device->GetInputPipe()->FormatRequestForRead(
- pWdfRequest,
- NULL, //pFile
- pOutputMemory,
- NULL, //Memory offset
- NULL //DeviceOffset
- );
-
- if (FAILED(hr))
- {
- pWdfRequest->Complete(hr);
- }
- else
- {
- ForwardFormattedRequest(pWdfRequest, m_Device->GetInputPipe());
- }
-
- SAFE_RELEASE(pOutputMemory);
-
- return;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnIoStop(
- _In_ IWDFIoQueue * pWdfQueue,
- _In_ IWDFIoRequest * pWdfRequest,
- _In_ ULONG ActionFlags
- )
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
-
- //
- // The driver owns the request and no locking constraint is safe for
- // the queue callbacks
- //
- if (ActionFlags == WdfRequestStopActionSuspend )
- {
- IWDFIoRequest2 * request2 = NULL;
- HRESULT hr;
-
- hr = pWdfRequest->QueryInterface(IID_PPV_ARGS(&request2));
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Failed to QI for IWDFIoRequest2: %!hresult!",
- hr);
- return;
- }
-
- request2->StopAcknowledge(FALSE); //don't requeue
- SAFE_RELEASE(request2);
- }
- else if(ActionFlags == WdfRequestStopActionPurge)
- {
- //
- // Cancel the sent request since we are asked to purge the request
- //
-
- pWdfRequest->CancelSentRequest();
- }
-
- return;
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.h b/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.h
deleted file mode 100644
index 4f1a98c1..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/ReadWriteQueue.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.h
-
-Abstract:
-
- This file defines the queue callback interface.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-
-#define MAX_TRANSFER_SIZE(x) 64*1024*1024
-
-//
-// Queue Callback Object.
-//
-
-class CMyReadWriteQueue :
- public IQueueCallbackRead,
- public IQueueCallbackWrite,
- public IRequestCallbackRequestCompletion,
- public IQueueCallbackIoStop,
- public CMyQueue
-{
-protected:
- HRESULT
- Initialize(
- );
-
- void
- ForwardFormattedRequest(
- _In_ IWDFIoRequest* pRequest,
- _In_ IWDFIoTarget* pIoTarget
- );
-
-public:
-
- CMyReadWriteQueue(
- _In_ PCMyDevice Device
- );
-
- virtual ~CMyReadWriteQueue();
-
- static
- HRESULT
- CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyReadWriteQueue *Queue
- );
-
- HRESULT
- Configure(
- VOID
- )
- {
- return CMyQueue::Configure();
- }
-
- IQueueCallbackWrite *
- QueryIQueueCallbackWrite(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackWrite *>(this);
- }
-
- IQueueCallbackRead *
- QueryIQueueCallbackRead(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackRead *>(this);
- }
-
- IRequestCallbackRequestCompletion *
- QueryIRequestCallbackRequestCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IRequestCallbackRequestCompletion *>(this);
- }
-
- IQueueCallbackIoStop*
- QueryIQueueCallbackIoStop(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackIoStop *>(this);
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
-
- //
- // Wdf Callbacks
- //
-
- //
- // IQueueCallbackWrite
- //
- STDMETHOD_ (void, OnWrite)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T NumOfBytesToWrite
- );
-
- //
- // IQueueCallbackRead
- //
- STDMETHOD_ (void, OnRead)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T NumOfBytesToRead
- );
-
- //
- //IRequestCallbackRequestCompletion
- //
-
- STDMETHOD_ (void, OnCompletion)(
- _In_ IWDFIoRequest* pWdfRequest,
- _In_ IWDFIoTarget* pIoTarget,
- _In_ IWDFRequestCompletionParams* pParams,
- _In_ PVOID pContext
- );
-
- //
- //IQueueCallbackIoStop
- //
-
- STDMETHOD_ (void, OnIoStop)(
- _In_ IWDFIoQueue * pWdfQueue,
- _In_ IWDFIoRequest * pWdfRequest,
- _In_ ULONG ActionFlags
- );
-
-};
diff --git a/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj b/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj
deleted file mode 100644
index d9258176..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <UMDF_VERSION_MAJOR>1</UMDF_VERSION_MAJOR>
- <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
- <SupportsPackaging>false</SupportsPackaging>
- <RequiresPackageProject>true</RequiresPackageProject>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{87BFB278-0771-439F-893D-89376B83F7F0}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems">
- <ClCompile Include="dllsup.cpp; comsup.cpp; driver.cpp; device.cpp; queue.cpp; ControlQueue.cpp; ReadWriteQueue.cpp">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </ClCompile>
- <OtherWpp Include="OsrUsbFx2.rc">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </OtherWpp>
- </ItemGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFx2.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inf" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj.Filters b/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj.Filters
deleted file mode 100644
index 372badf0..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/WUDFOsrUsbFx2.vcxproj.Filters
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{F8E1CCD2-AADC-44B5-B631-5C6E6D74CFCD}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{0E050956-9FA9-495C-9F9F-D663EFA3A344}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{49CD21A6-260A-471B-B532-9E9E23F6195F}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{A942026F-83A0-4223-881A-29732777F22C}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="comsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="ControlQueue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="device.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dllsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="driver.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="queue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="ReadWriteQueue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <None Include="exports.def">
- <Filter>Source Files</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFx2.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/umdf_driver/comsup.cpp b/usb/umdf_filter_umdf/umdf_driver/comsup.cpp
deleted file mode 100644
index 2f14f588..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/comsup.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.cpp
-
-Abstract:
-
- This module contains implementations for the functions and methods
- used for providing COM support.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "comsup.tmh"
-
-//
-// Implementation of CUnknown methods.
-//
-
-CUnknown::CUnknown(
- VOID
- ) : m_ReferenceCount(1)
-/*++
-
- Routine Description:
-
- Constructor for an instance of the CUnknown class. This simply initializes
- the reference count of the object to 1. The caller is expected to
- call Release() if it wants to delete the object once it has been allocated.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- // do nothing.
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CUnknown::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method provides the basic support for query interface on CUnknown.
- If the interface requested is IUnknown it references the object and
- returns an interface pointer. Otherwise it returns an error.
-
- Arguments:
-
- InterfaceId - the IID being requested
-
- Object - a location to store the interface pointer to return.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IUnknown)))
- {
- *Object = QueryIUnknown();
- return S_OK;
- }
- else
- {
- *Object = NULL;
- return E_NOINTERFACE;
- }
-}
-
-IUnknown *
-CUnknown::QueryIUnknown(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IUnknown interface.
-
- This allows other methods to convert a CUnknown pointer into an IUnknown
- pointer without a typecast and without calling QueryInterface and dealing
- with the return value.
-
- Arguments:
-
- None
-
- Return Value:
-
- A pointer to the object's IUnknown interface.
-
---*/
-{
- AddRef();
- return static_cast<IUnknown *>(this);
-}
-
-ULONG
-STDMETHODCALLTYPE
-CUnknown::AddRef(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method adds one to the object's reference count.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. The caller should only use this for debugging
- as the object's actual reference count can change while the caller
- examines the return value.
-
---*/
-{
- return InterlockedIncrement(&m_ReferenceCount);
-}
-
-_Use_decl_annotations_
-ULONG
-STDMETHODCALLTYPE
-CUnknown::Release(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method subtracts one to the object's reference count. If the count
- goes to zero, this method deletes the object.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. If the caller uses this value it should only be
- to check for zero (i.e. this call caused or will cause deletion) or
- non-zero (i.e. some other call may have caused deletion, but this one
- didn't).
-
---*/
-{
- ULONG count = InterlockedDecrement(&m_ReferenceCount);
-
- if (count == 0)
- {
- delete this;
- }
- return count;
-}
-
-//
-// Implementation of CClassFactory methods.
-//
-
-//
-// Define storage for the factory's static lock count variable.
-//
-
-LONG CClassFactory::s_LockCount = 0;
-
-IClassFactory *
-CClassFactory::QueryIClassFactory(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IClassFactory interface.
-
- This allows other methods to convert a CClassFactory pointer into an
- IClassFactory pointer without a typecast and without dealing with the
- return value QueryInterface.
-
- Arguments:
-
- None
-
- Return Value:
-
- A referenced pointer to the object's IClassFactory interface.
-
---*/
-{
- AddRef();
- return static_cast<IClassFactory *>(this);
-}
-
-HRESULT
-CClassFactory::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method attempts to retrieve the requested interface from the object.
-
- If the interface is found then the reference count on that interface (and
- thus the object itself) is incremented.
-
- Arguments:
-
- InterfaceId - the interface the caller is requesting.
-
- Object - a location to store the interface pointer.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- //
- // This class only supports IClassFactory so check for that.
- //
-
- if (IsEqualIID(InterfaceId, __uuidof(IClassFactory)))
- {
- *Object = QueryIClassFactory();
- return S_OK;
- }
- else
- {
- //
- // See if the base class supports the interface.
- //
-
- return CUnknown::QueryInterface(InterfaceId, Object);
- }
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::CreateInstance(
- _In_opt_ IUnknown * /* OuterObject */,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This COM method is the factory routine - it creates instances of the driver
- callback class and returns the specified interface on them.
-
- Arguments:
-
- OuterObject - only used for aggregation, which our driver callback class
- does not support.
-
- InterfaceId - the interface ID the caller would like to get from our
- new object.
-
- Object - a location to store the referenced interface pointer to the new
- object.
-
- Return Value:
-
- Status.
-
---*/
-{
- HRESULT hr;
-
- PCMyDriver driver;
-
- *Object = NULL;
-
- hr = CMyDriver::CreateInstance(&driver);
-
- if (SUCCEEDED(hr))
- {
- hr = driver->QueryInterface(InterfaceId, Object);
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::LockServer(
- _In_ BOOL Lock
- )
-/*++
-
- Routine Description:
-
- This COM method can be used to keep the DLL in memory. However since the
- driver's DllCanUnloadNow function always returns false, this has little
- effect. Still it tracks the number of lock and unlock operations.
-
- Arguments:
-
- Lock - Whether the caller wants to lock or unlock the "server"
-
- Return Value:
-
- S_OK
-
---*/
-{
- if (Lock)
- {
- InterlockedIncrement(&s_LockCount);
- }
- else
- {
- InterlockedDecrement(&s_LockCount);
- }
- return S_OK;
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_driver/comsup.h b/usb/umdf_filter_umdf/umdf_driver/comsup.h
deleted file mode 100644
index 167b21ff..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/comsup.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.h
-
-Abstract:
-
- This module contains classes and functions use for providing COM support
- code.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Forward type declarations. They are here rather than in internal.h as
-// you only need them if you choose to use these support classes.
-//
-
-typedef class CUnknown *PCUnknown;
-typedef class CClassFactory *PCClassFactory;
-
-//
-// Base class to implement IUnknown. You can choose to derive your COM
-// classes from this class, or simply implement IUnknown in each of your
-// classes.
-//
-
-class CUnknown : public IUnknown
-{
-
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The reference count for this object. Initialized to 1 in the
- // constructor.
- //
-
- LONG m_ReferenceCount;
-
-//
-// Protected data members and methods. These are accessible by the subclasses
-// but not by other classes.
-//
-protected:
-
- //
- // The constructor and destructor are protected to ensure that only the
- // subclasses of CUnknown can create and destroy instances.
- //
-
- CUnknown(
- VOID
- );
-
- //
- // The destructor MUST be virtual. Since any instance of a CUnknown
- // derived class should only be deleted from within CUnknown::Release,
- // the destructor MUST be virtual or only CUnknown::~CUnknown will get
- // invoked on deletion.
- //
- // If you see that your CMyDevice specific destructor is never being
- // called, make sure you haven't deleted the virtual destructor here.
- //
-
- virtual
- ~CUnknown(
- VOID
- )
- {
- // Do nothing
- }
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IUnknown *
- QueryIUnknown(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- );
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
-
-//
-// Class factory support class. Create an instance of this from your
-// DllGetClassObject method and modify the implementation to create
-// an instance of your driver event handler class.
-//
-
-class CClassFactory : public CUnknown, public IClassFactory
-{
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The lock count. This is shared across all instances of IClassFactory
- // and can be queried through the public IsLocked method.
- //
-
- static LONG s_LockCount;
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IClassFactory *
- QueryIClassFactory(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
- //
- // IClassFactory methods.
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- CreateInstance(
- _In_opt_ IUnknown *OuterObject,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- LockServer(
- _In_ BOOL Lock
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_driver/dllsup.cpp b/usb/umdf_filter_umdf/umdf_driver/dllsup.cpp
deleted file mode 100644
index 7fda91e4..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/dllsup.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- dllsup.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2
- Driver's entry point and its exported functions for providing COM support.
-
- This module can be copied without modification to a new UMDF driver. It
- depends on some of the code in comsup.cpp & comsup.h to handle DLL
- registration and creating the first class factory.
-
- This module is dependent on the following defines:
-
- MYDRIVER_TRACING_ID - A wide string passed to WPP when initializing
- tracing. For example the driver uses
- L"Microsoft\\UMDF\\OsrUsb"
-
- MYDRIVER_CLASS_ID - A GUID encoded in struct format used to
- initialize the driver's ClassID.
-
- These are defined in internal.h for this sample. If you choose
- to use a different primary include file, you should ensure they are
- defined there as well.
-
-Environment:
-
- WDF User-Mode Driver Framework (WDF:UMDF)
-
---*/
-
-#include "internal.h"
-#include "dllsup.tmh"
-
-const GUID CLSID_MyDriverCoClass = MYDRIVER_CLASS_ID;
-
-BOOL
-WINAPI
-DllMain(
- HINSTANCE ModuleHandle,
- DWORD Reason,
- PVOID /* Reserved */
- )
-/*++
-
- Routine Description:
-
- This is the entry point and exit point for the I/O trace driver. This
- does very little as the I/O trace driver has minimal global data.
-
- This method initializes tracing, and saves the module handle away in a
- global variable so that it can be referenced should the COM registration
- code (Dll[Un]RegisterServer) be called.
-
- Arguments:
-
- ModuleHandle - the DLL handle for this module.
-
- Reason - the reason this entry point was called.
-
- Reserved - unused
-
- Return Value:
-
- TRUE
-
---*/
-{
- UNREFERENCED_PARAMETER(ModuleHandle);
-
- if (DLL_PROCESS_ATTACH == Reason)
- {
- //
- // Initialize tracing.
- //
-
- WPP_INIT_TRACING(MYDRIVER_TRACING_ID);
- }
- else if (DLL_PROCESS_DETACH == Reason)
- {
- //
- // Cleanup tracing.
- //
-
- WPP_CLEANUP();
- }
-
- return TRUE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllCanUnloadNow(
- VOID
- )
-/*++
-
- Routine Description:
-
- Called by the COM runtime when determining whether or not this module
- can be unloaded. Our answer is always "no".
-
- Arguments:
-
- None
-
- Return Value:
-
- S_FALSE
-
---*/
-{
- return S_FALSE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllGetClassObject(
- REFCLSID ClassId,
- REFIID InterfaceId,
- LPVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This routine is called by COM in order to instantiate the
- OSR Fx2 driver callback object and do an initial query interface on it.
-
- This method only creates an instance of the driver's class factory, as this
- is the minimum required to support UMDF.
-
- Arguments:
-
- ClassId - the CLSID of the object being "gotten"
-
- InterfaceId - the interface the caller wants from that object.
-
- Interface - a location to store the referenced interface pointer
-
- Return Value:
-
- S_OK if the function succeeds or error indicating the cause of the
- failure.
-
---*/
-{
- PCClassFactory factory;
-
- HRESULT hr = S_OK;
-
- *Interface = NULL;
-
- //
- // If the CLSID doesn't match that of our "coclass" (defined in the IDL
- // file) then we can't create the object the caller wants. This may
- // indicate that the COM registration is incorrect, and another CLSID
- // is referencing this drvier.
- //
-
- if (IsEqualCLSID(ClassId, CLSID_MyDriverCoClass) == false)
- {
- Trace(
- TRACE_LEVEL_ERROR,
- L"ERROR: Called to create instance of unrecognized class (%!GUID!)",
- &ClassId
- );
-
- return CLASS_E_CLASSNOTAVAILABLE;
- }
-
- //
- // Create an instance of the class factory for the caller.
- //
-
- factory = new CClassFactory();
-
- if (NULL == factory)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Query the object we created for the interface the caller wants. After
- // that we release the object. This will drive the reference count to
- // 1 (if the QI succeeded an referenced the object) or 0 (if the QI failed).
- // In the later case the object is automatically deleted.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = factory->QueryInterface(InterfaceId, Interface);
- factory->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_filter_umdf/umdf_driver/exports.def b/usb/umdf_filter_umdf/umdf_driver/exports.def
deleted file mode 100644
index 15f923d3..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/exports.def
+++ /dev/null
@@ -1,4 +0,0 @@
-; WudfOsrUsbDriver.def : Declares the module parameters.
-
-EXPORTS
- DllGetClassObject PRIVATE
diff --git a/usb/umdf_filter_umdf/umdf_driver/internal.h b/usb/umdf_filter_umdf/umdf_driver/internal.h
deleted file mode 100644
index 2d57793d..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/internal.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Internal.h
-
-Abstract:
-
- This module contains the local type definitions for the UMDF OSR Fx2
- driver sample.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
-//
-// Include the WUDF Headers
-//
-
-#include "wudfddi.h"
-
-//
-// Include SetupDi functions.
-//
-
-#include "setupapi.h"
-
-//
-// Use specstrings for in/out annotation of function parameters.
-//
-
-#include "specstrings.h"
-
-//
-// Include the safestring functions.
-//
-
-#include "strsafe.h"
-
-//
-// Get limits on common data types (ULONG_MAX for example)
-//
-
-#include "limits.h"
-
-//
-// We need usb I/O targets to talk to the OSR device.
-//
-
-#include "wudfusb.h"
-
-//
-// Include the header shared between the drivers and the test applications.
-//
-
-#include "public.h"
-
-//
-// Include the header shared between the drivers and the test applications.
-//
-
-#include "WUDFOsrUsbPublic.h"
-
-//
-// Forward definitions of classes in the other header files.
-//
-
-typedef class CMyDriver *PCMyDriver;
-typedef class CMyDevice *PCMyDevice;
-typedef class CMyQueue *PCMyQueue;
-
-typedef class CMyControlQueue *PCMyControlQueue;
-typedef class CMyReadWriteQueue *PCMyReadWriteQueue;
-
-typedef class CCancelCallback *PCCancelCallback;
-
-//
-// Define the tracing flags.
-//
-// TODO: Choose a different trace control GUID
-//
-
-#define WPP_CONTROL_GUIDS \
- WPP_DEFINE_CONTROL_GUID( \
- WudfOsrUsbFx2TraceGuid, (da5fbdfd,1eae,4ecf,b426,a3818f325ddb), \
- \
- WPP_DEFINE_BIT(MYDRIVER_ALL_INFO) \
- WPP_DEFINE_BIT(TEST_TRACE_DRIVER) \
- WPP_DEFINE_BIT(TEST_TRACE_DEVICE) \
- WPP_DEFINE_BIT(TEST_TRACE_QUEUE) \
- )
-
-#define WPP_FLAG_LEVEL_LOGGER(flag, level) \
- WPP_LEVEL_LOGGER(flag)
-
-#define WPP_FLAG_LEVEL_ENABLED(flag, level) \
- (WPP_LEVEL_ENABLED(flag) && \
- WPP_CONTROL(WPP_BIT_ ## flag).Level >= level)
-
-#define WPP_LEVEL_FLAGS_LOGGER(lvl,flags) \
- WPP_LEVEL_LOGGER(flags)
-
-#define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) \
- (WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level >= lvl)
-
-//
-// This comment block is scanned by the trace preprocessor to define our
-// Trace function.
-//
-// begin_wpp config
-// FUNC Trace{FLAG=MYDRIVER_ALL_INFO}(LEVEL, MSG, ...);
-// FUNC TraceEvents(LEVEL, FLAGS, MSG, ...);
-// end_wpp
-//
-
-//
-// Driver specific #defines
-//
-// TODO: Change these values to be appropriate for your driver.
-//
-
-#define MYDRIVER_TRACING_ID L"Microsoft\\UMDF\\OsrUsb"
-#define MYDRIVER_CLASS_ID {0x0865b2b0, 0x6b73, 0x428f, {0xa3, 0xea, 0x21, 0x72, 0x83, 0x2d, 0x6b, 0xfc}}
-
-//
-// Include the type specific headers.
-//
-
-#include "comsup.h"
-#include "driver.h"
-#include "device.h"
-#include "queue.h"
-#include "ControlQueue.h"
-#include "ReadWriteQueue.h"
-#include "list.h"
-
-__forceinline
-#ifdef _PREFAST_
-__declspec(noreturn)
-#endif
-VOID
-WdfTestNoReturn(
- VOID
- )
-{
- // do nothing.
-}
-
-#define WUDF_TEST_DRIVER_ASSERT(p) \
-{ \
- if ( !(p) ) \
- { \
- DebugBreak(); \
- WdfTestNoReturn(); \
- } \
-}
-
-#define SAFE_RELEASE(p) {if ((p)) { (p)->Release(); (p) = NULL; }}
-
-#define IDLE_TIMEOUT_IN_MSEC 10*1000
diff --git a/usb/umdf_filter_umdf/umdf_driver/queue.cpp b/usb/umdf_filter_umdf/umdf_driver/queue.cpp
deleted file mode 100644
index c56b38bb..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/queue.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the read/write/ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "queue.tmh"
-
-CMyQueue::CMyQueue(
- _In_ PCMyDevice Device
- ) :
- m_FxQueue(NULL),
- m_Device(Device)
-{
-}
-
-//
-// Queue destructor.
-// Free up the buffer, wait for thread to terminate and
-//
-
-CMyQueue::~CMyQueue(
- VOID
- )
-/*++
-
-Routine Description:
-
-
- IUnknown implementation of Release
-
-Aruments:
-
-
-Return Value:
-
- ULONG (reference count after Release)
-
---*/
-{
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC! Entry"
- );
-
-}
-
-
-HRESULT
-STDMETHODCALLTYPE
-CMyQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
- hr = CUnknown::QueryInterface(InterfaceId, Object);
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyQueue::Initialize(
- _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
- _In_ bool Default,
- _In_ bool PowerManaged
- )
-{
- IWDFIoQueue *fxQueue;
- HRESULT hr;
-
- //
- // Create the I/O Queue object.
- //
-
- {
- IUnknown *callback = QueryIUnknown();
-
- hr = m_Device->GetFxDevice()->CreateIoQueue(
- callback,
- Default,
- DispatchType,
- PowerManaged,
- FALSE,
- &fxQueue
- );
- callback->Release();
- }
-
- if (SUCCEEDED(hr))
- {
- m_FxQueue = fxQueue;
-
- //
- // Release the creation reference on the queue. This object will be
- // destroyed before the queue so we don't need to have a reference out
- // on it.
- //
-
- fxQueue->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::Configure(
- VOID
- )
-{
- return S_OK;
-}
diff --git a/usb/umdf_filter_umdf/umdf_driver/queue.h b/usb/umdf_filter_umdf/umdf_driver/queue.h
deleted file mode 100644
index 5659224b..00000000
--- a/usb/umdf_filter_umdf/umdf_driver/queue.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.h
-
-Abstract:
-
- This file defines the queue callback interface.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Queue Callback Object.
-//
-
-class CMyQueue :
- public CUnknown
-{
-protected:
- //
- // Unreferenced pointer to the partner Fx device.
- //
-
- IWDFIoQueue *m_FxQueue;
-
- //
- // Unreferenced pointer to the parent device.
- //
-
- PCMyDevice m_Device;
-
- HRESULT
- Initialize(
- _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
- _In_ bool Default,
- _In_ bool PowerManaged
- );
-
-protected:
-
- CMyQueue(
- _In_ PCMyDevice Device
- );
-
- virtual ~CMyQueue();
-
- HRESULT
- Configure(
- VOID
- );
-
-public:
-
- IWDFIoQueue *
- GetFxQueue(
- VOID
- )
- {
- return m_FxQueue;
- }
-
-
- PCMyDevice
- GetDevice(
- VOID
- )
- {
- return m_Device;
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_filter/OsrUsbFilter.rc b/usb/umdf_filter_umdf/umdf_filter/OsrUsbFilter.rc
deleted file mode 100644
index cec032d9..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/OsrUsbFilter.rc
+++ /dev/null
@@ -1,17 +0,0 @@
-//---------------------------------------------------------------------------
-// OsrUsbFilter.rc
-//
-// Copyright (c) Microsoft Corporation, All Rights Reserved
-//---------------------------------------------------------------------------
-
-
-#include <windows.h>
-#include <ntverp.h>
-
-#define VER_FILETYPE VFT_DLL
-#define VER_FILESUBTYPE VFT_UNKNOWN
-#define VER_FILEDESCRIPTION_STR "WDF:UMDF OsrUsbFilter User-Mode Driver Sample"
-#define VER_INTERNALNAME_STR "OsrUsbFilter"
-#define VER_ORIGINALFILENAME_STR "OsrUsbFilter.dll"
-
-#include "common.ver"
diff --git a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj b/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj
deleted file mode 100644
index 38798dfe..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{502F5F25-02A2-4047-8DD1-EB3DF0CC7127}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <UMDF_VERSION_MAJOR>1</UMDF_VERSION_MAJOR>
- <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
- <SupportsPackaging>false</SupportsPackaging>
- <RequiresPackageProject>true</RequiresPackageProject>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{45297D7C-3015-4F09-B0E7-469440EB9458}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems">
- <ClCompile Include="dllsup.cpp; comsup.cpp; driver.cpp; device.cpp; queue.cpp">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </ClCompile>
- <OtherWpp Include="OsrUsbFilter.rc">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </OtherWpp>
- </ItemGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>WUDFOsrUsbFilter</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFilter.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inx" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters b/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters
deleted file mode 100644
index 7a4a8f8d..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilter.vcxproj.Filters
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{3CE4C3CE-9C1D-4790-B2EF-784C3412310A}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{4A9BD78B-5831-48AA-8C22-28BEBBC8A7AB}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{ACD57755-0E18-4D24-A740-0D944929A053}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{2084F476-D6F1-485F-B9A6-581DD86D24F1}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="comsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="device.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dllsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="driver.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="queue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <None Include="exports.def">
- <Filter>Source Files</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFilter.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilterOnUmFx2Driver.inx b/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilterOnUmFx2Driver.inx
deleted file mode 100644
index 4d716e83..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/WUDFOsrUsbFilterOnUmFx2Driver.inx
+++ /dev/null
Binary files differ
diff --git a/usb/umdf_filter_umdf/umdf_filter/comsup.cpp b/usb/umdf_filter_umdf/umdf_filter/comsup.cpp
deleted file mode 100644
index 76a4b940..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/comsup.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.cpp
-
-Abstract:
-
- This module contains implementations for the functions and methods
- used for providing COM support.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "comsup.tmh"
-
-//
-// This is the number of characters in a GUID string including the trailing
-// NULL.
-//
-
-#define GUID_STRING_CCH (sizeof("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"))
-
-//
-// Implementation of CUnknown methods.
-//
-
-CUnknown::CUnknown(
- VOID
- ) : m_ReferenceCount(1)
-/*++
-
- Routine Description:
-
- Constructor for an instance of the CUnknown class. This simply initializes
- the reference count of the object to 1. The caller is expected to
- call Release() if it wants to delete the object once it has been allocated.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- // do nothing.
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CUnknown::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method provides the basic support for query interface on CUnknown.
- If the interface requested is IUnknown it references the object and
- returns an interface pointer. Otherwise it returns an error.
-
- Arguments:
-
- InterfaceId - the IID being requested
-
- Object - a location to store the interface pointer to return.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IUnknown)))
- {
- *Object = QueryIUnknown();
- return S_OK;
- }
- else
- {
- *Object = NULL;
- return E_NOINTERFACE;
- }
-}
-
-IUnknown *
-CUnknown::QueryIUnknown(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IUnknown interface.
-
- This allows other methods to convert a CUnknown pointer into an IUnknown
- pointer without a typecast and without calling QueryInterface and dealing
- with the return value.
-
- Arguments:
-
- None
-
- Return Value:
-
- A pointer to the object's IUnknown interface.
-
---*/
-{
- AddRef();
- return static_cast<IUnknown *>(this);
-}
-
-ULONG
-STDMETHODCALLTYPE
-CUnknown::AddRef(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method adds one to the object's reference count.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. The caller should only use this for debugging
- as the object's actual reference count can change while the caller
- examines the return value.
-
---*/
-{
- return InterlockedIncrement(&m_ReferenceCount);
-}
-
-_Use_decl_annotations_
-ULONG
-STDMETHODCALLTYPE
-CUnknown::Release(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method subtracts one to the object's reference count. If the count
- goes to zero, this method deletes the object.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. If the caller uses this value it should only be
- to check for zero (i.e. this call caused or will cause deletion) or
- non-zero (i.e. some other call may have caused deletion, but this one
- didn't).
-
---*/
-{
- ULONG count = InterlockedDecrement(&m_ReferenceCount);
-
- if (count == 0)
- {
- delete this;
- }
- return count;
-}
-
-//
-// Implementation of CClassFactory methods.
-//
-
-//
-// Define storage for the factory's static lock count variable.
-//
-
-LONG CClassFactory::s_LockCount = 0;
-
-IClassFactory *
-CClassFactory::QueryIClassFactory(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IClassFactory interface.
-
- This allows other methods to convert a CClassFactory pointer into an
- IClassFactory pointer without a typecast and without dealing with the
- return value QueryInterface.
-
- Arguments:
-
- None
-
- Return Value:
-
- A referenced pointer to the object's IClassFactory interface.
-
---*/
-{
- AddRef();
- return static_cast<IClassFactory *>(this);
-}
-
-HRESULT
-CClassFactory::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method attempts to retrieve the requested interface from the object.
-
- If the interface is found then the reference count on that interface (and
- thus the object itself) is incremented.
-
- Arguments:
-
- InterfaceId - the interface the caller is requesting.
-
- Object - a location to store the interface pointer.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- //
- // This class only supports IClassFactory so check for that.
- //
-
- if (IsEqualIID(InterfaceId, __uuidof(IClassFactory)))
- {
- *Object = QueryIClassFactory();
- return S_OK;
- }
- else
- {
- //
- // See if the base class supports the interface.
- //
-
- return CUnknown::QueryInterface(InterfaceId, Object);
- }
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::CreateInstance(
- _In_opt_ IUnknown * /* OuterObject */,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This COM method is the factory routine - it creates instances of the driver
- callback class and returns the specified interface on them.
-
- Arguments:
-
- OuterObject - only used for aggregation, which our driver callback class
- does not support.
-
- InterfaceId - the interface ID the caller would like to get from our
- new object.
-
- Object - a location to store the referenced interface pointer to the new
- object.
-
- Return Value:
-
- Status.
-
---*/
-{
- HRESULT hr;
-
- PCMyDriver driver;
-
- *Object = NULL;
-
- hr = CMyDriver::CreateInstance(&driver);
-
- if (SUCCEEDED(hr))
- {
- hr = driver->QueryInterface(InterfaceId, Object);
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::LockServer(
- _In_ BOOL Lock
- )
-/*++
-
- Routine Description:
-
- This COM method can be used to keep the DLL in memory. However since the
- driver's DllCanUnloadNow function always returns false, this has little
- effect. Still it tracks the number of lock and unlock operations.
-
- Arguments:
-
- Lock - Whether the caller wants to lock or unlock the "server"
-
- Return Value:
-
- S_OK
-
---*/
-{
- if (Lock)
- {
- InterlockedIncrement(&s_LockCount);
- }
- else
- {
- InterlockedDecrement(&s_LockCount);
- }
- return S_OK;
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_filter/comsup.h b/usb/umdf_filter_umdf/umdf_filter/comsup.h
deleted file mode 100644
index 890b576a..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/comsup.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.h
-
-Abstract:
-
- This module contains classes and functions use for providing COM support
- code.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Forward type declarations. They are here rather than in internal.h as
-// you only need them if you choose to use these support classes.
-//
-
-typedef class CUnknown *PCUnknown;
-typedef class CClassFactory *PCClassFactory;
-
-//
-// Base class to implement IUnknown. You can choose to derive your COM
-// classes from this class, or simply implement IUnknown in each of your
-// classes.
-//
-
-class CUnknown : public IUnknown
-{
-
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The reference count for this object. Initialized to 1 in the
- // constructor.
- //
-
- LONG m_ReferenceCount;
-
-//
-// Protected data members and methods. These are accessible by the subclasses
-// but not by other classes.
-//
-protected:
-
- //
- // The constructor and destructor are protected to ensure that only the
- // subclasses of CUnknown can create and destroy instances.
- //
-
- CUnknown(
- VOID
- );
-
- //
- // The destructor MUST be virtual. Since any instance of a CUnknown
- // derived class should only be deleted from within CUnknown::Release,
- // the destructor MUST be virtual or only CUnknown::~CUnknown will get
- // invoked on deletion.
- //
- // If you see that your CMyDevice specific destructor is never being
- // called, make sure you haven't deleted the virtual destructor here.
- //
-
- virtual
- ~CUnknown(
- VOID
- )
- {
- // Do nothing
- }
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IUnknown *
- QueryIUnknown(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- );
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
-
-//
-// Class factory support class. Create an instance of this from your
-// DllGetClassObject method and modify the implementation to create
-// an instance of your driver event handler class.
-//
-
-class CClassFactory : public CUnknown, public IClassFactory
-{
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The lock count. This is shared across all instances of IClassFactory
- // and can be queried through the public IsLocked method.
- //
-
- static LONG s_LockCount;
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IClassFactory *
- QueryIClassFactory(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // IClassFactory methods.
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- CreateInstance(
- _In_opt_ IUnknown *OuterObject,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- LockServer(
- _In_ BOOL Lock
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_filter/device.cpp b/usb/umdf_filter_umdf/umdf_filter/device.cpp
deleted file mode 100644
index 126637ce..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/device.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Device.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR USB Sample Filter driver's
- device callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "device.tmh"
-
-HRESULT
-CMyDevice::CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit,
- _Out_ PCMyDevice *Device
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR USB Sample Filter driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- PCMyDevice device;
- HRESULT hr;
-
- //
- // Allocate a new instance of the device class.
- //
-
- device = new CMyDevice();
-
- if (NULL == device)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- hr = device->Initialize(FxDriver, FxDeviceInit);
-
- if (SUCCEEDED(hr))
- {
- *Device = device;
- }
- else
- {
- device->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Initialize(
- _In_ IWDFDriver * FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object and creates the
- partner device object.
-
- The method should perform any device-specific configuration that:
- * could fail (these can't be done in the constructor)
- * must be done before the partner object is created -or-
- * can be done after the partner object is created and which aren't
- influenced by any device-level parameters the parent (the driver
- in this case) might set.
-
- Arguments:
-
- FxDeviceInit - the settings for this device.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFDevice *fxDevice;
- HRESULT hr;
-
- //
- // Configure things like the locking model before we go to create our
- // partner device.
- //
-
- //
- // We don't need device level locking since we do not keep any state
- // across the requests
- //
-
- FxDeviceInit->SetLockingConstraint(None);
-
- //
- // Mark ourselves as a filter
- //
-
- FxDeviceInit->SetFilter();
-
-
- //
- // We are a filter; we don't want to be the power policy owner
- //
-
- FxDeviceInit->SetPowerPolicyOwnership(FALSE);
-
- //
- // QueryIUnknown references the IUnknown interface that it returns
- // (which is the same as referencing the device). We pass that to
- // CreateDevice, which takes its own reference if everything works.
- //
-
- {
- IUnknown *unknown = this->QueryIUnknown();
-
- hr = FxDriver->CreateDevice(FxDeviceInit, unknown, &fxDevice);
-
- unknown->Release();
- }
-
- //
- // If that succeeded then set our FxDevice member variable.
- //
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice = fxDevice;
-
- //
- // Drop the reference we got from CreateDevice. Since this object
- // is partnered with the framework object they have the same
- // lifespan - there is no need for an additional reference.
- //
-
- fxDevice->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Configure(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called after the device callback object has been initialized
- and returned to the driver. It would setup the device's queues and their
- corresponding callback objects.
-
- Arguments:
-
- FxDevice - the framework device object for which we're handling events.
-
- Return Value:
-
- status
-
---*/
-{
- PCMyQueue defaultQueue;
-
- HRESULT hr;
-
- hr = CMyQueue::CreateInstance(m_FxDevice, &defaultQueue);
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- hr = defaultQueue->Configure();
-
- defaultQueue->Release();
-
- return hr;
-}
-
-HRESULT
-CMyDevice::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Since the OSR USB Sample Filter driver doesn't support any of the device events, this
- method simply calls the base class's BaseQueryInterface.
-
- If OSR USB Sample Filter is extended to include device event interfaces then this
- method must be changed to check the IID and return pointers to them as
- appropriate.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- return CUnknown::QueryInterface(InterfaceId, Object);
-}
diff --git a/usb/umdf_filter_umdf/umdf_filter/device.h b/usb/umdf_filter_umdf/umdf_filter/device.h
deleted file mode 100644
index f7a50b1d..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/device.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Device.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR USB Sample Filter
- driver's device callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Class for the iotrace driver.
-//
-
-class CMyDevice : public CUnknown
-{
-
-//
-// Private data members.
-//
-private:
-
- IWDFDevice *m_FxDevice;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyDevice(
- VOID
- )
- {
- m_FxDevice = NULL;
- }
-
- HRESULT
- Initialize(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit,
- _Out_ PCMyDevice *Device
- );
-
- HRESULT
- Configure(
- VOID
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_filter/dllsup.cpp b/usb/umdf_filter_umdf/umdf_filter/dllsup.cpp
deleted file mode 100644
index d71d5fe8..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/dllsup.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- dllsup.cpp
-
-Abstract:
-
- This module contains the implementation of the OSR USB Sample Filter
- Driver's entry point and its exported functions for providing COM support.
-
- This module can be copied without modification to a new UMDF driver. It
- depends on some of the code in comsup.cpp & comsup.h to handle DLL
- registration and creating the first class factory.
-
- This module is dependent on the following defines:
-
- MYDRIVER_TRACING_ID - A wide string passed to WPP when initializing
- tracing. For example the skeleton uses
- L"Microsoft\\UMDF\\Skeleton"
-
- MYDRIVER_CLASS_ID - A GUID encoded in struct format used to
- initialize the driver's ClassID.
-
- These are defined in internal.h for the OSR USB Sample Filter sample. If
- you choose to use a different primary include file, you should ensure
- they are defined there as well.
-
-Environment:
-
- WDF User-Mode Driver Framework (WDF:UMDF)
-
---*/
-
-#include "internal.h"
-#include "dllsup.tmh"
-
-const GUID CLSID_MyDriverCoClass = MYDRIVER_CLASS_ID;
-
-//
-// Global variable to hold the module handle for this DLL. Initialized during
-// DllMain and never cleared. This is used when registering and unregistering
-// the driver's COM information.
-//
-
-HINSTANCE g_ModuleHandle = NULL;
-
-BOOL
-WINAPI
-DllMain(
- HINSTANCE /* ModuleHandle */,
- DWORD Reason,
- PVOID /* Reserved */
- )
-/*++
-
- Routine Description:
-
- This is the entry point and exit point for the I/O trace driver. This
- does very little as the I/O trace driver has minimal global data.
-
- This method initializes tracing.
-
- Arguments:
-
- ModuleHandle - the DLL handle for this module.
-
- Reason - the reason this entry point was called.
-
- Reserved - unused
-
- Return Value:
-
- TRUE
-
---*/
-{
-
- if (DLL_PROCESS_ATTACH == Reason)
- {
- //
- // Initialize tracing.
- //
-
- WPP_INIT_TRACING(MYDRIVER_TRACING_ID);
- }
- else if (DLL_PROCESS_DETACH == Reason)
- {
- //
- // Cleanup tracing.
- //
-
- WPP_CLEANUP();
- }
-
- return TRUE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllGetClassObject(
- REFCLSID ClassId,
- REFIID InterfaceId,
- LPVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This routine is called by COM in order to instantiate the OSR USB Sample
- Filter driver callback object and do an initial query interface on it.
-
- This method only creates an instance of the driver's class factory, as this
- is the minimum required to support UMDF.
-
- Arguments:
-
- ClassId - the CLSID of the object being "gotten"
-
- InterfaceId - the interface the caller wants from that object.
-
- Interface - a location to store the referenced interface pointer
-
- Return Value:
-
- S_OK if the function succeeds or error indicating the cause of the
- failure.
-
---*/
-{
- PCClassFactory factory;
-
- HRESULT hr = S_OK;
-
- *Interface = NULL;
-
- //
- // If the CLSID doesn't match that of our "coclass" (defined in the IDL
- // file) then we can't create the object the caller wants. This may
- // indicate that the COM registration is incorrect, and another CLSID
- // is referencing this drvier.
- //
-
- if (IsEqualCLSID(ClassId, CLSID_MyDriverCoClass) == false)
- {
- Trace(
- TRACE_LEVEL_ERROR,
- L"ERROR: Called to create instance of unrecognized class (%!GUID!)",
- &ClassId
- );
-
- return CLASS_E_CLASSNOTAVAILABLE;
- }
-
- //
- // Create an instance of the class factory for the caller.
- //
-
- factory = new CClassFactory();
-
- if (NULL == factory)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Query the object we created for the interface the caller wants. After
- // that we release the object. This will drive the reference count to
- // 1 (if the QI succeeded an referenced the object) or 0 (if the QI failed).
- // In the later case the object is automatically deleted.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = factory->QueryInterface(InterfaceId, Interface);
- factory->Release();
- }
-
- return hr;
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_filter/driver.cpp b/usb/umdf_filter_umdf/umdf_filter/driver.cpp
deleted file mode 100644
index c5910c05..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/driver.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Driver.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR USB Sample Filter
- driver's core driver callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "driver.tmh"
-
-HRESULT
-CMyDriver::CreateInstance(
- _Out_ PCMyDriver *Driver
- )
-/*++
-
- Routine Description:
-
- This static method is invoked in order to create and initialize a new
- instance of the driver class. The caller should arrange for the object
- to be released when it is no longer in use.
-
- Arguments:
-
- Driver - a location to store a referenced pointer to the new instance
-
- Return Value:
-
- S_OK if successful, or error otherwise.
-
---*/
-{
- PCMyDriver driver;
- HRESULT hr;
-
- //
- // Allocate the callback object.
- //
-
- driver = new CMyDriver();
-
- if (NULL == driver)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the callback object.
- //
-
- hr = driver->Initialize();
-
- if (SUCCEEDED(hr))
- {
- //
- // Store a pointer to the new, initialized object in the output
- // parameter.
- //
-
- *Driver = driver;
- }
- else
- {
-
- //
- // Release the reference on the driver object to get it to delete
- // itself.
- //
-
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDriver::Initialize(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called to initialize a newly created driver callback object
- before it is returned to the creator. Unlike the constructor, the
- Initialize method contains operations which could potentially fail.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- return S_OK;
-}
-
-HRESULT
-CMyDriver::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This method returns a pointer to the requested interface on the callback
- object..
-
- Arguments:
-
- InterfaceId - the IID of the interface to query/reference
-
- Interface - a location to store the interface pointer.
-
- Return Value:
-
- S_OK if the interface is supported.
- E_NOINTERFACE if it is not supported.
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IDriverEntry)))
- {
- *Interface = QueryIDriverEntry();
- return S_OK;
- }
- else
- {
- return CUnknown::QueryInterface(InterfaceId, Interface);
- }
-}
-
-HRESULT
-CMyDriver::OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- The FX invokes this method when it wants to install our driver on a device
- stack. This method creates a device callback object, then calls the Fx
- to create an Fx device object and associate the new callback object with
- it.
-
- Arguments:
-
- FxWdfDriver - the Fx driver object.
-
- FxDeviceInit - the initialization information for the device.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr;
-
- PCMyDevice device = NULL;
-
- //
- // Create a new instance of our device callback object
- //
-
- hr = CMyDevice::CreateInstance(FxWdfDriver, FxDeviceInit, &device);
-
- //
- // If that succeeded then call the device's construct method. This
- // allows the device to create any queues or other structures that it
- // needs now that the corresponding fx device object has been created.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = device->Configure();
- }
-
- //
- // Release the reference on the device callback object now that it's been
- // associated with an fx device object.
- //
-
- if (NULL != device)
- {
- device->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_filter_umdf/umdf_filter/driver.h b/usb/umdf_filter_umdf/umdf_filter/driver.h
deleted file mode 100644
index 08f36a71..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/driver.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Driver.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR USB Sample Filter
- driver's callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// This class handles driver events for the OSR USB Sample Filter driver. In particular
-// it supports the OnDeviceAdd event, which occurs when the driver is called
-// to setup per-device handlers for a new device stack.
-//
-
-class CMyDriver : public CUnknown, public IDriverEntry
-{
-//
-// Private data members.
-//
-private:
-
-//
-// Private methods.
-//
-private:
-
- //
- // Returns a refernced pointer to the IDriverEntry interface.
- //
-
- IDriverEntry *
- QueryIDriverEntry(
- VOID
- )
- {
- AddRef();
- return static_cast<IDriverEntry*>(this);
- }
-
- HRESULT
- Initialize(
- VOID
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _Out_ PCMyDriver *Driver
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IDriverEntry methods
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnInitialize(
- _In_ IWDFDriver* /*FxWdfDriver*/
- )
- {
- return S_OK;
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnDeinitialize(
- _In_ IWDFDriver * /*FxWdfDriver*/
- )
- {
- return;
- }
-
- //
- // IUnknown methods.
- //
- // We have to implement basic ones here that redirect to the
- // base class becuase of the multiple inheritance.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-};
diff --git a/usb/umdf_filter_umdf/umdf_filter/exports.def b/usb/umdf_filter_umdf/umdf_filter/exports.def
deleted file mode 100644
index 0fc42817..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/exports.def
+++ /dev/null
@@ -1,4 +0,0 @@
-; Skeleton.def : Declares the module parameters.
-
-EXPORTS
- DllGetClassObject PRIVATE
diff --git a/usb/umdf_filter_umdf/umdf_filter/internal.h b/usb/umdf_filter_umdf/umdf_filter/internal.h
deleted file mode 100644
index 516f6d7f..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/internal.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Internal.h
-
-Abstract:
-
- This module contains the local type definitions for the UMDF OSR USB Sample Filter
- driver.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
-//
-// Include the WUDF headers
-//
-
-#include "wudfddi.h"
-
-//
-// Use specstrings for in/out annotation of function parameters.
-//
-
-#include "specstrings.h"
-
-//
-// Forward definitions of classes in the other header files.
-//
-
-typedef class CMyDriver *PCMyDriver;
-typedef class CMyDevice *PCMyDevice;
-typedef class CMyQueue *PCMyQueue;
-
-//
-// Define the tracing flags.
-//
-
-#define WPP_CONTROL_GUIDS \
- WPP_DEFINE_CONTROL_GUID( \
- MyDriverTraceControl, (73cdcaa5,ce52,43f2,aa2d,5f5a84e22213), \
- \
- WPP_DEFINE_BIT(MYDRIVER_ALL_INFO) \
- )
-
-#define WPP_FLAG_LEVEL_LOGGER(flag, level) \
- WPP_LEVEL_LOGGER(flag)
-
-#define WPP_FLAG_LEVEL_ENABLED(flag, level) \
- (WPP_LEVEL_ENABLED(flag) && \
- WPP_CONTROL(WPP_BIT_ ## flag).Level >= level)
-
-//
-// This comment block is scanned by the trace preprocessor to define our
-// Trace function.
-//
-// begin_wpp config
-// FUNC Trace{FLAG=MYDRIVER_ALL_INFO}(LEVEL, MSG, ...);
-// end_wpp
-//
-
-//
-// Driver specific #defines
-//
-
-#define MYDRIVER_TRACING_ID L"Microsoft\\UMDF\\OsrUsbFilter"
-#define MYDRIVER_COM_DESCRIPTION L"UMDF OSR USB Sample Filter Driver"
-#define MYDRIVER_CLASS_ID {0x422d8dbc, 0x520d, 0x4d7e, {0x8f, 0x53, 0x92, 0x0e, 0x5c, 0x86, 0x7e, 0x6c}}
-
-//
-// Include the type specific headers.
-//
-
-#include "comsup.h"
-#include "driver.h"
-#include "device.h"
-#include "queue.h"
-
-__forceinline
-#ifdef _PREFAST_
-__declspec(noreturn)
-#endif
-VOID
-WdfTestNoReturn(
- VOID
- )
-{
- // do nothing.
-}
-
-#define WUDF_SAMPLE_DRIVER_ASSERT(p) \
-{ \
- if ( !(p) ) \
- { \
- DebugBreak(); \
- WdfTestNoReturn(); \
- } \
-}
-
-#define SAFE_RELEASE(p) {if ((p)) { (p)->Release(); (p) = NULL; }}
diff --git a/usb/umdf_filter_umdf/umdf_filter/queue.cpp b/usb/umdf_filter_umdf/umdf_filter/queue.cpp
deleted file mode 100644
index 5642ec74..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/queue.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Queue.cpp
-
-Abstract:
-
- This module contains the implementation of the OSR USB Filter Sample driver's
- queue callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "queue.h"
-
-#include "queue.tmh"
-
-HRESULT
-CMyQueue::CreateInstance(
- _In_ IWDFDevice * FxDevice,
- _Out_ CMyQueue **Queue
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR USB Filter Sample driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- CMyQueue *queue;
-
- HRESULT hr = S_OK;
-
- //
- // Allocate a new instance of the device class.
- //
-
- queue = new CMyQueue();
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize(FxDevice);
- }
-
- if (SUCCEEDED(hr))
- {
- queue->AddRef();
- *Queue = queue;
- }
-
- if (NULL != queue)
- {
- queue->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- HRESULT hr;
-
-
- if(IsEqualIID(InterfaceId, __uuidof(IQueueCallbackDefaultIoHandler)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackDefaultIoHandler();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackWrite)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackWrite();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IRequestCallbackRequestCompletion)))
- {
- hr = S_OK;
- *Object = QueryIRequestCallbackRequestCompletion();
-
- }
- else
- {
- hr = CUnknown::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::Initialize(
- _In_ IWDFDevice *FxDevice
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object. Any operations which
- need to be performed before the caller can use the callback object, but
- which couldn't be done in the constructor becuase they could fail would
- be placed here.
-
- Arguments:
-
- FxDevice - the device which this Queue is for.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFIoQueue *fxQueue;
- HRESULT hr;
-
- //
- // Create the framework queue
- //
-
- IUnknown *unknown = QueryIUnknown();
- hr = FxDevice->CreateIoQueue(
- unknown,
- TRUE, // bDefaultQueue
- WdfIoQueueDispatchParallel,
- FALSE, // bPowerManaged
- TRUE, // bAllowZeroLengthRequests
- &fxQueue
- );
- if (FAILED(hr))
- {
- Trace(
- TRACE_LEVEL_ERROR,
- "%!FUNC!: Could not create default I/O queue, %!hresult!",
- hr
- );
- }
-
- unknown->Release();
-
- if (SUCCEEDED(hr))
- {
- m_FxQueue = fxQueue;
-
- //
- // m_FxQueue is kept as a Weak reference to framework Queue object to avoid
- // circular reference. This object's lifetime is contained within
- // framework Queue object's lifetime
- //
-
- fxQueue->Release();
- }
-
- if (SUCCEEDED(hr))
- {
- FxDevice->GetDefaultIoTarget(&m_FxIoTarget);
- }
-
- return hr;
-}
-
-void
-CMyQueue::InvertBits(
- _Inout_ IWDFMemory* FxMemory,
- _In_ SIZE_T NumBytes
- )
-/*++
-
- Routine Description:
-
- This helper method inverts bits in the buffer of an FxMemory object
-
- Arguments:
-
- FxMemory - Framework memory object whose buffer's bits are to be inverted
-
- NumBytes - Number of bytes for which bits are to be inverted
-
- Return Value:
-
- None
-
---*/
-{
- PBYTE Buffer = (PBYTE)
- FxMemory->GetDataBuffer(NULL);
-
- for (SIZE_T i = 0; i < NumBytes; i++)
- {
- memset(Buffer + i, ~(Buffer[i]), sizeof(*Buffer));
- }
-}
-
-void
-CMyQueue::OnWrite(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest,
- _In_ SIZE_T NumOfBytesToWrite
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework Queue object to deliver the Write request
- This method inverts the bits in write buffer and forwards the request down the device stack
- In case of any failure prior to ForwardRequest, it completets the request with failure
-
- Arguments:
-
- pWdfQueue - Framework Queue which is delivering the request
-
- pWdfRequest - Framework Request
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- IWDFMemory * FxInputMemory = NULL;
-
- FxRequest->GetInputMemory(&FxInputMemory);
-
- //
- // Invert bits of the buffer to be written to device
- //
-
- InvertBits(FxInputMemory, NumOfBytesToWrite);
-
- //
- // Forward request down the stack
- // When the device below completes the request we will get notified in OnComplete
- // and then we will complete the request
- //
-
- ForwardRequest(FxRequest);
-
- FxInputMemory->Release();
-}
-
-//
-// IQueueCallbackDefaultIoHandler method
-//
-
-void
-CMyQueue::OnDefaultIoHandler(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework Queue object to deliver all the I/O
- Requests for which we do not have a specific handler
- (In our case anything other than Write)
-
- Arguments:
-
- pWdfQueue - Framework Queue which is delivering the request
-
- pWdfRequest - Framework Request
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- //
- // We just forward the request down the stack
- // When the device below completes the request we will get notified in OnComplete
- // and then we will complete the request
- //
-
- ForwardRequest(FxRequest);
-}
-
-void
-CMyQueue::ForwardRequest(
- _In_ IWDFIoRequest* FxRequest
- )
-/*++
-
- Routine Description:
-
- This helper method forwards the request down the stack
-
- Arguments:
-
- pWdfRequest - Request to be forwarded
-
- Return Value:
-
- None
-
- Remarks:
-
- The request gets forwarded to the next device in the stack which can be:
- 1. Next device in user-mode stack
- 2. Top device in kernel-mode stack (Redirector's Down Device)
-
- In this routine we:
- 1. Set a completion callback
- 2. Copy request parameters to next stack location
- 3. Asynchronously send the request without any timeout
-
- When the lower request gets completed we will be notified via the
- completion callback, where we will complete our request
-
- In case of failure this routine completes the request
-
---*/
-{
- //
- //First set the completion callback
- //
-
- IRequestCallbackRequestCompletion *completionCallback =
- QueryIRequestCallbackRequestCompletion();
-
- FxRequest->SetCompletionCallback(
- completionCallback,
- NULL //pContext
- );
-
- completionCallback->Release();
-
- //
- //Copy current i/o stack locations parameters to the next stack location
- //
-
- FxRequest->FormatUsingCurrentType(
- );
-
- //
- //Send down the request
- //
- HRESULT hrSend = S_OK;
-
- hrSend = FxRequest->Send(
- m_FxIoTarget,
- 0, //No flag
- 0 //No timeout
- );
-
- if (FAILED(hrSend))
- {
- //
- //If send failed we need to complete the request with failure
- //
- FxRequest->CompleteWithInformation(hrSend, 0);
- }
-
- return;
-}
-
-void
-CMyQueue::HandleReadRequestCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoRequestCompletionParams* CompletionParams
- )
-/*++
-
- Routine Description:
-
- This helper method is called by OnCompletion method to complete Read request
- We invert the bits in the read buffer
- This is so that the client reads back the data it wrote since
- we inverted bits during write to device
-
- Arguments:
-
- FxRequest - Request object of our layer
-
- CompletionParams - Parameters with which the lower Request got completed
-
- Return Value:
-
- None
-
- Remarks:
-
- This method always completes the request since no one else would get a chance to
- complete the request
- In case of failure it completes the request with failure
-
---*/
-{
- HRESULT hrCompletion = CompletionParams->GetCompletionStatus();
- ULONG_PTR BytesRead = CompletionParams->GetInformation();
-
- //
- // Check
- // 1. whether the lower device succeeded the Request (otherwise we will just complete
- // the Request with failure
- // 2. If data read is of non-zero length, for us to bother to invert its bits
- //
-
- if (SUCCEEDED(hrCompletion) &&
- (0 != BytesRead)
- )
- {
- IWDFMemory *FxOutputMemory;
-
- FxRequest->GetOutputMemory(&FxOutputMemory );
-
- InvertBits(FxOutputMemory, BytesRead);
-
- FxOutputMemory->Release();
- }
-
- //
- // Complete the request
- //
-
- FxRequest->CompleteWithInformation(
- hrCompletion,
- BytesRead
- );
-}
-
-
-void
-CMyQueue::OnCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoTarget* FxIoTarget,
- IWDFRequestCompletionParams* CompletionParams,
- PVOID Context
- )
-/*++
-
- Routine Description:
-
- This method is called by Framework I/O Target object when
- the lower device completets the Request
-
- Arguments:
-
- pWdfRequest - Request object of our layer
-
- pIoTarget - I/O Target object invoking this callback
-
- pParams - Parameters with which the lower Request got completed
-
- Return Value:
-
- None
-
---*/
-{
- UNREFERENCED_PARAMETER(FxIoTarget);
- UNREFERENCED_PARAMETER(Context);
-
- //
- // If it is a read request, we invert the bits read since we inverted them during write
- // so that application would read the same data as it wrote
- //
-
- if (WdfRequestRead == FxRequest->GetType())
- {
- IWDFIoRequestCompletionParams * IoCompletionParams = NULL;
- HRESULT hrQI = CompletionParams->QueryInterface(IID_PPV_ARGS(&IoCompletionParams));
- WUDF_SAMPLE_DRIVER_ASSERT(SUCCEEDED(hrQI));
-
- HandleReadRequestCompletion(
- FxRequest,
- IoCompletionParams
- );
-
- SAFE_RELEASE(IoCompletionParams);
- }
- else
- {
-
- //
- // Otherwise we just complete our Request object with the same parameters
- // with which the lower Request got completed
- //
-
- FxRequest->CompleteWithInformation(
- CompletionParams->GetCompletionStatus(),
- CompletionParams->GetInformation()
- );
- }
-}
-
diff --git a/usb/umdf_filter_umdf/umdf_filter/queue.h b/usb/umdf_filter_umdf/umdf_filter/queue.h
deleted file mode 100644
index 216264e9..00000000
--- a/usb/umdf_filter_umdf/umdf_filter/queue.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Queue.h
-
-Abstract:
-
- This module contains the type definitions for the OSR USB Filter Sample
- driver's queue callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Class for the queue callbacks.
-// It implements
-// IQueueCallbackDeviceIoControl
-// IRequestCallbackRequestCompletion
-// Queue callbacks
-//
-// This class also implements IRequestCallbackRequestCompletion callback
-// to get the request completion notification when request is sent down the
-// stack. This callback can be implemented on a separate object as well.
-// This callback is implemented here only for conenience.
-//
-class CMyQueue :
- public CUnknown,
- public IQueueCallbackWrite,
- public IQueueCallbackDefaultIoHandler,
- public IRequestCallbackRequestCompletion
-{
-
-//
-// Private data members.
-//
-private:
-
- //
- // Weak reference to framework Queue object which this object implements callbacks for
- // This is kept as a weak reference to avoid circular reference
- // This object's lifetime is contained within framework Queue object's lifetime
- //
-
- IWDFIoQueue *m_FxQueue;
-
- //
- // I/O Target to which we forward requests. Represents next device in the
- // device stack
- //
-
- IWDFIoTarget *m_FxIoTarget;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyQueue() :
- m_FxQueue(NULL),
- m_FxIoTarget(NULL)
- {
- }
-
- virtual ~CMyQueue()
- {
- if (NULL != m_FxIoTarget)
- {
- m_FxIoTarget->Release();
- }
- }
-
- //
- // QueryInterface helpers
- //
-
- IRequestCallbackRequestCompletion *
- QueryIRequestCallbackRequestCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IRequestCallbackRequestCompletion*>(this);
- }
-
- IQueueCallbackWrite *
- QueryIQueueCallbackWrite(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackWrite *>(this);
- }
-
- IQueueCallbackDefaultIoHandler *
- QueryIQueueCallbackDefaultIoHandler(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackDefaultIoHandler *>(this);
- }
-
- //
- // Initialize
- //
-
- HRESULT
- Initialize(
- _In_ IWDFDevice *FxDevice
- );
-
- //
- // Helper method to forward request down the stack
- //
-
- void
- ForwardRequest(
- _In_ IWDFIoRequest *pWdfRequest
- );
-
- //
- // Helper method to inverts bits in the buffer of a framework Memory object
- //
-
- void
- InvertBits(
- _Inout_ IWDFMemory* FxMemory,
- _In_ SIZE_T NumBytes
- );
-
- //
- // Helper method to handle Read request completion
- //
-
- void
- HandleReadRequestCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoRequestCompletionParams* CompletionParams
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this class
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDevice *FxDevice,
- _Out_ CMyQueue **Queue
- );
-
-
- HRESULT
- Configure(
- VOID
- )
- {
- return S_OK;
- }
-
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // IQueueCallbackWrite method
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnWrite(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest,
- _In_ SIZE_T NumOfBytesToWrite
- );
-
-
- //
- // IQueueCallbackDefaultIoHandler method
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnDefaultIoHandler(
- _In_ IWDFIoQueue* FxQueue,
- _In_ IWDFIoRequest* FxRequest
- );
-
- //
- //IRequestCallbackRequestCompletion
- //
-
- virtual
- void
- STDMETHODCALLTYPE
- OnCompletion(
- IWDFIoRequest* FxRequest,
- IWDFIoTarget* FxIoTarget,
- IWDFRequestCompletionParams* CompletionParams,
- PVOID Context
- );
-};
-
diff --git a/usb/umdf_filter_umdf/umdf_filter_umdf.sln b/usb/umdf_filter_umdf/umdf_filter_umdf.sln
deleted file mode 100644
index 32dc6d8b..00000000
--- a/usb/umdf_filter_umdf/umdf_filter_umdf.sln
+++ /dev/null
@@ -1,59 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0
-MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package", "Package", "{23CDA216-49BA-49D6-98E9-6692D1E6D363}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Umdf_filter", "Umdf_filter", "{EF4F817D-931F-4D72-B5A5-0E0FB30F1CE0}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Umdf_driver", "Umdf_driver", "{B3DCEF35-5C54-4506-981B-31B0611116E3}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "Package\package.VcxProj", "{A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WUDFOsrUsbFilter", "umdf_filter\WUDFOsrUsbFilter.vcxproj", "{502F5F25-02A2-4047-8DD1-EB3DF0CC7127}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WUDFOsrUsbFx2", "umdf_driver\WUDFOsrUsbFx2.vcxproj", "{6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- Debug|x64 = Debug|x64
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Debug|Win32.ActiveCfg = Debug|Win32
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Debug|Win32.Build.0 = Debug|Win32
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Release|Win32.ActiveCfg = Release|Win32
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Release|Win32.Build.0 = Release|Win32
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Debug|x64.ActiveCfg = Debug|x64
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Debug|x64.Build.0 = Debug|x64
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Release|x64.ActiveCfg = Release|x64
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7}.Release|x64.Build.0 = Release|x64
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Debug|Win32.ActiveCfg = Debug|Win32
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Debug|Win32.Build.0 = Debug|Win32
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Release|Win32.ActiveCfg = Release|Win32
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Release|Win32.Build.0 = Release|Win32
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Debug|x64.ActiveCfg = Debug|x64
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Debug|x64.Build.0 = Debug|x64
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Release|x64.ActiveCfg = Release|x64
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127}.Release|x64.Build.0 = Release|x64
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Debug|Win32.ActiveCfg = Debug|Win32
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Debug|Win32.Build.0 = Debug|Win32
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Release|Win32.ActiveCfg = Release|Win32
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Release|Win32.Build.0 = Release|Win32
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Debug|x64.ActiveCfg = Debug|x64
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Debug|x64.Build.0 = Debug|x64
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Release|x64.ActiveCfg = Release|x64
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {A217E49A-2A5E-4E51-BA9E-D87D62F6E2F7} = {23CDA216-49BA-49D6-98E9-6692D1E6D363}
- {502F5F25-02A2-4047-8DD1-EB3DF0CC7127} = {EF4F817D-931F-4D72-B5A5-0E0FB30F1CE0}
- {6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98} = {B3DCEF35-5C54-4506-981B-31B0611116E3}
- EndGlobalSection
-EndGlobal
diff --git a/usb/umdf_fx2/README.md b/usb/umdf_fx2/README.md
deleted file mode 100644
index f95374f2..00000000
--- a/usb/umdf_fx2/README.md
+++ /dev/null
@@ -1,373 +0,0 @@
----
-page_type: sample
-description: "A UMDF driver for the OSR USB-FX2 device that includes a test application, sample device metadata, and supports impersonation and idle power down."
-languages:
-- cpp
-products:
-- windows
-- windows-wdk
----
-
-# Sample UMDF Function Driver for OSR USB-FX2 (UMDF Version 1)
-
-The umdf\_fx2 sample is a User-Mode Driver Framework (UMDF) driver for the OSR USB-FX2 device. It includes a test app and sample device metadata, and supports impersonation and idle power down.
-
-The sample can also be used with the CustomDeviceAccess SDK sample. The sample demonstrates how to perform bulk and interrupt data transfers to an USB device. For more information, see the specification for the [OSR USB FX-2 Learning Kit](https://www.osronline.com/hardware/OSRFX2_32.pdf). The driver and sample device metadata also work with the [Custom driver access](https://go.microsoft.com/fwlink/p/?linkid=2114373) sample.
-
-The osrusbfx2 sample is divided into three samples:
-
-- **WDF Sample Driver Learning Lab for OSR USB-FX2**: This sample is a series of iterative drivers that demonstrate how to write a "Hello World" driver and adds additional features in each step.
-
-- **kmdf\_fx2**: This sample is the final version of kernel-mode **wdf\_osrfx2** driver. The sample demonstrates KMDF methods.
-
-- **umdf\_fx2**: This sample is the final version of the user-mode driver **wdf\_osrfx2**. The sample demonstrates UMDF methods.
-
-## Build the sample
-
-The default Solution build configuration is Debug and Win32.
-
-1. Open the driver project or solution in Visual Studio 2015 (find *filtername*.sln or *filtername*.vcxproj).
-
-1. Right-click the solution in the **Solutions Explorer** and select **Configuration Manager**.
-
-1. From the **Configuration Manager**, select the **Active Solution Configuration** and the **Active Solution Platform** (for example, Win32) that correspond to the type of build you are interested in.
-
-1. From the **Build** menu, click **Build Solution** (Ctrl+Shift+B).
-
-## Overview
-
-- The device is based on the development board supplied with the Cypress EZ-USB FX2 Development Kit (CY3681).
-
-- It contains 1 interface and 3 endpoints (Interrupt IN, Bulk Out, Bulk IN).
-
-- Firmware supports vendor commands to query or set LED Bar graph display and 7-segment LED display, and to query toggle switch states.
-
-- Interrupt Endpoint:
-
- - Sends an 8-bit value that represents the state of the switches.
-
- - Sent on startup, resume from suspend, and whenever the switch pack setting changes.
-
- - Firmware does not de-bounce the switch pack.
-
- - One switch change can result in multiple bytes being sent.
-
- - Bits are in the reverse order of the labels on the pack (for example, bit 0x80 is labeled 1 on the pack).
-
-- Bulk Endpoints are configured for loopback:
-
- - The device moves data from IN endpoint to OUT endpoint.
-
- - The device does not change the values of the data it receives nor does it internally create any data.
-
- - Endpoints are always double buffered.
-
- - Maximum packet size depends on speed (64 full speed, 512 high speed).
-
-## Testing the driver
-
-You can use the [Custom driver access](https://go.microsoft.com/fwlink/p/?linkid=2114373) sample to test the umdf\_fx2 sample.
-
-This sample also includes a test application, osrusbfx2.exe, that you can use to test the device. This console application enumerates the interface registered by the driver and opens the device to send read, write, or IOCTL requests based on the command line options.
-
-Usage for Read/Write test:
-
-- -r [*n*], where *n* is number of bytes to read.
-
-- -w [*n*], where *n* is number of bytes to write.
-
-- -c [*n*], where *n* is number of iterations (default = 1).
-
-- -v, shows verbose read data.
-
-- -p, plays with Bar Display, Dip Switch, 7-Segment Display.
-
-- -a, performs asynchronous I/O operation.
-
-- -u, dumps USB configuration and pipe information.
-
-- -f \<*filename*\> [*interval-seconds*], where *interval-seconds* is a delay in milliseconds, to send a text file to the seven-segment display (UMDF only)
-
-### Playing with the 7 segment display, toggle switches, and bar graph display
-
-Use the command `osrusbfx2.exe -p` with options 1 through 9 to set and clear bar graph display, set and get 7 segment state, and read the toggle switch states. The following shows the function options:
-
-```cmd
-1. Light Bar
-2. Clear Bar
-3. Light entire Bar graph
-4. Clear entire Bar graph
-5. Get bar graph state
-6. Get Switch state
-7. Get Switch Interrupt Message
-8. Get 7 segment state
-9. Set 7 segment state
-10. Reset the device
-11. Re-enumerate the device
-
-0. Exit
-
-Selection:
-```
-
-### Reset and re-enumerate the device
-
-Use the command `osrusbfx2.exe -p` with options 10 and 11 to either reset the device or re-enumerate the device.
-
-### Read and write to bulk endpoints
-
-The following commands send read and write requests to the device's bulk endpoint.
-
-- `osrusbfx2.exe -r 64`
-
- The preceding command reads 64 bytes to the bulk IN endpoint.
-
-- `osrusbfx2.exe -w 64`
-
- The preceding command writes 64 bytes to the bulk OUT endpoint.
-
-- `osrusbfx2.exe -r 64 -w 64 -c 100 -v`
-
- The preceding command first writes 64 bytes of data to bulk OUT endpoint (Pipe 1), then reads 64 bytes from bulk IN endpoint (Pipe 2), and then compares the read buffer with write buffer to see if they match. If the buffer contents match, it repeats this operation 100 times.
-
-- `osrusbfx2.exe -a`
-
- The preceding command reads and writes to the device asynchronously in an infinite loop.
-
-The bulk endpoints are double buffered. Depending on the operational speed (full or high), the buffer size is either 64 bytes or 512 bytes, respectively. A request to read data does not complete if the buffers are empty. If the buffers are full, a request to write data does not complete until the buffers are emptied. When you are doing a synchronous read, make sure the endpoint buffer has data (for example, when you send 512 bytes write request to the device operating in full speed mode). Because the endpoints are double buffered, the total buffer capacity is 256 bytes. The first 256 bytes fills the buffer and the write request waits in the USB stack until the buffers are emptied. If you run another instance of the application to read 512 bytes of data, both write and read requests complete successfully.
-
-### Displaying descriptors
-
-The following command displays all the descriptors and endpoint information.
-
-`osrusbfx2.exe -u`
-
-If the device is operating in high speed mode, you get the following information:
-
-```cmd
-===================
-
-USB_CONFIGURATION_DESCRIPTOR
-
-bLength = 0x9, decimal 9
-
-bDescriptorType = 0x2 ( USB_CONFIGURATION_DESCRIPTOR_TYPE )
-
-wTotalLength = 0x27, decimal 39
-
-bNumInterfaces = 0x1, decimal 1
-
-bConfigurationValue = 0x1, decimal 1
-
-iConfiguration = 0x4, decimal 4
-
-bmAttributes = 0xa0 ( USB_CONFIG_BUS_POWERED )
-
-MaxPower = 0x32, decimal 50
-
------------------------------
-
-USB_INTERFACE_DESCRIPTOR #0
-
-bLength = 0x9
-
-bDescriptorType = 0x4 ( USB_INTERFACE_DESCRIPTOR_TYPE )
-
-bInterfaceNumber = 0x0
-
-bAlternateSetting = 0x0
-
-bNumEndpoints = 0x3
-
-bInterfaceClass = 0xff
-
-bInterfaceSubClass = 0x0
-
-bInterfaceProtocol = 0x0
-
-bInterface = 0x0
-
-------------------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe00
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x81 ( INPUT )
-
-bmAttributes= 0x3 ( USB_ENDPOINT_TYPE_INTERRUPT )
-
-wMaxPacketSize= 0x49, decimal 73
-
-bInterval = 0x1, decimal 1
-
-------------------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe01
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x6 ( OUTPUT )
-
-bmAttributes= 0x2 ( USB_ENDPOINT_TYPE_BULK )
-
-wMaxPacketSize= 0x200,
-
-decimal 512 bInterval = 0x0,
-
-decimal 0
-
-------------------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe02
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x88 ( INPUT )
-
-bmAttributes= 0x2 ( USB_ENDPOINT_TYPE_BULK )
-
-wMaxPacketSize= 0x200, decimal 512
-
-bInterval = 0x0, decimal 0
-```
-
-If the device is operating in low speed mode, you will get the following information:
-
-```cmd
-===================
-
-USB_CONFIGURATION_DESCRIPTOR
-
-bLength = 0x9, decimal 9
-
-bDescriptorType = 0x2 ( USB_CONFIGURATION_DESCRIPTOR_TYPE )
-
-wTotalLength = 0x27, decimal 39
-
-bNumInterfaces = 0x1, decimal 1
-
-bConfigurationValue = 0x1, decimal 1
-
-iConfiguration = 0x3, decimal 3
-
-bmAttributes = 0xa0 ( USB_CONFIG_BUS_POWERED )
-
-MaxPower = 0x32, decimal 50
-
------------------------------
-
-USB_INTERFACE_DESCRIPTOR #0
-
-bLength = 0x9
-
-bDescriptorType = 0x4 ( USB_INTERFACE_DESCRIPTOR_TYPE )
-
-bInterfaceNumber = 0x0 bAlternateSetting = 0x0
-
-bNumEndpoints = 0x3
-
-bInterfaceClass = 0xff
-
-bInterfaceSubClass = 0x0
-
-bInterfaceProtocol = 0x0
-
-bInterface = 0x0
-
-------------------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe00
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x81 ( INPUT )
-
-bmAttributes= 0x3 ( USB_ENDPOINT_TYPE_INTERRUPT )
-
-wMaxPacketSize= 0x49, decimal 73
-
-bInterval = 0x1, decimal 1
-
-------- -----------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe01
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x6 ( OUTPUT )
-
-bmAttributes= 0x2 ( USB_ENDPOINT_TYPE_BULK )
-
-wMaxPacketSize= 0x40, decimal 64
-
-bInterval = 0x0, decimal 0
-
-------------------------------
-
-USB_ENDPOINT_DESCRIPTOR for Pipe02
-
-bLength = 0x7
-
-bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
-
-bEndpointAddress= 0x88 ( INPUT )
-
-bmAttributes= 0x2 ( USB_ENDPOINT_TYPE_BULK )
-
-wMaxPacketSize= 0x40, decimal 64
-
-bInterval = 0x0, decimal 0
-```
-
-## Sample Contents
-
-### usb\\umdf\_fx2\\driver
-
-This directory contains driver code that demonstrates the following functionality:
-
-- Loads the driver and responds to PnP and Power events. You can install, uninstall, disable, enable, suspend, and resume the system.
-
-- Registers a PnP device interface so that application can open a handle to the device.
-
-- Implements **IPnpCallbackHardware** interface and initializes USB I/O targets in **IPnpCallbackHardware::OnPrepareHardware** method.
-
-- Creates a sequential queue for handling IOCTL requests.
-
-- Adds code to handle the IOCTL to set bar graph display.
-
-- Creates a parallel queue for handling read and write requests.
-
-- Retrieves memory from read and write requests, format the requests, and sends them to a USB target.
-
-- Supports additional IOCTLs to get and set the 7-segment display, get bar graph display, and get config descriptor.
-
-- Sets power policy for the device.
-
-- Adds code to indicate that the device is ready by lighting up the period on 7-segment display.
-
-- Calls **SetupDi** functions to determine the "BusTypeGUID" of the device, and uses impersonation to access resources that only the caller has access to.
-
-- Shows how to implement idle and wake functionality to make the driver the power policy owner (PPO). The sample achieves this using power-managed queues and UMDF DDIs, AssignS0IdleSettings, and AssignSxWakeSettings.
-
-- Demonstrates implementation of a continuous reader.
-
-- Demonstrates the use of impersonation.
-
-### usb\\umdf\_fx2\\exe
-
-This directory contains a test application that can be used to drive the UMDF driver and FX2 device. This is a modified version of the test application for the KMDF Fx2 driver.
-
-### usb\\umdf\_fx2\\deviceMetadata
-
-This directory contains the device metadata package for the sample. You must copy the device metadata to the system before installing the device. For information on how to update and deploy device metadata, see [Custom driver access sample](https://go.microsoft.com/fwlink/p/?linkid=2114373).
diff --git a/usb/umdf_fx2/deviceMetadata/B4D697F5-1C56-4807-ACCD-B28C09D37FF0.devicemetadata-ms b/usb/umdf_fx2/deviceMetadata/B4D697F5-1C56-4807-ACCD-B28C09D37FF0.devicemetadata-ms
deleted file mode 100644
index 5f8e82ee..00000000
--- a/usb/umdf_fx2/deviceMetadata/B4D697F5-1C56-4807-ACCD-B28C09D37FF0.devicemetadata-ms
+++ /dev/null
Binary files differ
diff --git a/usb/umdf_fx2/driver/ControlQueue.cpp b/usb/umdf_fx2/driver/ControlQueue.cpp
deleted file mode 100644
index f4058941..00000000
--- a/usb/umdf_fx2/driver/ControlQueue.cpp
+++ /dev/null
@@ -1,564 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ControlQueue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "winioctl.h"
-
-#include "ControlQueue.tmh"
-
-CMyControlQueue::CMyControlQueue(
- _In_ PCMyDevice Device
- ) : CMyQueue(Device)
-{
-
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CMyControlQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
-
- if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackDeviceIoControl)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackDeviceIoControl();
-
- }
- else
- {
- hr = CMyQueue::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyControlQueue::CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyControlQueue *Queue
- )
-/*++
-
-Routine Description:
-
-
- CreateInstance creates an instance of the queue object.
-
-Aruments:
-
- ppUkwn - OUT parameter is an IUnknown interface to the queue object
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- PCMyControlQueue queue = NULL;
- HRESULT hr = S_OK;
-
- queue = new CMyControlQueue(Device);
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Call the queue callback object to initialize itself. This will create
- // its partner queue framework object.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize();
- }
-
- if (SUCCEEDED(hr))
- {
- *Queue = queue;
- }
- else
- {
- SAFE_RELEASE(queue);
- }
-
- return hr;
-}
-
-HRESULT
-CMyControlQueue::Initialize(
- VOID
- )
-{
- HRESULT hr;
-
- //
- // First initialize the base class. This will create the partner FxIoQueue
- // object and setup automatic forwarding of I/O controls.
- //
-
- //
- // The framework (UMDF) will not deliver a
- // request to the driver that arrives on a power-managed queue, unless
- // the device is in a powered-up state. If you receive a request on a
- // power-managed queue after the device has idled out,
- // the framework will not be able to power-up and present the request
- // to the driver unless it is the power policy owner (PPO).
- // Since this driver is the PPO it can use power managed queues
- //
-
- hr = __super::Initialize(WdfIoQueueDispatchSequential,
- false,
- true /* use power managed queue */);
-
- //
- // return the status.
- //
-
- return hr;
-}
-
-VOID
-STDMETHODCALLTYPE
-CMyControlQueue::OnDeviceIoControl(
- _In_ IWDFIoQueue *FxQueue,
- _In_ IWDFIoRequest *FxRequest,
- _In_ ULONG ControlCode,
- _In_ SIZE_T InputBufferSizeInBytes,
- _In_ SIZE_T OutputBufferSizeInBytes
- )
-/*++
-
-Routine Description:
-
-
- DeviceIoControl dispatch routine
-
-Aruments:
-
- FxQueue - Framework Queue instance
- FxRequest - Framework Request instance
- ControlCode - IO Control Code
- InputBufferSizeInBytes - Lenth of input buffer
- OutputBufferSizeInBytes - Lenth of output buffer
-
- Always succeeds DeviceIoIoctl
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(FxQueue);
-
- IWDFMemory *memory = NULL;
- PVOID buffer;
-
- SIZE_T bigBufferCb;
-
- ULONG information = 0;
-
- bool completeRequest = true;
-
- HRESULT hr = S_OK;
-
- switch (ControlCode)
- {
- case IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR:
- {
- //
- // Get the output buffer.
- //
-
- FxRequest->GetOutputMemory(&memory );
-
- //
- // request the descriptor.
- //
-
- ULONG bufferCb;
-
- //
- // Get the buffer address then release the memory object.
- // The memory object remains valid until the request is
- // completed.
- //
-
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- if (bigBufferCb > ULONG_MAX)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- break;
- }
- else
- {
- bufferCb = (ULONG) bigBufferCb;
- }
-
- hr = m_Device->GetUsbTargetDevice()->RetrieveDescriptor(
- USB_CONFIGURATION_DESCRIPTOR_TYPE,
- 0,
- 0,
- &bufferCb,
- (PUCHAR) buffer
- );
-
- if (SUCCEEDED(hr))
- {
- information = bufferCb;
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the result of the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(BAR_GRAPH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->GetBarGraphDisplay((PBAR_GRAPH_STATE) buffer);
- }
-
- //
- // If that worked then record how many bytes of data we're
- // returning.
- //
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(BAR_GRAPH_STATE);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (InputBufferSizeInBytes < sizeof(BAR_GRAPH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetInputMemory(&memory);
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->SetBarGraphDisplay((PBAR_GRAPH_STATE) buffer);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the result of the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SEVEN_SEGMENT))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
- hr = m_Device->GetSevenSegmentDisplay((PSEVEN_SEGMENT) buffer);
- }
-
- //
- // If that worked then record how many bytes of data we're
- // returning.
- //
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(SEVEN_SEGMENT);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (InputBufferSizeInBytes < sizeof(SEVEN_SEGMENT))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetInputMemory(&memory );
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->SetSevenSegmentDisplay((PSEVEN_SEGMENT) buffer);
- }
- break;
- }
-
- case IOCTL_OSRUSBFX2_READ_SWITCHES:
- {
- //
- // Make sure the buffer is big enough to hold the input for the
- // control transfer.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SWITCH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- FxRequest->GetOutputMemory(&memory );
- }
-
- //
- // Get the data buffer and use it to set the bar graph on the
- // device.
- //
-
- if (SUCCEEDED(hr))
- {
- buffer = memory->GetDataBuffer(&bigBufferCb);
- memory->Release();
-
- hr = m_Device->ReadSwitchState((PSWITCH_STATE) buffer);
- }
-
- if (SUCCEEDED(hr))
- {
- information = sizeof(SWITCH_STATE);
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE:
- {
- //
- // Make sure the buffer is big enough to hold the switch
- // state.
- //
-
- if (OutputBufferSizeInBytes < sizeof(SWITCH_STATE))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
- else
- {
- //
- // Forward the request to the switch state change queue.
- //
-
- hr = FxRequest->ForwardToIoQueue(
- m_Device->GetSwitchChangeQueue()
- );
-
- if (SUCCEEDED(hr))
- {
- completeRequest = false;
- }
- }
-
- break;
- }
-
- case IOCTL_OSRUSBFX2_RESET_DEVICE:
- case IOCTL_OSRUSBFX2_REENUMERATE_DEVICE:
- {
- //
- // WinUSB does not allow us to reset or re-enumerate the device.
- // Return not-supported for the error in both of these cases.
- //
-
- hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
- break;
- }
-
- case IOCTL_OSRUSBFX2_PLAY_FILE:
- {
- //
- // This IOCTL demonstrates how to use impersonation to access
- // resources using the credentials provided by the client. Note
- // that for impersonation to work it has to be enabled in the device
- // INF and the client must allow impersonation when they open the
- // device.
- //
- // This IOCTL opens a file using the path provided by the client
- // and then plays the characters in that file out to the seven segment
- // display in a worker thread.
- //
-
- PFILE_PLAYBACK playback;
- SIZE_T playbackCb;
- size_t realPlaybackCb;
-
- FxRequest->GetInputMemory(&memory);
-
- if (memory == NULL)
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Get the playback structure from the input buffer.
- //
-
- playback = (PFILE_PLAYBACK) memory->GetDataBuffer(&playbackCb);
-
- memory->Release();
-
- //
- // Make sure the length is at least as big as the fixed portion
- // of the input structure.
- //
-
- if (playbackCb < (FIELD_OFFSET(FILE_PLAYBACK, Path)))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Make sure the file name is at least one character long.
- //
-
- playbackCb -= FIELD_OFFSET(FILE_PLAYBACK, Path);
-
- if (playbackCb < sizeof(WCHAR))
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
- break;
- }
-
- //
- // Verify that the string provided is valid.
- //
-
- hr = StringCbLength(playback->Path,
- min(playbackCb, (STRSAFE_MAX_CCH * sizeof(WCHAR))),
- &realPlaybackCb);
-
- if (FAILED(hr))
- {
- break;
- }
-
- hr = m_Device->PlaybackFile(playback, FxRequest);
-
- break;
- }
-
-
-
- default:
- {
- hr = HRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION);
- break;
- }
- }
-
- if (completeRequest)
- {
- FxRequest->CompleteWithInformation(hr, information);
- }
-
- return;
-}
diff --git a/usb/umdf_fx2/driver/ControlQueue.h b/usb/umdf_fx2/driver/ControlQueue.h
deleted file mode 100644
index 251521e1..00000000
--- a/usb/umdf_fx2/driver/ControlQueue.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ControlQueue.h
-
-Abstract:
-
- This file defines the queue callback object for handling device I/O
- control requests. This is a serialized queue.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Queue Callback Object.
-//
-
-class CMyControlQueue : public IQueueCallbackDeviceIoControl,
- public CMyQueue
-{
- HRESULT
- Initialize(
- VOID
- );
-
-public:
-
- CMyControlQueue(
- _In_ PCMyDevice Device
- );
-
- virtual
- ~CMyControlQueue(
- VOID
- )
- {
- return;
- }
-
- static
- HRESULT
- CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyControlQueue *Queue
- );
-
- HRESULT
- Configure(
- VOID
- )
- {
- return S_OK;
- }
-
- IQueueCallbackDeviceIoControl *
- QueryIQueueCallbackDeviceIoControl(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackDeviceIoControl *>(this);
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- //
- // Wdf Callbacks
- //
-
- //
- // IQueueCallbackDeviceIoControl
- //
- STDMETHOD_ (void, OnDeviceIoControl)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ ULONG ControlCode,
- _In_ SIZE_T InputBufferSizeInBytes,
- _In_ SIZE_T OutputBufferSizeInBytes
- );
-};
-
diff --git a/usb/umdf_fx2/driver/Device.cpp b/usb/umdf_fx2/driver/Device.cpp
deleted file mode 100644
index 101b3b79..00000000
--- a/usb/umdf_fx2/driver/Device.cpp
+++ /dev/null
@@ -1,2091 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Device.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2 driver's
- device callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-#include "internal.h"
-#include "initguid.h"
-#include "usb_hw.h"
-#include <devpkey.h>
-
-#include "device.tmh"
-#define CONCURRENT_READS 2
-
-CMyDevice::~CMyDevice(
- )
-{
- SAFE_RELEASE(m_pIoTargetInterruptPipeStateMgmt);
-}
-
-HRESULT
-CMyDevice::CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit,
- _Out_ PCMyDevice *Device
- )
-/*++
-
- Routine Description:
-
- This method creates and initializs an instance of the OSR Fx2 driver's
- device callback object.
-
- Arguments:
-
- FxDeviceInit - the settings for the device.
-
- Device - a location to store the referenced pointer to the device object.
-
- Return Value:
-
- Status
-
---*/
-{
- PCMyDevice device;
- HRESULT hr;
-
- //
- // Allocate a new instance of the device class.
- //
-
- device = new CMyDevice();
-
- if (NULL == device)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the instance.
- //
-
- hr = device->Initialize(FxDriver, FxDeviceInit);
-
- if (SUCCEEDED(hr))
- {
- *Device = device;
- }
- else
- {
- device->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Initialize(
- _In_ IWDFDriver * FxDriver,
- _In_ IWDFDeviceInitialize * FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- This method initializes the device callback object and creates the
- partner device object.
-
- The method should perform any device-specific configuration that:
- * could fail (these can't be done in the constructor)
- * must be done before the partner object is created -or-
- * can be done after the partner object is created and which aren't
- influenced by any device-level parameters the parent (the driver
- in this case) might set.
-
- Arguments:
-
- FxDeviceInit - the settings for this device.
-
- Return Value:
-
- status.
-
---*/
-{
- IWDFDevice2 *fxDevice = NULL;
-
- HRESULT hr = S_OK;
-
- //
- // TODO: Any per-device initialization which must be done before
- // creating the partner object.
- //
-
- //
- // Set no locking unless you need an automatic callbacks synchronization
- //
-
- FxDeviceInit->SetLockingConstraint(None);
-
- //
- // TODO: If you're writing a filter driver then indicate that here.
- // And then don't claim power policy ownership below
- //
- // FxDeviceInit->SetFilter();
- //
-
- //
- // Set the Fx2 driver as the power policy owner.
- //
-
- FxDeviceInit->SetPowerPolicyOwnership(TRUE);
-
- //
- // Create a new FX device object and assign the new callback object to
- // handle any device level events that occur.
- //
-
- //
- // QueryIUnknown references the IUnknown interface that it returns
- // (which is the same as referencing the device). We pass that to
- // CreateDevice, which takes its own reference if everything works.
- //
-
- if (SUCCEEDED(hr))
- {
- IUnknown *unknown = this->QueryIUnknown();
- IWDFDevice* device1;
-
- hr = FxDriver->CreateDevice(FxDeviceInit, unknown, &device1);
-
- //
- // Convert the interface to version 2
- //
-
- if (SUCCEEDED(hr)) {
- device1->QueryInterface(IID_PPV_ARGS(&fxDevice));
- _Analysis_assume_(fxDevice != NULL);
- device1->Release();
- }
-
- unknown->Release();
- }
-
- //
- // If that succeeded then set our FxDevice member variable.
- //
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice = fxDevice;
-
- //
- // Drop the reference we got from CreateDevice. Since this object
- // is partnered with the framework object they have the same
- // lifespan - there is no need for an additional reference.
- //
-
- fxDevice->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::Configure(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called after the device callback object has been initialized
- and returned to the driver. It would setup the device's queues and their
- corresponding callback objects.
-
- Arguments:
-
- FxDevice - the framework device object for which we're handling events.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr = S_OK;
-
- //
- // Get the bus type GUID for the device and confirm that we're attached to
- // USB.
- //
- // NOTE: Since this device only supports USB we'd normally trust our INF
- // to ensure this.
- //
- // But if the device also supported 1394 then we could
- // use this to determine which type of bus we were attached to.
- //
-
- hr = GetBusTypeGuid();
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- //
- // Create the read-write queue.
- //
-
- hr = CMyReadWriteQueue::CreateInstance(this, &m_ReadWriteQueue);
-
- if (FAILED(hr))
- {
- return hr;
- }
-
- //
- // We use default queue for read/write
- //
-
- hr = m_ReadWriteQueue->Configure();
-
- m_ReadWriteQueue->Release();
-
- //
- // Create the control queue and configure forwarding for IOCTL requests.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = CMyControlQueue::CreateInstance(this, &m_ControlQueue);
-
- if (SUCCEEDED(hr))
- {
- hr = m_ControlQueue->Configure();
- if (SUCCEEDED(hr))
- {
- m_FxDevice->ConfigureRequestDispatching(
- m_ControlQueue->GetFxQueue(),
- WdfRequestDeviceIoControl,
- true
- );
- }
- m_ControlQueue->Release();
- }
- }
-
- //
- // Create a manual I/O queue to hold requests for notification when
- // the switch state changes.
- //
-
- hr = m_FxDevice->CreateIoQueue(NULL,
- FALSE,
- WdfIoQueueDispatchManual,
- FALSE,
- FALSE,
- &m_SwitchChangeQueue);
-
-
- //
- // Release creation reference as object tree will keep a reference
- //
-
- m_SwitchChangeQueue->Release();
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->CreateDeviceInterface(&GUID_DEVINTERFACE_OSRUSBFX2,
- NULL);
- }
-
- //
- // Mark the interface as restricted to allow access to applications bound
- // using device metadata. Failures here are not fatal so we log them but
- // ignore them otherwise.
- //
- if (SUCCEEDED(hr))
- {
- WDF_PROPERTY_STORE_ROOT RootSpecifier;
- IWDFUnifiedPropertyStoreFactory * pUnifiedPropertyStoreFactory = NULL;
- IWDFUnifiedPropertyStore * pUnifiedPropertyStore = NULL;
- DEVPROP_BOOLEAN isRestricted = DEVPROP_TRUE;
- HRESULT hrSetProp;
-
- hrSetProp = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pUnifiedPropertyStoreFactory));
-
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrSetProp));
-
- RootSpecifier.LengthCb = sizeof(RootSpecifier);
- RootSpecifier.RootClass = WdfPropertyStoreRootClassDeviceInterfaceKey;
- RootSpecifier.Qualifier.DeviceInterfaceKey.InterfaceGUID = &GUID_DEVINTERFACE_OSRUSBFX2;
- RootSpecifier.Qualifier.DeviceInterfaceKey.ReferenceString = NULL;
-
- hrSetProp = pUnifiedPropertyStoreFactory->RetrieveUnifiedDevicePropertyStore(&RootSpecifier,
- &pUnifiedPropertyStore);
-
- if (SUCCEEDED(hrSetProp))
- {
- hrSetProp = pUnifiedPropertyStore->SetPropertyData(&DEVPKEY_DeviceInterface_Restricted,
- 0, // Lcid
- 0, // Flags
- DEVPROP_TYPE_BOOLEAN,
- sizeof(isRestricted),
- &isRestricted);
- }
-
- if (FAILED(hrSetProp))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Could not set restricted property %!HRESULT!",
- hrSetProp
- );
- }
-
- SAFE_RELEASE(pUnifiedPropertyStoreFactory);
- SAFE_RELEASE(pUnifiedPropertyStore);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method is called to get a pointer to one of the object's callback
- interfaces.
-
- Arguments:
-
- InterfaceId - the interface being requested
-
- Object - a location to store the interface pointer if successful
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- HRESULT hr;
-
- if (IsEqualIID(InterfaceId, __uuidof(IPnpCallbackHardware)))
- {
- *Object = QueryIPnpCallbackHardware();
- hr = S_OK;
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IPnpCallback)))
- {
- *Object = QueryIPnpCallback();
- hr = S_OK;
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IPnpCallbackSelfManagedIo)))
- {
- *Object = QueryIPnpCallbackSelfManagedIo();
- hr = S_OK;
- }
- else if(IsEqualIID(InterfaceId, __uuidof(IUsbTargetPipeContinuousReaderCallbackReadersFailed)))
- {
- *Object = QueryContinousReaderFailureCompletion();
- hr = S_OK;
- }
- else if(IsEqualIID(InterfaceId, __uuidof(IUsbTargetPipeContinuousReaderCallbackReadComplete)))
- {
- *Object = QueryContinousReaderCompletion();
- hr = S_OK;
- }
- else
- {
- hr = CUnknown::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnPrepareHardware(
- _In_ IWDFDevice * /* FxDevice */
- )
-/*++
-
-Routine Description:
-
- This routine is invoked to ready the driver
- to talk to hardware. It opens the handle to the
- device and talks to it using the WINUSB interface.
- It invokes WINUSB to discver the interfaces and stores
- the information related to bulk endpoints.
-
-Arguments:
-
- FxDevice : Pointer to the WDF device interface
-
-Return Value:
-
- HRESULT
-
---*/
-{
- PWSTR deviceName = NULL;
- DWORD deviceNameCch = 0;
-
- HRESULT hr;
-
- //
- // Get the device name.
- // Get the length to allocate first
- //
-
- hr = m_FxDevice->RetrieveDeviceName(NULL, &deviceNameCch);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get device name %!HRESULT!",
- hr
- );
- }
-
- //
- // Allocate the buffer
- //
-
- if (SUCCEEDED(hr))
- {
- deviceName = new WCHAR[deviceNameCch];
-
- if (deviceName == NULL)
- {
- hr = E_OUTOFMEMORY;
- }
- }
-
- //
- // Get the actual name
- //
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->RetrieveDeviceName(deviceName, &deviceNameCch);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get device name %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Device name %S",
- deviceName
- );
- }
-
- //
- // Create USB I/O Targets and configure them
- //
-
- if (SUCCEEDED(hr))
- {
- hr = CreateUsbIoTargets();
- }
-
- if (SUCCEEDED(hr))
- {
- ULONG length = sizeof(m_Speed);
-
- hr = m_pIUsbTargetDevice->RetrieveDeviceInformation(DEVICE_SPEED,
- &length,
- &m_Speed);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get usb device speed information %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Speed - %x\n",
- m_Speed
- );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = ConfigureUsbPipes();
- }
-
- // Setup power-management settings on the device.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = SetPowerManagement();
- }
-
- //
- //
- // Clear the seven segement display to indicate that we're done with
- // prepare hardware.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = IndicateDeviceReady();
- }
-
- if (SUCCEEDED(hr))
- {
- hr = ConfigContReaderForInterruptEndPoint();
- }
-
- delete[] deviceName;
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnReleaseHardware(
- _In_ IWDFDevice * /* FxDevice */
- )
-/*++
-
-Routine Description:
-
- This routine is invoked when the device is being removed or stopped
- It releases all resources allocated for this device.
-
-Arguments:
-
- FxDevice - Pointer to the Device object.
-
-Return Value:
-
- HRESULT - Always succeeds.
-
---*/
-{
- //
- // Delete USB Target Device WDF Object, this will in turn
- // delete all the children - interface and the pipe objects
- //
- // This makes sure that
- // 1. We drain the the pending read which does not come from an I/O queue
- // 2. We remove USB target objects from object tree (and thereby free them)
- // before any potential subsequent OnPrepareHardware creates new ones
- //
- // m_pIUsbTargetDevice could be NULL if OnPrepareHardware failed so we need
- // to guard against that
- //
-
- if (m_pIUsbTargetDevice)
- {
- m_pIUsbTargetDevice->DeleteWdfObject();
- }
-
- return S_OK;
-}
-
-HRESULT
-CMyDevice::CreateUsbIoTargets(
- )
-/*++
-
-Routine Description:
-
- This routine creates Usb device, interface and pipe objects
-
-Arguments:
-
- None
-
-Return Value:
-
- HRESULT
---*/
-{
- HRESULT hr;
- UCHAR NumEndPoints = 0;
- IWDFUsbTargetFactory * pIUsbTargetFactory = NULL;
- IWDFUsbTargetDevice * pIUsbTargetDevice = NULL;
- IWDFUsbInterface * pIUsbInterface = NULL;
- IWDFUsbTargetPipe * pIUsbPipe = NULL;
-
- hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pIUsbTargetFactory));
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Cannot get usb target factory %!HRESULT!",
- hr
- );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = pIUsbTargetFactory->CreateUsbTargetDevice(
- &pIUsbTargetDevice);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to create USB Device I/O Target %!HRESULT!",
- hr
- );
- }
- else
- {
- m_pIUsbTargetDevice = pIUsbTargetDevice;
-
- //
- // Release the creation reference as object tree will maintain a reference
- //
-
- pIUsbTargetDevice->Release();
- }
- }
-
- if (SUCCEEDED(hr))
- {
- UCHAR NumInterfaces = pIUsbTargetDevice->GetNumInterfaces();
-
- WUDF_TEST_DRIVER_ASSERT(1 == NumInterfaces);
-
- hr = pIUsbTargetDevice->RetrieveUsbInterface(0, &pIUsbInterface);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to retrieve USB interface from USB Device I/O Target %!HRESULT!",
- hr
- );
- }
- else
- {
- m_pIUsbInterface = pIUsbInterface;
-
- pIUsbInterface->Release(); //release creation reference
- }
- }
-
- if (SUCCEEDED(hr))
- {
- NumEndPoints = pIUsbInterface->GetNumEndPoints();
-
- if (NumEndPoints != NUM_OSRUSB_ENDPOINTS) {
- hr = E_UNEXPECTED;
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Has %d endpoints, expected %d, returning %!HRESULT! ",
- NumEndPoints,
- NUM_OSRUSB_ENDPOINTS,
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- for (UCHAR PipeIndex = 0; PipeIndex < NumEndPoints; PipeIndex++)
- {
- hr = pIUsbInterface->RetrieveUsbPipeObject(PipeIndex,
- &pIUsbPipe);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to retrieve USB Pipe for PipeIndex %d, %!HRESULT!",
- PipeIndex,
- hr
- );
- }
- else
- {
- if ( pIUsbPipe->IsInEndPoint() )
- {
- if ( UsbdPipeTypeInterrupt == pIUsbPipe->GetType() )
- {
- m_pIUsbInterruptPipe = pIUsbPipe;
-
- WUDF_TEST_DRIVER_ASSERT (m_pIoTargetInterruptPipeStateMgmt == NULL);
-
- hr = m_pIUsbInterruptPipe->QueryInterface(__uuidof(
- IWDFIoTargetStateManagement),
- reinterpret_cast<void**>(&m_pIoTargetInterruptPipeStateMgmt)
- );
- if (FAILED(hr))
- {
- m_pIoTargetInterruptPipeStateMgmt = NULL;
- }
- }
- else if ( UsbdPipeTypeBulk == pIUsbPipe->GetType() )
- {
- m_pIUsbInputPipe = pIUsbPipe;
- }
- else
- {
- pIUsbPipe->DeleteWdfObject();
- }
- }
- else if ( pIUsbPipe->IsOutEndPoint() && (UsbdPipeTypeBulk == pIUsbPipe->GetType()) )
- {
- m_pIUsbOutputPipe = pIUsbPipe;
- }
- else
- {
- pIUsbPipe->DeleteWdfObject();
- }
-
- SAFE_RELEASE(pIUsbPipe); //release creation reference
- }
- }
-
- if (NULL == m_pIUsbInputPipe || NULL == m_pIUsbOutputPipe)
- {
- hr = E_UNEXPECTED;
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Input or output pipe not found, returning %!HRESULT!",
- hr
- );
- }
- }
-
- SAFE_RELEASE(pIUsbTargetFactory);
-
- return hr;
-}
-
-HRESULT
-CMyDevice::ConfigureUsbPipes(
- )
-/*++
-
-Routine Description:
-
- This routine retrieves the IDs for the bulk end points of the USB device.
-
-Arguments:
-
- None
-
-Return Value:
-
- HRESULT
---*/
-{
- HRESULT hr = S_OK;
- LONG timeout;
-
- //
- // Set timeout policies for input/output pipes
- //
-
- if (SUCCEEDED(hr))
- {
- timeout = ENDPOINT_TIMEOUT;
-
- hr = m_pIUsbInputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
- sizeof(timeout),
- &timeout);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set timeout policy for input pipe %!HRESULT!",
- hr
- );
- }
- }
-
- if (SUCCEEDED(hr))
- {
- timeout = ENDPOINT_TIMEOUT;
-
- hr = m_pIUsbOutputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
- sizeof(timeout),
- &timeout);
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set timeout policy for output pipe %!HRESULT!",
- hr
- );
- }
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::IndicateDeviceReady(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method lights the period on the device's seven-segment display to
- indicate that the driver's PrepareHardware method has completed.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- SEVEN_SEGMENT display = {0};
-
- HRESULT hr;
-
- //
- // First read the contents of the seven segment display.
- //
-
- hr = GetSevenSegmentDisplay(&display);
-
- if (SUCCEEDED(hr))
- {
- display.Segments |= 0x08;
-
- hr = SetSevenSegmentDisplay(&display);
- }
-
- return hr;
-}
-
-HRESULT
-CMyDevice::GetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the contents of the buffer - the controller OR's in every
- // light that's set.
- //
-
- BarGraphState->BarsAsUChar = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_BARGRAPH_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) BarGraphState,
- sizeof(BAR_GRAPH_STATE),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- )
-/*++
-
- Routine Description:
-
- This method synchronously sets the bar graph display on the OSR USB-FX2
- device using the buffers in the FxRequest as input.
-
- Arguments:
-
- FxRequest - the request to set the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesTransferred;
-
- HRESULT hr = S_OK;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_BARGRAPH_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) BarGraphState,
- sizeof(BAR_GRAPH_STATE),
- &bytesTransferred
- );
-
-
- return hr;
-}
-
-HRESULT
-CMyDevice::GetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the output buffer - the device will or in the bits for
- // the lights that are set.
- //
-
- SevenSegment->Segments = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_7SEGMENT_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SevenSegment,
- sizeof(SEVEN_SEGMENT),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- )
-/*++
-
- Routine Description:
-
- This method synchronously sets the bar graph display on the OSR USB-FX2
- device using the buffers in the FxRequest as input.
-
- Arguments:
-
- FxRequest - the request to set the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesTransferred;
-
- HRESULT hr = S_OK;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestHostToDevice,
- BmRequestToDevice,
- USBFX2LK_SET_7SEGMENT_DISPLAY,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SevenSegment,
- sizeof(SEVEN_SEGMENT),
- &bytesTransferred
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::ReadSwitchState(
- _In_ PSWITCH_STATE SwitchState
- )
-/*++
-
- Routine Description:
-
- This method synchronously retrieves the bar graph display information
- from the OSR USB-FX2 device. It uses the buffers in the FxRequest
- to hold the data it retrieves.
-
- Arguments:
-
- FxRequest - the request for the bar-graph info.
-
- Return Value:
-
- Status
-
---*/
-{
- WINUSB_CONTROL_SETUP_PACKET setupPacket;
-
- ULONG bytesReturned;
-
- HRESULT hr = S_OK;
-
- //
- // Zero the output buffer - the device will or in the bits for
- // the lights that are set.
- //
-
- SwitchState->SwitchesAsUChar = 0;
-
- //
- // Setup the control packet.
- //
-
- WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
- BmRequestDeviceToHost,
- BmRequestToDevice,
- USBFX2LK_READ_SWITCHES,
- 0,
- 0 );
-
- //
- // Issue the request to WinUsb.
- //
-
- hr = SendControlTransferSynchronously(
- &(setupPacket.WinUsb),
- (PUCHAR) SwitchState,
- sizeof(SWITCH_STATE),
- &bytesReturned
- );
-
- return hr;
-}
-
-HRESULT
-CMyDevice::SendControlTransferSynchronously(
- _In_ PWINUSB_SETUP_PACKET SetupPacket,
- _Inout_updates_(BufferLength) PBYTE Buffer,
- _In_ ULONG BufferLength,
- _Out_ PULONG LengthTransferred
- )
-{
- HRESULT hr = S_OK;
- HRESULT hrRequest = S_OK;
- IWDFIoRequest *pWdfRequest = NULL;
- IWDFDriver * FxDriver = NULL;
- IWDFMemory * FxMemory = NULL;
- IWDFRequestCompletionParams * FxComplParams = NULL;
- IWDFUsbRequestCompletionParams * FxUsbComplParams = NULL;
-
- *LengthTransferred = 0;
-
- hr = m_FxDevice->CreateRequest( NULL, //pCallbackInterface
- NULL, //pParentObject
- &pWdfRequest);
- hrRequest = hr;
-
- if (SUCCEEDED(hr))
- {
- m_FxDevice->GetDriver(&FxDriver);
-
- hr = FxDriver->CreatePreallocatedWdfMemory( Buffer,
- BufferLength,
- NULL, //pCallbackInterface
- pWdfRequest, //pParetObject
- &FxMemory );
- }
-
- if (SUCCEEDED(hr))
- {
- hr = m_pIUsbTargetDevice->FormatRequestForControlTransfer( pWdfRequest,
- SetupPacket,
- FxMemory,
- NULL); //TransferOffset
- }
-
- if (SUCCEEDED(hr))
- {
- hr = pWdfRequest->Send( m_pIUsbTargetDevice,
- WDF_REQUEST_SEND_OPTION_SYNCHRONOUS,
- 0); //Timeout
- }
-
- if (SUCCEEDED(hr))
- {
- pWdfRequest->GetCompletionParams(&FxComplParams);
-
- hr = FxComplParams->GetCompletionStatus();
- }
-
- if (SUCCEEDED(hr))
- {
- HRESULT hrQI = FxComplParams->QueryInterface(IID_PPV_ARGS(&FxUsbComplParams));
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrQI));
-
- WUDF_TEST_DRIVER_ASSERT( WdfUsbRequestTypeDeviceControlTransfer ==
- FxUsbComplParams->GetCompletedUsbRequestType() );
-
- FxUsbComplParams->GetDeviceControlTransferParameters( NULL,
- LengthTransferred,
- NULL,
- NULL );
- }
-
- SAFE_RELEASE(FxUsbComplParams);
- SAFE_RELEASE(FxComplParams);
- SAFE_RELEASE(FxMemory);
-
- if (SUCCEEDED(hrRequest))
- {
- pWdfRequest->DeleteWdfObject();
- }
- SAFE_RELEASE(pWdfRequest);
-
- SAFE_RELEASE(FxDriver);
-
- return hr;
-}
-
-WDF_IO_TARGET_STATE
-CMyDevice::GetTargetState(
- IWDFIoTarget * pTarget
- )
-{
- IWDFIoTargetStateManagement * pStateMgmt = NULL;
- WDF_IO_TARGET_STATE state;
-
- HRESULT hrQI = pTarget->QueryInterface(IID_PPV_ARGS(&pStateMgmt));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pStateMgmt));
-
- state = pStateMgmt->GetState();
-
- SAFE_RELEASE(pStateMgmt);
-
- return state;
-}
-
-VOID
-CMyDevice::ServiceSwitchChangeQueue(
- _In_ SWITCH_STATE NewState,
- _In_ HRESULT CompletionStatus,
- _In_opt_ IWDFFile *SpecificFile
- )
-/*++
-
- Routine Description:
-
- This method processes switch-state change notification requests as
- part of reading the OSR device's interrupt pipe. As each read completes
- this pulls all pending I/O off the switch change queue and completes
- each request with the current switch state.
-
- Arguments:
-
- NewState - the state of the switches
-
- CompletionStatus - all pending operations are completed with this status.
-
- SpecificFile - if provided only requests for this file object will get
- completed.
-
- Return Value:
-
- None
-
---*/
-{
- IWDFIoRequest *fxRequest;
-
- HRESULT enumHr = S_OK;
-
- do
- {
- HRESULT hr;
-
- //
- // Get the next request.
- //
-
- if (NULL != SpecificFile)
- {
- enumHr = m_SwitchChangeQueue->RetrieveNextRequestByFileObject(
- SpecificFile,
- &fxRequest
- );
- }
- else
- {
- enumHr = m_SwitchChangeQueue->RetrieveNextRequest(&fxRequest);
- }
-
- //
- // if we got one then complete it.
- //
-
- if (SUCCEEDED(enumHr))
- {
- if (SUCCEEDED(CompletionStatus))
- {
- IWDFMemory *fxMemory;
-
- //
- // First copy the result to the request buffer.
- //
-
- fxRequest->GetOutputMemory(&fxMemory );
-
- hr = fxMemory->CopyFromBuffer(0,
- &NewState,
- sizeof(SWITCH_STATE));
- fxMemory->Release();
- }
- else
- {
- hr = CompletionStatus;
- }
-
- //
- // Complete the request with the status of the copy (or the completion
- // status if that was an error).
- //
-
- if (SUCCEEDED(hr))
- {
- fxRequest->CompleteWithInformation(hr, sizeof(SWITCH_STATE));
- }
- else
- {
- fxRequest->Complete(hr);
- }
-
- fxRequest->Release();
- }
- }
- while (SUCCEEDED(enumHr));
-}
-
-HRESULT
-CMyDevice::SetPowerManagement(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method enables the idle and wake functionality
- using UMDF. UMDF has been set as the power policy
- owner (PPO) for the device stack and we are using power
- managed queues.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- HRESULT hr;
-
- //
- // Enable USB selective suspend on the device.
- //
-
- hr = m_FxDevice->AssignS0IdleSettings( IdleUsbSelectiveSuspend,
- PowerDeviceMaximum,
- IDLE_TIMEOUT_IN_MSEC,
- IdleAllowUserControl,
- WdfUseDefault);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to assign S0 idle settings for the device %!HRESULT!",
- hr
- );
- }
-
- //
- // Enable Sx wake settings
- //
-
- if (SUCCEEDED(hr))
- {
- hr = m_FxDevice->AssignSxWakeSettings( PowerDeviceMaximum,
- WakeAllowUserControl,
- WdfUseDefault);
-
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_ERROR,
- TEST_TRACE_DEVICE,
- "%!FUNC! Unable to set Sx Wake Settings for the device %!HRESULT!",
- hr
- );
- }
-
- }
-
-
- return hr;
-}
-
-HRESULT
-CMyDevice::OnD0Entry(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- UNREFERENCED_PARAMETER(previousState);
-
- //
- // Start/Stop the I/O target if you support a continuous reader.
- // The rest of the I/O is fed through power managed queues. The queue
- // itself will stop feeding I/O to targets (and will wait for any pending
- // I/O to complete before going into low power state), hence targets
- // don�t need to be stopped/started. The continuous reader I/O is outside
- // of power managed queues so we need to Stop the I/O target on D0Exit and
- // start it on D0Entry. Please note that bulk pipe target doesn't need to
- // be stopped/started because I/O submitted to this pipe comes from power
- // managed I/O queue, which delivers I/O only in power on state.
- //
-
- m_pIoTargetInterruptPipeStateMgmt->Start();
-
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnD0Exit(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- UNREFERENCED_PARAMETER(previousState);
-
- //
- // Stop the I/O target always succeedes.
- //
- m_pIoTargetInterruptPipeStateMgmt->Stop(WdfIoTargetCancelSentIo);
- return S_OK;
-}
-
-void
-CMyDevice::OnSurpriseRemoval(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return;
-}
-
-HRESULT
-CMyDevice::OnQueryRemove(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnQueryStop(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-//
-// Self Managed Io Callbacks
-//
-
-VOID
-CMyDevice::OnSelfManagedIoCleanup(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return;
-}
-
-VOID
-CMyDevice::OnSelfManagedIoFlush(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
-
- //
- // Complete every switch change operation with an error.
- //
- ServiceSwitchChangeQueue(m_SwitchState,
- HRESULT_FROM_WIN32(ERROR_DEVICE_REMOVED),
- NULL);
-
- return;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoInit(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoRestart(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoStop(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-HRESULT
-CMyDevice::OnSelfManagedIoSuspend(
- _In_ IWDFDevice* pWdfDevice
- )
-{
- UNREFERENCED_PARAMETER(pWdfDevice);
- return S_OK;
-}
-
-
-
-HRESULT
-CMyDevice::ConfigContReaderForInterruptEndPoint(
- VOID
- )
-/*++
-
-Routine Description:
-
- This routine configures a continuous reader on the
- interrupt endpoint. It's called from the PrepareHarware event.
-
-Arguments:
-
-
-Return Value:
-
- HRESULT value
-
---*/
-{
- HRESULT hr, hrQI;
- IUsbTargetPipeContinuousReaderCallbackReadComplete *pOnCompletionCallback = NULL;
- IUsbTargetPipeContinuousReaderCallbackReadersFailed *pOnFailureCallback= NULL;
- IWDFUsbTargetPipe2 * pIUsbInterruptPipe2;
-
- hrQI = this->QueryInterface(IID_PPV_ARGS(&pOnCompletionCallback));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pOnCompletionCallback));
-
- hrQI = this->QueryInterface(IID_PPV_ARGS(&pOnFailureCallback));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pOnFailureCallback));
-
- hrQI = m_pIUsbInterruptPipe->QueryInterface(IID_PPV_ARGS(&pIUsbInterruptPipe2));
- WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pIUsbInterruptPipe2));
-
- //
- // Reader requests are not posted to the target automatically.
- // Driver must explictly call WdfIoTargetStart to kick start the
- // reader. In this sample, it's done in D0Entry.
- // By defaut, framework queues two requests to the target
- // endpoint. Driver can configure up to 10 requests with the
- // parameter CONCURRENT_READS
- //
- hr = pIUsbInterruptPipe2->ConfigureContinuousReader( sizeof(m_SwitchStateBuffer),
- 0,//header
- 0,//trailer
- CONCURRENT_READS,
- NULL,
- pOnCompletionCallback,
- m_pIUsbInterruptPipe,
- pOnFailureCallback
- );
-
- if (FAILED(hr)) {
- TraceEvents(TRACE_LEVEL_ERROR, TEST_TRACE_DEVICE,
- "OsrFxConfigContReaderForInterruptEndPoint failed %!HRESULT!",
- hr);
- }
-
- SAFE_RELEASE(pOnCompletionCallback);
- SAFE_RELEASE(pOnFailureCallback);
- SAFE_RELEASE(pIUsbInterruptPipe2);
-
- return hr;
-}
-
-
-BOOL
-CMyDevice::OnReaderFailure(
- IWDFUsbTargetPipe * pPipe,
- HRESULT hrCompletion
- )
-{
- UNREFERENCED_PARAMETER(pPipe);
-
- m_InterruptReadProblem = hrCompletion;
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Failure completed with %!HRESULT!",
- hrCompletion
- );
-
- ServiceSwitchChangeQueue(m_SwitchState,
- hrCompletion,
- NULL);
-
- return TRUE;
-}
-
-VOID
-CMyDevice::OnReaderCompletion(
- IWDFUsbTargetPipe * pPipe,
- IWDFMemory * pMemory,
- SIZE_T NumBytesTransferred,
- PVOID Context
- )
-{
- WUDF_TEST_DRIVER_ASSERT(pPipe == (IWDFUsbTargetPipe *)Context);
-
- //
- // Make sure that there is data in the read packet. Depending on the device
- // specification, it is possible for it to return a 0 length read in
- // certain conditions.
- //
-
- if (NumBytesTransferred == 0) {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_DEVICE,
- "%!FUNC! Zero length read occured on the Interrupt Pipe's "
- "Continuous Reader\n"
- );
- return;
- }
-
- WUDF_TEST_DRIVER_ASSERT(NumBytesTransferred == sizeof(m_SwitchState));
-
- //
- // Get the switch state
- //
-
- PVOID pBuff = pMemory->GetDataBuffer(NULL);
-
- CopyMemory(&m_SwitchState, pBuff, sizeof(m_SwitchState));
-
-
- //
- // Satisfy application request for switch change notification
- //
-
- ServiceSwitchChangeQueue(m_SwitchState,
- S_OK,
- NULL);
-
- //
- // Make sure that the request that got completed is the one that we reuse
- // Don't Delete the request because it gets reused
- //
-}
-
-
-HRESULT
-CMyDevice::GetBusTypeGuid(
- VOID
- )
-/*++
-
- Routine Description:
-
- This routine gets the device instance ID then invokes SetupDi to
- retrieve the bus type guid for the device. The bus type guid is
- stored in object.
-
- Arguments:
-
- None
-
- Return Value:
-
- Status
-
---*/
-{
- ULONG instanceIdCch = 0;
- PWSTR instanceId = NULL;
-
- HDEVINFO deviceInfoSet = NULL;
- SP_DEVINFO_DATA deviceInfo = {sizeof(SP_DEVINFO_DATA)};
-
- HRESULT hr;
-
- //
- // Retrieve the device instance ID.
- //
-
- hr = m_FxDevice->RetrieveDeviceInstanceId(NULL, &instanceIdCch);
-
- if (FAILED(hr))
- {
- goto Exit;
- }
-
- instanceId = new WCHAR[instanceIdCch];
-
- if (instanceId == NULL)
- {
- hr = E_OUTOFMEMORY;
- goto Exit;
- }
-
- hr = m_FxDevice->RetrieveDeviceInstanceId(instanceId, &instanceIdCch);
-
- if (FAILED(hr))
- {
- goto Exit2;
- }
-
- //
- // Call SetupDI to open the device info.
- //
-
- deviceInfoSet = SetupDiCreateDeviceInfoList(NULL, NULL);
-
- if (deviceInfoSet == INVALID_HANDLE_VALUE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit2;
- }
-
- if (SetupDiOpenDeviceInfo(deviceInfoSet,
- instanceId,
- NULL,
- 0,
- &deviceInfo) == FALSE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit3;
- }
-
- if (SetupDiGetDeviceRegistryProperty(deviceInfoSet,
- &deviceInfo,
- SPDRP_BUSTYPEGUID,
- NULL,
- (PBYTE) &m_BusTypeGuid,
- sizeof(m_BusTypeGuid),
- NULL) == FALSE)
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- goto Exit3;
- }
-
-Exit3:
- SetupDiDestroyDeviceInfoList(deviceInfoSet);
-
-Exit2:
-
- delete[] instanceId;
-
-Exit:
-
- return hr;
-}
-
-HRESULT
-CMyDevice::PlaybackFile(
- _In_ PFILE_PLAYBACK PlayInfo,
- _In_ IWDFIoRequest *FxRequest
- )
-/*++
-
- Routine Description:
-
- This method impersonates the caller, opens the file and prints each
- character to the seven segement display.
-
- Arguments:
-
- PlayInfo - the playback info from the request.
-
- FxRequest - the request (used for impersonation)
-
- Return Value:
-
- Status
-
---*/
-
-{
- PLAYBACK_IMPERSONATION_CONTEXT context = {PlayInfo, NULL, S_OK};
- IWDFIoRequest2* fxRequest2;
-
- HRESULT hr;
-
- // Convert FxRequest to FxRequest2. No error can occur here.
- FxRequest->QueryInterface(IID_PPV_ARGS(&fxRequest2));
- _Analysis_assume_(fxRequest2 != NULL);
-
- //
- // Impersonate and open the playback file.
- //
-
- hr = FxRequest->Impersonate(
- SecurityImpersonation,
- this->QueryIImpersonateCallback(),
- &context
- );
- if (FAILED(hr))
- {
- goto exit;
- }
-
- //
- // Release the reference that was added in QueryIImpersonateCallback()
- //
- this->Release();
-
- hr = context.Hr;
-
- if (FAILED(hr))
- {
- goto exit;
- }
-
- //
- // The impersonation callback succeeded - tell code analysis that the
- // file handle is non-null
- //
-
- _Analysis_assume_(context.FileHandle != NULL);
-
- //
- // Read from the file one character at a time until we hit
- // EOF or the request is cancelled.
- //
-
- do
- {
- UCHAR c;
- ULONG bytesRead;
-
- //
- // Check for cancellation.
- //
-
- if (fxRequest2->IsCanceled())
- {
- hr = HRESULT_FROM_WIN32(ERROR_CANCELLED);
- }
- else
- {
- BOOL result;
-
- //
- // Read a character from the file and see if we can
- // encode it on the display.
- //
-
- result = ReadFile(context.FileHandle,
- &c,
- sizeof(c),
- &bytesRead,
- NULL);
-
- if (result)
- {
- SEVEN_SEGMENT segment;
- BAR_GRAPH_STATE barGraph;
-
- if (bytesRead > 0)
- {
- #pragma prefast(suppress:__WARNING_USING_UNINIT_VAR,"Above this->Release() method does not actually free 'this'")
- if(EncodeSegmentValue(c, &segment) == true)
- {
- barGraph.BarsAsUChar = c;
-
- SetSevenSegmentDisplay(&segment);
- SetBarGraphDisplay(&barGraph);
- }
-
- Sleep(PlayInfo->Delay);
- }
- else
- {
- hr = S_OK;
- break;
- }
- }
- else
- {
- hr = HRESULT_FROM_WIN32(GetLastError());
- }
- }
-
- } while(SUCCEEDED(hr));
-
- CloseHandle(context.FileHandle);
-
-exit:
-
- fxRequest2->Release();
- return hr;
-}
-
-VOID
-CMyDevice::OnImpersonate(
- _In_ PVOID Context
- )
-/*++
-
- Routine Description:
-
- This routine handles the impersonation for the PLAY FILE I/O control.
-
- Arguments:
-
- Context - pointer to the impersonation context
-
- Return Value:
-
- None
-
---*/
-{
- PPLAYBACK_IMPERSONATION_CONTEXT context;
-
- context = (PPLAYBACK_IMPERSONATION_CONTEXT) Context;
-
- context->FileHandle = CreateFile(context->PlaybackInfo->Path,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
-
- if (context->FileHandle == INVALID_HANDLE_VALUE)
- {
- DWORD error = GetLastError();
- context->Hr = HRESULT_FROM_WIN32(error);
- }
- else
- {
- context->Hr = S_OK;
- }
-
- return;
-}
-
-#define SS_LEFT (SS_TOP_LEFT | SS_BOTTOM_LEFT)
-#define SS_RIGHT (SS_TOP_RIGHT | SS_BOTTOM_RIGHT)
-
-bool
-CMyDevice::EncodeSegmentValue(
- _In_ UCHAR Character,
- _Out_ SEVEN_SEGMENT *SevenSegment
- )
-{
- UCHAR letterMap[] = {
- (SS_TOP | SS_BOTTOM_LEFT | SS_RIGHT | SS_CENTER | SS_BOTTOM), // a
- (SS_LEFT | SS_CENTER | SS_BOTTOM | SS_BOTTOM_RIGHT), // b
- (SS_CENTER | SS_BOTTOM_LEFT | SS_BOTTOM), // c
- (SS_BOTTOM_LEFT | SS_CENTER | SS_BOTTOM | SS_RIGHT), // d
- (SS_LEFT | SS_TOP | SS_CENTER | SS_BOTTOM), // e
- (SS_LEFT | SS_TOP | SS_CENTER), // f
- (SS_TOP | SS_TOP_LEFT | SS_CENTER | SS_BOTTOM | SS_RIGHT), // g
- (SS_LEFT | SS_RIGHT | SS_CENTER), // h
- (SS_BOTTOM_LEFT), // i
- (SS_BOTTOM | SS_RIGHT), // j
- (SS_LEFT | SS_CENTER | SS_BOTTOM), // k
- (SS_LEFT | SS_BOTTOM), // l
- (SS_LEFT | SS_TOP | SS_RIGHT), // m
- (SS_BOTTOM_LEFT | SS_CENTER | SS_BOTTOM_RIGHT), // n
- (SS_BOTTOM_LEFT | SS_BOTTOM_RIGHT | SS_CENTER | SS_BOTTOM), // o
- (SS_LEFT | SS_TOP | SS_CENTER | SS_TOP_RIGHT), // p
- (SS_TOP_LEFT | SS_TOP | SS_CENTER | SS_RIGHT), // q
- (SS_BOTTOM_LEFT | SS_CENTER), // r
- (SS_TOP_LEFT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_RIGHT), // s
- (SS_TOP | SS_RIGHT), // t
- (SS_LEFT | SS_RIGHT | SS_BOTTOM), // u
- (SS_BOTTOM_LEFT | SS_BOTTOM | SS_BOTTOM_RIGHT), // v
- (SS_LEFT | SS_BOTTOM | SS_BOTTOM_RIGHT), // w
- (SS_LEFT | SS_CENTER | SS_RIGHT), // x
- (SS_TOP_LEFT | SS_CENTER | SS_RIGHT), // y
- (SS_TOP_RIGHT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_LEFT), // z
- };
-
- UCHAR numberMap[] = {
- (SS_LEFT | SS_TOP | SS_BOTTOM | SS_RIGHT | SS_DOT), // 0
- (SS_RIGHT | SS_DOT), // 1
- (SS_TOP |
- SS_TOP_RIGHT | SS_CENTER | SS_BOTTOM_LEFT |
- SS_BOTTOM | SS_DOT), // 2
- (SS_TOP | SS_CENTER | SS_BOTTOM | SS_RIGHT | SS_DOT), // 3
- (SS_TOP_LEFT | SS_CENTER | SS_RIGHT | SS_DOT), // 4
- (SS_TOP_LEFT |
- SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_BOTTOM_RIGHT | SS_DOT), // 5
- (SS_TOP | SS_CENTER | SS_BOTTOM |
- SS_LEFT | SS_BOTTOM_RIGHT | SS_DOT), // 6
- (SS_TOP | SS_RIGHT | SS_DOT), // 7
- (SS_TOP | SS_BOTTOM | SS_CENTER |
- SS_LEFT | SS_RIGHT | SS_DOT), // 8
- (SS_TOP_LEFT | SS_TOP | SS_CENTER | SS_RIGHT | SS_DOT), // 9
- };
-
- if ((Character >= 'a') && (Character <= 'z'))
- {
- SevenSegment->Segments = letterMap[Character - 'a'];
- return true;
- }
- else if ((Character >= 'A') && (Character <= 'Z'))
- {
- SevenSegment->Segments = letterMap[Character - 'A'];
- return true;
- }
- else if ((Character >= '0') && (Character <= '9'))
- {
- SevenSegment->Segments = numberMap[Character - '0'];
- return true;
- }
- else
- {
- SevenSegment->Segments = 0;
- return false;
- }
-}
-
diff --git a/usb/umdf_fx2/driver/Device.h b/usb/umdf_fx2/driver/Device.h
deleted file mode 100644
index 641a04de..00000000
--- a/usb/umdf_fx2/driver/Device.h
+++ /dev/null
@@ -1,604 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Device.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR Fx2 sample
- driver's device callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-#include "internal.h"
-
-#define ENDPOINT_TIMEOUT 10000
-#define NUM_OSRUSB_ENDPOINTS 3
-
-//
-// Define the vendor commands supported by our device
-//
-#define USBFX2LK_READ_7SEGMENT_DISPLAY 0xD4
-#define USBFX2LK_READ_SWITCHES 0xD6
-#define USBFX2LK_READ_BARGRAPH_DISPLAY 0xD7
-#define USBFX2LK_SET_BARGRAPH_DISPLAY 0xD8
-#define USBFX2LK_IS_HIGH_SPEED 0xD9
-#define USBFX2LK_REENUMERATE 0xDA
-#define USBFX2LK_SET_7SEGMENT_DISPLAY 0xDB
-
-typedef struct {
- UCHAR Segments;
-} SEVEN_SEGMENT, *PSEVEN_SEGMENT;
-
-//
-// Context for the impersonation callback.
-//
-
-typedef struct
-{
- PFILE_PLAYBACK PlaybackInfo;
-
- HANDLE FileHandle;
-
- HRESULT Hr;
-} PLAYBACK_IMPERSONATION_CONTEXT, *PPLAYBACK_IMPERSONATION_CONTEXT;
-
-//
-// Class for the driver.
-//
-
-class CMyDevice :
- public CUnknown,
- public IPnpCallbackHardware,
- public IPnpCallback,
- public IPnpCallbackSelfManagedIo,
- public IUsbTargetPipeContinuousReaderCallbackReadersFailed,
- public IUsbTargetPipeContinuousReaderCallbackReadComplete,
- public IImpersonateCallback
-{
-//
-// Private data members.
-//
-private:
- //
- // Weak reference to framework device
- // Use IWDFDevice2 so we can set power policy settings
- //
- IWDFDevice2 *m_FxDevice;
-
- //
- // Weak reference to the control queue
- //
- PCMyReadWriteQueue m_ReadWriteQueue;
-
- //
- // Weak reference to the control queue
- //
- PCMyControlQueue m_ControlQueue;
-
- //
- // The bus type for this device (used here for
- // illustrative purposes only)
- //
-
- GUID m_BusTypeGuid;
-
- //
- // USB Device I/O Target
- //
- IWDFUsbTargetDevice * m_pIUsbTargetDevice;
-
- //
- // USB Interface
- //
- IWDFUsbInterface * m_pIUsbInterface;
-
- //
- // USB Input pipe for Reads
- //
- IWDFUsbTargetPipe * m_pIUsbInputPipe;
-
- //
- // USB Output pipe for writes
- //
- IWDFUsbTargetPipe * m_pIUsbOutputPipe;
-
- //
- // USB interrupt pipe
- //
- IWDFUsbTargetPipe * m_pIUsbInterruptPipe;
-
- //
- // Use I/O target state management interfaces if you are going to
- // support a continuous reader.
- //
-
- //
- // USB interrupt pipe state management
- //
- IWDFIoTargetStateManagement * m_pIoTargetInterruptPipeStateMgmt;
-
- //
- // Device Speed (Low, Full, High)
- //
- UCHAR m_Speed;
-
- //
- // Current switch state
- //
- SWITCH_STATE m_SwitchState;
-
- //
- // Request to be used for pending reads from interrupt pipe
- // (to get switch state change notifications)
- //
-
- IWDFIoRequest * m_RequestForPendingRead;
-
- //
- // If reads stopped because of a transient problem, the error status
- // is stored here.
- //
-
- HRESULT m_InterruptReadProblem;
-
- //
- // Switch state buffer - this might hold the transient value
- // m_SwitchState holds stable value of the switch state
- //
- SWITCH_STATE m_SwitchStateBuffer;
-
- //
- // A manual queue to hold requests for changes in the I/O switch state.
- //
-
- IWDFIoQueue * m_SwitchChangeQueue;
-
-//
-// Private methods.
-//
-
-private:
-
- CMyDevice(
- VOID
- ) :
- m_FxDevice(NULL),
- m_ControlQueue(NULL),
- m_ReadWriteQueue(NULL),
- m_SwitchChangeQueue(NULL),
- m_pIUsbTargetDevice(NULL),
- m_pIUsbInterface(NULL),
- m_pIUsbInputPipe(NULL),
- m_pIUsbOutputPipe(NULL),
- m_pIUsbInterruptPipe(NULL),
- m_Speed(0),
- m_InterruptReadProblem(S_OK),
- m_RequestForPendingRead(NULL),
- m_pIoTargetInterruptPipeStateMgmt(NULL)
- {
- ZeroMemory(&m_BusTypeGuid, sizeof(m_BusTypeGuid));
- }
-
- ~CMyDevice(
- );
-
- HRESULT
- Initialize(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- //
- // Helper methods
- //
-
- HRESULT
- GetBusTypeGuid(
- VOID
- );
-
- HRESULT
- CreateUsbIoTargets(
- VOID
- );
-
-
- HRESULT
- ConfigureUsbPipes(
- );
-
- HRESULT
- SetPowerManagement(
- VOID
- );
-
- HRESULT
- IndicateDeviceReady(
- VOID
- );
-
- //
- // Helper functions
- //
-
- HRESULT
- SendControlTransferSynchronously(
- _In_ PWINUSB_SETUP_PACKET SetupPacket,
- _Inout_updates_(BufferLength) PBYTE Buffer,
- _In_ ULONG BufferLength,
- _Out_ PULONG LengthTransferred
- );
-
- static
- WDF_IO_TARGET_STATE
- GetTargetState(
- IWDFIoTarget * pTarget
- );
-
- VOID
- ServiceSwitchChangeQueue(
- _In_ SWITCH_STATE NewState,
- _In_ HRESULT CompletionStatus,
- _In_opt_ IWDFFile *SpecificFile
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _In_ IWDFDriver *FxDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit,
- _Out_ PCMyDevice *Device
- );
-
- IWDFDevice *
- GetFxDevice(
- VOID
- )
- {
- return m_FxDevice;
- }
-
- HRESULT
- Configure(
- VOID
- );
-
- IPnpCallback *
- QueryIPnpCallback(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallback *>(this);
- }
-
- IPnpCallbackHardware *
- QueryIPnpCallbackHardware(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallbackHardware *>(this);
- }
-
- IPnpCallbackSelfManagedIo *
- QueryIPnpCallbackSelfManagedIo(
- VOID
- )
- {
- AddRef();
- return static_cast<IPnpCallbackSelfManagedIo *>(this);
- }
-
-
- IUsbTargetPipeContinuousReaderCallbackReadersFailed *
- QueryContinousReaderFailureCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IUsbTargetPipeContinuousReaderCallbackReadersFailed *>(this);
- }
-
- IUsbTargetPipeContinuousReaderCallbackReadComplete *
- QueryContinousReaderCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IUsbTargetPipeContinuousReaderCallbackReadComplete *>(this);
- }
-
- IImpersonateCallback *
- QueryIImpersonateCallback(
- VOID
- )
- {
- AddRef();
- return static_cast<IImpersonateCallback *>(this);
- }
-
- HRESULT
- GetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- );
-
- HRESULT
- SetBarGraphDisplay(
- _In_ PBAR_GRAPH_STATE BarGraphState
- );
-
- HRESULT
- GetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- );
-
- HRESULT
- SetSevenSegmentDisplay(
- _In_ PSEVEN_SEGMENT SevenSegment
- );
-
- HRESULT
- ReadSwitchState(
- _In_ PSWITCH_STATE SwitchState
- );
-
- bool
- EncodeSegmentValue(
- _In_ UCHAR Character,
- _Out_ SEVEN_SEGMENT *SevenSegment
- );
-
- HRESULT
- PlaybackFile(
- _In_ PFILE_PLAYBACK PlaybackInfo,
- _In_ IWDFIoRequest *FxRequest
- );
-
- //
- //returns a weak reference to the target USB device
- //DO NOT release it
- //
- IWDFUsbTargetDevice *
- GetUsbTargetDevice(
- )
- {
- return m_pIUsbTargetDevice;
- }
-
- //
- //returns a weak reference to input pipe
- //DO NOT release it
- //
- IWDFUsbTargetPipe *
- GetInputPipe(
- )
- {
- return m_pIUsbInputPipe;
- }
-
- //
- //returns a weak reference to output pipe
- //DO NOT release it
- //
- IWDFUsbTargetPipe *
- GetOutputPipe(
- )
- {
- return m_pIUsbOutputPipe;
- }
-
- IWDFIoQueue *
- GetSwitchChangeQueue(
- VOID
- )
- {
- return m_SwitchChangeQueue;
- }
-
- PSWITCH_STATE
- GetCurrentSwitchState(
- VOID
- )
- {
- return &m_SwitchState;
- }
-
-
- HRESULT
- ConfigContReaderForInterruptEndPoint(
- VOID
- );
-//
-// COM methods
-//
-public:
-
- //
- // IUnknown methods.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
- //
- // IPnpCallbackHardware
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnPrepareHardware(
- _In_ IWDFDevice *FxDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnReleaseHardware(
- _In_ IWDFDevice *FxDevice
- );
-
-
- //
- // IPnpCallback
- //
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnD0Entry(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnD0Exit(
- _In_ IWDFDevice* pWdfDevice,
- _In_ WDF_POWER_DEVICE_STATE previousState
- );
-
- virtual
- void
- STDMETHODCALLTYPE
- OnSurpriseRemoval(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnQueryRemove(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnQueryStop(
- _In_ IWDFDevice* pWdfDevice
- );
-
- //
- // IPnpCallbackSelfManagedIo
- //
- virtual
- VOID
- STDMETHODCALLTYPE
- OnSelfManagedIoCleanup(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnSelfManagedIoFlush(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoInit(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoRestart(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoStop(
- _In_ IWDFDevice* pWdfDevice
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnSelfManagedIoSuspend(
- _In_ IWDFDevice* pWdfDevice
- );
-
- //
- // IUsbTargetPipeContinuousReaderCallbackReadersFailed
- //
- virtual
- BOOL
- STDMETHODCALLTYPE
- OnReaderFailure(
- IWDFUsbTargetPipe * pPipe,
- HRESULT hrCompletion
- );
-
- //
- // IUsbTargetPipeContinuousReaderCallbackReadComplete
- //
- virtual
- VOID
- STDMETHODCALLTYPE
- OnReaderCompletion(
- IWDFUsbTargetPipe * pPipe,
- IWDFMemory * pMemory,
- SIZE_T NumBytesTransferred,
- PVOID Context
- );
-
- // IImpersonateCallback
- virtual
- VOID
- STDMETHODCALLTYPE
- OnImpersonate(
- _In_ PVOID Context
- );
-};
-
diff --git a/usb/umdf_fx2/driver/Driver.cpp b/usb/umdf_fx2/driver/Driver.cpp
deleted file mode 100644
index d6635242..00000000
--- a/usb/umdf_fx2/driver/Driver.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- Driver.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2 driver's
- core driver callback object.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "driver.tmh"
-
-HRESULT
-CMyDriver::CreateInstance(
- _Out_ PCMyDriver *Driver
- )
-/*++
-
- Routine Description:
-
- This static method is invoked in order to create and initialize a new
- instance of the driver class. The caller should arrange for the object
- to be released when it is no longer in use.
-
- Arguments:
-
- Driver - a location to store a referenced pointer to the new instance
-
- Return Value:
-
- S_OK if successful, or error otherwise.
-
---*/
-{
- PCMyDriver driver;
- HRESULT hr;
-
- //
- // Allocate the callback object.
- //
-
- driver = new CMyDriver();
-
- if (NULL == driver)
- {
- return E_OUTOFMEMORY;
- }
-
- //
- // Initialize the callback object.
- //
-
- hr = driver->Initialize();
-
- if (SUCCEEDED(hr))
- {
- //
- // Store a pointer to the new, initialized object in the output
- // parameter.
- //
-
- *Driver = driver;
- }
- else
- {
-
- //
- // Release the reference on the driver object to get it to delete
- // itself.
- //
-
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyDriver::Initialize(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method is called to initialize a newly created driver callback object
- before it is returned to the creator. Unlike the constructor, the
- Initialize method contains operations which could potentially fail.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- return S_OK;
-}
-
-HRESULT
-CMyDriver::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This method returns a pointer to the requested interface on the callback
- object..
-
- Arguments:
-
- InterfaceId - the IID of the interface to query/reference
-
- Interface - a location to store the interface pointer.
-
- Return Value:
-
- S_OK if the interface is supported.
- E_NOINTERFACE if it is not supported.
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IDriverEntry)))
- {
- *Interface = QueryIDriverEntry();
- return S_OK;
- }
- else
- {
- return CUnknown::QueryInterface(InterfaceId, Interface);
- }
-}
-
-HRESULT
-CMyDriver::OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- )
-/*++
-
- Routine Description:
-
- The FX invokes this method when it wants to install our driver on a device
- stack. This method creates a device callback object, then calls the Fx
- to create an Fx device object and associate the new callback object with
- it.
-
- Arguments:
-
- FxWdfDriver - the Fx driver object.
-
- FxDeviceInit - the initialization information for the device.
-
- Return Value:
-
- status
-
---*/
-{
- HRESULT hr;
-
- PCMyDevice device = NULL;
-
- //
- // TODO: Do any per-device initialization (reading settings from the
- // registry for example) that's necessary before creating your
- // device callback object here. Otherwise you can leave such
- // initialization to the initialization of the device event
- // handler.
- //
-
- //
- // Create a new instance of our device callback object
- //
-
- hr = CMyDevice::CreateInstance(FxWdfDriver, FxDeviceInit, &device);
-
- //
- // TODO: Change any per-device settings that the object exposes before
- // calling Configure to let it complete its initialization.
- //
-
- //
- // If that succeeded then call the device's construct method. This
- // allows the device to create any queues or other structures that it
- // needs now that the corresponding fx device object has been created.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = device->Configure();
- }
-
- //
- // Release the reference on the device callback object now that it's been
- // associated with an fx device object.
- //
-
- if (NULL != device)
- {
- device->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_fx2/driver/Driver.h b/usb/umdf_fx2/driver/Driver.h
deleted file mode 100644
index d9cafb4e..00000000
--- a/usb/umdf_fx2/driver/Driver.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Driver.h
-
-Abstract:
-
- This module contains the type definitions for the UMDF OSR Fx2 sample's
- driver callback class.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// This class handles driver events for the OSR Fx2 sample. In particular
-// it supports the OnDeviceAdd event, which occurs when the driver is called
-// to setup per-device handlers for a new device stack.
-//
-
-class CMyDriver : public CUnknown, public IDriverEntry
-{
-//
-// Private data members.
-//
-private:
-
-//
-// Private methods.
-//
-private:
-
- //
- // Returns a refernced pointer to the IDriverEntry interface.
- //
-
- IDriverEntry *
- QueryIDriverEntry(
- VOID
- )
- {
- AddRef();
- return static_cast<IDriverEntry*>(this);
- }
-
- HRESULT
- Initialize(
- VOID
- );
-
-//
-// Public methods
-//
-public:
-
- //
- // The factory method used to create an instance of this driver.
- //
-
- static
- HRESULT
- CreateInstance(
- _Out_ PCMyDriver *Driver
- );
-
-//
-// COM methods
-//
-public:
-
- //
- // IDriverEntry methods
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnInitialize(
- _In_ IWDFDriver *FxWdfDriver
- )
- {
- UNREFERENCED_PARAMETER(FxWdfDriver);
-
- return S_OK;
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- OnDeviceAdd(
- _In_ IWDFDriver *FxWdfDriver,
- _In_ IWDFDeviceInitialize *FxDeviceInit
- );
-
- virtual
- VOID
- STDMETHODCALLTYPE
- OnDeinitialize(
- _In_ IWDFDriver *FxWdfDriver
- )
- {
- UNREFERENCED_PARAMETER(FxWdfDriver);
-
- return;
- }
-
- //
- // IUnknown methods.
- //
- // We have to implement basic ones here that redirect to the
- // base class becuase of the multiple inheritance.
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
diff --git a/usb/umdf_fx2/driver/OsrUsbFx2.ctl b/usb/umdf_fx2/driver/OsrUsbFx2.ctl
deleted file mode 100644
index 4dab56ae..00000000
--- a/usb/umdf_fx2/driver/OsrUsbFx2.ctl
+++ /dev/null
@@ -1 +0,0 @@
-da5fbdfd-1eae-4ecf-b426-a3818f325ddb WudfOsrUsbFx2TraceGuid
diff --git a/usb/umdf_fx2/driver/OsrUsbFx2.rc b/usb/umdf_fx2/driver/OsrUsbFx2.rc
deleted file mode 100644
index 36f10ea9..00000000
--- a/usb/umdf_fx2/driver/OsrUsbFx2.rc
+++ /dev/null
@@ -1,21 +0,0 @@
-//---------------------------------------------------------------------------
-// OsrUsbDevice.rc
-//
-// Copyright (c) Microsoft Corporation, All Rights Reserved
-//---------------------------------------------------------------------------
-
-
-#include <windows.h>
-#include <ntverp.h>
-
-//
-// TODO: Change the file description and file names to match your binary.
-//
-
-#define VER_FILETYPE VFT_DLL
-#define VER_FILESUBTYPE VFT_UNKNOWN
-#define VER_FILEDESCRIPTION_STR "WDF:UMDF OSR USB Fx2 User-Mode Driver Sample"
-#define VER_INTERNALNAME_STR "WUDFOsrUsbFx2"
-#define VER_ORIGINALFILENAME_STR "WUDFOsrUsbFx2.dll"
-
-#include "common.ver"
diff --git a/usb/umdf_fx2/driver/ReadWriteQueue.cpp b/usb/umdf_fx2/driver/ReadWriteQueue.cpp
deleted file mode 100644
index 46144829..00000000
--- a/usb/umdf_fx2/driver/ReadWriteQueue.cpp
+++ /dev/null
@@ -1,425 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the read/write/ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "ReadWriteQueue.tmh"
-
-VOID
-CMyReadWriteQueue::OnCompletion(
- _In_ IWDFIoRequest* pWdfRequest,
- _In_ IWDFIoTarget* pIoTarget,
- _In_ IWDFRequestCompletionParams* pParams,
- _In_ PVOID pContext
- )
-{
- UNREFERENCED_PARAMETER(pIoTarget);
- UNREFERENCED_PARAMETER(pContext);
-
- pWdfRequest->CompleteWithInformation(
- pParams->GetCompletionStatus(),
- pParams->GetInformation()
- );
-}
-
-void
-CMyReadWriteQueue::ForwardFormattedRequest(
- _In_ IWDFIoRequest* pRequest,
- _In_ IWDFIoTarget* pIoTarget
- )
-{
- //
- //First set the completion callback
- //
-
- IRequestCallbackRequestCompletion * pCompletionCallback = NULL;
- HRESULT hrQI = this->QueryInterface(IID_PPV_ARGS(&pCompletionCallback));
- WUDF_TEST_DRIVER_ASSERT(SUCCEEDED(hrQI) && (NULL != pCompletionCallback));
-
- pRequest->SetCompletionCallback(
- pCompletionCallback,
- NULL
- );
-
- pCompletionCallback->Release();
- pCompletionCallback = NULL;
-
- //
- //Send down the request
- //
-
- HRESULT hrSend = S_OK;
- hrSend = pRequest->Send(pIoTarget,
- 0, //flags
- 0); //timeout
-
- if (FAILED(hrSend))
- {
- pRequest->CompleteWithInformation(hrSend, 0);
- }
-
- return;
-}
-
-
-CMyReadWriteQueue::CMyReadWriteQueue(
- _In_ PCMyDevice Device
- ) :
- CMyQueue(Device)
-{
-}
-
-//
-// Queue destructor.
-// Free up the buffer, wait for thread to terminate and
-//
-
-CMyReadWriteQueue::~CMyReadWriteQueue(
- VOID
- )
-/*++
-
-Routine Description:
-
-
- IUnknown implementation of Release
-
-Aruments:
-
-
-Return Value:
-
- ULONG (reference count after Release)
-
---*/
-{
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC! Entry"
- );
-
-}
-
-
-HRESULT
-STDMETHODCALLTYPE
-CMyReadWriteQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
-
- if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackWrite)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackWrite();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackRead)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackRead();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IRequestCallbackRequestCompletion)))
- {
- hr = S_OK;
- *Object = QueryIRequestCallbackRequestCompletion();
- }
- else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackIoStop)))
- {
- hr = S_OK;
- *Object = QueryIQueueCallbackIoStop();
- }
- else
- {
- hr = CMyQueue::QueryInterface(InterfaceId, Object);
- }
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyReadWriteQueue::CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyReadWriteQueue *Queue
- )
-/*++
-
-Routine Description:
-
-
- CreateInstance creates an instance of the queue object.
-
-Aruments:
-
- ppUkwn - OUT parameter is an IUnknown interface to the queue object
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- PCMyReadWriteQueue queue;
- HRESULT hr = S_OK;
-
- queue = new CMyReadWriteQueue(Device);
-
- if (NULL == queue)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Call the queue callback object to initialize itself. This will create
- // its partner queue framework object.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = queue->Initialize();
- }
-
- if (SUCCEEDED(hr))
- {
- *Queue = queue;
- }
- else
- {
- SAFE_RELEASE(queue);
- }
-
- return hr;
-}
-
-HRESULT
-CMyReadWriteQueue::Initialize(
- )
-{
- HRESULT hr;
-
- //
- // First initialize the base class. This will create the partner FxIoQueue
- // object and setup automatic forwarding of I/O controls.
- //
-
- hr = __super::Initialize(WdfIoQueueDispatchParallel,
- true,
- true);
-
- //
- // return the status.
- //
-
- return hr;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnWrite(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T BytesToWrite
- )
-/*++
-
-Routine Description:
-
-
- Write dispatch routine
- IQueueCallbackWrite
-
-Aruments:
-
- pWdfQueue - Framework Queue instance
- pWdfRequest - Framework Request instance
- BytesToWrite - Lenth of bytes in the write buffer
-
- Allocate and copy data to local buffer
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Queue %p Request %p BytesToTransfer %d\n",
- this,
- pWdfRequest,
- (ULONG)(ULONG_PTR)BytesToWrite
- );
-
- HRESULT hr = S_OK;
- IWDFMemory * pInputMemory = NULL;
- IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
-
- pWdfRequest->GetInputMemory(&pInputMemory);
-
- hr = pOutputPipe->FormatRequestForWrite(
- pWdfRequest,
- NULL, //pFile
- pInputMemory,
- NULL, //Memory offset
- NULL //DeviceOffset
- );
-
- if (FAILED(hr))
- {
- pWdfRequest->Complete(hr);
- }
- else
- {
- ForwardFormattedRequest(pWdfRequest, pOutputPipe);
- }
-
- SAFE_RELEASE(pInputMemory);
-
- return;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnRead(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T BytesToRead
- )
-/*++
-
-Routine Description:
-
-
- Read dispatch routine
- IQueueCallbackRead
-
-Aruments:
-
- pWdfQueue - Framework Queue instance
- pWdfRequest - Framework Request instance
- BytesToRead - Lenth of bytes in the read buffer
-
- Copy available data into the read buffer
-Return Value:
-
- VOID
-
---*/
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Queue %p Request %p BytesToTransfer %d\n",
- this,
- pWdfRequest,
- (ULONG)(ULONG_PTR)BytesToRead
- );
-
- HRESULT hr = S_OK;
- IWDFMemory * pOutputMemory = NULL;
-
- pWdfRequest->GetOutputMemory(&pOutputMemory);
-
- hr = m_Device->GetInputPipe()->FormatRequestForRead(
- pWdfRequest,
- NULL, //pFile
- pOutputMemory,
- NULL, //Memory offset
- NULL //DeviceOffset
- );
-
- if (FAILED(hr))
- {
- pWdfRequest->Complete(hr);
- }
- else
- {
- ForwardFormattedRequest(pWdfRequest, m_Device->GetInputPipe());
- }
-
- SAFE_RELEASE(pOutputMemory);
-
- return;
-}
-
-STDMETHODIMP_ (void)
-CMyReadWriteQueue::OnIoStop(
- _In_ IWDFIoQueue * pWdfQueue,
- _In_ IWDFIoRequest * pWdfRequest,
- _In_ ULONG ActionFlags
- )
-{
- UNREFERENCED_PARAMETER(pWdfQueue);
-
-
- //
- // The driver owns the request and no locking constraint is safe for
- // the queue callbacks
- //
- if (ActionFlags == WdfRequestStopActionSuspend )
- {
- IWDFIoRequest2 * request2 = NULL;
- HRESULT hr;
-
- hr = pWdfRequest->QueryInterface(IID_PPV_ARGS(&request2));
- if (FAILED(hr))
- {
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC!: Failed to QI for IWDFIoRequest2: %!hresult!",
- hr);
- return;
- }
-
- request2->StopAcknowledge(FALSE); //don't requeue
- SAFE_RELEASE(request2);
- }
- else if(ActionFlags == WdfRequestStopActionPurge)
- {
- //
- // Cancel the sent request since we are asked to purge the request
- //
-
- pWdfRequest->CancelSentRequest();
- }
-
- return;
-}
-
diff --git a/usb/umdf_fx2/driver/ReadWriteQueue.h b/usb/umdf_fx2/driver/ReadWriteQueue.h
deleted file mode 100644
index 4f1a98c1..00000000
--- a/usb/umdf_fx2/driver/ReadWriteQueue.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.h
-
-Abstract:
-
- This file defines the queue callback interface.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-
-#define MAX_TRANSFER_SIZE(x) 64*1024*1024
-
-//
-// Queue Callback Object.
-//
-
-class CMyReadWriteQueue :
- public IQueueCallbackRead,
- public IQueueCallbackWrite,
- public IRequestCallbackRequestCompletion,
- public IQueueCallbackIoStop,
- public CMyQueue
-{
-protected:
- HRESULT
- Initialize(
- );
-
- void
- ForwardFormattedRequest(
- _In_ IWDFIoRequest* pRequest,
- _In_ IWDFIoTarget* pIoTarget
- );
-
-public:
-
- CMyReadWriteQueue(
- _In_ PCMyDevice Device
- );
-
- virtual ~CMyReadWriteQueue();
-
- static
- HRESULT
- CreateInstance(
- _In_ PCMyDevice Device,
- _Out_ PCMyReadWriteQueue *Queue
- );
-
- HRESULT
- Configure(
- VOID
- )
- {
- return CMyQueue::Configure();
- }
-
- IQueueCallbackWrite *
- QueryIQueueCallbackWrite(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackWrite *>(this);
- }
-
- IQueueCallbackRead *
- QueryIQueueCallbackRead(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackRead *>(this);
- }
-
- IRequestCallbackRequestCompletion *
- QueryIRequestCallbackRequestCompletion(
- VOID
- )
- {
- AddRef();
- return static_cast<IRequestCallbackRequestCompletion *>(this);
- }
-
- IQueueCallbackIoStop*
- QueryIQueueCallbackIoStop(
- VOID
- )
- {
- AddRef();
- return static_cast<IQueueCallbackIoStop *>(this);
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
-
- //
- // Wdf Callbacks
- //
-
- //
- // IQueueCallbackWrite
- //
- STDMETHOD_ (void, OnWrite)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T NumOfBytesToWrite
- );
-
- //
- // IQueueCallbackRead
- //
- STDMETHOD_ (void, OnRead)(
- _In_ IWDFIoQueue *pWdfQueue,
- _In_ IWDFIoRequest *pWdfRequest,
- _In_ SIZE_T NumOfBytesToRead
- );
-
- //
- //IRequestCallbackRequestCompletion
- //
-
- STDMETHOD_ (void, OnCompletion)(
- _In_ IWDFIoRequest* pWdfRequest,
- _In_ IWDFIoTarget* pIoTarget,
- _In_ IWDFRequestCompletionParams* pParams,
- _In_ PVOID pContext
- );
-
- //
- //IQueueCallbackIoStop
- //
-
- STDMETHOD_ (void, OnIoStop)(
- _In_ IWDFIoQueue * pWdfQueue,
- _In_ IWDFIoRequest * pWdfRequest,
- _In_ ULONG ActionFlags
- );
-
-};
diff --git a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.inx b/usb/umdf_fx2/driver/WUDFOsrUsbFx2.inx
deleted file mode 100644
index 9ad339b6..00000000
--- a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.inx
+++ /dev/null
Binary files differ
diff --git a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj b/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj
deleted file mode 100644
index 3a21cae8..00000000
--- a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{6E5D412E-EF25-4DA4-B64E-6EAE67AF8D98}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <UMDF_VERSION_MAJOR>1</UMDF_VERSION_MAJOR>
- <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
- <SupportsPackaging>false</SupportsPackaging>
- <RequiresPackageProject>true</RequiresPackageProject>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{87BFB278-0771-439F-893D-89376B83F7F0}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType>UMDF</DriverType>
- <PlatformToolset>WindowsUserModeDriver10.0</PlatformToolset>
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems">
- <ClCompile Include="dllsup.cpp; comsup.cpp; driver.cpp; device.cpp; queue.cpp; ControlQueue.cpp; ReadWriteQueue.cpp">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </ClCompile>
- <OtherWpp Include="OsrUsbFx2.rc">
- <WppEnabled>true</WppEnabled>
- <WppDllMacro>true</WppDllMacro>
- <WppScanConfigurationData>internal.h</WppScanConfigurationData>
- </OtherWpp>
- </ItemGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>WUDFOsrUsbFx2</TargetName>
- <WIN32_WINNT_VERSION>0x0A00</WIN32_WINNT_VERSION>
- <NTDDI_VERSION>0x0A000000</NTDDI_VERSION>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>%(DisableSpecificWarnings);4201</DisableSpecificWarnings>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);_UNICODE;UNICODE</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol>
- <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ResourceCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </ResourceCompile>
- <ClCompile>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- <Midl>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..\inc;..\..\inc</AdditionalIncludeDirectories>
- </Midl>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);$(SDK_LIB_PATH)\strsafe.lib;$(SDK_LIB_PATH)\kernel32.lib;$(SDK_LIB_PATH)\advapi32.lib;$(SDK_LIB_PATH)\setupapi.lib</AdditionalDependencies>
- <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFx2.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inx" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project> \ No newline at end of file
diff --git a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj.Filters b/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj.Filters
deleted file mode 100644
index 372badf0..00000000
--- a/usb/umdf_fx2/driver/WUDFOsrUsbFx2.vcxproj.Filters
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{F8E1CCD2-AADC-44B5-B631-5C6E6D74CFCD}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{0E050956-9FA9-495C-9F9F-D663EFA3A344}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{49CD21A6-260A-471B-B532-9E9E23F6195F}</UniqueIdentifier>
- </Filter>
- <Filter Include="Driver Files">
- <Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{A942026F-83A0-4223-881A-29732777F22C}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="comsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="ControlQueue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="device.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dllsup.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="driver.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="queue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="ReadWriteQueue.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <None Include="exports.def">
- <Filter>Source Files</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="OsrUsbFx2.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_fx2/driver/comsup.cpp b/usb/umdf_fx2/driver/comsup.cpp
deleted file mode 100644
index 2f14f588..00000000
--- a/usb/umdf_fx2/driver/comsup.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.cpp
-
-Abstract:
-
- This module contains implementations for the functions and methods
- used for providing COM support.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-
-#include "comsup.tmh"
-
-//
-// Implementation of CUnknown methods.
-//
-
-CUnknown::CUnknown(
- VOID
- ) : m_ReferenceCount(1)
-/*++
-
- Routine Description:
-
- Constructor for an instance of the CUnknown class. This simply initializes
- the reference count of the object to 1. The caller is expected to
- call Release() if it wants to delete the object once it has been allocated.
-
- Arguments:
-
- None
-
- Return Value:
-
- None
-
---*/
-{
- // do nothing.
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CUnknown::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method provides the basic support for query interface on CUnknown.
- If the interface requested is IUnknown it references the object and
- returns an interface pointer. Otherwise it returns an error.
-
- Arguments:
-
- InterfaceId - the IID being requested
-
- Object - a location to store the interface pointer to return.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- if (IsEqualIID(InterfaceId, __uuidof(IUnknown)))
- {
- *Object = QueryIUnknown();
- return S_OK;
- }
- else
- {
- *Object = NULL;
- return E_NOINTERFACE;
- }
-}
-
-IUnknown *
-CUnknown::QueryIUnknown(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IUnknown interface.
-
- This allows other methods to convert a CUnknown pointer into an IUnknown
- pointer without a typecast and without calling QueryInterface and dealing
- with the return value.
-
- Arguments:
-
- None
-
- Return Value:
-
- A pointer to the object's IUnknown interface.
-
---*/
-{
- AddRef();
- return static_cast<IUnknown *>(this);
-}
-
-ULONG
-STDMETHODCALLTYPE
-CUnknown::AddRef(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method adds one to the object's reference count.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. The caller should only use this for debugging
- as the object's actual reference count can change while the caller
- examines the return value.
-
---*/
-{
- return InterlockedIncrement(&m_ReferenceCount);
-}
-
-_Use_decl_annotations_
-ULONG
-STDMETHODCALLTYPE
-CUnknown::Release(
- VOID
- )
-/*++
-
- Routine Description:
-
- This method subtracts one to the object's reference count. If the count
- goes to zero, this method deletes the object.
-
- Arguments:
-
- None
-
- Return Value:
-
- The new reference count. If the caller uses this value it should only be
- to check for zero (i.e. this call caused or will cause deletion) or
- non-zero (i.e. some other call may have caused deletion, but this one
- didn't).
-
---*/
-{
- ULONG count = InterlockedDecrement(&m_ReferenceCount);
-
- if (count == 0)
- {
- delete this;
- }
- return count;
-}
-
-//
-// Implementation of CClassFactory methods.
-//
-
-//
-// Define storage for the factory's static lock count variable.
-//
-
-LONG CClassFactory::s_LockCount = 0;
-
-IClassFactory *
-CClassFactory::QueryIClassFactory(
- VOID
- )
-/*++
-
- Routine Description:
-
- This helper method references the object and returns a pointer to the
- object's IClassFactory interface.
-
- This allows other methods to convert a CClassFactory pointer into an
- IClassFactory pointer without a typecast and without dealing with the
- return value QueryInterface.
-
- Arguments:
-
- None
-
- Return Value:
-
- A referenced pointer to the object's IClassFactory interface.
-
---*/
-{
- AddRef();
- return static_cast<IClassFactory *>(this);
-}
-
-HRESULT
-CClassFactory::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This method attempts to retrieve the requested interface from the object.
-
- If the interface is found then the reference count on that interface (and
- thus the object itself) is incremented.
-
- Arguments:
-
- InterfaceId - the interface the caller is requesting.
-
- Object - a location to store the interface pointer.
-
- Return Value:
-
- S_OK or E_NOINTERFACE
-
---*/
-{
- //
- // This class only supports IClassFactory so check for that.
- //
-
- if (IsEqualIID(InterfaceId, __uuidof(IClassFactory)))
- {
- *Object = QueryIClassFactory();
- return S_OK;
- }
- else
- {
- //
- // See if the base class supports the interface.
- //
-
- return CUnknown::QueryInterface(InterfaceId, Object);
- }
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::CreateInstance(
- _In_opt_ IUnknown * /* OuterObject */,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- )
-/*++
-
- Routine Description:
-
- This COM method is the factory routine - it creates instances of the driver
- callback class and returns the specified interface on them.
-
- Arguments:
-
- OuterObject - only used for aggregation, which our driver callback class
- does not support.
-
- InterfaceId - the interface ID the caller would like to get from our
- new object.
-
- Object - a location to store the referenced interface pointer to the new
- object.
-
- Return Value:
-
- Status.
-
---*/
-{
- HRESULT hr;
-
- PCMyDriver driver;
-
- *Object = NULL;
-
- hr = CMyDriver::CreateInstance(&driver);
-
- if (SUCCEEDED(hr))
- {
- hr = driver->QueryInterface(InterfaceId, Object);
- driver->Release();
- }
-
- return hr;
-}
-
-HRESULT
-STDMETHODCALLTYPE
-CClassFactory::LockServer(
- _In_ BOOL Lock
- )
-/*++
-
- Routine Description:
-
- This COM method can be used to keep the DLL in memory. However since the
- driver's DllCanUnloadNow function always returns false, this has little
- effect. Still it tracks the number of lock and unlock operations.
-
- Arguments:
-
- Lock - Whether the caller wants to lock or unlock the "server"
-
- Return Value:
-
- S_OK
-
---*/
-{
- if (Lock)
- {
- InterlockedIncrement(&s_LockCount);
- }
- else
- {
- InterlockedDecrement(&s_LockCount);
- }
- return S_OK;
-}
-
diff --git a/usb/umdf_fx2/driver/comsup.h b/usb/umdf_fx2/driver/comsup.h
deleted file mode 100644
index 167b21ff..00000000
--- a/usb/umdf_fx2/driver/comsup.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- ComSup.h
-
-Abstract:
-
- This module contains classes and functions use for providing COM support
- code.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Forward type declarations. They are here rather than in internal.h as
-// you only need them if you choose to use these support classes.
-//
-
-typedef class CUnknown *PCUnknown;
-typedef class CClassFactory *PCClassFactory;
-
-//
-// Base class to implement IUnknown. You can choose to derive your COM
-// classes from this class, or simply implement IUnknown in each of your
-// classes.
-//
-
-class CUnknown : public IUnknown
-{
-
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The reference count for this object. Initialized to 1 in the
- // constructor.
- //
-
- LONG m_ReferenceCount;
-
-//
-// Protected data members and methods. These are accessible by the subclasses
-// but not by other classes.
-//
-protected:
-
- //
- // The constructor and destructor are protected to ensure that only the
- // subclasses of CUnknown can create and destroy instances.
- //
-
- CUnknown(
- VOID
- );
-
- //
- // The destructor MUST be virtual. Since any instance of a CUnknown
- // derived class should only be deleted from within CUnknown::Release,
- // the destructor MUST be virtual or only CUnknown::~CUnknown will get
- // invoked on deletion.
- //
- // If you see that your CMyDevice specific destructor is never being
- // called, make sure you haven't deleted the virtual destructor here.
- //
-
- virtual
- ~CUnknown(
- VOID
- )
- {
- // Do nothing
- }
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IUnknown *
- QueryIUnknown(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- );
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
-
-//
-// Class factory support class. Create an instance of this from your
-// DllGetClassObject method and modify the implementation to create
-// an instance of your driver event handler class.
-//
-
-class CClassFactory : public CUnknown, public IClassFactory
-{
-//
-// Private data members and methods. These are only accessible by the methods
-// of this class.
-//
-private:
-
- //
- // The lock count. This is shared across all instances of IClassFactory
- // and can be queried through the public IsLocked method.
- //
-
- static LONG s_LockCount;
-
-//
-// Public Methods. These are accessible by any class.
-//
-public:
-
- IClassFactory *
- QueryIClassFactory(
- VOID
- );
-
-//
-// COM Methods.
-//
-public:
-
- //
- // IUnknown methods
- //
-
- virtual
- ULONG
- STDMETHODCALLTYPE
- AddRef(
- VOID
- )
- {
- return __super::AddRef();
- }
-
- _At_(this, __drv_freesMem(object))
- virtual
- ULONG
- STDMETHODCALLTYPE
- Release(
- VOID
- )
- {
- return __super::Release();
- }
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-
- //
- // IClassFactory methods.
- //
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- CreateInstance(
- _In_opt_ IUnknown *OuterObject,
- _In_ REFIID InterfaceId,
- _Out_ PVOID *Object
- );
-
- virtual
- HRESULT
- STDMETHODCALLTYPE
- LockServer(
- _In_ BOOL Lock
- );
-};
diff --git a/usb/umdf_fx2/driver/dllsup.cpp b/usb/umdf_fx2/driver/dllsup.cpp
deleted file mode 100644
index 7fda91e4..00000000
--- a/usb/umdf_fx2/driver/dllsup.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved.
-
-Module Name:
-
- dllsup.cpp
-
-Abstract:
-
- This module contains the implementation of the UMDF OSR Fx2
- Driver's entry point and its exported functions for providing COM support.
-
- This module can be copied without modification to a new UMDF driver. It
- depends on some of the code in comsup.cpp & comsup.h to handle DLL
- registration and creating the first class factory.
-
- This module is dependent on the following defines:
-
- MYDRIVER_TRACING_ID - A wide string passed to WPP when initializing
- tracing. For example the driver uses
- L"Microsoft\\UMDF\\OsrUsb"
-
- MYDRIVER_CLASS_ID - A GUID encoded in struct format used to
- initialize the driver's ClassID.
-
- These are defined in internal.h for this sample. If you choose
- to use a different primary include file, you should ensure they are
- defined there as well.
-
-Environment:
-
- WDF User-Mode Driver Framework (WDF:UMDF)
-
---*/
-
-#include "internal.h"
-#include "dllsup.tmh"
-
-const GUID CLSID_MyDriverCoClass = MYDRIVER_CLASS_ID;
-
-BOOL
-WINAPI
-DllMain(
- HINSTANCE ModuleHandle,
- DWORD Reason,
- PVOID /* Reserved */
- )
-/*++
-
- Routine Description:
-
- This is the entry point and exit point for the I/O trace driver. This
- does very little as the I/O trace driver has minimal global data.
-
- This method initializes tracing, and saves the module handle away in a
- global variable so that it can be referenced should the COM registration
- code (Dll[Un]RegisterServer) be called.
-
- Arguments:
-
- ModuleHandle - the DLL handle for this module.
-
- Reason - the reason this entry point was called.
-
- Reserved - unused
-
- Return Value:
-
- TRUE
-
---*/
-{
- UNREFERENCED_PARAMETER(ModuleHandle);
-
- if (DLL_PROCESS_ATTACH == Reason)
- {
- //
- // Initialize tracing.
- //
-
- WPP_INIT_TRACING(MYDRIVER_TRACING_ID);
- }
- else if (DLL_PROCESS_DETACH == Reason)
- {
- //
- // Cleanup tracing.
- //
-
- WPP_CLEANUP();
- }
-
- return TRUE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllCanUnloadNow(
- VOID
- )
-/*++
-
- Routine Description:
-
- Called by the COM runtime when determining whether or not this module
- can be unloaded. Our answer is always "no".
-
- Arguments:
-
- None
-
- Return Value:
-
- S_FALSE
-
---*/
-{
- return S_FALSE;
-}
-
-_Use_decl_annotations_
-HRESULT
-STDAPICALLTYPE
-DllGetClassObject(
- REFCLSID ClassId,
- REFIID InterfaceId,
- LPVOID *Interface
- )
-/*++
-
- Routine Description:
-
- This routine is called by COM in order to instantiate the
- OSR Fx2 driver callback object and do an initial query interface on it.
-
- This method only creates an instance of the driver's class factory, as this
- is the minimum required to support UMDF.
-
- Arguments:
-
- ClassId - the CLSID of the object being "gotten"
-
- InterfaceId - the interface the caller wants from that object.
-
- Interface - a location to store the referenced interface pointer
-
- Return Value:
-
- S_OK if the function succeeds or error indicating the cause of the
- failure.
-
---*/
-{
- PCClassFactory factory;
-
- HRESULT hr = S_OK;
-
- *Interface = NULL;
-
- //
- // If the CLSID doesn't match that of our "coclass" (defined in the IDL
- // file) then we can't create the object the caller wants. This may
- // indicate that the COM registration is incorrect, and another CLSID
- // is referencing this drvier.
- //
-
- if (IsEqualCLSID(ClassId, CLSID_MyDriverCoClass) == false)
- {
- Trace(
- TRACE_LEVEL_ERROR,
- L"ERROR: Called to create instance of unrecognized class (%!GUID!)",
- &ClassId
- );
-
- return CLASS_E_CLASSNOTAVAILABLE;
- }
-
- //
- // Create an instance of the class factory for the caller.
- //
-
- factory = new CClassFactory();
-
- if (NULL == factory)
- {
- hr = E_OUTOFMEMORY;
- }
-
- //
- // Query the object we created for the interface the caller wants. After
- // that we release the object. This will drive the reference count to
- // 1 (if the QI succeeded an referenced the object) or 0 (if the QI failed).
- // In the later case the object is automatically deleted.
- //
-
- if (SUCCEEDED(hr))
- {
- hr = factory->QueryInterface(InterfaceId, Interface);
- factory->Release();
- }
-
- return hr;
-}
diff --git a/usb/umdf_fx2/driver/exports.def b/usb/umdf_fx2/driver/exports.def
deleted file mode 100644
index 15f923d3..00000000
--- a/usb/umdf_fx2/driver/exports.def
+++ /dev/null
@@ -1,4 +0,0 @@
-; WudfOsrUsbDriver.def : Declares the module parameters.
-
-EXPORTS
- DllGetClassObject PRIVATE
diff --git a/usb/umdf_fx2/driver/internal.h b/usb/umdf_fx2/driver/internal.h
deleted file mode 100644
index 2d57793d..00000000
--- a/usb/umdf_fx2/driver/internal.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- Internal.h
-
-Abstract:
-
- This module contains the local type definitions for the UMDF OSR Fx2
- driver sample.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
-//
-// Include the WUDF Headers
-//
-
-#include "wudfddi.h"
-
-//
-// Include SetupDi functions.
-//
-
-#include "setupapi.h"
-
-//
-// Use specstrings for in/out annotation of function parameters.
-//
-
-#include "specstrings.h"
-
-//
-// Include the safestring functions.
-//
-
-#include "strsafe.h"
-
-//
-// Get limits on common data types (ULONG_MAX for example)
-//
-
-#include "limits.h"
-
-//
-// We need usb I/O targets to talk to the OSR device.
-//
-
-#include "wudfusb.h"
-
-//
-// Include the header shared between the drivers and the test applications.
-//
-
-#include "public.h"
-
-//
-// Include the header shared between the drivers and the test applications.
-//
-
-#include "WUDFOsrUsbPublic.h"
-
-//
-// Forward definitions of classes in the other header files.
-//
-
-typedef class CMyDriver *PCMyDriver;
-typedef class CMyDevice *PCMyDevice;
-typedef class CMyQueue *PCMyQueue;
-
-typedef class CMyControlQueue *PCMyControlQueue;
-typedef class CMyReadWriteQueue *PCMyReadWriteQueue;
-
-typedef class CCancelCallback *PCCancelCallback;
-
-//
-// Define the tracing flags.
-//
-// TODO: Choose a different trace control GUID
-//
-
-#define WPP_CONTROL_GUIDS \
- WPP_DEFINE_CONTROL_GUID( \
- WudfOsrUsbFx2TraceGuid, (da5fbdfd,1eae,4ecf,b426,a3818f325ddb), \
- \
- WPP_DEFINE_BIT(MYDRIVER_ALL_INFO) \
- WPP_DEFINE_BIT(TEST_TRACE_DRIVER) \
- WPP_DEFINE_BIT(TEST_TRACE_DEVICE) \
- WPP_DEFINE_BIT(TEST_TRACE_QUEUE) \
- )
-
-#define WPP_FLAG_LEVEL_LOGGER(flag, level) \
- WPP_LEVEL_LOGGER(flag)
-
-#define WPP_FLAG_LEVEL_ENABLED(flag, level) \
- (WPP_LEVEL_ENABLED(flag) && \
- WPP_CONTROL(WPP_BIT_ ## flag).Level >= level)
-
-#define WPP_LEVEL_FLAGS_LOGGER(lvl,flags) \
- WPP_LEVEL_LOGGER(flags)
-
-#define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) \
- (WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level >= lvl)
-
-//
-// This comment block is scanned by the trace preprocessor to define our
-// Trace function.
-//
-// begin_wpp config
-// FUNC Trace{FLAG=MYDRIVER_ALL_INFO}(LEVEL, MSG, ...);
-// FUNC TraceEvents(LEVEL, FLAGS, MSG, ...);
-// end_wpp
-//
-
-//
-// Driver specific #defines
-//
-// TODO: Change these values to be appropriate for your driver.
-//
-
-#define MYDRIVER_TRACING_ID L"Microsoft\\UMDF\\OsrUsb"
-#define MYDRIVER_CLASS_ID {0x0865b2b0, 0x6b73, 0x428f, {0xa3, 0xea, 0x21, 0x72, 0x83, 0x2d, 0x6b, 0xfc}}
-
-//
-// Include the type specific headers.
-//
-
-#include "comsup.h"
-#include "driver.h"
-#include "device.h"
-#include "queue.h"
-#include "ControlQueue.h"
-#include "ReadWriteQueue.h"
-#include "list.h"
-
-__forceinline
-#ifdef _PREFAST_
-__declspec(noreturn)
-#endif
-VOID
-WdfTestNoReturn(
- VOID
- )
-{
- // do nothing.
-}
-
-#define WUDF_TEST_DRIVER_ASSERT(p) \
-{ \
- if ( !(p) ) \
- { \
- DebugBreak(); \
- WdfTestNoReturn(); \
- } \
-}
-
-#define SAFE_RELEASE(p) {if ((p)) { (p)->Release(); (p) = NULL; }}
-
-#define IDLE_TIMEOUT_IN_MSEC 10*1000
diff --git a/usb/umdf_fx2/driver/queue.cpp b/usb/umdf_fx2/driver/queue.cpp
deleted file mode 100644
index c56b38bb..00000000
--- a/usb/umdf_fx2/driver/queue.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.cpp
-
-Abstract:
-
- This file implements the I/O queue interface and performs
- the read/write/ioctl operations.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#include "internal.h"
-#include "queue.tmh"
-
-CMyQueue::CMyQueue(
- _In_ PCMyDevice Device
- ) :
- m_FxQueue(NULL),
- m_Device(Device)
-{
-}
-
-//
-// Queue destructor.
-// Free up the buffer, wait for thread to terminate and
-//
-
-CMyQueue::~CMyQueue(
- VOID
- )
-/*++
-
-Routine Description:
-
-
- IUnknown implementation of Release
-
-Aruments:
-
-
-Return Value:
-
- ULONG (reference count after Release)
-
---*/
-{
- TraceEvents(TRACE_LEVEL_INFORMATION,
- TEST_TRACE_QUEUE,
- "%!FUNC! Entry"
- );
-
-}
-
-
-HRESULT
-STDMETHODCALLTYPE
-CMyQueue::QueryInterface(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- )
-/*++
-
-Routine Description:
-
-
- Query Interface
-
-Aruments:
-
- Follows COM specifications
-
-Return Value:
-
- HRESULT indicatin success or failure
-
---*/
-{
- HRESULT hr;
-
- hr = CUnknown::QueryInterface(InterfaceId, Object);
-
- return hr;
-}
-
-//
-// Initialize
-//
-
-HRESULT
-CMyQueue::Initialize(
- _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
- _In_ bool Default,
- _In_ bool PowerManaged
- )
-{
- IWDFIoQueue *fxQueue;
- HRESULT hr;
-
- //
- // Create the I/O Queue object.
- //
-
- {
- IUnknown *callback = QueryIUnknown();
-
- hr = m_Device->GetFxDevice()->CreateIoQueue(
- callback,
- Default,
- DispatchType,
- PowerManaged,
- FALSE,
- &fxQueue
- );
- callback->Release();
- }
-
- if (SUCCEEDED(hr))
- {
- m_FxQueue = fxQueue;
-
- //
- // Release the creation reference on the queue. This object will be
- // destroyed before the queue so we don't need to have a reference out
- // on it.
- //
-
- fxQueue->Release();
- }
-
- return hr;
-}
-
-HRESULT
-CMyQueue::Configure(
- VOID
- )
-{
- return S_OK;
-}
diff --git a/usb/umdf_fx2/driver/queue.h b/usb/umdf_fx2/driver/queue.h
deleted file mode 100644
index 5659224b..00000000
--- a/usb/umdf_fx2/driver/queue.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- queue.h
-
-Abstract:
-
- This file defines the queue callback interface.
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-//
-// Queue Callback Object.
-//
-
-class CMyQueue :
- public CUnknown
-{
-protected:
- //
- // Unreferenced pointer to the partner Fx device.
- //
-
- IWDFIoQueue *m_FxQueue;
-
- //
- // Unreferenced pointer to the parent device.
- //
-
- PCMyDevice m_Device;
-
- HRESULT
- Initialize(
- _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
- _In_ bool Default,
- _In_ bool PowerManaged
- );
-
-protected:
-
- CMyQueue(
- _In_ PCMyDevice Device
- );
-
- virtual ~CMyQueue();
-
- HRESULT
- Configure(
- VOID
- );
-
-public:
-
- IWDFIoQueue *
- GetFxQueue(
- VOID
- )
- {
- return m_FxQueue;
- }
-
-
- PCMyDevice
- GetDevice(
- VOID
- )
- {
- return m_Device;
- }
-
- //
- // IUnknown
- //
-
- STDMETHOD_(ULONG,AddRef) (VOID) {return CUnknown::AddRef();}
-
- _At_(this, __drv_freesMem(object))
- STDMETHOD_(ULONG,Release) (VOID) {return CUnknown::Release();}
-
- STDMETHOD_(HRESULT, QueryInterface)(
- _In_ REFIID InterfaceId,
- _Outptr_ PVOID *Object
- );
-};
diff --git a/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj b/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj
deleted file mode 100644
index 53ba424d..00000000
--- a/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{B4244D54-7EBF-43D4-BB6D-C994C182C572}</ProjectGuid>
- <RootNamespace>$(MSBuildProjectName)</RootNamespace>
- <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
- <Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{6A99CFCE-4C34-4F5D-B7D4-D810AE496B95}</SampleGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType />
- <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
- <ConfigurationType>Application</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType />
- <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
- <ConfigurationType>Application</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>False</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType />
- <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
- <ConfigurationType>Application</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetVersion>Windows10</TargetVersion>
- <UseDebugLibraries>True</UseDebugLibraries>
- <DriverTargetPlatform>Desktop</DriverTargetPlatform>
- <DriverType />
- <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
- <ConfigurationType>Application</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <PropertyGroup>
- <OutDir>$(IntDir)</OutDir>
- </PropertyGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
- </ImportGroup>
- <ItemGroup Label="WrappedTaskItems" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>WudfOsrUsbFx2Test</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>WudfOsrUsbFx2Test</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>WudfOsrUsbFx2Test</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>WudfOsrUsbFx2Test</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);setupapi.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);setupapi.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);setupapi.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
- <WarningLevel>Level4</WarningLevel>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ClCompile>
- <Midl>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </Midl>
- <ResourceCompile>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);BUILT_IN_DDK=1;UNICODE=1;_UNICODE=1</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc;..\..\inc;$(DDK_INC_PATH)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>%(AdditionalDependencies);setupapi.lib</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemGroup>
- <FilesToPackage Include="$(OutDir)WudfOsrUsbFx2Test.exe" />
- </ItemGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <ExceptionHandling>
- </ExceptionHandling>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="dump.c" />
- <ClCompile Include="testapp.c" />
- <ResourceCompile Include="testapp.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Exclude="@(Inf)" Include="*.inf" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
- <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
- <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project> \ No newline at end of file
diff --git a/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj.Filters b/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj.Filters
deleted file mode 100644
index a430f986..00000000
--- a/usb/umdf_fx2/exe/WudfOsrUsbFx2Test.vcxproj.Filters
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{047255FC-568B-4968-9167-306B7BC95B6D}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{4B1DCCF4-7F0A-4571-BA4F-DF378E24BD68}</UniqueIdentifier>
- </Filter>
- <Filter Include="Resource Files">
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{AC1DECB1-7996-4C71-8D32-0543B4C57AD4}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="dump.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="testapp.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="testapp.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/usb/umdf_fx2/exe/dump.c b/usb/umdf_fx2/exe/dump.c
deleted file mode 100644
index aef55116..00000000
--- a/usb/umdf_fx2/exe/dump.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- DUMP.C
-
-Abstract:
-
- Routines to dump the descriptors information in a human readable form.
-
-Environment:
-
- user mode only
-
---*/
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "devioctl.h"
-
-#pragma warning(disable:4200) //
-#pragma warning(disable:4201) // nameless struct/union
-#pragma warning(disable:4214) // bit field types other than int
-
-#include <basetyps.h>
-#include "usbdi.h"
-#include "public.h"
-
-#pragma warning(default:4200)
-#pragma warning(default:4201)
-#pragma warning(default:4214)
-
-HANDLE
-OpenDevice(
- _In_ BOOL Synchronous
- );
-
-
-char*
-usbDescriptorTypeString(UCHAR bDescriptorType )
-/*++
-Routine Description:
-
- Called to get ascii string of USB descriptor
-
-Arguments:
-
- PUSB_ENDPOINT_DESCRIPTOR->bDescriptorType or
- PUSB_DEVICE_DESCRIPTOR->bDescriptorType or
- PUSB_INTERFACE_DESCRIPTOR->bDescriptorType or
- PUSB_STRING_DESCRIPTOR->bDescriptorType or
- PUSB_POWER_DESCRIPTOR->bDescriptorType or
- PUSB_CONFIGURATION_DESCRIPTOR->bDescriptorType
-
-Return Value:
-
- ptr to string
-
---*/
-{
-
- switch(bDescriptorType) {
-
- case USB_DEVICE_DESCRIPTOR_TYPE:
- return "USB_DEVICE_DESCRIPTOR_TYPE";
-
- case USB_CONFIGURATION_DESCRIPTOR_TYPE:
- return "USB_CONFIGURATION_DESCRIPTOR_TYPE";
-
-
- case USB_STRING_DESCRIPTOR_TYPE:
- return "USB_STRING_DESCRIPTOR_TYPE";
-
-
- case USB_INTERFACE_DESCRIPTOR_TYPE:
- return "USB_INTERFACE_DESCRIPTOR_TYPE";
-
-
- case USB_ENDPOINT_DESCRIPTOR_TYPE:
- return "USB_ENDPOINT_DESCRIPTOR_TYPE";
-
-
-#ifdef USB_POWER_DESCRIPTOR_TYPE // this is the older definintion which is actually obsolete
- // workaround for temporary bug in 98ddk, older USB100.h file
- case USB_POWER_DESCRIPTOR_TYPE:
- return "USB_POWER_DESCRIPTOR_TYPE";
-#endif
-
-#ifdef USB_RESERVED_DESCRIPTOR_TYPE // this is the current version of USB100.h as in NT5DDK
-
- case USB_RESERVED_DESCRIPTOR_TYPE:
- return "USB_RESERVED_DESCRIPTOR_TYPE";
-
- case USB_CONFIG_POWER_DESCRIPTOR_TYPE:
- return "USB_CONFIG_POWER_DESCRIPTOR_TYPE";
-
- case USB_INTERFACE_POWER_DESCRIPTOR_TYPE:
- return "USB_INTERFACE_POWER_DESCRIPTOR_TYPE";
-#endif // for current nt5ddk version of USB100.h
-
- default:
- return "??? UNKNOWN!!";
- }
-}
-
-
-char *
-usbEndPointTypeString(UCHAR bmAttributes)
-/*++
-Routine Description:
-
- Called to get ascii string of endpt descriptor type
-
-Arguments:
-
- PUSB_ENDPOINT_DESCRIPTOR->bmAttributes
-
-Return Value:
-
- ptr to string
-
---*/
-{
- UINT typ = bmAttributes & USB_ENDPOINT_TYPE_MASK;
-
-
- switch( typ) {
- case USB_ENDPOINT_TYPE_INTERRUPT:
- return "USB_ENDPOINT_TYPE_INTERRUPT";
-
- case USB_ENDPOINT_TYPE_BULK:
- return "USB_ENDPOINT_TYPE_BULK";
-
- case USB_ENDPOINT_TYPE_ISOCHRONOUS:
- return "USB_ENDPOINT_TYPE_ISOCHRONOUS";
-
- case USB_ENDPOINT_TYPE_CONTROL:
- return "USB_ENDPOINT_TYPE_CONTROL";
-
- default:
- return "??? UNKNOWN!!";
- }
-}
-
-
-char *
-usbConfigAttributesString(UCHAR bmAttributes)
-/*++
-Routine Description:
-
- Called to get ascii string of USB_CONFIGURATION_DESCRIPTOR attributes
-
-Arguments:
-
- PUSB_CONFIGURATION_DESCRIPTOR->bmAttributes
-
-Return Value:
-
- ptr to string
-
---*/
-{
- UINT typ = bmAttributes & USB_CONFIG_POWERED_MASK;
-
-
- switch( typ) {
-
- case USB_CONFIG_BUS_POWERED:
- return "USB_CONFIG_BUS_POWERED";
-
- case USB_CONFIG_SELF_POWERED:
- return "USB_CONFIG_SELF_POWERED";
-
- case USB_CONFIG_REMOTE_WAKEUP:
- return "USB_CONFIG_REMOTE_WAKEUP";
-
-
- default:
- return "??? UNKNOWN!!";
- }
-}
-
-
-void
-print_USB_CONFIGURATION_DESCRIPTOR(PUSB_CONFIGURATION_DESCRIPTOR cd)
-/*++
-Routine Description:
-
- Called to do formatted ascii dump to console of a USB config descriptor
-
-Arguments:
-
- ptr to USB configuration descriptor
-
-Return Value:
-
- none
-
---*/
-{
- printf("\n===================\nUSB_CONFIGURATION_DESCRIPTOR\n");
-
- printf(
- "bLength = 0x%x, decimal %u\n", cd->bLength, cd->bLength
- );
-
- printf(
- "bDescriptorType = 0x%x ( %s )\n", cd->bDescriptorType,
- usbDescriptorTypeString( cd->bDescriptorType )
- );
-
- printf(
- "wTotalLength = 0x%x, decimal %u\n", cd->wTotalLength, cd->wTotalLength
- );
-
- printf(
- "bNumInterfaces = 0x%x, decimal %u\n", cd->bNumInterfaces, cd->bNumInterfaces
- );
-
- printf(
- "bConfigurationValue = 0x%x, decimal %u\n",
- cd->bConfigurationValue, cd->bConfigurationValue
- );
-
- printf(
- "iConfiguration = 0x%x, decimal %u\n", cd->iConfiguration, cd->iConfiguration
- );
-
- printf(
- "bmAttributes = 0x%x ( %s )\n", cd->bmAttributes,
- usbConfigAttributesString( cd->bmAttributes )
- );
-
- printf(
- "MaxPower = 0x%x, decimal %u\n", cd->MaxPower, cd->MaxPower
- );
-}
-
-
-void
-print_USB_INTERFACE_DESCRIPTOR(PUSB_INTERFACE_DESCRIPTOR id, UINT ix)
-/*++
-Routine Description:
-
- Called to do formatted ascii dump to console of a USB interface descriptor
-
-Arguments:
-
- ptr to USB interface descriptor
-
-Return Value:
-
- none
-
---*/
-{
- printf("\n-----------------------------\nUSB_INTERFACE_DESCRIPTOR #%u\n", ix);
-
-
- printf(
- "bLength = 0x%x\n", id->bLength
- );
-
-
- printf(
- "bDescriptorType = 0x%x ( %s )\n", id->bDescriptorType,
- usbDescriptorTypeString( id->bDescriptorType )
- );
-
-
- printf(
- "bInterfaceNumber = 0x%x\n", id->bInterfaceNumber
- );
- printf(
- "bAlternateSetting = 0x%x\n", id->bAlternateSetting
- );
- printf(
- "bNumEndpoints = 0x%x\n", id->bNumEndpoints
- );
- printf(
- "bInterfaceClass = 0x%x\n", id->bInterfaceClass
- );
- printf(
- "bInterfaceSubClass = 0x%x\n", id->bInterfaceSubClass
- );
- printf(
- "bInterfaceProtocol = 0x%x\n", id->bInterfaceProtocol
- );
- printf(
- "bInterface = 0x%x\n", id->iInterface
- );
-}
-
-
-void
-print_USB_ENDPOINT_DESCRIPTOR(PUSB_ENDPOINT_DESCRIPTOR ed, int i)
-/*++
-Routine Description:
-
- Called to do formatted ascii dump to console of a USB endpoint descriptor
-
-Arguments:
-
- ptr to USB endpoint descriptor,
- index of this endpt in interface desc
-
-Return Value:
-
- none
-
---*/
-{
- printf(
- "------------------------------\nUSB_ENDPOINT_DESCRIPTOR for Pipe%02d\n", i
- );
-
- printf(
- "bLength = 0x%x\n", ed->bLength
- );
-
- printf(
- "bDescriptorType = 0x%x ( %s )\n", ed->bDescriptorType,
- usbDescriptorTypeString( ed->bDescriptorType )
- );
-
- if ( USB_ENDPOINT_DIRECTION_IN( ed->bEndpointAddress ) ) {
- printf(
- "bEndpointAddress= 0x%x ( INPUT )\n", ed->bEndpointAddress
- );
- } else {
- printf(
- "bEndpointAddress= 0x%x ( OUTPUT )\n", ed->bEndpointAddress
- );
- }
-
- printf(
- "bmAttributes= 0x%x ( %s )\n", ed->bmAttributes,
- usbEndPointTypeString ( ed->bmAttributes )
- );
-
- printf(
- "wMaxPacketSize= 0x%x, decimal %u\n", ed->wMaxPacketSize,
- ed->wMaxPacketSize
- );
-
- printf(
- "bInterval = 0x%x, decimal %u\n", ed->bInterval, ed->bInterval
- );
-}
-
-
-BOOL
-DumpUsbConfig()
-/*++
-Routine Description:
-
- Called to do formatted ascii dump to console of USB
- configuration, interface, and endpoint descriptors.
-
-Arguments:
-
- none
-
-Return Value:
-
- TRUE or FALSE
-
---*/
-{
- HANDLE hDev;
- UINT success;
- int siz, nBytes;
- char buf[256] = {0};
-
- hDev = OpenDevice(TRUE);
- if(hDev == INVALID_HANDLE_VALUE)
- {
- return FALSE;
- }
-
- siz = sizeof(buf);
-
- success = DeviceIoControl(hDev,
- IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR,
- NULL,
- 0,
- buf,
- siz,
- (PULONG) &nBytes,
- NULL);
-
- if(success == FALSE) {
- printf("Ioct - GetConfigDesc failed %u\n", GetLastError());
- } else {
-
- ULONG i;
- UINT j, n;
- char *pch;
- PUSB_CONFIGURATION_DESCRIPTOR cd;
- PUSB_INTERFACE_DESCRIPTOR id;
- PUSB_ENDPOINT_DESCRIPTOR ed;
-
- pch = buf;
- n = 0;
-
- cd = (PUSB_CONFIGURATION_DESCRIPTOR) pch;
-
- print_USB_CONFIGURATION_DESCRIPTOR( cd );
-
- pch += cd->bLength;
-
- do {
- id = (PUSB_INTERFACE_DESCRIPTOR) pch;
-
- print_USB_INTERFACE_DESCRIPTOR(id, n++);
-
- pch += id->bLength;
- for (j=0; j<id->bNumEndpoints; j++) {
-
- ed = (PUSB_ENDPOINT_DESCRIPTOR) pch;
-
- print_USB_ENDPOINT_DESCRIPTOR(ed,j);
-
- pch += ed->bLength;
- }
- i = (ULONG)(pch - buf);
-
- } while (i<cd->wTotalLength);
- }
-
- CloseHandle(hDev);
-
- return success;
-
-}
-
diff --git a/usb/umdf_fx2/exe/testapp.c b/usb/umdf_fx2/exe/testapp.c
deleted file mode 100644
index 4e9684e3..00000000
--- a/usb/umdf_fx2/exe/testapp.c
+++ /dev/null
@@ -1,1368 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
-Module Name:
-
- TESTAPP.C
-
-Abstract:
-
- Console test app for osrusbfx2 driver.
-
-Environment:
-
- user mode only
-
---*/
-
-#include <driverspecs.h>
-_Analysis_mode_(_Analysis_code_type_user_code_);
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "devioctl.h"
-#include "strsafe.h"
-
-#pragma warning(push)
-#pragma warning(disable:4200) //
-#pragma warning(disable:4201) // nameless struct/union
-#pragma warning(disable:4214) // bit field types other than int
-
-#include <setupapi.h>
-#include <basetyps.h>
-#include "usbdi.h"
-#include "public.h"
-
-#pragma warning(pop)
-
-#define WHILE(a) \
-while(__pragma(warning(disable:4127)) a __pragma(warning(disable:4127)))
-
-#define countof(x) (sizeof(x) / sizeof(x[0]))
-
-#define MAX_DEVPATH_LENGTH 256
-#define NUM_ASYNCH_IO 100
-#define BUFFER_SIZE 1024
-#define READER_TYPE 1
-#define WRITER_TYPE 2
-
-BOOL G_fDumpUsbConfig = FALSE; // flags set in response to console command line switches
-BOOL G_fDumpReadData = FALSE;
-BOOL G_fRead = FALSE;
-BOOL G_fWrite = FALSE;
-BOOL G_fPlayWithDevice = FALSE;
-BOOL G_fPerformAsyncIo = FALSE;
-ULONG G_IterationCount = 1; //count of iterations of the test we are to perform
-int G_WriteLen = 512; // #bytes to write
-int G_ReadLen = 512; // #bytes to read
-PCWSTR G_SendFileName = NULL;
-ULONG G_SendFileInterval = 1;
-
-BOOL
-DumpUsbConfig( // defined in dump.c
- );
-
-typedef enum _INPUT_FUNCTION {
- LIGHT_ONE_BAR = 1,
- CLEAR_ONE_BAR,
- LIGHT_ALL_BARS,
- CLEAR_ALL_BARS,
- GET_BAR_GRAPH_LIGHT_STATE,
- GET_SWITCH_STATE,
- GET_SWITCH_STATE_AS_INTERRUPT_MESSAGE,
- GET_7_SEGEMENT_STATE,
- SET_7_SEGEMENT_STATE,
- RESET_DEVICE,
- REENUMERATE_DEVICE,
-} INPUT_FUNCTION;
-
-_Success_ (return != FALSE)
-BOOL
-GetDevicePath(
- IN LPGUID InterfaceGuid,
- _Out_writes_(BufLen) PWSTR DevicePath,
- _In_ size_t BufLen
- )
-{
- HDEVINFO HardwareDeviceInfo;
- SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
- PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData = NULL;
- ULONG Length, RequiredLength = 0;
- BOOL bResult;
- HRESULT hr;
-
- HardwareDeviceInfo = SetupDiGetClassDevs(
- InterfaceGuid,
- NULL,
- NULL,
- (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
-
- if (HardwareDeviceInfo == INVALID_HANDLE_VALUE) {
- wprintf(L"SetupDiGetClassDevs failed!\n");
- return FALSE;
- }
-
- DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
-
- bResult = SetupDiEnumDeviceInterfaces(HardwareDeviceInfo,
- 0,
- InterfaceGuid,
- 0,
- &DeviceInterfaceData);
-
- if (bResult == FALSE) {
-
- LPVOID lpMsgBuf;
-
- if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPWSTR) &lpMsgBuf,
- 0,
- NULL
- )) {
-
- printf("SetupDiEnumDeviceInterfaces failed: %s", (LPSTR)lpMsgBuf);
- LocalFree(lpMsgBuf);
- }
-
- SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);
- return FALSE;
- }
-
- SetupDiGetDeviceInterfaceDetail(
- HardwareDeviceInfo,
- &DeviceInterfaceData,
- NULL,
- 0,
- &RequiredLength,
- NULL
- );
-
- DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)
- LocalAlloc(LMEM_FIXED, RequiredLength);
-
- if (DeviceInterfaceDetailData == NULL) {
- SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);
- wprintf(L"Failed to allocate memory.\n");
- return FALSE;
- }
-
- DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
-
- Length = RequiredLength;
-
- bResult = SetupDiGetDeviceInterfaceDetail(
- HardwareDeviceInfo,
- &DeviceInterfaceData,
- DeviceInterfaceDetailData,
- Length,
- &RequiredLength,
- NULL);
-
- if (bResult == FALSE) {
-
- LPVOID lpMsgBuf;
-
- if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPWSTR) &lpMsgBuf,
- 0,
- NULL)) {
-
- printf("Error in SetupDiGetDeviceInterfaceDetail: %s\n", (LPSTR)lpMsgBuf);
- LocalFree(lpMsgBuf);
- }
-
- SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);
- LocalFree(DeviceInterfaceDetailData);
- return FALSE;
- }
-
- hr = StringCchCopy(DevicePath,
- BufLen,
- DeviceInterfaceDetailData->DevicePath);
- if (FAILED(hr)) {
- SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);
- LocalFree(DeviceInterfaceDetailData);
- return FALSE;
- }
-
- SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);
- LocalFree(DeviceInterfaceDetailData);
-
- return TRUE;
-
-}
-
-
-_Check_return_
-_Ret_notnull_
-_Success_(return != INVALID_HANDLE_VALUE)
-HANDLE
-OpenDevice(
- _In_ BOOL Synchronous
- )
-
-/*++
-Routine Description:
-
- Called by main() to open an instance of our device after obtaining its name
-
-Arguments:
-
- Synchronous - TRUE, if Device is to be opened for synchronous access.
- FALSE, otherwise.
-
-Return Value:
-
- Device handle on success else INVALID_HANDLE_VALUE
-
---*/
-
-{
- HANDLE hDev;
- WCHAR completeDeviceName[MAX_DEVPATH_LENGTH];
-
- if ( !GetDevicePath(
- (LPGUID) &GUID_DEVINTERFACE_OSRUSBFX2,
- completeDeviceName,
- countof(completeDeviceName)) )
- {
- return INVALID_HANDLE_VALUE;
- }
-
- wprintf(L"DeviceName = (%s)\n", completeDeviceName);
-
- hDev = CreateFile(completeDeviceName,
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_WRITE | FILE_SHARE_READ,
- NULL, // default security
- OPEN_EXISTING,
- ((Synchronous ? FILE_ATTRIBUTE_NORMAL : FILE_FLAG_OVERLAPPED) | SECURITY_IMPERSONATION),
- NULL);
-
- if (hDev == INVALID_HANDLE_VALUE) {
- wprintf(L"Failed to open the device, error - %d", GetLastError());
- } else {
- wprintf(L"Opened the device successfully.\n");
- }
-
- return hDev;
-}
-
-
-
-VOID
-Usage()
-
-/*++
-Routine Description:
-
- Called by main() to dump usage info to the console when
- the app is called with no parms or with an invalid parm
-
-Arguments:
-
- None
-
-Return Value:
-
- None
-
---*/
-
-{
- wprintf(L"Usage for osrusbfx2 testapp:\n");
- wprintf(L"-r <n> where n is number of bytes to read\n");
- wprintf(L"-w <n> where n is number of bytes to write\n");
- wprintf(L"-c <n> where n is number of iterations (default = 1)\n");
- wprintf(L"-v <verbose> -- dumps read data\n");
- wprintf(L"-p to control bar LEDs, seven segment, and dip switch\n");
- wprintf(L"-a to perform asynchronous I/O\n");
- wprintf(L"-u to dump USB configuration and pipe info \n");
- wprintf(L"-f <filename> [interval-seconds] to send a text file to the seven-segment display (UMDF only)\n");
-
- return;
-}
-
-
-void
-Parse(
- _In_ int argc,
- _In_reads_(argc) LPWSTR *argv
- )
-
-/*++
-Routine Description:
-
- Called by main() to parse command line parms
-
-Arguments:
-
- argc and argv that was passed to main()
-
-Return Value:
-
- Sets global flags as per user function request
-
---*/
-
-{
- int i;
- PWSTR endchar;
-
- if ( argc < 2 ) // give usage if invoked with no parms
- Usage();
-
- for (i=0; i<argc; i++) {
- if (argv[i][0] == L'-' ||
- argv[i][0] == L'/') {
- switch(argv[i][1]) {
- case L'r':
- case L'R':
- if (i+1 >= argc) {
- Usage();
- exit(1);
- }
- else {
- G_ReadLen = wcstoul(&argv[i+1][0], &endchar, 10);
- G_fRead = TRUE;
- }
- i++;
- break;
- case L'w':
- case L'W':
- if (i+1 >= argc) {
- Usage();
- exit(1);
- }
- else {
- G_WriteLen = wcstoul(&argv[i+1][0], &endchar, 10);
- G_fWrite = TRUE;
- }
- i++;
- break;
- case L'c':
- case L'C':
- if (i+1 >= argc) {
- Usage();
- exit(1);
- }
- else {
- G_IterationCount = wcstoul(&argv[i+1][0], &endchar, 10);
- }
- i++;
- break;
- case L'f':
- case L'F':
- if (i+1 >= argc) {
- Usage();
- exit(1);
- }
- else {
- G_SendFileName = argv[i+1];
- }
-
- i++;
-
- if (i+1 < argc) {
- G_SendFileInterval = wcstoul(&argv[i+1][0], &endchar, 10);
- }
- i++;
-
- break;
- case L'u':
- case L'U':
- G_fDumpUsbConfig = TRUE;
- break;
- case L'p':
- case L'P':
- G_fPlayWithDevice = TRUE;
- break;
- case L'a':
- case L'A':
- G_fPerformAsyncIo = TRUE;
- break;
- case L'v':
- case L'V':
- G_fDumpReadData = TRUE;
- break;
- default:
- Usage();
- }
- }
- }
-}
-
-BOOL
-Compare_Buffs(
- _In_reads_bytes_(length) PVOID *buff1,
- _In_reads_bytes_(length) PVOID *buff2,
- _In_ int length
- )
-/*++
-Routine Description:
-
- Called to verify read and write buffers match for loopback test
-
-Arguments:
-
- buffers to compare and length
-
-Return Value:
-
- TRUE if buffers match, else FALSE
-
---*/
-{
- int ok = 1;
-
- if (memcmp(buff1, buff2, length )) {
- // Edi, and Esi point to the mismatching char and ecx indicates the
- // remaining length.
- ok = 0;
- }
-
- return ok;
-}
-
-#define NPERLN 8
-
-VOID
-Dump(
- UCHAR *b,
- int len
-)
-
-/*++
-Routine Description:
-
- Called to do formatted ascii dump to console of the io buffer
-
-Arguments:
-
- buffer and length
-
-Return Value:
-
- none
-
---*/
-
-{
- ULONG i;
- ULONG longLen = (ULONG)len / sizeof( ULONG );
- PULONG pBuf = (PULONG) b;
-
- // dump an ordinal ULONG for each sizeof(ULONG)'th byte
- wprintf(L"\n****** BEGIN DUMP LEN decimal %d, 0x%x\n", len,len);
- for (i=0; i<longLen; i++) {
- wprintf(L"%04X ", *pBuf++);
- if (i % NPERLN == (NPERLN - 1)) {
- wprintf(L"\n");
- }
- }
- if (i % NPERLN != 0) {
- wprintf(L"\n");
- }
- wprintf(L"\n****** END DUMP LEN decimal %d, 0x%x\n", len,len);
-}
-
-
-BOOL
-PlayWithDevice()
-{
- HANDLE deviceHandle;
- DWORD code;
- ULONG index;
- INPUT_FUNCTION function;
- BAR_GRAPH_STATE barGraphState;
- ULONG bar;
- SWITCH_STATE switchState;
- UCHAR sevenSegment = 0;
- UCHAR i;
- BOOL result = FALSE;
-
- deviceHandle = OpenDevice(FALSE);
-
- if (deviceHandle == INVALID_HANDLE_VALUE) {
-
- wprintf(L"Unable to find any OSR FX2 devices!\n");
-
- return FALSE;
-
- }
-
- //
- // Infinitely print out the list of choices, ask for input, process
- // the request
- //
- WHILE(TRUE) {
-
- printf ("\nUSBFX TEST -- Functions:\n\n");
- printf ("\t1. Light Bar\n");
- printf ("\t2. Clear Bar\n");
- printf ("\t3. Light entire Bar graph\n");
- printf ("\t4. Clear entire Bar graph\n");
- printf ("\t5. Get bar graph state\n");
- printf ("\t6. Get Switch state\n");
- printf ("\t7. Get Switch Interrupt Message\n");
- printf ("\t8. Get 7 segment state\n");
- printf ("\t9. Set 7 segment state\n");
- printf ("\t10. Reset the device\n");
- printf ("\t11. Reenumerate the device\n");
- printf ("\n\t0. Exit\n");
- printf ("\n\tSelection: ");
-
- if (scanf_s ("%d", &function) <= 0) {
-
- wprintf(L"Error reading input!\n");
- goto Error;
-
- }
-
- switch(function) {
-
- case LIGHT_ONE_BAR:
-
- wprintf(L"Which Bar (input number 1 thru 8)?\n");
- if (scanf_s ("%d", &bar) <= 0) {
-
- wprintf(L"Error reading input!\n");
- goto Error;
-
- }
-
- if(bar == 0 || bar > 8){
- wprintf(L"Invalid bar number!\n");
- goto Error;
- }
-
- bar--; // normalize to 0 to 7
-
- barGraphState.BarsAsUChar = 1 << (UCHAR)bar;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY,
- &barGraphState, // Ptr to InBuffer
- sizeof(BAR_GRAPH_STATE), // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- break;
-
- case CLEAR_ONE_BAR:
-
-
- wprintf(L"Which Bar (input number 1 thru 8)?\n");
- if (scanf_s ("%d", &bar) <= 0) {
-
- wprintf(L"Error reading input!\n");
- goto Error;
-
- }
-
- if(bar == 0 || bar > 8){
- wprintf(L"Invalid bar number!\n");
- goto Error;
- }
-
- bar--;
-
- //
- // Read the current state
- //
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- &barGraphState, // Ptr to OutBuffer
- sizeof(BAR_GRAPH_STATE), // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- if (barGraphState.BarsAsUChar & (1 << bar)) {
-
- wprintf(L"Bar is set...Clearing it\n");
- barGraphState.BarsAsUChar &= ~(1 << bar);
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY,
- &barGraphState, // Ptr to InBuffer
- sizeof(BAR_GRAPH_STATE), // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
-
- }
-
- } else {
-
- wprintf(L"Bar not set.\n");
-
- }
-
- break;
-
- case LIGHT_ALL_BARS:
-
- barGraphState.BarsAsUChar = 0xFF;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY,
- &barGraphState, // Ptr to InBuffer
- sizeof(BAR_GRAPH_STATE), // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- break;
-
- case CLEAR_ALL_BARS:
-
- barGraphState.BarsAsUChar = 0;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY,
- &barGraphState, // Ptr to InBuffer
- sizeof(BAR_GRAPH_STATE), // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- break;
-
-
- case GET_BAR_GRAPH_LIGHT_STATE:
-
- barGraphState.BarsAsUChar = 0;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- &barGraphState, // Ptr to OutBuffer
- sizeof(BAR_GRAPH_STATE), // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- wprintf(L"Bar Graph: \n");
- wprintf(L" Bar8 is %s\n", barGraphState.Bar8 ? L"ON" : L"OFF");
- wprintf(L" Bar7 is %s\n", barGraphState.Bar7 ? L"ON" : L"OFF");
- wprintf(L" Bar6 is %s\n", barGraphState.Bar6 ? L"ON" : L"OFF");
- wprintf(L" Bar5 is %s\n", barGraphState.Bar5 ? L"ON" : L"OFF");
- wprintf(L" Bar4 is %s\n", barGraphState.Bar4 ? L"ON" : L"OFF");
- wprintf(L" Bar3 is %s\n", barGraphState.Bar3 ? L"ON" : L"OFF");
- wprintf(L" Bar2 is %s\n", barGraphState.Bar2 ? L"ON" : L"OFF");
- wprintf(L" Bar1 is %s\n", barGraphState.Bar1 ? L"ON" : L"OFF");
-
- break;
-
- case GET_SWITCH_STATE:
-
- switchState.SwitchesAsUChar = 0;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_READ_SWITCHES,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- &switchState, // Ptr to OutBuffer
- sizeof(SWITCH_STATE), // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- wprintf(L"Switches: \n");
- wprintf(L" Switch8 is %s\n", switchState.Switch8 ? L"ON" : L"OFF");
- wprintf(L" Switch7 is %s\n", switchState.Switch7 ? L"ON" : L"OFF");
- wprintf(L" Switch6 is %s\n", switchState.Switch6 ? L"ON" : L"OFF");
- wprintf(L" Switch5 is %s\n", switchState.Switch5 ? L"ON" : L"OFF");
- wprintf(L" Switch4 is %s\n", switchState.Switch4 ? L"ON" : L"OFF");
- wprintf(L" Switch3 is %s\n", switchState.Switch3 ? L"ON" : L"OFF");
- wprintf(L" Switch2 is %s\n", switchState.Switch2 ? L"ON" : L"OFF");
- wprintf(L" Switch1 is %s\n", switchState.Switch1 ? L"ON" : L"OFF");
-
- break;
-
- case GET_SWITCH_STATE_AS_INTERRUPT_MESSAGE:
-
- switchState.SwitchesAsUChar = 0;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- &switchState, // Ptr to OutBuffer
- sizeof(switchState), // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- wprintf(L"Switches: %d\n",index);
- wprintf(L" Switch8 is %s\n", switchState.Switch8 ? L"ON" : L"OFF");
- wprintf(L" Switch7 is %s\n", switchState.Switch7 ? L"ON" : L"OFF");
- wprintf(L" Switch6 is %s\n", switchState.Switch6 ? L"ON" : L"OFF");
- wprintf(L" Switch5 is %s\n", switchState.Switch5 ? L"ON" : L"OFF");
- wprintf(L" Switch4 is %s\n", switchState.Switch4 ? L"ON" : L"OFF");
- wprintf(L" Switch3 is %s\n", switchState.Switch3 ? L"ON" : L"OFF");
- wprintf(L" Switch2 is %s\n", switchState.Switch2 ? L"ON" : L"OFF");
- wprintf(L" Switch1 is %s\n", switchState.Switch1 ? L"ON" : L"OFF");
-
- break;
-
- case GET_7_SEGEMENT_STATE:
-
- sevenSegment = 0;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- &sevenSegment, // Ptr to OutBuffer
- sizeof(UCHAR), // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- wprintf(L"7 Segment mask: 0x%x\n", sevenSegment);
- break;
-
- case SET_7_SEGEMENT_STATE:
-
- for (i = 0; i < 8; i++) {
-
- sevenSegment = 1 << i;
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY,
- &sevenSegment, // Ptr to InBuffer
- sizeof(UCHAR), // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- 0)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- wprintf(L"This is %d\n", i);
- Sleep(500);
-
- }
-
- wprintf(L"7 Segment mask: 0x%x\n", sevenSegment);
- break;
-
- case RESET_DEVICE:
-
- wprintf(L"Reset the device\n");
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_RESET_DEVICE,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- NULL)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- break;
-
- case REENUMERATE_DEVICE:
-
- wprintf(L"Re-enumerate the device\n");
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_REENUMERATE_DEVICE,
- NULL, // Ptr to InBuffer
- 0, // Length of InBuffer
- NULL, // Ptr to OutBuffer
- 0, // Length of OutBuffer
- &index, // BytesReturned
- NULL)) { // Ptr to Overlapped structure
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- //
- // Close the handle to the device and exit out so that
- // the driver can unload when the device is surprise-removed
- // and reenumerated.
- //
- default:
-
- result = TRUE;
- goto Error;
-
- }
-
- } // end of while loop
-
-Error:
-
- CloseHandle(deviceHandle);
- return result;
-
-}
-
-BOOL
-SendFileToDevice(
- _In_ PCWSTR FileName
- )
-{
- HANDLE deviceHandle;
-
- struct
- {
- USHORT delay;
- WCHAR buffer[MAX_PATH + 1];
- } playback;
-
- ULONG bufferCch;
-
- DWORD code;
- BOOL result = FALSE;
-
- //
- // Open a handle to the device.
- //
-
- deviceHandle = OpenDevice(FALSE);
-
- if (deviceHandle == INVALID_HANDLE_VALUE) {
-
- wprintf(L"Unable to find any OSR FX2 devices!\n");
-
- return FALSE;
-
- }
-
- //
- // Convert the file name from relative to absolute.
- //
-
- bufferCch = GetFullPathName(FileName,
- countof(playback.buffer),
- playback.buffer,
- NULL);
-
- if (bufferCch == 0)
- {
- wprintf(L"Error getting full path name for %s - %d\n",
- FileName,
- GetLastError());
- goto Error;
- }
-
- if ((G_SendFileInterval * 1000) >= ((USHORT) 0xffff))
- {
- wprintf(L"Error - delay is too large. Remember that it's in terms of seconds.\n");
- goto Error;
- }
-
- playback.delay = (USHORT) (G_SendFileInterval * 1000);
-
- if (!DeviceIoControl(deviceHandle,
- IOCTL_OSRUSBFX2_PLAY_FILE,
- &playback,
- sizeof(playback),
- NULL,
- 0,
- &bufferCch,
- 0)) {
-
- code = GetLastError();
-
- wprintf(L"DeviceIoControl failed with error 0x%x\n", code);
-
- goto Error;
- }
-
- result = TRUE;
-
-Error:
-
- CloseHandle(deviceHandle);
- return result;
-}
-
-ULONG
-AsyncIo(
- PVOID ThreadParameter
- )
-{
- HANDLE hDevice = INVALID_HANDLE_VALUE;
- HANDLE hCompletionPort = NULL;
- OVERLAPPED *pOvList = NULL;
- PUCHAR buf = NULL;
- ULONG_PTR i;
- ULONG ioType = (ULONG)(ULONG_PTR)ThreadParameter;
- ULONG error;
-
- hDevice = OpenDevice(FALSE);
-
- if (hDevice == INVALID_HANDLE_VALUE) {
- wprintf(L"Cannot open device %d\n", GetLastError());
- goto Error;
- }
-
- hCompletionPort = CreateIoCompletionPort(hDevice, NULL, 1, 0);
-
- if (hCompletionPort == NULL) {
- wprintf(L"Cannot open completion port %d \n",GetLastError());
- goto Error;
- }
-
- pOvList = (OVERLAPPED *)malloc(NUM_ASYNCH_IO * sizeof(OVERLAPPED));
-
- if (pOvList == NULL) {
- wprintf(L"Cannot allocate overlapped array \n");
- goto Error;
- }
-
- buf = (PUCHAR)malloc(NUM_ASYNCH_IO * BUFFER_SIZE);
-
- if (buf == NULL) {
- wprintf(L"Cannot allocate buffer \n");
- goto Error;
- }
-
- ZeroMemory(pOvList, NUM_ASYNCH_IO * sizeof(OVERLAPPED));
- ZeroMemory(buf, NUM_ASYNCH_IO * BUFFER_SIZE);
-
- //
- // Issue asynch I/O
- //
-
- for (i = 0; i < NUM_ASYNCH_IO; i++) {
- if (ioType == READER_TYPE) {
- if ( ReadFile( hDevice,
- buf + (i* BUFFER_SIZE),
- BUFFER_SIZE,
- NULL,
- &pOvList[i]) == 0) {
-
- error = GetLastError();
- if (error != ERROR_IO_PENDING) {
- wprintf(L" %Iu th read failed %d \n",i, GetLastError());
- goto Error;
- }
- }
-
- } else {
- if ( WriteFile( hDevice,
- buf + (i* BUFFER_SIZE),
- BUFFER_SIZE,
- NULL,
- &pOvList[i]) == 0) {
- error = GetLastError();
- if (error != ERROR_IO_PENDING) {
- wprintf(L" %Iu th write failed %d \n",i, GetLastError());
- goto Error;
- }
- }
- }
- }
-
- //
- // Wait for the I/Os to complete. If one completes then reissue the I/O
- //
-
- WHILE (1) {
- OVERLAPPED *completedOv;
- ULONG_PTR key;
- ULONG numberOfBytesTransferred;
-
- if ( GetQueuedCompletionStatus(hCompletionPort, &numberOfBytesTransferred,
- &key, &completedOv, INFINITE) == 0) {
- wprintf(L"GetQueuedCompletionStatus failed %d\n", GetLastError());
- goto Error;
- }
-
- //
- // Read successfully completed. Issue another one.
- //
-
- if (ioType == READER_TYPE) {
-
- i = completedOv - pOvList;
-
- wprintf(L"Number of bytes read by request number %Iu is %d\n",
- i, numberOfBytesTransferred);
-
- if ( ReadFile( hDevice,
- buf + (i * BUFFER_SIZE),
- BUFFER_SIZE,
- NULL,
- completedOv) == 0) {
- error = GetLastError();
- if (error != ERROR_IO_PENDING) {
- wprintf(L"%Iu th Read failed %d \n", i, GetLastError());
- goto Error;
- }
- }
- } else {
-
- i = completedOv - pOvList;
-
- wprintf(L"Number of bytes written by request number %Iu is %d\n",
- i, numberOfBytesTransferred);
-
- if ( WriteFile( hDevice,
- buf + (i * BUFFER_SIZE),
- BUFFER_SIZE,
- NULL,
- completedOv) == 0) {
- error = GetLastError();
- if (error != ERROR_IO_PENDING) {
- wprintf(L"%Iu th write failed %d \n", i, GetLastError());
- goto Error;
- }
- }
- }
- }
-
-Error:
- if (hDevice != INVALID_HANDLE_VALUE) {
- CloseHandle(hDevice);
- }
-
- if (hCompletionPort) {
- CloseHandle(hCompletionPort);
- }
-
- if (pOvList) {
- free(pOvList);
- }
- if (buf) {
- free(buf);
- }
-
- return 1;
-
-}
-
-
-int
-_cdecl
-wmain(
- _In_ int argc,
- _In_reads_(argc) LPWSTR *argv
- )
-/*++
-Routine Description:
-
- Entry point to rwbulk.exe
- Parses cmdline, performs user-requested tests
-
-Arguments:
-
- argc, argv standard console 'c' app arguments
-
-Return Value:
-
- Zero
-
---*/
-
-{
- PWSTR * pinBuf = NULL;
- PWSTR * poutBuf = NULL;
- int nBytesRead;
- int nBytesWrite;
- int ok;
- int retValue = 0;
- UINT success;
- HANDLE hRead = INVALID_HANDLE_VALUE;
- HANDLE hWrite = INVALID_HANDLE_VALUE;
- ULONG fail = 0L;
- ULONG i;
-
-
- Parse(argc, argv );
-
- //
- // dump USB configuation and pipe info
- //
- if (G_fDumpUsbConfig) {
- DumpUsbConfig();
- }
-
- if (G_fPlayWithDevice) {
- PlayWithDevice();
- goto exit;
- }
-
- if (G_SendFileName != NULL)
- {
- SendFileToDevice(G_SendFileName);
- goto exit;
- }
-
- if (G_fPerformAsyncIo) {
- HANDLE th1;
-
- //
- // Create a reader thread
- //
- th1 = CreateThread( NULL, // Default Security Attrib.
- 0, // Initial Stack Size,
- AsyncIo, // Thread Func
- (LPVOID)READER_TYPE,
- 0, // Creation Flags
- NULL ); // Don't need the Thread Id.
-
- if (th1 == NULL) {
- wprintf(L"Couldn't create reader thread - error %d\n", GetLastError());
- retValue = 1;
- goto exit;
- }
-
- //
- // Use this thread for peforming write.
- //
- AsyncIo((PVOID)WRITER_TYPE);
-
- goto exit;
- }
-
- //
- // doing a read, write, or both test
- //
- if ((G_fRead) || (G_fWrite)) {
-
- if (G_fRead) {
- if ( G_fDumpReadData ) { // round size to sizeof ULONG for readable dumping
- while( G_ReadLen % sizeof( ULONG ) ) {
- G_ReadLen++;
- }
- }
-
- //
- // open the output file
- //
- hRead = OpenDevice(TRUE);
- if(hRead == INVALID_HANDLE_VALUE) {
- retValue = 1;
- goto exit;
- }
-
- pinBuf = malloc(G_ReadLen);
- }
-
- if (G_fWrite) {
- if ( G_fDumpReadData ) { // round size to sizeof ULONG for readable dumping
- while( G_WriteLen % sizeof( ULONG ) ) {
- G_WriteLen++;
- }
- }
-
- //
- // open the output file
- //
- hWrite = OpenDevice(TRUE);
- if(hWrite == INVALID_HANDLE_VALUE) {
- retValue = 1;
- goto exit;
- }
-
- poutBuf = malloc(G_WriteLen);
- if (poutBuf == NULL) {
- retValue = 1;
- goto exit;
- }
- }
-
- for (i = 0; i < G_IterationCount; i++) {
- ULONG j;
-
- if (G_fWrite && poutBuf && hWrite != INVALID_HANDLE_VALUE) {
-
- PULONG pOut = (PULONG) poutBuf;
- ULONG numLongs = G_WriteLen / sizeof( ULONG );
-
- //
- // put some data in the output buffer
- //
- for (j=0; j<numLongs; j++) {
- *(pOut+j) = j;
- }
-
- //
- // send the write
- //
- success = WriteFile(hWrite, poutBuf, G_WriteLen, (PULONG) &nBytesWrite, NULL);
- if(success == 0) {
- wprintf(L"WriteFile failed - error %d\n", GetLastError());
- retValue = 1;
- goto exit;
- }
- wprintf(L"Write (%04.4d) : request %06.6d bytes -- %06.6d bytes written\n",
- i, G_WriteLen, nBytesWrite);
-
- assert(nBytesWrite == G_WriteLen);
- }
-
- if (G_fRead && pinBuf) {
-
- success = ReadFile(hRead, pinBuf, G_ReadLen, (PULONG) &nBytesRead, NULL);
- if(success == 0) {
- wprintf(L"ReadFile failed - error %d\n", GetLastError());
- retValue = 1;
- goto exit;
- }
-
- wprintf(L"Read (%04.4d) : request %06.6d bytes -- %06.6d bytes read\n",
- i, G_ReadLen, nBytesRead);
-
- if (G_fWrite) {
-
- //
- // validate the input buffer against what
- // we sent to the 82930 (loopback test)
- //
-
- ok = Compare_Buffs(pinBuf, poutBuf, nBytesRead);
-
- if( G_fDumpReadData ) {
- wprintf(L"Dumping read buffer\n");
- Dump( (PUCHAR) pinBuf, nBytesRead );
- wprintf(L"Dumping write buffer\n");
- Dump( (PUCHAR) poutBuf, nBytesRead );
- }
- assert(ok);
-
- if(ok != 1) {
- fail++;
- }
-
- assert(G_ReadLen == G_WriteLen);
- assert(nBytesRead == G_ReadLen);
- }
- }
- }
-
- }
-
-exit:
-
- if (pinBuf) {
- free(pinBuf);
- }
-
- if (poutBuf) {
- free(poutBuf);
- }
-
- // close devices if needed
- if (hRead != INVALID_HANDLE_VALUE) {
- CloseHandle(hRead);
- }
-
- if (hWrite != INVALID_HANDLE_VALUE) {
- _Analysis_assume_(hWrite != NULL);
- CloseHandle(hWrite);
- }
-
- return retValue;
-}
-
-
-
-
diff --git a/usb/umdf_fx2/exe/testapp.rc b/usb/umdf_fx2/exe/testapp.rc
deleted file mode 100644
index 28dd29d7..00000000
--- a/usb/umdf_fx2/exe/testapp.rc
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <windows.h>
-
-#include <ntverp.h>
-
-#define VER_FILETYPE VFT_DLL
-#define VER_FILESUBTYPE VFT2_UNKNOWN
-#define VER_FILEDESCRIPTION_STR "OSRUSBFX2 Bulk & Isoch Read and Write test App for UMDF"
-#define VER_INTERNALNAME_STR "WudfOsrUsbFx2Test.exe"
-#define VER_ORIGINALFILENAME_STR "WudfOsrUsbFx2Test.exe"
-
-#include <common.ver>
-
-
diff --git a/usb/umdf_fx2/inc/WUDFOsrUsbPublic.h b/usb/umdf_fx2/inc/WUDFOsrUsbPublic.h
deleted file mode 100644
index 6681fa14..00000000
--- a/usb/umdf_fx2/inc/WUDFOsrUsbPublic.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- WUDFOsrUsbPublic.h
-
-Abstract:
-
- This module contains the common declarations shared by driver
- and user applications for the UMDF OSR device sample.
-
- Note that this driver does NOT use the same device interface GUID
- as the KMDF OSR USB sample.
-
-Environment:
-
- user and kernel
-
---*/
-
-#pragma once
-
-//
-// Define an Interface Guid so that app can find the device and talk to it.
-//
-
-// {573E8C73-0CB4-4471-A1BF-FAB26C31D384}
-DEFINE_GUID(GUID_DEVINTERFACE_OSRUSBFX2,
- 0x573e8c73, 0xcb4, 0x4471, 0xa1, 0xbf, 0xfa, 0xb2, 0x6c, 0x31, 0xd3, 0x84);
-
diff --git a/usb/umdf_fx2/inc/list.h b/usb/umdf_fx2/inc/list.h
deleted file mode 100644
index 38d0b1e9..00000000
--- a/usb/umdf_fx2/inc/list.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*++
-
-Copyright (C) Microsoft Corporation, All Rights Reserved
-
-Module Name:
-
- list.h
-
-Abstract:
-
- This module contains doubly linked list macros
-
-Environment:
-
- Windows User-Mode Driver Framework (WUDF)
-
---*/
-
-#pragma once
-
-
-FORCEINLINE
-VOID
-InitializeListHead(
- IN PLIST_ENTRY ListHead
- )
-{
- ListHead->Flink = ListHead->Blink = ListHead;
-}
-
-FORCEINLINE
-BOOLEAN
-RemoveEntryList(
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
- PLIST_ENTRY Flink;
-
- Flink = Entry->Flink;
- Blink = Entry->Blink;
- Blink->Flink = Flink;
- Flink->Blink = Blink;
- return (BOOLEAN)(Flink == Blink);
-}
-
-FORCEINLINE
-VOID
-InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Flink;
-
- Flink = ListHead->Flink;
- Entry->Flink = Flink;
- Entry->Blink = ListHead;
- Flink->Blink = Entry;
- ListHead->Flink = Entry;
-}
-
-FORCEINLINE
-VOID
-InsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
- PLIST_ENTRY Blink;
-
- Blink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = Blink;
- Blink->Flink = Entry;
- ListHead->Blink = Entry;
-}
diff --git a/usb/umdf_fx2/inc/public.h b/usb/umdf_fx2/inc/public.h
deleted file mode 100644
index 2c3f6805..00000000
--- a/usb/umdf_fx2/inc/public.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- public.h
-
-Abstract:
-
- Public definitions for the OSR_FX2 device operations.
-
-Environment:
-
- User & Kernel mode
-
---*/
-
-#ifndef _PUBLIC_H
-#define _PUBLIC_H
-
-#include <initguid.h>
-
-#include "WudfOsrUsbPublic.h"
-
-
-//
-// Define the structures that will be used by the IOCTL
-// interface to the driver
-//
-
-//
-// BAR_GRAPH_STATE
-//
-// BAR_GRAPH_STATE is a bit field structure with each
-// bit corresponding to one of the bar graph on the
-// OSRFX2 Development Board
-//
-#include <pshpack1.h>
-
-#pragma warning( push )
-#pragma warning( disable : 4201 ) // nameless struct/union
-#pragma warning( disable : 4214 ) // bit-field type other than int
-
-typedef struct _BAR_GRAPH_STATE {
-
- union {
-
- struct {
- //
- // Individual bars starting from the
- // top of the stack of bars
- //
- // NOTE: There are actually 10 bars,
- // but the very top two do not light
- // and are not counted here
- //
- UCHAR Bar1 : 1;
- UCHAR Bar2 : 1;
- UCHAR Bar3 : 1;
- UCHAR Bar4 : 1;
- UCHAR Bar5 : 1;
- UCHAR Bar6 : 1;
- UCHAR Bar7 : 1;
- UCHAR Bar8 : 1;
- };
-
- //
- // The state of all the bar graph as a single
- // UCHAR
- //
- UCHAR BarsAsUChar;
-
- };
-
-}BAR_GRAPH_STATE, *PBAR_GRAPH_STATE;
-
-//
-// SWITCH_STATE
-//
-// SWITCH_STATE is a bit field structure with each
-// bit corresponding to one of the switches on the
-// OSRFX2 Development Board
-//
-typedef struct _SWITCH_STATE {
-
- union {
- struct {
- //
- // Individual switches starting from the
- // left of the set of switches
- //
- UCHAR Switch1 : 1;
- UCHAR Switch2 : 1;
- UCHAR Switch3 : 1;
- UCHAR Switch4 : 1;
- UCHAR Switch5 : 1;
- UCHAR Switch6 : 1;
- UCHAR Switch7 : 1;
- UCHAR Switch8 : 1;
- };
-
- //
- // The state of all the switches as a single
- // UCHAR
- //
- UCHAR SwitchesAsUChar;
-
- };
-
-
-}SWITCH_STATE, *PSWITCH_STATE;
-
-//
-// Seven segment display bit values.
-//
-
-//
-// Undefine conflicting MFC constant
-//
-#undef SS_CENTER
-#undef SS_LEFT
-#undef SS_RIGHT
-
-#define SS_TOP 0x01
-#define SS_TOP_LEFT 0x40
-#define SS_TOP_RIGHT 0x02
-#define SS_CENTER 0x20
-#define SS_BOTTOM_LEFT 0x10
-#define SS_BOTTOM_RIGHT 0x04
-#define SS_BOTTOM 0x80
-#define SS_DOT 0x08
-
-//
-// FILE_PLAYBACK
-//
-// FILE_PLAYBACK structure contains the parameters for the PLAY_FILE I/O Control.
-//
-
-typedef struct _FILE_PLAYBACK
-{
- //
- // The delay between changes in the display, in milliseconds.
- //
-
- USHORT Delay;
-
- //
- // The data file path.
- //
-
- WCHAR Path[1];
-} FILE_PLAYBACK, *PFILE_PLAYBACK;
-
-#include <poppack.h>
-
-#define IOCTL_INDEX 0x800
-#define FILE_DEVICE_OSRUSBFX2 65500U
-
-#define IOCTL_OSRUSBFX2_GET_CONFIG_DESCRIPTOR CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_RESET_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 1, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_REENUMERATE_DEVICE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 3, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 4, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 5, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_READ_SWITCHES CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 6, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 7, \
- METHOD_BUFFERED, \
- FILE_READ_ACCESS)
-
-
-#define IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 8, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#define IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE CTL_CODE(FILE_DEVICE_OSRUSBFX2,\
- IOCTL_INDEX + 9, \
- METHOD_OUT_DIRECT, \
- FILE_READ_ACCESS)
-
-#define IOCTL_OSRUSBFX2_PLAY_FILE CTL_CODE(FILE_DEVICE_OSRUSBFX2, \
- IOCTL_INDEX + 10, \
- METHOD_BUFFERED, \
- FILE_WRITE_ACCESS)
-
-#pragma warning(pop)
-
-#endif
-
diff --git a/usb/umdf_fx2/inc/usb_hw.h b/usb/umdf_fx2/inc/usb_hw.h
deleted file mode 100644
index d6e983f1..00000000
--- a/usb/umdf_fx2/inc/usb_hw.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*++
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Module Name:
-
- Usb.h
-
-Abstract:
-
- Contains prototypes for interfacing with a USB connected device. These
- are copied from the KMDF WDFUSB.H header file (but with the WDF specific
- portions removed)
-
-Environment:
-
- kernel mode only
-
---*/
-
-#pragma once
-
-typedef enum _WINUSB_BMREQUEST_DIRECTION {
- BmRequestHostToDevice = BMREQUEST_HOST_TO_DEVICE,
- BmRequestDeviceToHost = BMREQUEST_DEVICE_TO_HOST,
-} WINUSB_BMREQUEST_DIRECTION;
-
-typedef enum _WINUSB_BMREQUEST_TYPE {
- BmRequestStandard = BMREQUEST_STANDARD,
- BmRequestClass = BMREQUEST_CLASS,
- BmRequestVendor = BMREQUEST_VENDOR,
-} WINUSB_BMREQUEST_TYPE;
-
-typedef enum _WINUSB_BMREQUEST_RECIPIENT {
- BmRequestToDevice = BMREQUEST_TO_DEVICE,
- BmRequestToInterface = BMREQUEST_TO_INTERFACE,
- BmRequestToEndpoint = BMREQUEST_TO_ENDPOINT,
- BmRequestToOther = BMREQUEST_TO_OTHER,
-} WINUSB_BMREQUEST_RECIPIENT;
-
-typedef enum _WINUSB_DEVICE_TRAITS {
- WINUSB_DEVICE_TRAIT_SELF_POWERED = 0x00000001,
- WINUSB_DEVICE_TRAIT_REMOTE_WAKE_CAPABLE = 0x00000002,
- WINUSB_DEVICE_TRAIT_AT_HIGH_SPEED = 0x00000004,
-} WINUSB_DEVICE_TRAITS;
-
-typedef enum _WdfUsbTargetDeviceSelectInterfaceType {
- WdfUsbTargetDeviceSelectInterfaceTypeInterface = 0x10,
- WdfUsbTargetDeviceSelectInterfaceTypeUrb = 0x11,
-} WdfUsbTargetDeviceSelectInterfaceType;
-
-
-
-typedef union _WINUSB_CONTROL_SETUP_PACKET {
- struct {
- union {
- #pragma warning(disable:4214) // bit field types other than int
- struct {
- //
- // Valid values are BMREQUEST_TO_DEVICE, BMREQUEST_TO_INTERFACE,
- // BMREQUEST_TO_ENDPOINT, BMREQUEST_TO_OTHER
- //
- BYTE Recipient:2;
-
- BYTE Reserved:3;
-
- //
- // Valid values are BMREQUEST_STANDARD, BMREQUEST_CLASS,
- // BMREQUEST_VENDOR
- //
- BYTE Type:2;
-
- //
- // Valid values are BMREQUEST_HOST_TO_DEVICE,
- // BMREQUEST_DEVICE_TO_HOST
- //
- BYTE Dir:1;
- } Request;
- #pragma warning(default:4214) // bit field types other than int
- BYTE Byte;
- } bm;
-
- BYTE bRequest;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wValue;
-
- union {
- struct {
- BYTE LowByte;
- BYTE HiByte;
- } Bytes;
- USHORT Value;
- } wIndex;
-
- USHORT wLength;
- } Packet;
-
- struct {
- BYTE Bytes[8];
- } Generic;
-
- WINUSB_SETUP_PACKET WinUsb;
-
-} WINUSB_CONTROL_SETUP_PACKET, *PWINUSB_CONTROL_SETUP_PACKET;
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_CLASS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestClass;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_VENDOR(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_DIRECTION Direction,
- WINUSB_BMREQUEST_RECIPIENT Recipient,
- BYTE Request,
- USHORT Value,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) Direction;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestVendor;
- Packet->Packet.bm.Request.Recipient = (BYTE) Recipient;
-
- Packet->Packet.bRequest = Request;
- Packet->Packet.wValue.Value = Value;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_FEATURE(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT FeatureSelector,
- USHORT Index,
- BOOLEAN SetFeature
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestHostToDevice;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- if (SetFeature) {
- Packet->Packet.bRequest = USB_REQUEST_SET_FEATURE;
- }
- else {
- Packet->Packet.bRequest = USB_REQUEST_CLEAR_FEATURE;
- }
-
- Packet->Packet.wValue.Value = FeatureSelector;
- Packet->Packet.wIndex.Value = Index;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
-VOID
-FORCEINLINE
-WINUSB_CONTROL_SETUP_PACKET_INIT_GET_STATUS(
- PWINUSB_CONTROL_SETUP_PACKET Packet,
- WINUSB_BMREQUEST_RECIPIENT BmRequestRecipient,
- USHORT Index
- )
-{
- RtlZeroMemory(Packet, sizeof(WINUSB_CONTROL_SETUP_PACKET));
-
- Packet->Packet.bm.Request.Dir = (BYTE) BmRequestDeviceToHost;
- Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard;
- Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient;
-
- Packet->Packet.bRequest = USB_REQUEST_GET_STATUS;
- Packet->Packet.wIndex.Value = Index;
- Packet->Packet.wValue.Value = 0;
-
- // Packet->Packet.wLength will be set by the formatting function
-}
-
diff --git a/usb/umdf_fx2/umdf_fx2.sln b/usb/umdf_fx2/umdf_fx2.sln
deleted file mode 100644
index c67f4db3..00000000
--- a/usb/umdf_fx2/umdf_fx2.sln
+++ /dev/null
@@ -1,46 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0
-MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{0F58CCC8-C87F-436A-8155-C5A9C20AE3A0}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{F891F391-8DC0-4256-B1E3-993DE7A0DEFF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WUDFOsrUsbFx2", "driver\WUDFOsrUsbFx2.vcxproj", "{E73991B4-029F-448E-9CA8-0827CBE1EF0E}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WudfOsrUsbFx2Test", "exe\WudfOsrUsbFx2Test.vcxproj", "{F0965B23-D0A3-4587-85A3-FA4B20F2051D}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- Debug|x64 = Debug|x64
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Debug|Win32.ActiveCfg = Debug|Win32
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Debug|Win32.Build.0 = Debug|Win32
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Release|Win32.ActiveCfg = Release|Win32
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Release|Win32.Build.0 = Release|Win32
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Debug|x64.ActiveCfg = Debug|x64
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Debug|x64.Build.0 = Debug|x64
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Release|x64.ActiveCfg = Release|x64
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E}.Release|x64.Build.0 = Release|x64
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Debug|Win32.ActiveCfg = Debug|Win32
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Debug|Win32.Build.0 = Debug|Win32
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Release|Win32.ActiveCfg = Release|Win32
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Release|Win32.Build.0 = Release|Win32
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Debug|x64.ActiveCfg = Debug|x64
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Debug|x64.Build.0 = Debug|x64
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Release|x64.ActiveCfg = Release|x64
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {E73991B4-029F-448E-9CA8-0827CBE1EF0E} = {0F58CCC8-C87F-436A-8155-C5A9C20AE3A0}
- {F0965B23-D0A3-4587-85A3-FA4B20F2051D} = {F891F391-8DC0-4256-B1E3-993DE7A0DEFF}
- EndGlobalSection
-EndGlobal