summaryrefslogtreecommitdiff
path: root/network
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-04-29 09:48:49 -0700
committerDave Wilson <[email protected]>2015-04-29 10:47:29 -0700
commitd40232638faaab19de557e70a3ee938da7a35295 (patch)
tree14e61c973745949af186b7940e3a53d25322f5de /network
parent02e5b090a6131a7cc1b90f4a9373117c9e3c7088 (diff)
samples update for //build
Diffstat (limited to 'network')
-rw-r--r--network/config/bindview/bindview.sln18
-rw-r--r--network/config/bindview/bindview.vcxproj4
-rw-r--r--network/config/bindview/bindview.vcxproj.Filters6
-rw-r--r--network/modem/fakemodem/fakemodem.htm926
-rw-r--r--network/modem/fakemodem/fakemodem.sln18
-rw-r--r--network/modem/fakemodem/fakemodem.vcxproj4
-rw-r--r--network/modem/fakemodem/fakemodem.vcxproj.Filters8
-rw-r--r--network/ndis/extension/base/sxbase.vcxproj4
-rw-r--r--network/ndis/extension/base/sxbase.vcxproj.Filters8
-rw-r--r--network/ndis/extension/extensions.sln52
-rw-r--r--network/ndis/extension/samples/forward/msforwardext.vcxproj4
-rw-r--r--network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters8
-rw-r--r--network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj4
-rw-r--r--network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters8
-rw-r--r--network/ndis/filter/filter.htm152
-rw-r--r--network/ndis/filter/filter.sln18
-rw-r--r--network/ndis/filter/ndislwf.vcxproj4
-rw-r--r--network/ndis/filter/ndislwf.vcxproj.Filters8
-rw-r--r--network/ndis/mux/driver/60/novlan/mux.vcxproj4
-rw-r--r--network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters8
-rw-r--r--network/ndis/mux/driver/60/vlan/muxvlan.vcxproj4
-rw-r--r--network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters8
-rw-r--r--network/ndis/mux/mux.sln76
-rw-r--r--network/ndis/mux/notifyob/mux.vcxproj4
-rw-r--r--network/ndis/mux/notifyob/mux.vcxproj.Filters6
-rw-r--r--network/ndis/ndisprot/6x/ndisprot.htm393
-rw-r--r--network/ndis/ndisprot/6x/ndisprot60.sln72
-rw-r--r--network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj4
-rw-r--r--network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters8
-rw-r--r--network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj4
-rw-r--r--network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters8
-rw-r--r--network/ndis/ndisprot/6x/test/prottest.vcxproj4
-rw-r--r--network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters6
-rw-r--r--network/ndis/netvmini/6x/60/netvmini60.vcxproj4
-rw-r--r--network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters8
-rw-r--r--network/ndis/netvmini/6x/620/netvmini620.vcxproj4
-rw-r--r--network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters8
-rw-r--r--network/ndis/netvmini/6x/630/netvmini630.vcxproj4
-rw-r--r--network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters8
-rw-r--r--network/ndis/netvmini/6x/netvmini.sln66
-rw-r--r--network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln28
-rw-r--r--network/radio/HidSwitchDriverSample/READFIRST_InstructionsForDevelopingHIDDriver.htm944
-rw-r--r--network/radio/HidSwitchDriverSample/README.htm1437
-rw-r--r--network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.h156
-rw-r--r--network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx114
-rw-r--r--network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.rc11
-rw-r--r--network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj182
-rw-r--r--network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters45
-rw-r--r--network/radio/HidSwitchDriverSample/ReadMe.md74
-rw-r--r--network/radio/HidSwitchDriverSample/driver.c156
-rw-r--r--network/radio/HidSwitchDriverSample/hid.c659
-rw-r--r--network/radio/HidSwitchDriverSample/trace.h13
-rw-r--r--network/radio/HidSwitchDriverSample/usb.c466
-rw-r--r--network/radio/RadioManagerSample/RadioManagerSample.sln28
-rw-r--r--network/radio/RadioManagerSample/ReadMe.md171
-rw-r--r--network/radio/RadioManagerSample/SampleRM.regbin0 -> 1982 bytes
-rw-r--r--network/radio/RadioManagerSample/cpp/InternalInterfaces.h23
-rw-r--r--network/radio/RadioManagerSample/cpp/RadioMgr.idl155
-rw-r--r--network/radio/RadioManagerSample/cpp/RadioMgr_interface.cpp3
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleInstanceCollection.cpp102
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleInstanceCollection.h32
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRM.def8
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRM.rc10
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRM.vcxproj326
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters45
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioInstance.cpp523
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioInstance.h71
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioManager.cpp570
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioManager.h79
-rw-r--r--network/radio/RadioManagerSample/cpp/dllmain.cpp57
-rw-r--r--network/radio/RadioManagerSample/cpp/precomp.h17
-rw-r--r--network/radio/RadioManagerSample/cpp/precompsrc.cpp1
-rw-r--r--network/radio/RadioManagerSample/cpp/sampleRM.idl21
-rw-r--r--network/radio/RadioManagerSample/install.cmd3
-rw-r--r--network/radio/RadioManagerSample/readme.txt192
-rw-r--r--network/trans/ddproxy/ddproxy.sln18
-rw-r--r--network/trans/ddproxy/sys/ddproxy.vcxproj4
-rw-r--r--network/trans/ddproxy/sys/ddproxy.vcxproj.Filters8
-rw-r--r--network/trans/inspect/inspect.sln18
-rw-r--r--network/trans/inspect/sys/inspect.vcxproj4
-rw-r--r--network/trans/inspect/sys/inspect.vcxproj.Filters8
-rw-r--r--network/trans/msnmntr/exe/monitor.vcxproj4
-rw-r--r--network/trans/msnmntr/exe/monitor.vcxproj.Filters6
-rw-r--r--network/trans/msnmntr/msnmntr.sln44
-rw-r--r--network/trans/msnmntr/sys/msnmntr.vcxproj4
-rw-r--r--network/trans/msnmntr/sys/msnmntr.vcxproj.Filters8
-rw-r--r--network/trans/stmedit/stmedit.sln18
-rw-r--r--network/trans/stmedit/sys/stmedit.vcxproj4
-rw-r--r--network/trans/stmedit/sys/stmedit.vcxproj.Filters8
-rw-r--r--network/wlan/ihvsample/ihvsample.vcxproj4
-rw-r--r--network/wlan/ihvsample/ihvsample.vcxproj.Filters6
-rw-r--r--network/wlan/ihvsampleui/IHVSampleUI.vcxproj4
-rw-r--r--network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters6
-rw-r--r--network/wlan/wlan.sln44
-rw-r--r--network/wsk/echosrv/echosrv.sln18
-rw-r--r--network/wsk/echosrv/echosrv.vcxproj4
-rw-r--r--network/wsk/echosrv/echosrv.vcxproj.Filters8
97 files changed, 8565 insertions, 372 deletions
diff --git a/network/config/bindview/bindview.sln b/network/config/bindview/bindview.sln
index 021f4efb..921d1d4f 100644
--- a/network/config/bindview/bindview.sln
+++ b/network/config/bindview/bindview.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bindview", "bindview.vcxproj", "{C8EC04C0-EF77-4CD4-8072-F7F8A9125822}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bindview", "bindview.vcxproj", "{34897AE3-000C-4986-8DA8-45DA5317354F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Debug|Win32.ActiveCfg = Debug|Win32
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Debug|Win32.Build.0 = Debug|Win32
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Release|Win32.ActiveCfg = Release|Win32
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Release|Win32.Build.0 = Release|Win32
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Debug|x64.ActiveCfg = Debug|x64
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Debug|x64.Build.0 = Debug|x64
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Release|x64.ActiveCfg = Release|x64
- {C8EC04C0-EF77-4CD4-8072-F7F8A9125822}.Release|x64.Build.0 = Release|x64
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Debug|Win32.Build.0 = Debug|Win32
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Release|Win32.ActiveCfg = Release|Win32
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Release|Win32.Build.0 = Release|Win32
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Debug|x64.ActiveCfg = Debug|x64
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Debug|x64.Build.0 = Debug|x64
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Release|x64.ActiveCfg = Release|x64
+ {34897AE3-000C-4986-8DA8-45DA5317354F}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/config/bindview/bindview.vcxproj b/network/config/bindview/bindview.vcxproj
index 767d2a89..8bb38928 100644
--- a/network/config/bindview/bindview.vcxproj
+++ b/network/config/bindview/bindview.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{C8EC04C0-EF77-4CD4-8072-F7F8A9125822}</ProjectGuid>
+ <ProjectGuid>{34897AE3-000C-4986-8DA8-45DA5317354F}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{224CF8FD-5538-4B7E-81AF-44805B4722EA}</SampleGuid>
+ <SampleGuid>{142C0734-824B-4C41-9B69-E7F6D7214F0F}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/config/bindview/bindview.vcxproj.Filters b/network/config/bindview/bindview.vcxproj.Filters
index 964d777e..82255772 100644
--- a/network/config/bindview/bindview.vcxproj.Filters
+++ b/network/config/bindview/bindview.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{4372001E-614D-43C8-ACA0-0ACF46A23F6E}</UniqueIdentifier>
+ <UniqueIdentifier>{DD6BF01A-E882-42FA-9582-205A36B5FDE9}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{98620252-1A3C-4A35-8A10-A2376A0D90BF}</UniqueIdentifier>
+ <UniqueIdentifier>{3AA8C4B2-E02E-4C24-BF11-8C30E62ED7FB}</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>{CC73B9F9-A9E1-4AA1-88AE-951314EA9903}</UniqueIdentifier>
+ <UniqueIdentifier>{860821E6-FF0C-4292-B8E6-144043F7E832}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/modem/fakemodem/fakemodem.htm b/network/modem/fakemodem/fakemodem.htm
new file mode 100644
index 00000000..add195f7
--- /dev/null
+++ b/network/modem/fakemodem/fakemodem.htm
@@ -0,0 +1,926 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 12">
+<meta name=Originator content="Microsoft Word 12">
+<title>UNIMODEM sample controller-less modem driver (fakemodem)</title>
+<link rel=themeData href="fakemodem_files/themedata.thmx">
+<link rel=colorSchemeMapping href="fakemodem_files/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:SpellingState>Clean</w:SpellingState>
+ <w:GrammarState>Clean</w:GrammarState>
+ <w:TrackMoves>false</w:TrackMoves>
+ <w:TrackFormatting/>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:DoNotPromoteQF/>
+ <w:LidThemeOther>EN-US</w:LidThemeOther>
+ <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+ <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+ <w:Compatibility>
+ <w:BreakWrappedTables/>
+ <w:SnapToGridInCell/>
+ <w:WrapTextWithPunct/>
+ <w:UseAsianBreakRules/>
+ <w:DontGrowAutofit/>
+ <w:SplitPgBreakAndParaMark/>
+ <w:DontVertAlignCellWithSp/>
+ <w:DontBreakConstrainedForcedTables/>
+ <w:DontVertAlignInTxbx/>
+ <w:Word11KerningPairs/>
+ <w:CachedColBalance/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="&#45;-"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
+ DefSemiHidden="false" DefQFormat="false" LatentStyleCount="267">
+ <w:LsdException Locked="false" QFormat="true" Name="Normal"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 1"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 2"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 3"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 4"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 5"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 6"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 7"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 8"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 9"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="caption"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Title"/>
+ <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Subtitle"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Strong"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Emphasis"/>
+ <w:LsdException Locked="false" Priority="99" Name="No List"/>
+ <w:LsdException Locked="false" Priority="99" SemiHidden="true"
+ Name="Placeholder Text"/>
+ <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="99" SemiHidden="true" Name="Revision"/>
+ <w:LsdException Locked="false" Priority="34" QFormat="true"
+ Name="List Paragraph"/>
+ <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
+ <w:LsdException Locked="false" Priority="30" QFormat="true"
+ Name="Intense Quote"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="19" QFormat="true"
+ Name="Subtle Emphasis"/>
+ <w:LsdException Locked="false" Priority="21" QFormat="true"
+ Name="Intense Emphasis"/>
+ <w:LsdException Locked="false" Priority="31" QFormat="true"
+ Name="Subtle Reference"/>
+ <w:LsdException Locked="false" Priority="32" QFormat="true"
+ Name="Intense Reference"/>
+ <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
+ <w:LsdException Locked="false" Priority="37" SemiHidden="true"
+ UnhideWhenUsed="true" Name="Bibliography"/>
+ <w:LsdException Locked="false" Priority="39" SemiHidden="true"
+ UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:Courier;
+ panose-1:2 7 4 9 2 2 5 2 4 4;
+ mso-font-charset:0;
+ mso-generic-font-family:modern;
+ mso-font-format:other;
+ mso-font-pitch:fixed;
+ mso-font-signature:3 0 0 0 1 0;}
+@font-face
+ {font-family:"Cambria Math";
+ panose-1:2 4 5 3 5 4 6 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:roman;
+ mso-font-pitch:variable;
+ mso-font-signature:-1610611985 1107304683 0 0 415 0;}
+@font-face
+ {font-family:Verdana;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:-1593833729 1073750107 16 0 415 0;}
+@font-face
+ {font-family:Consolas;
+ panose-1:2 11 6 9 2 2 4 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:modern;
+ mso-font-pitch:fixed;
+ mso-font-signature:-520092929 1073806591 9 0 415 0;}
+@font-face
+ {font-family:"MS Sans Serif";
+ panose-1:0 0 0 0 0 0 0 0 0 0;
+ mso-font-alt:"Times New Roman";
+ mso-font-charset:0;
+ mso-generic-font-family:roman;
+ mso-font-format:other;
+ mso-font-pitch:auto;
+ mso-font-signature:0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";}
+h2
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 2 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:2;
+ font-size:18.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+h3
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 3 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ font-size:13.5pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+h4
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 4 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
+ {mso-style-unhide:no;
+ mso-style-link:"Body Text Char";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Verdana","sans-serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-bidi-font-family:"Times New Roman";}
+a:link, span.MsoHyperlink
+ {mso-style-unhide:no;
+ color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {mso-style-unhide:no;
+ color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";}
+pre
+ {mso-style-unhide:no;
+ mso-style-link:"HTML Preformatted Char";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ font-size:10.0pt;
+ font-family:"Courier New";
+ mso-fareast-font-family:"Courier New";}
+span.Heading2Char
+ {mso-style-name:"Heading 2 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 2";
+ mso-ansi-font-size:13.0pt;
+ mso-bidi-font-size:13.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Heading3Char
+ {mso-style-name:"Heading 3 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 3";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Heading4Char
+ {mso-style-name:"Heading 4 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 4";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;
+ font-style:italic;}
+span.HTMLPreformattedChar
+ {mso-style-name:"HTML Preformatted Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"HTML Preformatted";
+ font-family:Consolas;
+ mso-ascii-font-family:Consolas;
+ mso-hansi-font-family:Consolas;
+ mso-bidi-font-family:Consolas;}
+span.BodyTextChar
+ {mso-style-name:"Body Text Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Body Text";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;}
+span.SpellE
+ {mso-style-name:"";
+ mso-spl-e:yes;}
+span.GramE
+ {mso-style-name:"";
+ mso-gram-e:yes;}
+.MsoChpDefault
+ {mso-style-type:export-only;
+ mso-default-props:yes;
+ font-size:10.0pt;
+ mso-ansi-font-size:10.0pt;
+ mso-bidi-font-size:10.0pt;}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+ /* List Definitions */
+ @list l0
+ {mso-list-id:163253770;
+ mso-list-template-ids:-2134855758;}
+@list l1
+ {mso-list-id:858737299;
+ mso-list-template-ids:1400259370;}
+@list l1:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l1:level2
+ {mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level3
+ {mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2
+ {mso-list-id:901331311;
+ mso-list-template-ids:1335414366;}
+@list l2:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l2:level2
+ {mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level3
+ {mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3
+ {mso-list-id:997000269;
+ mso-list-template-ids:-2143639650;}
+@list l3:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l4
+ {mso-list-id:1679889404;
+ mso-list-template-ids:-1428945010;}
+@list l4:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l5
+ {mso-list-id:1736706262;
+ mso-list-type:hybrid;
+ mso-list-template-ids:1974731216 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+@list l5:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ font-family:Symbol;}
+@list l5:level2
+ {mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level3
+ {mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+ol
+ {margin-bottom:0in;}
+ul
+ {margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<h2><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>UNIMODEM sample controller-less modem driver (<span
+class=SpellE>Fakemodem</span>)<o:p></o:p></span></h2>
+
+<h3 style='tab-stops:120.0pt'><span style='font-family:"Verdana","sans-serif";
+mso-fareast-font-family:"Times New Roman"'>SUMMARY<span style='mso-tab-count:
+1'>��������� </span><o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>This
+sample demonstrates a simple controller-less modem driver. <span class=GramE>This
+driver supports sending and receiving AT commands using the <span class=SpellE>ReadFile</span>/<span
+class=SpellE>WriteFile</span> calls or via a TAPI interface using an
+application such as HyperTerminal.</span><o:p></o:p></span></p>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";color:black'>Click
+the Free Build Environment or Checked Build Environment icon under Development
+Kits program group to set basic environment variables. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";color:black'>Change
+to the directory containing the device source code, such as CD <span
+class=SpellE>src</span>\<span class=SpellE>wdf</span>\<span class=SpellE>fakemodem</span>.
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";color:black'>Run <b>build
+-<span class=SpellE>ceZ</span>,</b> or use the macro <b>BLD</b>. This command
+invokes the Microsoft make routines to build the components. If the build </span><span
+style='color:black'>s</span><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+color:black'>ucceeds, you will find the driver, fakemodem.sys, </span><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>placed in a platform
+specific <span style='color:black'>subdirectory
+<b style='mso-bidi-font-weight:
+normal'><span class=SpellE>src</span>\network\modem\<span class=SpellE>fakemodem</span></b></span><b
+style='mso-bidi-font-weight:normal'>\<span class=GramE><span style='mso-bidi-font-weight:
+bold'>$(</span></span><span style='mso-bidi-font-weight:bold'>OBJ_PATH)\$O</span></b><span
+style='color:black'>. If it fails you can find errors and warnings in the
+buildxxx.err and buildxxx.err respectively, where xxx is either <span
+class=SpellE>chk</span> or <span class=SpellE>fre</span> depending on the build
+environment. <o:p></o:p></span></span></p>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>INSTALLATION<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'>To
+install and test this driver, you do not need any real hardware. You can
+install this driver either using Devcon.exe (<span class=SpellE>ddk</span>\tools\<span
+class=SpellE>devcon</span>) utility from the DDK or using toaster bus driver
+sample. <o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+color:black'>To install the bus driver on Windows XP and Windows Server 2003: <o:p></o:p></span></p>
+
+<ul type=disc>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Double-click the �Add Hardware�
+ wizard in Control Panel. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>At the 'Welcome to the Add
+ Hardware Wizard', click �Next�. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Select 'Yes, I have already
+ connected the hardware', then click Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Select �Add a new hardware
+ device� from the list, then click Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Select �Install the hardware
+ that I manually select from a list(Advanced),' and then click next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Select �Modems�, then click
+ Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Check the box which says
+ &quot;Don't detect my modems; I will select it from a list.&quot;, then
+ click Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Click 'Have Disk', make sure
+ that 'A:\' is in the &quot;Copy manufacturer's files from:&quot; box, and
+ click OK. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Click on the desired entry, and
+ then click Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>At 'The wizard is ready to
+ install your hardware', click Next. <o:p></o:p></span></li>
+ <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:
+ auto;mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:
+ 10.0pt;font-family:"Verdana","sans-serif"'>Click Finish at 'Completing the
+ Add/Remove Hardware Wizard.' <o:p></o:p></span></li>
+</ul>
+
+<p><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;
+mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'>To install the
+driver using toaster bus:<o:p></o:p></span></b></p>
+
+<p style='margin-left:.5in;text-indent:-.25in;mso-list:l5 level1 lfo5;
+tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
+mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
+mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+12.0pt;font-family:"Verdana","sans-serif"'>Install the toaster bus driver.
+Information on how to install the toaster bus driver is given in <span
+class=SpellE>src</span>\general\toaster\toaster.htm readme file.<o:p></o:p></span></p>
+
+<p style='margin-left:.5in;text-indent:-.25in;mso-list:l5 level1 lfo5;
+tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
+mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
+mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+12.0pt;font-family:"Verdana","sans-serif"'>Run the notify.exe (<span
+class=SpellE>src</span>\general\toaster\exe\notify) and choose Plug In a device
+in the Bus menu.<o:p></o:p></span></p>
+
+<p style='margin-left:.5in;text-indent:-.25in;mso-list:l5 level1 lfo5;
+tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
+mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
+mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+12.0pt;font-family:"Verdana","sans-serif"'>In the plug in dialog, specify
+{b85b7c50-6a01-11d2-b841-00c04fad5171}\<span class=SpellE>fakemodem</span> as
+the Hardware Id and click okay.<o:p></o:p></span></p>
+
+<p style='margin-left:.25in'><span style='font-size:10.0pt;mso-bidi-font-size:
+12.0pt;font-family:"Verdana","sans-serif"'>The bus driver will enumerate a
+device with the hardware id provided by the application. At this point:<o:p></o:p></span></p>
+
+<p><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>On
+Windows XP and later:</span></b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p></o:p></span></p>
+
+<ul type=disc>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>&quot;Found New Hardware Wizard&quot;
+ dialog box will appear. Here select the radio button labeled &quot;Install
+ from a list of specific location (Advanced)&quot; and then hit the
+ &quot;Next&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>In the following screen select the
+ radio button labeled &quot; Search the best driver in these
+ locations&quot; and then select &quot;Include this location in the search
+ path&quot; and specify the target media or the directory where the KMDF
+ coinstaller (wdfcoinstallerMMmmm.dll), INF and SYS files are copied and
+ then hit the &quot;Next&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>The system will scan the directory and
+ pick up the matching INF and start the installation. You will get a
+ Hardware Installation Warning dialog stating that your driver has not
+ passed Windows Logo Testing. Hit &quot;Continue Anyway&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>The system will copy the driver, INF
+ file, load the driver and start the device. If every thing goes fine, you
+ will get &quot;Completing the Found New Hardware Wizard&quot;. Hit the
+ &quot;Finish&quot; button and the installation is complete. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l1 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>You should be able to see the device
+ in the Device manager under &quot;Modems&quot; <o:p></o:p></span></li>
+</ul>
+
+<p><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>On
+Windows 2000:</span></b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p></o:p></span></p>
+
+<ul type=disc>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>&quot;Found New Hardware Wizard&quot;
+ dialog box will appear with the description of the device. Here click
+ &quot;Next&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>In the following screen &quot;Install
+ Hardware Device Driver&quot;, select the radio button labeled &quot;Display
+ a list of known drivers for this device...&quot; and then click
+ &quot;Next&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>In the following dialog on
+ &quot;Hardware Type&quot;, select &quot;Other Devices&quot; from the list
+ and click &quot;Next&quot;. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>In the dialog on &quot;Select a Device
+ Driver&quot;, click on &quot;Have Disk&quot;. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>Specify the target media or the
+ directory where the KMDF coinstaller (wdfcoinstallerMMmmm.dll), INF and
+ SYS files are copied and then hit the &quot;Okay&quot; button. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>Select &quot;OSR&quot; in the
+ Manufacture section selection and click &quot;Next&quot;. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>Click &quot;Next&quot; on the
+ &quot;Start Device Driver Installation&quot; dialog. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l2 level1 lfo9;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>Click Finish at 'Completing the
+ Add/Remove Hardware Wizard.' <o:p></o:p></span></li>
+</ul>
+
+<p><span class=GramE><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;
+font-family:"Verdana","sans-serif"'>Note that if you get a warning dialog with
+regards to Windows Logo, or unsigned drivers, testing then click on <b>continue</b>.</span></span><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'><o:p></o:p></span></p>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>USAGE<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'>Once
+installed, you can talk to the <span class=SpellE>fakemodem</span> driver
+through HyperTerminal, or via <span class=SpellE>ReadFile</span>/<span
+class=SpellE>WriteFile</span> calls.<span style='mso-spacerun:yes'>� </span>The
+AT command set supported by <span class=SpellE>fakemodem</span> includes:<o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'><span
+style='mso-tab-count:1'>��������� </span><b>AT</b><span style='mso-tab-count:
+3'>������������������������ </span>returns <b>OK</b><br>
+<br>
+<span style='mso-tab-count:1'>��������� </span><b>ATA</b><span
+style='mso-tab-count:3'>���������������������� </span>returns <b>CONNECT<o:p></o:p></b></span></p>
+
+<p><b><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'><span
+style='mso-tab-count:1'>����������� </span>ATD</span></b><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Verdana","sans-serif"'>&lt;number&gt;<span
+style='mso-tab-count:2'>����������������� </span>returns <b>CONNECT</b><o:p></o:p></span></p>
+
+<h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-family:"Verdana","sans-serif";mso-fareast-font-family:"Times New Roman"'>CODE
+TOUR<o:p></o:p></span></h3>
+
+<h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-family:"Verdana","sans-serif";mso-fareast-font-family:"Times New Roman"'>File
+Manifest<o:p></o:p></span></h4>
+
+<pre><u><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>File</span></u><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span
+style='mso-tab-count:2'>���������� </span><u>Description<o:p></o:p></u></span></pre><pre><span
+class=SpellE><span class=GramE><b><span style='font-size:9.0pt;mso-bidi-font-size:
+7.5pt;font-family:Courier'>readwrit.c</span></b></span></span><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span
+style='mso-tab-count:1'>��� </span>Routines for receiving and sending text. This includes processing AT commands.<o:p></o:p></span></pre><pre><span
+class=SpellE><b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;
+font-family:Courier'>Driver.c</span></b></span><span style='font-size:9.0pt;
+mso-bidi-font-size:7.5pt;font-family:Courier'><span style='mso-tab-count:2'>������������� </span><span
+class=SpellE>Fakemodem</span> driver initialization entry points and for handling <span
+class=GramE>Plug</span> &amp; Play events.<o:p></o:p></span></pre><pre><span
+class=SpellE><span class=GramE><b><span style='font-size:9.0pt;mso-bidi-font-size:
+7.5pt;font-family:Courier'>ioctl.c</span></b></span></span><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span
+style='mso-tab-count:2'>�������������� </span>Routines to handle IOCTL messages.<o:p></o:p></span></pre><pre><span
+class=GramE><b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;
+font-family:Courier'>mdmfake.inf</span></b></span><span style='font-size:9.0pt;
+mso-bidi-font-size:7.5pt;font-family:Courier'><span style='mso-tab-count:1'>�� </span>INF file for installing the <span
+class=SpellE>fakemodem</span> driver<o:p></o:p></span></pre>
+
+<p align=center style='text-align:center;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><a href="#top">Top
+of page</a> <o:p></o:p></span></p>
+
+<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=624
+ style='width:6.5in;mso-cellspacing:0in;mso-yfti-tbllook:1184;mso-padding-alt:
+ 0in 0in 0in 0in'>
+ <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
+ height:1.5pt'>
+ <td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'>
+ <p class=MsoNormal><o:p>&nbsp;</o:p></p>
+ </td>
+ </tr>
+</table>
+
+<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:7.5pt;font-family:"MS Sans Serif","serif"'>� Microsoft
+Corporation 2000</span><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>
+<o:p></o:p></span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/network/modem/fakemodem/fakemodem.sln b/network/modem/fakemodem/fakemodem.sln
index 6804feb5..e521285a 100644
--- a/network/modem/fakemodem/fakemodem.sln
+++ b/network/modem/fakemodem/fakemodem.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fakemodem", "fakemodem.vcxproj", "{3744C5BD-A12A-429F-9312-DFD04AC69078}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fakemodem", "fakemodem.vcxproj", "{021EA388-9BD1-4B52-A954-AF1ECC14959A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Debug|Win32.ActiveCfg = Debug|Win32
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Debug|Win32.Build.0 = Debug|Win32
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Release|Win32.ActiveCfg = Release|Win32
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Release|Win32.Build.0 = Release|Win32
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Debug|x64.ActiveCfg = Debug|x64
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Debug|x64.Build.0 = Debug|x64
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Release|x64.ActiveCfg = Release|x64
- {3744C5BD-A12A-429F-9312-DFD04AC69078}.Release|x64.Build.0 = Release|x64
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Debug|Win32.Build.0 = Debug|Win32
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Release|Win32.ActiveCfg = Release|Win32
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Release|Win32.Build.0 = Release|Win32
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Debug|x64.ActiveCfg = Debug|x64
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Debug|x64.Build.0 = Debug|x64
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Release|x64.ActiveCfg = Release|x64
+ {021EA388-9BD1-4B52-A954-AF1ECC14959A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/modem/fakemodem/fakemodem.vcxproj b/network/modem/fakemodem/fakemodem.vcxproj
index c2a2dd8d..0c24e2d3 100644
--- a/network/modem/fakemodem/fakemodem.vcxproj
+++ b/network/modem/fakemodem/fakemodem.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{3744C5BD-A12A-429F-9312-DFD04AC69078}</ProjectGuid>
+ <ProjectGuid>{021EA388-9BD1-4B52-A954-AF1ECC14959A}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{74C5BB58-0CB8-4E8E-8FD7-065CBE6051A7}</SampleGuid>
+ <SampleGuid>{40F9DBFF-3A37-43BB-A11E-8C4F0672CAE2}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/modem/fakemodem/fakemodem.vcxproj.Filters b/network/modem/fakemodem/fakemodem.vcxproj.Filters
index 7c8d71ab..5a8b5bf5 100644
--- a/network/modem/fakemodem/fakemodem.vcxproj.Filters
+++ b/network/modem/fakemodem/fakemodem.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{66A2BE8B-87F0-4F4B-AB28-9C66471A8B7B}</UniqueIdentifier>
+ <UniqueIdentifier>{B7848512-B788-41BD-B77C-7E17CD2BD418}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{F31D838F-78A7-4140-B15C-4C9485DDB150}</UniqueIdentifier>
+ <UniqueIdentifier>{3C0E579D-D582-4FF2-A923-CF6AA3816295}</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>{8A726BCF-D9F0-4948-8219-B0CCAC8AA786}</UniqueIdentifier>
+ <UniqueIdentifier>{7868BAAE-9CBF-493B-A1FA-7B4DC86F11D3}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{A5962758-E097-4C00-A4FB-3A630B0E5405}</UniqueIdentifier>
+ <UniqueIdentifier>{204657EA-2714-45FB-A126-7BE909214868}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/extension/base/sxbase.vcxproj b/network/ndis/extension/base/sxbase.vcxproj
index 4c81ea79..d49f21c6 100644
--- a/network/ndis/extension/base/sxbase.vcxproj
+++ b/network/ndis/extension/base/sxbase.vcxproj
@@ -11,11 +11,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{63FF1428-95CA-4751-A701-244D54A31BD9}</ProjectGuid>
+ <ProjectGuid>{0AF344BA-2F72-4E63-85D3-6C649C493113}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x64</Platform>
- <SampleGuid>{8C4C832A-4638-47E9-B2AC-6FA6FC1D958B}</SampleGuid>
+ <SampleGuid>{5E6D6149-F14D-47BE-A505-3C14582EB73D}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/extension/base/sxbase.vcxproj.Filters b/network/ndis/extension/base/sxbase.vcxproj.Filters
index 1291527a..fa2b2bc8 100644
--- a/network/ndis/extension/base/sxbase.vcxproj.Filters
+++ b/network/ndis/extension/base/sxbase.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{74637802-97A6-4EEE-A780-7AFC24D63060}</UniqueIdentifier>
+ <UniqueIdentifier>{06AF9F9E-A01B-4811-AC1D-93436B508BA2}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{7417E375-1992-4C4B-A4AB-C0C8E00F9AAA}</UniqueIdentifier>
+ <UniqueIdentifier>{8622716C-DDFC-41F0-AA13-E1FA6FF65319}</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>{73A4206C-20D4-4AB0-B133-03D222981702}</UniqueIdentifier>
+ <UniqueIdentifier>{A71D839D-75EE-4F0F-AEF8-2892391ED123}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{CB4FE68B-83B4-4336-A241-94F6955D198A}</UniqueIdentifier>
+ <UniqueIdentifier>{6647DA6B-FEFD-492E-B3FD-A3AFCDAC7AFD}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/extension/extensions.sln b/network/ndis/extension/extensions.sln
index cc6ab362..2ebff25c 100644
--- a/network/ndis/extension/extensions.sln
+++ b/network/ndis/extension/extensions.sln
@@ -3,24 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Base", "Base", "{1C3E1DE9-A703-46CB-B4E4-8CD906C9E6FE}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Base", "Base", "{91A9E693-3D97-4069-B2A4-84CD10712B8E}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forward", "Forward", "{433D0832-2B1B-46AB-94E8-0A7979ACA4CA}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forward", "Forward", "{5CC88476-FA8E-43F7-BE93-29147910AE87}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BC0A3E55-CAE0-4CCE-BA15-0784AEF76215}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{0357B6CB-FF60-41D3-8879-A04837F014CD}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Passthrough", "Passthrough", "{7C717732-18C9-4892-A6FF-B4DD1D72C12B}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Passthrough", "Passthrough", "{7A74F8F6-D891-40BB-9CB5-308ACDA3B778}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxbase", "base\sxbase.vcxproj", "{63FF1428-95CA-4751-A701-244D54A31BD9}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxbase", "base\sxbase.vcxproj", "{0AF344BA-2F72-4E63-85D3-6C649C493113}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msforwardext", "samples\forward\msforwardext.vcxproj", "{404E1399-EA48-4CEE-A59E-EA0D4C01928A}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msforwardext", "samples\forward\msforwardext.vcxproj", "{947BD508-8C40-4109-AA40-0E6B54FD7E07}"
ProjectSection(ProjectDependencies) = postProject
- {63FF1428-95CA-4751-A701-244D54A31BD9} = {63FF1428-95CA-4751-A701-244D54A31BD9}
+ {0AF344BA-2F72-4E63-85D3-6C649C493113} = {0AF344BA-2F72-4E63-85D3-6C649C493113}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mspassthroughext", "samples\passthrough\mspassthroughext.vcxproj", "{2339B4A8-60AF-4172-AC68-3159E6D001EC}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mspassthroughext", "samples\passthrough\mspassthroughext.vcxproj", "{33DC46DA-90C8-42E0-9411-8CE8A02519C2}"
ProjectSection(ProjectDependencies) = postProject
- {63FF1428-95CA-4751-A701-244D54A31BD9} = {63FF1428-95CA-4751-A701-244D54A31BD9}
+ {0AF344BA-2F72-4E63-85D3-6C649C493113} = {0AF344BA-2F72-4E63-85D3-6C649C493113}
EndProjectSection
EndProject
Global
@@ -29,27 +29,27 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {63FF1428-95CA-4751-A701-244D54A31BD9}.Debug|x64.ActiveCfg = Debug|x64
- {63FF1428-95CA-4751-A701-244D54A31BD9}.Debug|x64.Build.0 = Debug|x64
- {63FF1428-95CA-4751-A701-244D54A31BD9}.Release|x64.ActiveCfg = Release|x64
- {63FF1428-95CA-4751-A701-244D54A31BD9}.Release|x64.Build.0 = Release|x64
- {404E1399-EA48-4CEE-A59E-EA0D4C01928A}.Debug|x64.ActiveCfg = Debug|x64
- {404E1399-EA48-4CEE-A59E-EA0D4C01928A}.Debug|x64.Build.0 = Debug|x64
- {404E1399-EA48-4CEE-A59E-EA0D4C01928A}.Release|x64.ActiveCfg = Release|x64
- {404E1399-EA48-4CEE-A59E-EA0D4C01928A}.Release|x64.Build.0 = Release|x64
- {2339B4A8-60AF-4172-AC68-3159E6D001EC}.Debug|x64.ActiveCfg = Debug|x64
- {2339B4A8-60AF-4172-AC68-3159E6D001EC}.Debug|x64.Build.0 = Debug|x64
- {2339B4A8-60AF-4172-AC68-3159E6D001EC}.Release|x64.ActiveCfg = Release|x64
- {2339B4A8-60AF-4172-AC68-3159E6D001EC}.Release|x64.Build.0 = Release|x64
+ {0AF344BA-2F72-4E63-85D3-6C649C493113}.Debug|x64.ActiveCfg = Debug|x64
+ {0AF344BA-2F72-4E63-85D3-6C649C493113}.Debug|x64.Build.0 = Debug|x64
+ {0AF344BA-2F72-4E63-85D3-6C649C493113}.Release|x64.ActiveCfg = Release|x64
+ {0AF344BA-2F72-4E63-85D3-6C649C493113}.Release|x64.Build.0 = Release|x64
+ {947BD508-8C40-4109-AA40-0E6B54FD7E07}.Debug|x64.ActiveCfg = Debug|x64
+ {947BD508-8C40-4109-AA40-0E6B54FD7E07}.Debug|x64.Build.0 = Debug|x64
+ {947BD508-8C40-4109-AA40-0E6B54FD7E07}.Release|x64.ActiveCfg = Release|x64
+ {947BD508-8C40-4109-AA40-0E6B54FD7E07}.Release|x64.Build.0 = Release|x64
+ {33DC46DA-90C8-42E0-9411-8CE8A02519C2}.Debug|x64.ActiveCfg = Debug|x64
+ {33DC46DA-90C8-42E0-9411-8CE8A02519C2}.Debug|x64.Build.0 = Debug|x64
+ {33DC46DA-90C8-42E0-9411-8CE8A02519C2}.Release|x64.ActiveCfg = Release|x64
+ {33DC46DA-90C8-42E0-9411-8CE8A02519C2}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {63FF1428-95CA-4751-A701-244D54A31BD9} = {1C3E1DE9-A703-46CB-B4E4-8CD906C9E6FE}
- {404E1399-EA48-4CEE-A59E-EA0D4C01928A} = {433D0832-2B1B-46AB-94E8-0A7979ACA4CA}
- {2339B4A8-60AF-4172-AC68-3159E6D001EC} = {7C717732-18C9-4892-A6FF-B4DD1D72C12B}
- {433D0832-2B1B-46AB-94E8-0A7979ACA4CA} = {BC0A3E55-CAE0-4CCE-BA15-0784AEF76215}
- {7C717732-18C9-4892-A6FF-B4DD1D72C12B} = {BC0A3E55-CAE0-4CCE-BA15-0784AEF76215}
+ {0AF344BA-2F72-4E63-85D3-6C649C493113} = {91A9E693-3D97-4069-B2A4-84CD10712B8E}
+ {947BD508-8C40-4109-AA40-0E6B54FD7E07} = {5CC88476-FA8E-43F7-BE93-29147910AE87}
+ {33DC46DA-90C8-42E0-9411-8CE8A02519C2} = {7A74F8F6-D891-40BB-9CB5-308ACDA3B778}
+ {5CC88476-FA8E-43F7-BE93-29147910AE87} = {0357B6CB-FF60-41D3-8879-A04837F014CD}
+ {7A74F8F6-D891-40BB-9CB5-308ACDA3B778} = {0357B6CB-FF60-41D3-8879-A04837F014CD}
EndGlobalSection
EndGlobal
diff --git a/network/ndis/extension/samples/forward/msforwardext.vcxproj b/network/ndis/extension/samples/forward/msforwardext.vcxproj
index af65e5ba..5117b28a 100644
--- a/network/ndis/extension/samples/forward/msforwardext.vcxproj
+++ b/network/ndis/extension/samples/forward/msforwardext.vcxproj
@@ -11,11 +11,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{404E1399-EA48-4CEE-A59E-EA0D4C01928A}</ProjectGuid>
+ <ProjectGuid>{947BD508-8C40-4109-AA40-0E6B54FD7E07}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x64</Platform>
- <SampleGuid>{E7755C69-DA3A-4E6B-9C38-0435AC07863F}</SampleGuid>
+ <SampleGuid>{B5988C94-9BF7-4CAC-AC9A-12A76777AAA2}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters b/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters
index a4de6bd4..41e0eaf2 100644
--- a/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters
+++ b/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{AE574627-04F4-423B-B254-44BD4A41BF5D}</UniqueIdentifier>
+ <UniqueIdentifier>{C51012E1-9AEC-4F0F-A787-C2268CE8C1A9}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{50E67A30-537B-4C27-BDFD-110A25C9A725}</UniqueIdentifier>
+ <UniqueIdentifier>{DAABAD75-23CE-441B-8FBE-035AE3D33165}</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>{83FDCB52-42AC-4B2D-9A09-F917F36CFA49}</UniqueIdentifier>
+ <UniqueIdentifier>{ED47846F-6D56-4808-A9C1-D6868F535E4B}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{362EB8F8-E693-45BC-9EE5-1ED0A9776739}</UniqueIdentifier>
+ <UniqueIdentifier>{AFD09367-9B69-4871-AB79-6D868F6FB8FD}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj
index cda7cbbf..fd443f8b 100644
--- a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj
+++ b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj
@@ -11,11 +11,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{2339B4A8-60AF-4172-AC68-3159E6D001EC}</ProjectGuid>
+ <ProjectGuid>{33DC46DA-90C8-42E0-9411-8CE8A02519C2}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x64</Platform>
- <SampleGuid>{DA3F14BC-0746-46C8-99E7-339173543E27}</SampleGuid>
+ <SampleGuid>{1B22CD34-E0FD-4F26-B929-B65361F77899}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters
index b43daf1e..b4236aa6 100644
--- a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters
+++ b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{555B7D63-D8B9-4382-8D6E-A97AC09CE282}</UniqueIdentifier>
+ <UniqueIdentifier>{B04858F7-C21F-4968-B318-A24019C8BA93}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{797B07B8-0B76-4BA6-BDF4-45786B031900}</UniqueIdentifier>
+ <UniqueIdentifier>{533FF752-AB17-45D8-BB7F-A79F3526AEE3}</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>{D95F4A4C-E2E8-4108-86FB-C568FA437FA1}</UniqueIdentifier>
+ <UniqueIdentifier>{B8C9F068-4F22-4D43-9727-2DE3BEE27340}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{F05BF5D9-0765-4293-B2AB-41B06C544956}</UniqueIdentifier>
+ <UniqueIdentifier>{7BBC969B-9C83-4B37-816D-2A5D73801C39}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/filter/filter.htm b/network/ndis/filter/filter.htm
new file mode 100644
index 00000000..998c5b49
--- /dev/null
+++ b/network/ndis/filter/filter.htm
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>NDISLWF</title>
+</head>
+
+<body>
+
+<h1>NDISLWF.SYS - Sample NDIS 6.0 Filter Driver</h1>
+
+<p>Note: the sample driver contains some extra code for demonstration purposes.
+You should remove unneeded optional sections from a production driver.</p>
+
+<h2>SUMMARY</h2>
+
+<h3>Ndislwf NDIS 6.0 Filter Driver</h3>
+
+<p>The Ndislwf sample is currently a do-nothing pass-through NDIS 6 filter
+driver that demonstrates the basic principles underlying an NDIS 6.0 Filter
+driver. The sample is a replacement of NDIS 5 Sample Intermediate
+Driver (Passthru driver).</p>
+
+<p>Although the filter driver is a Modifying filter driver, the filter driver
+currently doesn�t modify any packets and it only re-packages and sends down all
+OID requests. You may easily update this filter driver to change packets
+before passing them along. Or you may use the filter to originate new packets
+to send or receive. For example, the filter could encrypt/compress outgoing and
+decrypt/decompress incoming data.</p>
+
+<h2>BUILDING THE SAMPLE</h2>
+
+<p>Run the <b>build</b> command from this directory to build the
+sample&mdash;it creates the binary Ndislwf.sys.</p>
+
+<p>To install this driver on Windows Vista (or above), use netlwf.INF also
+found in this DDK.</p>
+
+<h2>INSTALLING THE SAMPLE</h2>
+
+<p>Ndislwf is installed as a service (called �NDIS Sample LightWeight Filter�
+in the supplied INF). To install, follow the steps below:</p>
+
+<ol>
+
+<li>Prepare a an installation directory that contains these files: netlwf.inf
+and ndislwf.sys.</li>
+
+<li>On the desktop, click <b>Start</b>, then open <b>Control Panel</b>, then
+open <b>Network and Internet Connections</b>, then open <b>Network
+Connections</b>, then right-click on the relevant Local Area Connection icon
+and choose <b>Properties</b>.</li>
+
+<li>Click <b>Install</b>, then <b>Service</b>, then <b>Add</b>, then <b>Have
+Disk</b>.</li>
+
+<li>Browse to the drive/directory containing the files listed above. Click
+<b>OK</b>. This should show �NDIS Sample LightWeight Filter� in a list of
+Network Services. Highlight this and click <b>OK</b>. This should install the
+Ndislwf filter driver.</li>
+
+<li>Click <b>OK</b> or <b>Yes</b> each time if the system prompts with a warning
+regarding installation of unsigned files. This is necessary because binaries
+generated via the LDK build environment are not signed.</li>
+
+</ol>
+
+<h2>CODE TOUR</h2>
+
+<h3>File Manifest</h3>
+
+<table>
+
+<tr><td><u>File</u></td><td><u>Description</u></td></tr>
+
+<tr><td>makefile</td><td>Used during compilation to create the object and sys
+files</td></tr>
+
+<tr><td>filter.c</td><td>Filter driver entry points and related functions in
+the Ndislwf filter driver</td></tr>
+
+<tr><td>netlwf.inf</td><td>Installation INF for the service</td></tr>
+
+<tr><td>device.c</td><td>Virtual device related routines such as registering a
+device and handling IOCTLs</td></tr>
+
+<tr><td>filter.h</td><td>Prototypes of all functions and data structures used
+by the Ndislwf driver</td></tr>
+
+<tr><td>filter.htm</td><td>Documentation for the filter driver (this
+ file)</td></tr>
+
+<tr><td>filter.rc</td><td>Resource file for the Ndislwf driver</td></tr>
+
+<tr><td>precomp.h</td><td>Precompile header file</td></tr>
+
+<tr><td>flt_dbg.c</td><td>Debug-related code</td></tr>
+
+<tr><td>flt_dbg.h</td><td>Debug code definitions and structures</td></tr>
+
+<tr><td>sources</td><td>List of source files that are compiled and linked to
+create the ndislwf driver.</td></tr>
+
+</table>
+
+<h3>Programming Tour</h3>
+
+<p>Basic steps in attaching and detaching of Ndislwf driver:</p>
+
+<ol>
+
+<li>During DriverEntry, the ndislwf driver registers as a NDIS 6 filter
+driver.</li>
+
+<li>Later on, NDIS calls Ndislwf FilterAttach handler, for each underlying NDIS
+adapter on which it is configured to attach.</li>
+
+<li>In the context of FilterAttach Handler, filter driver call NdisFAttribute
+to register its filter module context with NDIS. After that, filter driver can
+read its own setting in registry by calling NdisOpenConfigurationEx, and calls
+NdisXXX functions.</li>
+
+<li>After FilterAttach successfully returns, NDIS restarts the filter later by
+calling FilterRestart handler. FilterRestart should prepare to handle
+send/receive data. After restart return successfully, filter driver should be
+able to process send/receive.</li>
+
+<li>All requests and sends coming from overlying drivers for the Ndislwf filter
+driver are repackaged if necessary and sent down to NDIS, to be passed to the
+underlying NDIS driver.</li>
+
+<li>All indications arriving from an underlying NDIS driver are forwarded up by
+Ndislwf filter driver.</li>
+
+<li>NDIS call FilterPause handler when NDIS needs to detach the filter from the
+stack or there is some configuration changes in the stack. In processing the
+pause request from NDIS, the Ndislwf driver waits for all its own outstanding
+requests to be completed before it completes the pause request.</li>
+
+<li>NDIS calls the Ndislwf driver�s FilterDetach entry point when NDIS needs to
+detach a filter module from NDIS stack. FilterDetach handler should free all
+the memory allocation done in FilterAttach, and undo the operations it did in
+FilterAttach Handler.</li>
+
+</ol>
+
+<p>&copy; Microsoft Corporation</p>
+
+</body>
+
+</html>
diff --git a/network/ndis/filter/filter.sln b/network/ndis/filter/filter.sln
index 90e2be1f..1c4ff1c4 100644
--- a/network/ndis/filter/filter.sln
+++ b/network/ndis/filter/filter.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndislwf", "ndislwf.vcxproj", "{D6A797EC-4BD1-4448-8C69-AAD0F18252E3}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndislwf", "ndislwf.vcxproj", "{0984ADBF-81CE-478A-9D69-CFDA813C015F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Debug|Win32.ActiveCfg = Debug|Win32
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Debug|Win32.Build.0 = Debug|Win32
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Release|Win32.ActiveCfg = Release|Win32
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Release|Win32.Build.0 = Release|Win32
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Debug|x64.ActiveCfg = Debug|x64
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Debug|x64.Build.0 = Debug|x64
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Release|x64.ActiveCfg = Release|x64
- {D6A797EC-4BD1-4448-8C69-AAD0F18252E3}.Release|x64.Build.0 = Release|x64
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Debug|Win32.Build.0 = Debug|Win32
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Release|Win32.ActiveCfg = Release|Win32
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Release|Win32.Build.0 = Release|Win32
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Debug|x64.ActiveCfg = Debug|x64
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Debug|x64.Build.0 = Debug|x64
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Release|x64.ActiveCfg = Release|x64
+ {0984ADBF-81CE-478A-9D69-CFDA813C015F}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/ndis/filter/ndislwf.vcxproj b/network/ndis/filter/ndislwf.vcxproj
index 6998e55b..982667ca 100644
--- a/network/ndis/filter/ndislwf.vcxproj
+++ b/network/ndis/filter/ndislwf.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{D6A797EC-4BD1-4448-8C69-AAD0F18252E3}</ProjectGuid>
+ <ProjectGuid>{0984ADBF-81CE-478A-9D69-CFDA813C015F}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{D42F08CB-C626-4709-A3FB-F3A6AC78F6BE}</SampleGuid>
+ <SampleGuid>{612455BF-B8D2-4EF2-B654-C71F38EB41E6}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/filter/ndislwf.vcxproj.Filters b/network/ndis/filter/ndislwf.vcxproj.Filters
index 1258cc3b..33446f05 100644
--- a/network/ndis/filter/ndislwf.vcxproj.Filters
+++ b/network/ndis/filter/ndislwf.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{CCCEB33C-30D7-4D55-9C51-2503E8422C74}</UniqueIdentifier>
+ <UniqueIdentifier>{165E8E33-1000-4BA1-B9C0-13563E035EDF}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{F2D27727-5C77-4D5A-8C78-D4977DA98B1E}</UniqueIdentifier>
+ <UniqueIdentifier>{DBD7275E-19E6-4008-B9DB-F4BA06822D7B}</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>{D2E50D90-0B4D-449A-8527-9EA78D1C23F7}</UniqueIdentifier>
+ <UniqueIdentifier>{C863DF64-1C80-42D6-80E1-A06EE203FD47}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{3EF75BEF-85CD-4689-B551-9CFC67497380}</UniqueIdentifier>
+ <UniqueIdentifier>{CE7F2FE4-DF42-4BE1-9027-2941C09DED39}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/mux/driver/60/novlan/mux.vcxproj b/network/ndis/mux/driver/60/novlan/mux.vcxproj
index fdc926c1..75fc3431 100644
--- a/network/ndis/mux/driver/60/novlan/mux.vcxproj
+++ b/network/ndis/mux/driver/60/novlan/mux.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}</ProjectGuid>
+ <ProjectGuid>{397D0084-5C84-4AD1-87DF-2B3C669BCA78}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{D85A6A77-174C-4C80-8646-06E04ECCBAE8}</SampleGuid>
+ <SampleGuid>{CB06DB9D-C97D-417D-8752-1CBC12C4226B}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters b/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters
index 3a8f8458..812a5c6b 100644
--- a/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters
+++ b/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{DFD5078D-1185-4EEB-97B6-950B984EBE1A}</UniqueIdentifier>
+ <UniqueIdentifier>{18AD59A7-F2A1-4691-AA03-199BD103CF5A}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{4B2DF463-FC38-42F8-A082-E219782CD292}</UniqueIdentifier>
+ <UniqueIdentifier>{E6656927-1183-47F1-85CE-57A302CBDA79}</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>{80BDAADE-F802-425A-A59E-5A93D4FA068E}</UniqueIdentifier>
+ <UniqueIdentifier>{0E73A07F-C22B-466E-B6B2-2D47F04BC109}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{D133C63A-21C1-48F5-AFC1-F852277E2B49}</UniqueIdentifier>
+ <UniqueIdentifier>{7C6C2990-74A1-4E06-AD1B-02AD245372EC}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj
index 83e3f351..8f79c893 100644
--- a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj
+++ b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{F277EC93-B131-4A8E-8899-C62F31AE70EC}</ProjectGuid>
+ <ProjectGuid>{D6FCE02C-B772-45F2-9941-F5E6B1E32877}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{22F44364-DB40-46E1-8E05-EBCB1DDEC8E5}</SampleGuid>
+ <SampleGuid>{47080E55-F8E1-4968-8893-18ADE0ED7268}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters
index fad75bc6..97e1f9ff 100644
--- a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters
+++ b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{1AADD0B1-7A47-42D2-95E3-7F106683CF72}</UniqueIdentifier>
+ <UniqueIdentifier>{45E3DA30-48FB-4471-9DF1-F983CB9A3286}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{181362AF-397B-4B8F-A43F-8E9D2962680E}</UniqueIdentifier>
+ <UniqueIdentifier>{6490648B-7BD7-4B6D-A5E7-3B3AC865A4E6}</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>{1E01B05D-68A4-4A5F-B969-3B6FD90223DF}</UniqueIdentifier>
+ <UniqueIdentifier>{22C10F71-ECE2-4C46-9255-E145C77B5EE2}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{966F89E0-3A82-4396-9FD3-3F8EB1BB58D9}</UniqueIdentifier>
+ <UniqueIdentifier>{90F61B4E-C8EC-4AAF-92C9-5808F7EBDB2C}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/mux/mux.sln b/network/ndis/mux/mux.sln
index 47d46e28..56ec1e72 100644
--- a/network/ndis/mux/mux.sln
+++ b/network/ndis/mux/mux.sln
@@ -3,21 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vlan", "Vlan", "{54A94908-2C5F-4A7A-811A-853AE27B7850}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vlan", "Vlan", "{5649382B-2263-47B2-9B96-EC867F4948B6}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{0FCA78EE-A888-441E-A320-83951CF296AC}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{77C1D298-5F95-4683-922F-D345F833177C}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{B3A64960-7B29-4262-9833-F1A493D5CCFC}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{A47240B9-D403-4B0B-B4CD-DC7B8A0C19B6}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Novlan", "Novlan", "{3D789463-134E-4028-BC7C-20B1BFA46278}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Novlan", "Novlan", "{DCE5E59B-B3F0-4698-9A27-7D9A68A41C83}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{DAE5645C-5ADF-4048-8010-39A47184E5C9}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{91B5E151-6E95-4C95-9D34-35D1AEB20F39}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "muxvlan", "driver\60\vlan\muxvlan.vcxproj", "{F277EC93-B131-4A8E-8899-C62F31AE70EC}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "muxvlan", "driver\60\vlan\muxvlan.vcxproj", "{D6FCE02C-B772-45F2-9941-F5E6B1E32877}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "driver\60\novlan\mux.vcxproj", "{3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "driver\60\novlan\mux.vcxproj", "{397D0084-5C84-4AD1-87DF-2B3C669BCA78}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "notifyob\mux.vcxproj", "{CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "notifyob\mux.vcxproj", "{0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -27,40 +27,40 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Debug|Win32.ActiveCfg = Debug|Win32
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Debug|Win32.Build.0 = Debug|Win32
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Release|Win32.ActiveCfg = Release|Win32
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Release|Win32.Build.0 = Release|Win32
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Debug|x64.ActiveCfg = Debug|x64
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Debug|x64.Build.0 = Debug|x64
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Release|x64.ActiveCfg = Release|x64
- {F277EC93-B131-4A8E-8899-C62F31AE70EC}.Release|x64.Build.0 = Release|x64
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Debug|Win32.ActiveCfg = Debug|Win32
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Debug|Win32.Build.0 = Debug|Win32
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Release|Win32.ActiveCfg = Release|Win32
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Release|Win32.Build.0 = Release|Win32
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Debug|x64.ActiveCfg = Debug|x64
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Debug|x64.Build.0 = Debug|x64
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Release|x64.ActiveCfg = Release|x64
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789}.Release|x64.Build.0 = Release|x64
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Debug|Win32.ActiveCfg = Debug|Win32
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Debug|Win32.Build.0 = Debug|Win32
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Release|Win32.ActiveCfg = Release|Win32
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Release|Win32.Build.0 = Release|Win32
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Debug|x64.ActiveCfg = Debug|x64
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Debug|x64.Build.0 = Debug|x64
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Release|x64.ActiveCfg = Release|x64
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}.Release|x64.Build.0 = Release|x64
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Debug|Win32.Build.0 = Debug|Win32
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Release|Win32.ActiveCfg = Release|Win32
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Release|Win32.Build.0 = Release|Win32
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Debug|x64.ActiveCfg = Debug|x64
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Debug|x64.Build.0 = Debug|x64
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Release|x64.ActiveCfg = Release|x64
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877}.Release|x64.Build.0 = Release|x64
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Debug|Win32.ActiveCfg = Debug|Win32
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Debug|Win32.Build.0 = Debug|Win32
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Release|Win32.ActiveCfg = Release|Win32
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Release|Win32.Build.0 = Release|Win32
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Debug|x64.ActiveCfg = Debug|x64
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Debug|x64.Build.0 = Debug|x64
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Release|x64.ActiveCfg = Release|x64
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78}.Release|x64.Build.0 = Release|x64
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Debug|Win32.Build.0 = Debug|Win32
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Release|Win32.ActiveCfg = Release|Win32
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Release|Win32.Build.0 = Release|Win32
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Debug|x64.ActiveCfg = Debug|x64
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Debug|x64.Build.0 = Debug|x64
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Release|x64.ActiveCfg = Release|x64
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {F277EC93-B131-4A8E-8899-C62F31AE70EC} = {54A94908-2C5F-4A7A-811A-853AE27B7850}
- {3316ED07-27E3-4AE6-BE12-E8A5F9ADE789} = {3D789463-134E-4028-BC7C-20B1BFA46278}
- {CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6} = {DAE5645C-5ADF-4048-8010-39A47184E5C9}
- {54A94908-2C5F-4A7A-811A-853AE27B7850} = {0FCA78EE-A888-441E-A320-83951CF296AC}
- {0FCA78EE-A888-441E-A320-83951CF296AC} = {B3A64960-7B29-4262-9833-F1A493D5CCFC}
- {3D789463-134E-4028-BC7C-20B1BFA46278} = {0FCA78EE-A888-441E-A320-83951CF296AC}
+ {D6FCE02C-B772-45F2-9941-F5E6B1E32877} = {5649382B-2263-47B2-9B96-EC867F4948B6}
+ {397D0084-5C84-4AD1-87DF-2B3C669BCA78} = {DCE5E59B-B3F0-4698-9A27-7D9A68A41C83}
+ {0124A324-0D8F-4DAC-B63A-4615FFB9DCA6} = {91B5E151-6E95-4C95-9D34-35D1AEB20F39}
+ {5649382B-2263-47B2-9B96-EC867F4948B6} = {77C1D298-5F95-4683-922F-D345F833177C}
+ {77C1D298-5F95-4683-922F-D345F833177C} = {A47240B9-D403-4B0B-B4CD-DC7B8A0C19B6}
+ {DCE5E59B-B3F0-4698-9A27-7D9A68A41C83} = {77C1D298-5F95-4683-922F-D345F833177C}
EndGlobalSection
EndGlobal
diff --git a/network/ndis/mux/notifyob/mux.vcxproj b/network/ndis/mux/notifyob/mux.vcxproj
index eb3db887..a52d3dfa 100644
--- a/network/ndis/mux/notifyob/mux.vcxproj
+++ b/network/ndis/mux/notifyob/mux.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{CE2FDBC5-FB0E-4B75-9D1F-60BE72C639A6}</ProjectGuid>
+ <ProjectGuid>{0124A324-0D8F-4DAC-B63A-4615FFB9DCA6}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{B6C3DAD5-A1FA-45F1-98F8-66CD4FEDD014}</SampleGuid>
+ <SampleGuid>{1EB42396-C115-40FD-9536-AB4C17CD9579}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/mux/notifyob/mux.vcxproj.Filters b/network/ndis/mux/notifyob/mux.vcxproj.Filters
index ae8436c6..2dfc715b 100644
--- a/network/ndis/mux/notifyob/mux.vcxproj.Filters
+++ b/network/ndis/mux/notifyob/mux.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{7CBE03EB-893C-48D0-9792-100241030FDE}</UniqueIdentifier>
+ <UniqueIdentifier>{3070F81A-13F3-4A51-B701-3CF116C59B41}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{819C3038-4DC6-4786-98BA-ADC2B360C2BB}</UniqueIdentifier>
+ <UniqueIdentifier>{9F1DE3DD-04BA-4F2B-9E2F-9CD8949EA47C}</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>{416958BA-8A0D-44E3-8B1E-F089723BC01A}</UniqueIdentifier>
+ <UniqueIdentifier>{D3F79307-0791-4B6C-8EB7-8483DC785BA7}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/ndisprot/6x/ndisprot.htm b/network/ndis/ndisprot/6x/ndisprot.htm
new file mode 100644
index 00000000..3e854693
--- /dev/null
+++ b/network/ndis/ndisprot/6x/ndisprot.htm
@@ -0,0 +1,393 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 11">
+<meta name=Originator content="Microsoft Word 11">
+<link rel=File-List href="ndisprot_files/filelist.xml">
+<title>Sample NDIS connection-less protocol driver sample</title>
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:Courier;
+ panose-1:2 7 4 9 2 2 5 2 4 4;
+ mso-font-charset:0;
+ mso-generic-font-family:modern;
+ mso-font-format:other;
+ mso-font-pitch:fixed;
+ mso-font-signature:3 0 0 0 1 0;}
+@font-face
+ {font-family:SimSun;
+ panose-1:2 1 6 0 3 1 1 1 1 1;
+ mso-font-alt:?????��???;
+ mso-font-charset:134;
+ mso-generic-font-family:auto;
+ mso-font-pitch:variable;
+ mso-font-signature:3 135135232 16 0 262145 0;}
+@font-face
+ {font-family:Verdana;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-alt:Tahoma;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:536871559 0 0 0 415 0;}
+@font-face
+ {font-family:"\@SimSun";
+ panose-1:2 1 6 0 3 1 1 1 1 1;
+ mso-font-charset:134;
+ mso-generic-font-family:auto;
+ mso-font-pitch:variable;
+ mso-font-signature:3 135135232 16 0 262145 0;}
+@font-face
+ {font-family:"MS Sans Serif";
+ panose-1:0 0 0 0 0 0 0 0 0 0;
+ mso-font-alt:Arial;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-format:other;
+ mso-font-pitch:variable;
+ mso-font-signature:3 0 0 0 1 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+h2
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:2;
+ font-size:18.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:SimSun;
+ font-weight:bold;}
+h3
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ font-size:13.5pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:SimSun;
+ font-weight:bold;}
+h4
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:SimSun;
+ font-weight:bold;}
+p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
+ {margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:Verdana;
+ mso-fareast-font-family:"Times New Roman";
+ mso-bidi-font-family:"Times New Roman";}
+a:link, span.MsoHyperlink
+ {color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+pre
+ {margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ font-size:10.0pt;
+ font-family:"Courier New";
+ mso-fareast-font-family:"Courier New";}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman";
+ mso-ansi-language:#0400;
+ mso-fareast-language:#0400;
+ mso-bidi-language:#0400;}
+</style>
+<![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<h2><span style='font-family:Verdana'>NDIS connection-less protocol driver
+sample<o:p></o:p></span></h2>
+
+<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>This sample demonstrates
+a connection-less NDIS 6.0 protocol. The driver supports sending and receiving
+raw Ethernet frames using ReadFile/WriteFile calls from user-mode. It only
+receives frames with a specific EtherType field. As an NDIS protocol, it
+illustrates how to establish and tear down bindings to Ethernet adapters, i.e.
+those that export medium type <i>NdisMedium802_3</i>. It shows how to set a
+packet filter, send and receive data, and handle plug-and-play events.<o:p></o:p></span></p>
+
+<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>From the
+Free or Checked Build environment, execute <b>build -ceZ</b> in the ndisprot
+directory. <o:p></o:p></span></p>
+
+<h3><span style='font-family:Verdana'>INSTALLATION<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>The driver is installed
+using the INF file ndisprot.inf, which is provided in the driver directory. In
+Network Connections UI, select an adapter and open <b>Properties</b>.<o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>Click <b>Install</b>,
+then <b>Protocol</b>, then <b>Add</b>, and then <b>Have disk</b>. Then point to
+the location of the .inf and driver.<o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>Select <b>Sample NDIS
+Protocol Driver </b>and click <b>OK</b>. After installing the protocol, copy
+over the test application prottest.exe to a convenient location. Please note
+that the driver service has been set to manual start in the INF file. As a
+result, it doesn't get loaded automatically when you install.<o:p></o:p></span></p>
+
+<h3><span style='font-family:Verdana'>USAGE<o:p></o:p></span></h3>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To start
+the driver, type<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><span
+style='mso-tab-count:1'>��������� </span>Net start ndisprot<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To stop
+the driver, type<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><span
+style='mso-tab-count:1'>��������� </span>Net stop ndisprot<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To test
+the driver, run prottest. For help on usage, run prottest -?<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<pre style='margin-left:.5in'>usage: PROTTEST [options] &lt;devicename&gt;</pre><pre
+style='margin-left:.5in'>options:</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-e: Enumerate devices</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-r: Read</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-w: Write (default)</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-l &lt;length&gt;: length of each packet (default: 100)</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-n &lt;count&gt;: number of packets (defaults to infinity)</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-m &lt;MAC address&gt; (defaults to local MAC)</pre>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'>Prottest exercises the IOCTLs supported
+by NDISPROT, and sends and/or receives data on the selected device. In order to
+use prottest, the user must have administrative privilege. Users should pass
+down a big enough buffer in order to receive the entire received data. If the
+length of the buffer passed down is smaller than the length of the received
+data, NDISPROT will only copy part of the data and discard the rest when the
+given buffer is full.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'>Use the �e option to enumerate all
+devices to which NDISPROT is bound:<o:p></o:p></span></p>
+
+<pre style='margin-left:.5in'>C:\prot&gt;prottest -e</pre><pre
+style='margin-left:.5in'> 0. \DEVICE\{9273DA7D-5275-4B9A-AC56-68A49D121F1F}</pre><pre
+style='margin-left:.5in'><span style='mso-spacerun:yes'>���� </span>- Intel-Based 10/100 Ethernet Card</pre>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'>The
+following command sends and receives 2 packets on a device</span><span
+style='font-size:10.0pt;font-family:Verdana'>). Since these packets are sent to
+the local MAC address (default), both packets are received. </span><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'>The device
+name parameter to prottest is picked up from the output of prottest �e (see
+above).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
+
+<pre style='margin-left:.5in'>C:\prot&gt;prottest -n 2 \DEVICE\{9273DA7D-5275-4B9A-AC56-68A49D121F1F}</pre><pre
+style='margin-left:.5in'>DoWriteProc: finished sending 2 packets of 100 bytes each</pre><pre
+style='margin-left:.5in'>DoReadProc finished: read 2 packets</pre>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'>For
+security reasons, this driver does not allow packets with fake MAC addresses to
+be sent from usermode applications.<o:p></o:p></span></p>
+
+<h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-family:Verdana'>TIPS<o:p></o:p></span></h3>
+
+<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'>With a checked version of
+ndisprot.sys, you can control the volume of debug information generated by
+changing the variable ndisprotDebugLevel. Refer to debug.h for more
+information. <o:p></o:p></span></p>
+
+<h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>
+
+<h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>
+
+<pre><b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>Directory: Test</span></b><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><br
+style='mso-special-character:line-break'>
+<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
+<![endif]><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:
+7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><u><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>File</span></u><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span
+style='mso-tab-count:2'>������������ </span><u>Description</u><span
+style='mso-tab-count:1'>����� </span><o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>prottest.c<span
+style='mso-tab-count:1'>������ </span>User-mode test application<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><b><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>Directory: Sys</span></b><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><br
+style='mso-special-character:line-break'>
+<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
+<![endif]><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:
+7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre><pre><u><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>File</span></u><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span
+style='mso-tab-count:2'>������������ </span><u>Description</u><span
+style='mso-tab-count:1'>����� </span><o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>debug.c<span
+style='mso-tab-count:2'>��������� </span>Routines to aid debugging<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>debug.h<span
+style='mso-tab-count:2'>��������� </span>Debug macro definitions<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>macros.h<span
+style='mso-tab-count:2'>�������� </span>Spinlock, event, referencing macros<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisbind.c<span
+style='mso-tab-count:1'>������ </span>NDIS protocol entry points to handle binding/unbinding from adapters<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisprot.h<span
+style='mso-tab-count:1'>������ </span>Data structure definitions<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisprot.inf<span
+style='mso-tab-count:1'>���� </span>INF file for installing NDISPROT<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ntdisp.c<span
+style='mso-tab-count:2'>�������� </span>NT Entry points and dispatch routines for NDISPROT<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>protuser.h<span
+style='mso-tab-count:1'>������ </span>IOCTL and associated structure definitions<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>recv.c<span
+style='mso-tab-count:2'>���������� </span>NDIS protocol entry points for receiving data, and IRP_MJ_READ processing<o:p></o:p></span></pre><pre><span
+style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>send.c<span
+style='mso-tab-count:2'>���������� </span>NDIS protocol routines for sending data, and IRP_MJ_WRITE processing<o:p></o:p></span></pre><pre><span
+style='font-size:7.5pt;font-family:Courier'><o:p>&nbsp;</o:p></span></pre>
+
+<p align=center style='text-align:center;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:Verdana'><a href="#top">Top of page</a> <o:p></o:p></span></p>
+
+<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=624
+ style='width:6.5in;mso-cellspacing:0in;mso-padding-alt:0in 0in 0in 0in'>
+ <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
+ height:1.5pt'>
+ <td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'>
+ <p class=MsoNormal><o:p>&nbsp;</o:p></p>
+ </td>
+ </tr>
+</table>
+
+<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:7.5pt;font-family:"MS Sans Serif"'>� Microsoft Corporation
+2000</span><span style='font-size:10.0pt;font-family:Verdana'> <o:p></o:p></span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/network/ndis/ndisprot/6x/ndisprot60.sln b/network/ndis/ndisprot/6x/ndisprot60.sln
index cc13f976..3bf5708e 100644
--- a/network/ndis/ndisprot/6x/ndisprot60.sln
+++ b/network/ndis/ndisprot/6x/ndisprot60.sln
@@ -3,19 +3,19 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{39A2B1A3-5281-47DF-A0A5-B08E1F979C9E}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{DAF28310-CB34-4AD4-9B7A-04E46AF3AA20}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{C09D8AF9-55C0-4192-A787-B6CA08D83AD0}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{EA1F1CD0-CDF2-48BD-853C-3012A20E5CE6}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{7BA6C25F-BBE2-4331-B598-C5F03E11B45D}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{082733D0-2C57-4E4D-A3FA-AF692CF90E8A}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{A41A7FEE-D4C4-4D9E-B7B3-679200586B93}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{A171447E-D0A4-4F2A-8900-6473D81C0269}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot60", "sys\60\ndisprot60.vcxproj", "{74918B99-A7A2-4462-9330-D61ED648B991}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot60", "sys\60\ndisprot60.vcxproj", "{7EA443E2-5964-417F-B418-CCFC6C30BF45}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot630", "sys\630\ndisprot630.vcxproj", "{DB252AE8-E32C-4E60-B0EB-33A2CB80861C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot630", "sys\630\ndisprot630.vcxproj", "{310AF693-B1C5-4CF1-A7E4-99F9D18D1574}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prottest", "test\prottest.vcxproj", "{0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prottest", "test\prottest.vcxproj", "{C5DBFAFB-4867-4605-B432-337BD17B972C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -25,39 +25,39 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {74918B99-A7A2-4462-9330-D61ED648B991}.Debug|Win32.ActiveCfg = Debug|Win32
- {74918B99-A7A2-4462-9330-D61ED648B991}.Debug|Win32.Build.0 = Debug|Win32
- {74918B99-A7A2-4462-9330-D61ED648B991}.Release|Win32.ActiveCfg = Release|Win32
- {74918B99-A7A2-4462-9330-D61ED648B991}.Release|Win32.Build.0 = Release|Win32
- {74918B99-A7A2-4462-9330-D61ED648B991}.Debug|x64.ActiveCfg = Debug|x64
- {74918B99-A7A2-4462-9330-D61ED648B991}.Debug|x64.Build.0 = Debug|x64
- {74918B99-A7A2-4462-9330-D61ED648B991}.Release|x64.ActiveCfg = Release|x64
- {74918B99-A7A2-4462-9330-D61ED648B991}.Release|x64.Build.0 = Release|x64
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Debug|Win32.ActiveCfg = Debug|Win32
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Debug|Win32.Build.0 = Debug|Win32
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Release|Win32.ActiveCfg = Release|Win32
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Release|Win32.Build.0 = Release|Win32
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Debug|x64.ActiveCfg = Debug|x64
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Debug|x64.Build.0 = Debug|x64
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Release|x64.ActiveCfg = Release|x64
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C}.Release|x64.Build.0 = Release|x64
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Debug|Win32.ActiveCfg = Debug|Win32
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Debug|Win32.Build.0 = Debug|Win32
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Release|Win32.ActiveCfg = Release|Win32
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Release|Win32.Build.0 = Release|Win32
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Debug|x64.ActiveCfg = Debug|x64
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Debug|x64.Build.0 = Debug|x64
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Release|x64.ActiveCfg = Release|x64
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}.Release|x64.Build.0 = Release|x64
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Debug|Win32.Build.0 = Debug|Win32
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Release|Win32.ActiveCfg = Release|Win32
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Release|Win32.Build.0 = Release|Win32
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Debug|x64.ActiveCfg = Debug|x64
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Debug|x64.Build.0 = Debug|x64
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Release|x64.ActiveCfg = Release|x64
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45}.Release|x64.Build.0 = Release|x64
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Debug|Win32.ActiveCfg = Debug|Win32
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Debug|Win32.Build.0 = Debug|Win32
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Release|Win32.ActiveCfg = Release|Win32
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Release|Win32.Build.0 = Release|Win32
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Debug|x64.ActiveCfg = Debug|x64
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Debug|x64.Build.0 = Debug|x64
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Release|x64.ActiveCfg = Release|x64
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574}.Release|x64.Build.0 = Release|x64
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Debug|Win32.Build.0 = Debug|Win32
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Release|Win32.ActiveCfg = Release|Win32
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Release|Win32.Build.0 = Release|Win32
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Debug|x64.ActiveCfg = Debug|x64
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Debug|x64.Build.0 = Debug|x64
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Release|x64.ActiveCfg = Release|x64
+ {C5DBFAFB-4867-4605-B432-337BD17B972C}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {74918B99-A7A2-4462-9330-D61ED648B991} = {39A2B1A3-5281-47DF-A0A5-B08E1F979C9E}
- {DB252AE8-E32C-4E60-B0EB-33A2CB80861C} = {7BA6C25F-BBE2-4331-B598-C5F03E11B45D}
- {0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0} = {A41A7FEE-D4C4-4D9E-B7B3-679200586B93}
- {39A2B1A3-5281-47DF-A0A5-B08E1F979C9E} = {C09D8AF9-55C0-4192-A787-B6CA08D83AD0}
- {7BA6C25F-BBE2-4331-B598-C5F03E11B45D} = {C09D8AF9-55C0-4192-A787-B6CA08D83AD0}
+ {7EA443E2-5964-417F-B418-CCFC6C30BF45} = {DAF28310-CB34-4AD4-9B7A-04E46AF3AA20}
+ {310AF693-B1C5-4CF1-A7E4-99F9D18D1574} = {082733D0-2C57-4E4D-A3FA-AF692CF90E8A}
+ {C5DBFAFB-4867-4605-B432-337BD17B972C} = {A171447E-D0A4-4F2A-8900-6473D81C0269}
+ {DAF28310-CB34-4AD4-9B7A-04E46AF3AA20} = {EA1F1CD0-CDF2-48BD-853C-3012A20E5CE6}
+ {082733D0-2C57-4E4D-A3FA-AF692CF90E8A} = {EA1F1CD0-CDF2-48BD-853C-3012A20E5CE6}
EndGlobalSection
EndGlobal
diff --git a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj
index 068f19e0..9fb2af46 100644
--- a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj
+++ b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{74918B99-A7A2-4462-9330-D61ED648B991}</ProjectGuid>
+ <ProjectGuid>{7EA443E2-5964-417F-B418-CCFC6C30BF45}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{F57A9742-AE91-4E5C-AAF8-582BEC93A8CA}</SampleGuid>
+ <SampleGuid>{BF705255-3868-4036-A1E7-638D7932F1A5}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters
index e971259b..6e7019c5 100644
--- a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters
+++ b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{FC988553-FCE1-455C-A2B8-4253B2E40339}</UniqueIdentifier>
+ <UniqueIdentifier>{BB88F7B9-FEE7-4A81-BF8E-B5660FC419B0}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{CA13EBCF-7249-4085-AEED-A9AB9756BBDF}</UniqueIdentifier>
+ <UniqueIdentifier>{B0674E26-B054-4482-B925-109A349CB29C}</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>{B5901951-2387-48ED-83C6-A5D259BF7E0D}</UniqueIdentifier>
+ <UniqueIdentifier>{E6E18B22-C6BF-4A30-8120-E0706E138F57}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{FCDA9B5C-B135-477F-BC65-BE9761005881}</UniqueIdentifier>
+ <UniqueIdentifier>{31078238-19E1-4DD5-9F8B-29286B133DF4}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj
index 5a913947..12fc5739 100644
--- a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj
+++ b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{DB252AE8-E32C-4E60-B0EB-33A2CB80861C}</ProjectGuid>
+ <ProjectGuid>{310AF693-B1C5-4CF1-A7E4-99F9D18D1574}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{FA9D6F91-6B1C-4EFF-BAEA-E67F4CFE9D3E}</SampleGuid>
+ <SampleGuid>{1AA7BDDF-4140-446D-A380-EDC92457D53B}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters
index bbdb53e8..770220ac 100644
--- a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters
+++ b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{088C6D92-3084-464D-B6CD-B47E67D278B5}</UniqueIdentifier>
+ <UniqueIdentifier>{6703BE47-96E4-43E8-A07F-66EDCDE49673}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{EDCAD0DA-E747-487E-8458-BAC6BA5E5744}</UniqueIdentifier>
+ <UniqueIdentifier>{3C46BFAA-5B89-490D-97E0-683EBE47B2F7}</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>{9F1E323E-8118-4CAC-8124-DA41F78075BE}</UniqueIdentifier>
+ <UniqueIdentifier>{FCADAC43-F392-48DD-80AC-5956347871B5}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{5EA1AAE7-3C58-475C-84F0-40DCDF8823E9}</UniqueIdentifier>
+ <UniqueIdentifier>{AB5F4882-673A-4F5F-AA55-82ECF7EC3896}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/ndisprot/6x/test/prottest.vcxproj b/network/ndis/ndisprot/6x/test/prottest.vcxproj
index 7706c8e3..c4d5dde3 100644
--- a/network/ndis/ndisprot/6x/test/prottest.vcxproj
+++ b/network/ndis/ndisprot/6x/test/prottest.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{0AD0B8E0-5A3E-43FE-8E27-E5BB3DB184B0}</ProjectGuid>
+ <ProjectGuid>{C5DBFAFB-4867-4605-B432-337BD17B972C}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{B8B7CF7B-163A-4705-B726-3B7251D8BD10}</SampleGuid>
+ <SampleGuid>{5F9D6D0B-B0FB-4DB3-BCBC-062001EC3BB3}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters b/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters
index 8b87abfa..298052d2 100644
--- a/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters
+++ b/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{5DB43F2D-E248-4063-B2E6-D0F81FCF5D84}</UniqueIdentifier>
+ <UniqueIdentifier>{0061A859-F60A-4C25-BEBE-07969B9A5F3F}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{3B8958F0-D888-4CE4-9473-3300FDF5A2B3}</UniqueIdentifier>
+ <UniqueIdentifier>{DC35B160-6C91-4008-98BB-CA550D5A4B2E}</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>{35E32097-01E2-4113-877C-7E88FDCD0FAA}</UniqueIdentifier>
+ <UniqueIdentifier>{3E18084F-3C14-4C0D-98A1-490E38D175D7}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/netvmini/6x/60/netvmini60.vcxproj b/network/ndis/netvmini/6x/60/netvmini60.vcxproj
index 34fbc15f..b5bf188f 100644
--- a/network/ndis/netvmini/6x/60/netvmini60.vcxproj
+++ b/network/ndis/netvmini/6x/60/netvmini60.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}</ProjectGuid>
+ <ProjectGuid>{4D117295-96D2-498D-BDE1-C560BFA3C03B}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{FB69D6D4-CF9F-4C63-9FEA-D7D1B1F73BFF}</SampleGuid>
+ <SampleGuid>{25A2CEE6-93FE-4CB1-B8FD-8C1718FD45AD}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters b/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters
index 36412ff4..664e91f7 100644
--- a/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters
+++ b/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{60D1BC26-8429-4B71-B0A4-A09C81AA9006}</UniqueIdentifier>
+ <UniqueIdentifier>{8262BA1D-7108-4104-949F-865D05666127}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{C5B761C0-3390-4C0D-92B3-296CBE739D12}</UniqueIdentifier>
+ <UniqueIdentifier>{1AFDB572-ED64-40CA-9AB7-020E47C3489D}</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>{2837E1B4-FB49-43C4-B0DA-0459E959F944}</UniqueIdentifier>
+ <UniqueIdentifier>{CE5B8EAF-CC06-4B59-9BC0-2C3A29D3CCDC}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{78CC6DBE-CEE8-4DB1-BD8D-4C3C3551030A}</UniqueIdentifier>
+ <UniqueIdentifier>{753BD939-F310-44FF-9240-B67FF5C8417C}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/netvmini/6x/620/netvmini620.vcxproj b/network/ndis/netvmini/6x/620/netvmini620.vcxproj
index dda1e977..aab56143 100644
--- a/network/ndis/netvmini/6x/620/netvmini620.vcxproj
+++ b/network/ndis/netvmini/6x/620/netvmini620.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}</ProjectGuid>
+ <ProjectGuid>{B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{7039332E-F9EF-43DD-8AEC-4478C735DF1D}</SampleGuid>
+ <SampleGuid>{BBE8763B-C933-4BD8-93FA-001C816AACA6}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters b/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters
index 3237b662..2dbcbafa 100644
--- a/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters
+++ b/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{703913F3-8635-4541-B263-C02BD6486AA1}</UniqueIdentifier>
+ <UniqueIdentifier>{5B72A6DB-853E-4641-BCA1-10EF5DD4E413}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{A1EB0C9F-4422-445A-8E6C-268C9DF3497F}</UniqueIdentifier>
+ <UniqueIdentifier>{A4A9A35F-8A74-4BE3-9EB0-E626ECDA38BD}</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>{175D5117-B719-462D-AD06-09F8EDFF3688}</UniqueIdentifier>
+ <UniqueIdentifier>{EB77FECD-C552-486B-9539-1E9B52B3466B}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{C815125B-DF87-4E45-8C33-58380D5859E2}</UniqueIdentifier>
+ <UniqueIdentifier>{02165F6F-54E8-4D4C-832B-CDF2877A781B}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/netvmini/6x/630/netvmini630.vcxproj b/network/ndis/netvmini/6x/630/netvmini630.vcxproj
index b881fbd6..17b4f6ac 100644
--- a/network/ndis/netvmini/6x/630/netvmini630.vcxproj
+++ b/network/ndis/netvmini/6x/630/netvmini630.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{20227FE5-F4F3-4980-98C2-B860C8B2F62C}</ProjectGuid>
+ <ProjectGuid>{FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{2C8923A5-C60B-45DE-AF84-B27B1BECA400}</SampleGuid>
+ <SampleGuid>{F1A4113F-E795-4CA8-AF38-FBA3D9B88251}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters b/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters
index 93779b42..fba2414b 100644
--- a/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters
+++ b/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{9D259E56-FF93-4ED4-B79E-BE9390D6F96E}</UniqueIdentifier>
+ <UniqueIdentifier>{ABA6EAD2-FED4-495B-8FA0-1529A966F67E}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{2D6DC915-1942-425E-87CD-DC9F26064AED}</UniqueIdentifier>
+ <UniqueIdentifier>{B0D5F6C7-747C-4556-9082-1BC1AC0D4FA1}</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>{2DBFC871-0321-474E-ACAA-EF309426BBED}</UniqueIdentifier>
+ <UniqueIdentifier>{77321221-711B-4C2A-B73F-69E0D1F99853}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{8493E657-4501-41D4-8F6A-B7527F30AA2D}</UniqueIdentifier>
+ <UniqueIdentifier>{60C02FC3-8D34-4BD3-8E28-866B4C29D3E0}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/ndis/netvmini/6x/netvmini.sln b/network/ndis/netvmini/6x/netvmini.sln
index 0485a5a1..fbbe870c 100644
--- a/network/ndis/netvmini/6x/netvmini.sln
+++ b/network/ndis/netvmini/6x/netvmini.sln
@@ -3,17 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{FB1356F7-2404-4CF8-8FF8-D9D99AB89F12}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{5F9487AF-05E7-4436-B499-5EE19925E384}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "620", "620", "{9164ECBF-12E2-44DA-8038-3BD0F347C637}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "620", "620", "{EC37AF20-58A7-44FE-AA97-7EBB2736E9DD}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{2212DE82-26A1-46C0-810A-809089EC5623}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{7F09E94A-63F3-442B-ABEB-843EF656383E}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini60", "60\netvmini60.vcxproj", "{E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini60", "60\netvmini60.vcxproj", "{4D117295-96D2-498D-BDE1-C560BFA3C03B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini620", "620\netvmini620.vcxproj", "{9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini620", "620\netvmini620.vcxproj", "{B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini630", "630\netvmini630.vcxproj", "{20227FE5-F4F3-4980-98C2-B860C8B2F62C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini630", "630\netvmini630.vcxproj", "{FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -23,37 +23,37 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Debug|Win32.ActiveCfg = Debug|Win32
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Debug|Win32.Build.0 = Debug|Win32
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Release|Win32.ActiveCfg = Release|Win32
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Release|Win32.Build.0 = Release|Win32
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Debug|x64.ActiveCfg = Debug|x64
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Debug|x64.Build.0 = Debug|x64
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Release|x64.ActiveCfg = Release|x64
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B}.Release|x64.Build.0 = Release|x64
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Debug|Win32.ActiveCfg = Debug|Win32
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Debug|Win32.Build.0 = Debug|Win32
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Release|Win32.ActiveCfg = Release|Win32
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Release|Win32.Build.0 = Release|Win32
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Debug|x64.ActiveCfg = Debug|x64
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Debug|x64.Build.0 = Debug|x64
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Release|x64.ActiveCfg = Release|x64
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D}.Release|x64.Build.0 = Release|x64
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Debug|Win32.ActiveCfg = Debug|Win32
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Debug|Win32.Build.0 = Debug|Win32
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Release|Win32.ActiveCfg = Release|Win32
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Release|Win32.Build.0 = Release|Win32
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Debug|x64.ActiveCfg = Debug|x64
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Debug|x64.Build.0 = Debug|x64
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Release|x64.ActiveCfg = Release|x64
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C}.Release|x64.Build.0 = Release|x64
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Debug|Win32.Build.0 = Debug|Win32
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Release|Win32.ActiveCfg = Release|Win32
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Release|Win32.Build.0 = Release|Win32
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Debug|x64.ActiveCfg = Debug|x64
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Debug|x64.Build.0 = Debug|x64
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Release|x64.ActiveCfg = Release|x64
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B}.Release|x64.Build.0 = Release|x64
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Debug|Win32.Build.0 = Debug|Win32
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Release|Win32.ActiveCfg = Release|Win32
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Release|Win32.Build.0 = Release|Win32
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Debug|x64.ActiveCfg = Debug|x64
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Debug|x64.Build.0 = Debug|x64
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Release|x64.ActiveCfg = Release|x64
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8}.Release|x64.Build.0 = Release|x64
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Debug|Win32.Build.0 = Debug|Win32
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Release|Win32.ActiveCfg = Release|Win32
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Release|Win32.Build.0 = Release|Win32
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Debug|x64.ActiveCfg = Debug|x64
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Debug|x64.Build.0 = Debug|x64
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Release|x64.ActiveCfg = Release|x64
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {E1613ED0-DFEF-4C4D-8E06-6DB68964EE8B} = {FB1356F7-2404-4CF8-8FF8-D9D99AB89F12}
- {9DA1838D-2D4D-4357-9E4A-49BF1A8E6B7D} = {9164ECBF-12E2-44DA-8038-3BD0F347C637}
- {20227FE5-F4F3-4980-98C2-B860C8B2F62C} = {2212DE82-26A1-46C0-810A-809089EC5623}
+ {4D117295-96D2-498D-BDE1-C560BFA3C03B} = {5F9487AF-05E7-4436-B499-5EE19925E384}
+ {B4150693-0DE4-4CE8-8FFB-183E2A0DFFF8} = {EC37AF20-58A7-44FE-AA97-7EBB2736E9DD}
+ {FD239BD3-EB8B-4BAA-BC83-43F1E1D1EE89} = {7F09E94A-63F3-442B-ABEB-843EF656383E}
EndGlobalSection
EndGlobal
diff --git a/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln b/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln
new file mode 100644
index 00000000..63278f58
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0
+MinimumVisualStudioVersion = 12.0
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RadioSwitchHidUsbFx2", "RadioSwitchHidUsbFx2.vcxproj", "{299CE7FF-033A-4968-906D-5B8D00C1FE0C}"
+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
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Debug|Win32.Build.0 = Debug|Win32
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Release|Win32.ActiveCfg = Release|Win32
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Release|Win32.Build.0 = Release|Win32
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Debug|x64.ActiveCfg = Debug|x64
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Debug|x64.Build.0 = Debug|x64
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Release|x64.ActiveCfg = Release|x64
+ {299CE7FF-033A-4968-906D-5B8D00C1FE0C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/network/radio/HidSwitchDriverSample/READFIRST_InstructionsForDevelopingHIDDriver.htm b/network/radio/HidSwitchDriverSample/READFIRST_InstructionsForDevelopingHIDDriver.htm
new file mode 100644
index 00000000..77351c56
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/READFIRST_InstructionsForDevelopingHIDDriver.htm
@@ -0,0 +1,944 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 14">
+<meta name=Originator content="Microsoft Word 14">
+<link rel=File-List
+href="READFIRST_InstructionsForDevelopingHIDDriver_files/filelist.xml">
+<title>HID USB FX2 Sample</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Author>MJ Bustamante</o:Author>
+ <o:Template>Normal</o:Template>
+ <o:LastAuthor>MJ Bustamante</o:LastAuthor>
+ <o:Revision>3</o:Revision>
+ <o:TotalTime>1415</o:TotalTime>
+ <o:LastPrinted>2011-12-08T19:23:00Z</o:LastPrinted>
+ <o:Created>2011-12-08T21:59:00Z</o:Created>
+ <o:LastSaved>2011-12-08T22:02:00Z</o:LastSaved>
+ <o:Pages>1</o:Pages>
+ <o:Words>211</o:Words>
+ <o:Characters>1206</o:Characters>
+ <o:Company>Microsoft Corporation</o:Company>
+ <o:Lines>10</o:Lines>
+ <o:Paragraphs>2</o:Paragraphs>
+ <o:CharactersWithSpaces>1415</o:CharactersWithSpaces>
+ <o:Version>14.00</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]-->
+<link rel=themeData
+href="READFIRST_InstructionsForDevelopingHIDDriver_files/themedata.thmx">
+<link rel=colorSchemeMapping
+href="READFIRST_InstructionsForDevelopingHIDDriver_files/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:View>Print</w:View>
+ <w:SpellingState>Clean</w:SpellingState>
+ <w:GrammarState>Clean</w:GrammarState>
+ <w:TrackMoves>false</w:TrackMoves>
+ <w:TrackFormatting/>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:DoNotPromoteQF/>
+ <w:LidThemeOther>EN-US</w:LidThemeOther>
+ <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+ <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+ <w:Compatibility>
+ <w:BreakWrappedTables/>
+ <w:SplitPgBreakAndParaMark/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="&#45;-"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
+ DefSemiHidden="true" DefQFormat="false" DefPriority="99"
+ LatentStyleCount="267">
+ <w:LsdException Locked="false" Priority="0" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 3"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 4"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 5"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
+ <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
+ <w:LsdException Locked="false" Priority="10" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Title"/>
+ <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+ <w:LsdException Locked="false" Priority="11" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
+ <w:LsdException Locked="false" Priority="22" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
+ <w:LsdException Locked="false" Priority="20" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
+ <w:LsdException Locked="false" Priority="59" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Table Grid"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
+ <w:LsdException Locked="false" Priority="1" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 1"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
+ <w:LsdException Locked="false" Priority="34" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
+ <w:LsdException Locked="false" Priority="29" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
+ <w:LsdException Locked="false" Priority="30" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 1"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 2"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 2"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 3"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 3"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 4"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 4"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 5"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 5"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 6"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 6"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="19" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
+ <w:LsdException Locked="false" Priority="21" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
+ <w:LsdException Locked="false" Priority="31" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
+ <w:LsdException Locked="false" Priority="32" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
+ <w:LsdException Locked="false" Priority="33" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
+ <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
+ <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:"Cambria Math";
+ panose-1:2 4 5 3 5 4 6 3 2 4;
+ mso-font-charset:1;
+ mso-generic-font-family:roman;
+ mso-font-format:other;
+ mso-font-pitch:variable;
+ mso-font-signature:0 0 0 0 0 0;}
+@font-face
+ {font-family:Verdana;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:-1593833729 1073750107 16 0 415 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+h3
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 3 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ font-size:13.5pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h4
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 4 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h5
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 5 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:5;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+a:link, span.MsoHyperlink
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ color:purple;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+pre
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-link:"HTML Preformatted Char";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ font-size:10.0pt;
+ font-family:"Courier New";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;}
+p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.Heading3Char
+ {mso-style-name:"Heading 3 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 3";
+ color:black;
+ font-weight:bold;}
+span.Heading4Char
+ {mso-style-name:"Heading 4 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 4";
+ color:black;
+ font-weight:bold;}
+span.Heading5Char
+ {mso-style-name:"Heading 5 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 5";
+ color:black;
+ font-weight:bold;}
+span.HTMLPreformattedChar
+ {mso-style-name:"HTML Preformatted Char";
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"HTML Preformatted";
+ font-family:"Courier New";
+ mso-ascii-font-family:"Courier New";
+ mso-hansi-font-family:"Courier New";
+ mso-bidi-font-family:"Courier New";
+ color:black;}
+p.msochpdefault, li.msochpdefault, div.msochpdefault
+ {mso-style-name:msochpdefault;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.xdrichtextboxxdbehaviorghostedtextctrl59ms-xedit-plaintext
+ {mso-style-name:"xdrichtextbox xdbehavior_ghostedtext ctrl59 ms-xedit-plaintext";
+ mso-style-unhide:no;}
+.MsoChpDefault
+ {mso-style-type:export-only;
+ mso-default-props:yes;
+ font-size:10.0pt;
+ mso-ansi-font-size:10.0pt;
+ mso-bidi-font-size:10.0pt;}
+@page WordSection1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.WordSection1
+ {page:WordSection1;}
+ /* List Definitions */
+ @list l0
+ {mso-list-id:562642700;
+ mso-list-type:hybrid;
+ mso-list-template-ids:-1055364604 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+@list l0:level1
+ {mso-level-text:"%1\)";
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level2
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level3
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l0:level4
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level5
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level6
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l0:level7
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level8
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level9
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l1
+ {mso-list-id:814641137;
+ mso-list-template-ids:1708158208;}
+@list l1:level1
+ {mso-level-start-at:2;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l1:level3
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2
+ {mso-list-id:1015693652;
+ mso-list-type:hybrid;
+ mso-list-template-ids:120745856 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+@list l2:level1
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level2
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level3
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l2:level4
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level5
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level6
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l2:level7
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level8
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l2:level9
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l3
+ {mso-list-id:1019820257;
+ mso-list-type:hybrid;
+ mso-list-template-ids:2110404088 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+@list l3:level1
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level2
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level3
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l3:level4
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level5
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level6
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l3:level7
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level8
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level9
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l4
+ {mso-list-id:1081100945;
+ mso-list-template-ids:-915523298;}
+@list l4:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l5
+ {mso-list-id:1977905290;
+ mso-list-template-ids:1992603632;}
+@list l5:level1
+ {mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l5:level3
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l5:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+ol
+ {margin-bottom:0in;}
+ul
+ {margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
+
+<div class=WordSection1>
+
+<p class=MsoNormal><b><span style='font-size:16.0pt;font-family:"Verdana","sans-serif"'>Radio
+Switch Driver Development</span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Sample
+HID driver for Radio Management</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>There
+are several steps that must be followed to create a HID driver for the hardware
+wireless switch:<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana'><span style='mso-list:Ignore'>1)<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Update System BIOS<o:p></o:p></span></p>
+
+<p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana'><span style='mso-list:Ignore'>2)<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Develop HID driver<o:p></o:p></span></p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana'><span style='mso-list:Ignore'>3)<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Validate HID driver
+functionality<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Update
+System BIOS<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>The system BIOS needs to be updated in order to
+report the radio hardware button/switch to software � that is, the switch must
+be exposed via ACPI.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>BIOS must not control the radios directly, but must
+rely on Windows 8 software to control the state of the radios via the HID
+driver.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Develop
+the HID driver for the hardware wireless switch<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Use the HID driver sample to develop your
+HID-compliant driver that communicates with your proprietary interface (embedded
+controller) on the bottom edge and is wireless HID switch compliant on the
+upper edge. <o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Important
+note:</span></b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'> if you are developing a HID driver for an A-B
+switch, your proprietary embedded controller must report the correct state of
+the switch at all times by sending a HID message to the HID driver, including
+every time the PC is turned on back on. Reporting the state of the A-B switch
+when the computer is turned back on is especially important in the case that
+the switch changed states while the PC was in states S3/S4/S5.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Validate
+HID driver functionality<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Logo tests are available in the Windows Hardware
+Certification Kit to validate the functionality of your HID driver.</span><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/network/radio/HidSwitchDriverSample/README.htm b/network/radio/HidSwitchDriverSample/README.htm
new file mode 100644
index 00000000..ef09a38e
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/README.htm
@@ -0,0 +1,1437 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 14">
+<meta name=Originator content="Microsoft Word 14">
+<link rel=File-List href="README_files/filelist.xml">
+<title>HID USB FX2 Sample</title>
+<link rel=themeData href="README_files/themedata.thmx">
+<link rel=colorSchemeMapping href="README_files/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:View>Print</w:View>
+ <w:SpellingState>Clean</w:SpellingState>
+ <w:GrammarState>Clean</w:GrammarState>
+ <w:TrackMoves>false</w:TrackMoves>
+ <w:TrackFormatting/>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:DoNotPromoteQF/>
+ <w:LidThemeOther>EN-US</w:LidThemeOther>
+ <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+ <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+ <w:Compatibility>
+ <w:BreakWrappedTables/>
+ <w:SplitPgBreakAndParaMark/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="&#45;-"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
+ DefSemiHidden="true" DefQFormat="false" DefPriority="99"
+ LatentStyleCount="267">
+ <w:LsdException Locked="false" Priority="0" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 3"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 4"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 5"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
+ <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
+ <w:LsdException Locked="false" Priority="10" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Title"/>
+ <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+ <w:LsdException Locked="false" Priority="11" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
+ <w:LsdException Locked="false" Priority="22" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
+ <w:LsdException Locked="false" Priority="20" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
+ <w:LsdException Locked="false" Priority="59" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Table Grid"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
+ <w:LsdException Locked="false" Priority="1" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 1"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
+ <w:LsdException Locked="false" Priority="34" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
+ <w:LsdException Locked="false" Priority="29" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
+ <w:LsdException Locked="false" Priority="30" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 1"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 2"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 2"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 3"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 3"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 4"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 4"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 5"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 5"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 6"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 6"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="19" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
+ <w:LsdException Locked="false" Priority="21" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
+ <w:LsdException Locked="false" Priority="31" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
+ <w:LsdException Locked="false" Priority="32" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
+ <w:LsdException Locked="false" Priority="33" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
+ <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
+ <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:Calibri;
+ panose-1:2 15 5 2 2 2 4 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:-520092929 1073786111 9 0 415 0;}
+@font-face
+ {font-family:Verdana;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:-1593833729 1073750107 16 0 415 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+h3
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 3 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ font-size:13.5pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h4
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 4 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h5
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 5 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:5;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+a:link, span.MsoHyperlink
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ color:purple;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+pre
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-link:"HTML Preformatted Char";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ font-size:10.0pt;
+ font-family:"Courier New";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;}
+p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
+ {mso-style-noshow:yes;
+ mso-style-priority:34;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-type:export-only;
+ margin-top:0in;
+ margin-right:0in;
+ margin-bottom:0in;
+ margin-left:.5in;
+ margin-bottom:.0001pt;
+ mso-add-space:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.Heading3Char
+ {mso-style-name:"Heading 3 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 3";
+ color:black;
+ font-weight:bold;}
+span.Heading4Char
+ {mso-style-name:"Heading 4 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 4";
+ color:black;
+ font-weight:bold;}
+span.Heading5Char
+ {mso-style-name:"Heading 5 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 5";
+ color:black;
+ font-weight:bold;}
+span.HTMLPreformattedChar
+ {mso-style-name:"HTML Preformatted Char";
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"HTML Preformatted";
+ font-family:"Courier New";
+ mso-ascii-font-family:"Courier New";
+ mso-hansi-font-family:"Courier New";
+ mso-bidi-font-family:"Courier New";
+ color:black;}
+p.msochpdefault, li.msochpdefault, div.msochpdefault
+ {mso-style-name:msochpdefault;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.xdrichtextboxxdbehaviorghostedtextctrl59ms-xedit-plaintext
+ {mso-style-name:"xdrichtextbox xdbehavior_ghostedtext ctrl59 ms-xedit-plaintext";
+ mso-style-unhide:no;}
+span.SpellE
+ {mso-style-name:"";
+ mso-spl-e:yes;}
+span.GramE
+ {mso-style-name:"";
+ mso-gram-e:yes;}
+.MsoChpDefault
+ {mso-style-type:export-only;
+ mso-default-props:yes;
+ font-size:10.0pt;
+ mso-ansi-font-size:10.0pt;
+ mso-bidi-font-size:10.0pt;}
+@page WordSection1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.WordSection1
+ {page:WordSection1;}
+ /* List Definitions */
+ @list l0
+ {mso-list-id:1015693652;
+ mso-list-type:hybrid;
+ mso-list-template-ids:120745856 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+@list l0:level1
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level2
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level3
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l0:level4
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level5
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level6
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l0:level7
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level8
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level9
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l1
+ {mso-list-id:1019820257;
+ mso-list-type:hybrid;
+ mso-list-template-ids:2110404088 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+@list l1:level1
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level2
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level3
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l1:level4
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level5
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level6
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l1:level7
+ {mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level8
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1:level9
+ {mso-level-number-format:roman-lower;
+ mso-level-tab-stop:none;
+ mso-level-number-position:right;
+ text-indent:-9.0pt;}
+@list l2
+ {mso-list-id:1133792005;
+ mso-list-template-ids:1839505460;}
+@list l2:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l3
+ {mso-list-id:1493252706;
+ mso-list-template-ids:10805292;}
+@list l3:level1
+ {mso-level-start-at:2;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l3:level3
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4
+ {mso-list-id:1977905290;
+ mso-list-template-ids:1992603632;}
+@list l4:level1
+ {mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level2
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l4:level3
+ {mso-level-number-format:alpha-lower;
+ mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l4:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+ol
+ {margin-bottom:0in;}
+ul
+ {margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
+
+<div class=WordSection1>
+
+<p class=MsoNormal><b><span style='font-size:16.0pt;font-family:"Verdana","sans-serif"'>Radio
+Switch Test Driver for OSR USB-FX2 Development Board</span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Verdana","sans-serif"'>Before
+developing the HID driver, please make sure you read the READFIRST document,
+which indicates the steps that must be taken in order to correctly develop a
+HID driver.<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Sample HID
+driver for Radio Management</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>This
+sample demonstrates how to structure a HID driver for radio switches for the
+OSR USB-FX2 Development Board.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>On
+Windows 8 and later, the hardware switch or button to control wireless
+transmission and the global software switch (Airplane mode switch) in the Radio
+Management User Interface must be synchronized. To ensure the hardware and
+software switches that control radio transmission are synchronized, the
+hardware switch or button must have a HID-compliant driver.</span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Switch
+Pack Mapping</span></b></p>
+
+<p class=MsoNormal><span style='font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
+ <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Switch</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>2</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>3</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>4</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>5</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>6</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>7</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>8</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Mapping</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Mode Select</span></p>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Bit 3</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Mode Select</span></p>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Bit 2</span></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Mode Select</span></p>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Bit 1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'>-</p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'>-</p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'>-</p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'>-</p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Radio Switch</span></p>
+ </td>
+ </tr>
+</table>
+
+<p class=MsoNormal><b><span style='font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif";
+mso-bidi-font-family:Arial'>Sample Language Implementation<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif";
+mso-bidi-font-family:Arial'><span style='mso-tab-count:1'>��������� </span></span></b><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-bidi-font-family:
+Arial;mso-bidi-font-weight:bold'>C++</span><span style='font-size:10.0pt;
+font-family:"Verdana","sans-serif"'><o:p></o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Prerequisites
+for Installation<o:p></o:p></span></b></p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana;mso-bidi-font-weight:bold'><span
+style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Windows 8 Developer Preview x86<o:p></o:p></span></p>
+
+<p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana;mso-bidi-font-weight:bold'><span
+style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Visual Studio 11 Developer Preview<o:p></o:p></span></p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana;mso-bidi-font-weight:bold'><span
+style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Windows 8 WDK<o:p></o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Building
+the Driver<o:p></o:p></span></b></p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana;mso-bidi-font-weight:bold'><span
+style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Open the RadioSwitchHidUsbFx2.VcxProj<o:p></o:p></span></p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+Verdana;mso-bidi-font-family:Verdana;mso-bidi-font-weight:bold'><span
+style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+mso-bidi-font-weight:bold'>Use Visual Studio 11 to build the project<o:p></o:p></span></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'><o:p>&nbsp;</o:p></span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Installing
+the Driver</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>To
+install the driver, you must:</span><o:p></o:p></p>
+
+<ol style='margin-top:0in' start=1 type=1 xmlns="http://www.w3.org/1999/xhtml">
+ <li class=MsoNormal style='mso-list:l4 level1 lfo7;tab-stops:list .5in'><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Build the driver using Visual Studio 11 Developer
+ Preview and copy the following installation files to a folder on your hard
+ drive: </span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='mso-list:l4 level2 lfo7;tab-stops:list 1.0in'><em><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>RadioSwitchHidUsbFx2.inf </span></em><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-list:l4 level2 lfo7;tab-stops:list 1.0in'><em><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>RadioSwitchHidUsbFx2.sys </span></em><em><span
+ style='font-style:normal'><o:p></o:p></span></em></li>
+ </ul>
+</ol>
+
+<p class=MsoNormal style='margin-left:1.0in'><o:p>&nbsp;</o:p></p>
+
+<ol style='margin-top:0in' start=2 type=1>
+ <li class=MsoNormal style='mso-list:l4 level1 lfo7;tab-stops:list .5in'><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Plug in the device and do the following, depending on
+ the operating system that you are using:</span><span style='mso-fareast-font-family:
+ "Times New Roman"'><o:p></o:p></span></li>
+ <ul style='margin-top:0in' type=disc>
+ <ol style='margin-top:0in' start=1 type=a>
+ <li class=MsoNormal style='mso-list:l4 level3 lfo7;tab-stops:list 1.5in'><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Launch <b>Device Manager</b> by executing command <span
+ class=SpellE>devmgmt.msc</span> in a command window, or from <strong><span
+ style='font-family:"Verdana","sans-serif"'>Hardware and Sound </span></strong><strong><span
+ style='font-family:"Verdana","sans-serif";font-weight:normal'>program</span></strong><strong><span
+ style='font-family:"Verdana","sans-serif"'> </span></strong><strong><span
+ style='font-family:"Verdana","sans-serif";font-weight:normal'>group</span></strong><strong><span
+ style='font-family:"Verdana","sans-serif"'> in Control Panel</span></strong>.</span><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-list:l4 level3 lfo7;tab-stops:list 1.5in'><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman";font-weight:normal'>Select </span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>OSR USB-FX2</span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman";font-weight:normal'> device from </span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Other Devices</span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman";font-weight:normal'> category and click </span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Update Driver Software�</span></strong><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman";font-weight:normal'> from right-click menu.</span></strong><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-list:l4 level3 lfo7;tab-stops:list 1.5in'><strong><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman";font-weight:normal'>Select Browse my computer for
+ software and provide the location of the driver files.</span></strong><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-list:l4 level3 lfo7;tab-stops:list 1.5in'><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>Select <span class=GramE><strong><span
+ style='font-family:"Verdana","sans-serif"'>Install</span></strong></span><strong><span
+ style='font-family:"Verdana","sans-serif"'> this driver software anyway </span></strong>when
+ the <strong><span style='font-family:"Verdana","sans-serif"'>Windows
+ Security </span></strong>dialog box appears.</span><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-list:l4 level3 lfo7;tab-stops:list 1.5in'><span
+ style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+ "Times New Roman"'>After the driver is installed, you should see the
+ device in Device Manager under &quot;Human Interface Devices&quot;. </span><span
+ style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></li>
+ </ol>
+ </ul>
+</ol>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>Testing</span></b></p>
+
+<p class=MsoNormal><b><span style='font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Testing
+Modes</span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>The
+driver supports five modes representing the valid combinations of HID
+descriptors that we have defined for the USB forum.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Modes
+are selected using switches 1, 2, and 3 on the switch pack.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
+ <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Switch</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>2</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>3</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border:solid windowtext 2.25pt;
+ border-left:none;background:#A0A0A0;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Mode</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:1'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>Mapping</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><i><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 1</span></i></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:2'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 1</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:3'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 2</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:4'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 3</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:5'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 4</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:6'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ background:#EAF1DD;padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 5</span></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:7'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>0</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><i><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 1</span></i></p>
+ </td>
+ </tr>
+ <tr style='mso-yfti-irow:8;mso-yfti-lastrow:yes'>
+ <td width=67 valign=top style='width:.7in;border:none;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif"'>&nbsp;</span></b></p>
+ </td>
+ <td width=60 valign=top style='width:45.0pt;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 0in 0in 0in'>
+ <p class=MsoNormal align=center style='text-align:center'><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>1</span></p>
+ </td>
+ <td width=72 valign=top style='width:.75in;border-top:none;border-left:none;
+ border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
+ padding:0in 5.4pt 0in 5.4pt'>
+ <p class=MsoNormal align=center style='text-align:center'><i><span
+ style='font-size:10.0pt;font-family:"Calibri","sans-serif"'>Mode 1</span></i></p>
+ </td>
+ </tr>
+</table>
+
+<p class=MsoNormal>&nbsp;</p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>The
+Mode in use is displayed on the boards seven segment display.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+is determined at startup, so to change mode the board must be unplugged &amp;
+then re-connected</span></p>
+
+<p class=MsoNormal>&nbsp;</p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+1 Radio Push Button </span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+this mode the radio switch (switch 8 on the switch pack) represents a momentary
+push button.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>A
+HID report is generated when the switch transitions to the <span class=GramE>On</span>
+state (switch down).</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+2 Radio Push Button &amp; LED</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+this mode the radio switch (switch 8 on the switch pack) represents a momentary
+push button.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>A
+HID report is generated when the switch transitions to the <span class=GramE>On</span>
+state (switch down).</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+addition, the LED array will reflect the state of the Radio LED: either all on
+or all off (note that the top 2 LEDs never illuminate as these are not wired
+in).</span></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+3 Radio Slider Switch</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+this mode the radio switch (switch 8 on the switch pack) represents an A-B
+slider switch.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>A
+HID report is generated in both cases: when the switch transitions to the <span
+class=GramE>On</span> state (switch down) and to the Off state (switch up).</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;</span></p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+4 Radio Slider Switch &amp; LED</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+this mode the radio switch (switch 8 on the switch pack) represents an A-B
+slider switch.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>A
+HID report is generated in both cases: when the switch transitions to the <span
+class=GramE>On</span> state (switch down) and to the Off state (switch up).</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+addition the LED array will reflect the state of the Radio LED: either all on
+or all off (note that the top 2 LEDs never illuminate as these are not wired
+in).</span></p>
+
+<p class=MsoNormal>&nbsp;</p>
+
+<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mode
+5 LED only</span></b></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
+this mode the radio switch (switch 8 on the switch pack) is ignored.</span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>The
+LED array will reflect the state of the Radio LED: either all on or all off
+(note that the top 2 LEDs never illuminate as these are not wired in).</span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.h b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.h
new file mode 100644
index 00000000..ce92cfff
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.h
@@ -0,0 +1,156 @@
+#ifndef _RADIOSWITCHHIDUSBFX2_H_
+#define _RADIOSWITCHHIDUSBFX2_H_
+
+#include <initguid.h>
+#include <wdm.h>
+#include "usbdi.h"
+#include "usbdlib.h"
+#include <wdf.h>
+#include "wdfusb.h"
+#include <hidport.h>
+#define NTSTRSAFE_LIB
+#include <ntstrsafe.h>
+#include "trace.h"
+
+
+#define HID_CLASS_SPEC_RELEASE_1_00 0x0100 // HID Class Specification release 1.00
+#define HID_COUNTRY_NON_LOCALIZED 0x00 // Hardware is not localized
+
+#define GENERIC_DESKTOP_REPORT_ID 0x01
+
+#define GENERIC_DESKTOP_USAGE_PAGE 0x01
+#define WIRELESS_RADIO_CONTROLS_USAGE 0x0C
+#define WIRELESS_RADIO_BUTTON_USAGE 0xC6
+#define WIRELESS_RADIO_LED_USAGE 0xC7
+#define WIRELESS_RADIO_SLIDER_USAGE 0xC8
+
+
+#define MODE_SELECTION_BUTTONS_BIT_MASK 0xE0
+#define RADIO_SWITCH_BUTTONS_BIT_MASK 0x01
+#define SWITCHPACK_SELECTION_FOR_MODE2 0x40
+#define SWITCHPACK_SELECTION_FOR_MODE3 0x60
+#define SWITCHPACK_SELECTION_FOR_MODE4 0x80
+#define SWITCHPACK_SELECTION_FOR_MODE5 0xA0
+
+#define INTERRUPT_ENDPOINT_INDEX (0)
+
+#define SWITCHPACK_DEBOUNCE_TIME 10 // in millseconds
+
+// Define the vendor commands supported by device
+#define HIDFX2_READ_SWITCH_STATE 0xD6
+#define HIDFX2_READ_7SEGMENT_DISPLAY 0xD4
+#define HIDFX2_READ_BARGRAPH_DISPLAY 0xD7
+#define HIDFX2_SET_BARGRAPH_DISPLAY 0xD8
+#define HIDFX2_IS_HIGH_SPEED 0xD9
+#define HIDFX2_REENUMERATE 0xDA
+#define HIDFX2_SET_7SEGMENT_DISPLAY 0xDB
+
+// Bit masks for 7 segment display to be used with vendor command
+#define SEG_TOP 0x1
+#define SEG_R_UPPER 0x2
+#define SEG_R_LOWER 0x4
+#define SEG_DOT 0x8
+#define SEG_L_LOWER 0x10
+#define SEG_MID 0x20
+#define SEG_L_UPPER 0x40
+#define SEG_BASE 0x80
+
+#define SEGMENT_DISPLAY_1 SEG_R_UPPER | SEG_R_LOWER
+#define SEGMENT_DISPLAY_2 SEG_TOP | SEG_R_UPPER | SEG_MID | SEG_L_LOWER | SEG_BASE
+#define SEGMENT_DISPLAY_3 SEG_TOP | SEG_R_UPPER | SEG_MID | SEG_R_LOWER | SEG_BASE
+#define SEGMENT_DISPLAY_4 SEG_R_UPPER | SEG_R_LOWER | SEG_MID | SEG_L_UPPER
+#define SEGMENT_DISPLAY_5 SEG_TOP | SEG_R_LOWER | SEG_MID | SEG_L_UPPER | SEG_BASE
+#define SEGMENT_DISPLAY_6 SEG_TOP | SEG_R_LOWER | SEG_L_LOWER | SEG_MID | SEG_L_UPPER | SEG_BASE
+#define SEGMENT_DISPLAY_7 SEG_TOP | SEG_R_UPPER | SEG_R_LOWER
+#define SEGMENT_DISPLAY_8 SEG_TOP | SEG_R_UPPER | SEG_R_LOWER | SEG_L_UPPER | SEG_L_LOWER | SEG_MID | SEG_BASE
+
+#define BARGRAPH_LED_ALL_ON 0xff
+#define BARGRAPH_LED_ALL_OFF 0x00
+
+
+typedef UCHAR HID_REPORT_DESCRIPTOR, *PHID_REPORT_DESCRIPTOR;
+
+#include <pshpack1.h> // make sure packing is handled correctly
+
+typedef struct _HIDFX2_IO_REPORT
+{
+ unsigned char bReportId; //Report ID for the collection
+ unsigned char bData; //one-byte data for switch/LED
+}HIDFX2_IO_REPORT, *PHIDFX2_IO_REPORT;
+
+
+typedef enum _DRIVER_MODE
+{
+ DM_BUTTON = 1,
+ DM_BUTTON_AND_LED,
+ DM_SLIDER_SWITCH,
+ DM_SLIDER_SWITCH_AND_LED,
+ DM_LED_ONLY
+} DRIVER_MODE;
+
+#include <poppack.h>
+
+typedef struct _DEVICE_EXTENSION
+{
+ WDFUSBDEVICE hUsbDevice; //WDF handles for USB Target
+ WDFUSBINTERFACE hUsbInterface;
+ WDFUSBPIPE hInterruptPipe;
+ WDFMEMORY hDeviceDescriptor; // Device descriptor for the USB device
+ unsigned char bCurrentSwitchState; // Switch state.
+ unsigned char bLatestToggledSwitch; // State for the switch that got toggled most recently
+ BOOLEAN fIsPowerUpSwitchState; //Interrupt endpoints sends switch state when first started .we ignore this
+ WDFTIMER hDebounceTimer; // Handle debouncing of switchpack
+ WDFQUEUE hInterruptMsgQueue; // WDF Queue for read IOCTLs from hidclass that get satisfied from USB interrupt endpoint
+ DRIVER_MODE driverMode;
+} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
+
+WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_EXTENSION, GetDeviceContext)
+
+
+//
+// Driver routines
+//
+DRIVER_INITIALIZE DriverEntry;
+
+EVT_WDF_DRIVER_DEVICE_ADD HidFx2EvtDeviceAdd;
+
+EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL HidFx2EvtInternalDeviceControl;
+
+EVT_WDF_DEVICE_PREPARE_HARDWARE HidFx2EvtDevicePrepareHardware;
+
+EVT_WDF_DEVICE_D0_ENTRY HidFx2EvtDeviceD0Entry;
+
+EVT_WDF_DEVICE_D0_EXIT HidFx2EvtDeviceD0Exit;
+
+EVT_WDF_USB_READER_COMPLETION_ROUTINE HidFx2EvtUsbInterruptPipeReadComplete;
+
+EVT_WDF_TIMER HidFx2EvtTimerFunction;
+
+EVT_WDF_OBJECT_CONTEXT_CLEANUP HidFx2EvtDriverContextCleanup;
+
+EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE HidFx2EvtIoCanceledOnQueue;
+
+
+NTSTATUS HidFx2GetHidDescriptor(_In_ WDFDEVICE hDevice, _In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2GetReportDescriptor(_In_ WDFDEVICE hDevice, _In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2GetDeviceAttributes(_In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2ConfigContReaderForInterruptEndPoint(PDEVICE_EXTENSION pDeviceContext);
+
+NTSTATUS HidFx2SendIdleNotification(_In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2SetOutput(_In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2GetInput(_In_ WDFREQUEST hRequest);
+
+NTSTATUS HidFx2GetSwitchState(_In_ WDFDEVICE hDevice, _Out_ unsigned char *pbSwitchState);
+
+NTSTATUS SendVendorCommand(_In_ WDFDEVICE hDevice, _In_ unsigned char bVendorCommand, _In_ unsigned char bCommandData);
+
+PCWSTR DbgDevicePowerString(_In_ WDF_POWER_DEVICE_STATE powerState);
+
+#endif //_RADIOSWITCHHIDUSBFX2_H_
+
+
diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx
new file mode 100644
index 00000000..5089dfdd
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx
@@ -0,0 +1,114 @@
+[Version]
+Signature="$Windows NT$"
+Class=HIDClass
+ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
+Provider=%VENDOR%
+DriverVer=5/3/2011,1.0.0.0
+CatalogFile=HidRadioSwitchDrv.cat
+
+
+[SourceDisksFiles]
+RadioSwitchHidUsbFx2.sys = 99
+
+[SourceDisksNames]
+99 = %DISK_NAME%,,,""
+
+[DestinationDirs]
+CopyFunctionDriver = 12
+CopyFilterDriver = 12
+
+[Manufacturer]
+%VENDOR%=Vendor, NT$ARCH$.6.1
+
+; For Win7 and later so that we can use inbox HID-KMDF mapper
+[Vendor.NT$ARCH$.6.1]
+%RadioSwitchHidUsbFx2% = RadioSwitchHidUsbFx2.Inst.Win7, USB\VID_0547&PID_1002
+%customCollection% = customCollection.Inst, HID_DEVICE_UP:FF00_U:0001
+
+;===============================================================
+; RadioSwitchHidUsbFx2 for Win7
+; Instead of using hidkmdf.sys as a filter, use the inbox
+; mshidkmdf.sys as a mapper filter
+;===============================================================
+[RadioSwitchHidUsbFx2.Inst.Win7.NT]
+; Just copy the driver. No neeed to copy other system binaries.
+CopyFiles = CopyFunctionDriver
+
+[RadioSwitchHidUsbFx2.Inst.Win7.NT.HW]
+AddReg = RadioSwitchHidUsbFx2_Win7_Parameters.AddReg
+
+;
+; hidkmdf is the function driver and RadioSwitchHidUsbFx2 is the lower filter
+;
+[RadioSwitchHidUsbFx2.Inst.Win7.NT.Services]
+AddService = RadioSwitchHidUsbFx2,0x00000002, RadioSwitchHidUsbFx2_Service_Inst
+
+[RadioSwitchHidUsbFx2_Win7_Parameters.AddReg]
+HKR,,"UpperFilters",0x00010000,"mshidkmdf"
+
+;===============================================================
+; Sections common to all OS versions
+;===============================================================
+
+[CopyFunctionDriver]
+RadioSwitchHidUsbFx2.sys
+
+[RadioSwitchHidUsbFx2_Service_Inst]
+DisplayName = %RadioSwitchHidUsbFx2%
+ServiceType = %SERVICE_KERNEL_DRIVER%
+StartType = %SERVICE_DEMAND_START%
+ErrorControl = %SERVICE_ERROR_IGNORE%
+ServiceBinary = %12%\RadioSwitchHidUsbFx2.sys
+
+;===============================================================
+; Custom Collection install section
+; - Only a Null service is installed.
+;===============================================================
+[customCollection.Inst.NT]
+; NULL section
+
+[customCollection.Inst.NT.HW]
+AddReg = customCollection.Inst.AddReg.NT.HW
+
+[customCollection.Inst.AddReg.NT.HW]
+HKR,,"SelectiveSuspendEnabled",0x00000001,0x1
+
+[customCollection.Inst.NT.Services]
+AddService = ,0x00000002, ; NULL Service
+
+;================================================================
+;--- WDF Coinstaller installation ------
+;
+[DestinationDirs]
+RadioSwitchHidUsbFx2.Inst_CoInstaller_CopyFiles = 11
+
+[SourceDisksFiles]
+WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=99 ; make sure the number matches with SourceDisksNames
+
+[Strings]
+; *******Localizable Strings*******
+VENDOR = "Vendor Name"
+RadioSwitchHidUsbFx2 = "Radio Switch HID Mini-driver for OSR USB-FX-2 Device"
+customCollection = "Radio Switch Collection for OSR USB-FX-2"
+DISK_NAME = "HID Radio Switch USB FX-2 Install Disk"
+
+; *******Non Localizable Strings*******
+
+SERVICE_BOOT_START = 0x0
+SERVICE_SYSTEM_START = 0x1
+SERVICE_AUTO_START = 0x2
+SERVICE_DEMAND_START = 0x3
+SERVICE_DISABLED = 0x4
+
+SERVICE_KERNEL_DRIVER = 0x1
+SERVICE_ERROR_IGNORE = 0x0
+SERVICE_ERROR_NORMAL = 0x1
+SERVICE_ERROR_SEVERE = 0x2
+SERVICE_ERROR_CRITICAL = 0x3
+
+REG_EXPAND_SZ = 0x00020000
+REG_DWORD = 0x00010001
+REG_MULTI_SZ = 0x00010000
+REG_BINARY = 0x00000001
+REG_SZ = 0x00000000
+
diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.rc b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.rc
new file mode 100644
index 00000000..6737f603
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.rc
@@ -0,0 +1,11 @@
+#include <windows.h>
+
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DRV
+#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
+#define VER_FILEDESCRIPTION_STR "HID Radio Switch mini driver for USB Fx2 Device"
+#define VER_INTERNALNAME_STR "RadioSwitchHidUsbFx2.sys"
+
+#include "common.ver"
+
diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj
new file mode 100644
index 00000000..690f4f3f
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj
@@ -0,0 +1,182 @@
+<?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>{299CE7FF-033A-4968-906D-5B8D00C1FE0C}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{060E6040-ACF0-4A53-A87E-2D541F54BDC3}</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; hid.c; usb.c">
+ <WppEnabled>true</WppEnabled>
+ <WppKernelMode>true</WppKernelMode>
+ <WppTraceFunction>TraceEvents(LEVEL,FLAGS,MSG,...);TraceErr{LEVEL=TRACE_LEVEL_ERROR}(FLAGS,MSG,...);TraceWarning{LEVEL=TRACE_LEVEL_WARNING}(FLAGS,MSG,...);TraceInfo{LEVEL=TRACE_LEVEL_INFORMATION}(FLAGS,MSG,...);TraceVerbose{LEVEL=TRACE_LEVEL_VERBOSE}(FLAGS,MSG,...)</WppTraceFunction>
+ <WppGenerateUsingTemplateFile>{km-WdfDefault.tpl}*.tmh</WppGenerateUsingTemplateFile>
+ </ClCompile>
+ <Inf Include=".\RadioSwitchHidUsbFx2.inx">
+ <Architecture>$(InfArch)</Architecture>
+ <SpecifyArchitecture>true</SpecifyArchitecture>
+ <CopyOutput>.\$(IntDir)\RadioSwitchHidUsbFx2.inf</CopyOutput>
+ </Inf>
+ <OtherWpp Include="RadioSwitchHidUsbFx2.rc">
+ <WppEnabled>true</WppEnabled>
+ <WppKernelMode>true</WppKernelMode>
+ <WppTraceFunction>TraceEvents(LEVEL,FLAGS,MSG,...);TraceErr{LEVEL=TRACE_LEVEL_ERROR}(FLAGS,MSG,...);TraceWarning{LEVEL=TRACE_LEVEL_WARNING}(FLAGS,MSG,...);TraceInfo{LEVEL=TRACE_LEVEL_INFORMATION}(FLAGS,MSG,...);TraceVerbose{LEVEL=TRACE_LEVEL_VERBOSE}(FLAGS,MSG,...)</WppTraceFunction>
+ <WppGenerateUsingTemplateFile>{km-WdfDefault.tpl}*.tmh</WppGenerateUsingTemplateFile>
+ </OtherWpp>
+ </ItemGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>RadioSwitchHidUsbFx2</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>RadioSwitchHidUsbFx2</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>RadioSwitchHidUsbFx2</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>RadioSwitchHidUsbFx2</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\hidclass.lib;$(DDK_LIB_PATH)\ntstrsafe.lib</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\hidclass.lib;$(DDK_LIB_PATH)\ntstrsafe.lib</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\hidclass.lib;$(DDK_LIB_PATH)\ntstrsafe.lib</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\hidclass.lib;$(DDK_LIB_PATH)\ntstrsafe.lib</AdditionalDependencies>
+ </Link>
+ </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="RadioSwitchHidUsbFx2.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+ </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/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters
new file mode 100644
index 00000000..b4198ba4
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters
@@ -0,0 +1,45 @@
+<?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>{FDCC489B-556E-43F5-BD3B-71316D442DEA}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{18150D25-6522-47D8-9CB4-5108F5F98F28}</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>{A79E57E4-3B90-45E9-95EB-A0541E4A8DF4}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Driver Files">
+ <Extensions>inf;inv;inx;mof;mc;</Extensions>
+ <UniqueIdentifier>{0F70BE0E-ED35-4FD6-88BE-92687BE1BBB6}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hid.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="usb.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <FilesToPackage Include=".\Debug\\RadioSwitchHidUsbFx2.inf">
+ <Filter>Driver Files</Filter>
+ </FilesToPackage>
+ <Inf Include=".\RadioSwitchHidUsbFx2.inx">
+ <Filter>Driver Files</Filter>
+ </Inf>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="RadioSwitchHidUsbFx2.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/network/radio/HidSwitchDriverSample/ReadMe.md b/network/radio/HidSwitchDriverSample/ReadMe.md
new file mode 100644
index 00000000..5a94b523
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/ReadMe.md
@@ -0,0 +1,74 @@
+Radio Switch Test Driver for OSR USB-FX2 Development Board
+==========================================================
+
+This sample demonstrates how to structure a HID driver for radio switches for the OSR USB-FX2 Development Board.
+
+Starting with Windows 8.1, the hardware switch or button to control wireless transmission and the global software switch (Airplane mode switch) in the Radio Management User Interface must be synchronized. To ensure the hardware and software switches that control radio transmission are synchronized, the hardware switch or button must have a HID-compliant driver.
+
+
+Testing
+-------
+
+### Testing Modes
+
+The driver supports five modes representing the valid combinations of HID descriptors that we have defined for the USB forum. Modes are selected using switches 1, 2, and 3 on the switch pack.
+
+### Switch Mapping
+
+<table>
+<colgroup>
+<col width="25%" />
+<col width="25%" />
+<col width="25%" />
+<col width="25%" />
+</colgroup>
+<thead>
+<tr class="header">
+<th align="left">1
+2
+3
+Mode</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td align="left">0
+0
+0
+Mode 1</td>
+<td align="left">0
+0
+1
+Mode 1</td>
+<td align="left">0
+1
+0
+Mode 2</td>
+<td align="left">0
+1
+1
+Mode 3</td>
+</tr>
+</tbody>
+</table>
+
+### Mode 1 Radio Push Button
+
+In this mode the radio switch (switch 8 on the switch pack) represents a momentary push button. A HID report is generated when the switch transitions to the On state (switch down).
+
+### Mode 2 Radio Push Button & LED
+
+In this mode the radio switch (switch 8 on the switch pack) represents a momentary push button. A HID report is generated when the switch transitions to the On state (switch down). In addition, the LED array will reflect the state of the Radio LED: either all on or all off (note that the top 2 LEDs never illuminate as these are not wired in).
+
+### Mode 3 Radio Slider Switch
+
+In this mode the radio switch (switch 8 on the switch pack) represents a momentary push button. A HID report is generated when the switch transitions to the On state (switch down).
+
+### Mode 4 Radio Slider Switch & LED
+
+In this mode the radio switch (switch 8 on the switch pack) represents an A-B slider switch. A HID report is generated in both cases: when the switch transitions to the On state (switch down) and to the Off state (switch up). In addition the LED array will reflect the state of the Radio LED: either all on or all off (note that the top 2 LEDs never illuminate as these are not wired in).
+
+### Mode 5 LED only
+
+In this mode the radio switch (switch 8 on the switch pack) is ignored. The LED array will reflect the state of the Radio LED: either all on or all off (note that the top 2 LEDs never illuminate as these are not wired in).
+
diff --git a/network/radio/HidSwitchDriverSample/driver.c b/network/radio/HidSwitchDriverSample/driver.c
new file mode 100644
index 00000000..a14d4fc4
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/driver.c
@@ -0,0 +1,156 @@
+#include <RadioSwitchHidUsbFx2.h>
+#pragma warning(disable:28252)
+#pragma warning(disable:28253)
+#include "driver.tmh"
+
+
+#ifdef ALLOC_PRAGMA
+ #pragma alloc_text(INIT, DriverEntry)
+ #pragma alloc_text(PAGE, HidFx2EvtDriverContextCleanup)
+ #pragma alloc_text(PAGE, HidFx2EvtDeviceAdd)
+#endif
+
+
+
+//Installable driver initialization entry point. This entry point is called directly by the I/O system.
+//
+NTSTATUS DriverEntry (_In_ PDRIVER_OBJECT pDriverObject, _In_ PUNICODE_STRING pszRegistryPath)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDF_DRIVER_CONFIG config;
+ WDF_OBJECT_ATTRIBUTES attributes;
+
+
+ // Initialize WPP Tracing
+ WPP_INIT_TRACING(pDriverObject, pszRegistryPath);
+
+ TraceInfo(DBG_INIT, "(%!FUNC!) Enter -Sample Built %s %s\n", __DATE__, __TIME__);
+
+ WDF_DRIVER_CONFIG_INIT(&config, HidFx2EvtDeviceAdd);
+
+ // 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 = HidFx2EvtDriverContextCleanup;
+
+ // Create a framework driver object to represent our driver.
+ status = WdfDriverCreate(pDriverObject,
+ pszRegistryPath,
+ &attributes, // Driver Attributes
+ &config, // Driver Config Info
+ WDF_NO_HANDLE
+ );
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_INIT, "(%!FUNC!)WdfDriverCreate failed with status %!STATUS!\n", status);
+ WPP_CLEANUP(pDriverObject);
+ }
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Exit\n");
+ return status;
+}
+
+
+
+//Free resources allocated in DriverEntry that are not automatically cleaned up framework.
+//
+void HidFx2EvtDriverContextCleanup(_In_ WDFOBJECT hDriver)
+{
+ PAGED_CODE ();
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Enter/Exit\n");
+
+ WPP_CLEANUP(WdfDriverWdmGetDriverObject(hDriver));
+}
+
+
+
+//HidFx2EvtDeviceAdd is called by the framework in response to AddDevicecall from the PnP manager.
+//We create and initialize a WDF device object to represent a new instance of device.
+//
+NTSTATUS HidFx2EvtDeviceAdd(_In_ WDFDRIVER hDriver, _Inout_ PWDFDEVICE_INIT pDeviceInit)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDF_IO_QUEUE_CONFIG queueConfig;
+ WDF_OBJECT_ATTRIBUTES attributes;
+ WDFDEVICE hDevice;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ WDFQUEUE hQueue;
+ WDF_PNPPOWER_EVENT_CALLBACKS pnpPowerCallbacks;
+ WDF_TIMER_CONFIG timerConfig;
+ WDFTIMER hTimer;
+
+ UNREFERENCED_PARAMETER(hDriver);
+
+ PAGED_CODE();
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Enter\n");
+
+ // Tell framework this is a filter driver.
+ WdfFdoInitSetFilter(pDeviceInit);
+
+ // Initialize pnp-power callbacks, attributes and a context area for the 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 = HidFx2EvtDevicePrepareHardware;
+
+ // These two callbacks start and stop the wdfusb pipe continuous reader as we go in and out of the D0-working state.
+ pnpPowerCallbacks.EvtDeviceD0Entry = HidFx2EvtDeviceD0Entry;
+ pnpPowerCallbacks.EvtDeviceD0Exit = HidFx2EvtDeviceD0Exit;
+
+ WdfDeviceInitSetPnpPowerEventCallbacks(pDeviceInit, &pnpPowerCallbacks);
+
+ WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DEVICE_EXTENSION);
+
+ // Create a framework device object.This call will in turn create a WDM device object, attach to the lower stack.
+ status = WdfDeviceCreate(&pDeviceInit, &attributes, &hDevice);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfDeviceCreate failed with status code %!STATUS!\n", status);
+ return status;
+ }
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&queueConfig, WdfIoQueueDispatchParallel);
+ queueConfig.EvtIoInternalDeviceControl = HidFx2EvtInternalDeviceControl;
+
+ status = WdfIoQueueCreate(hDevice, &queueConfig, WDF_NO_OBJECT_ATTRIBUTES, &hQueue);
+ if (!NT_SUCCESS (status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfIoQueueCreate failed 0x%x\n", status);
+ return status;
+ }
+
+ // Register a manual I/O queue for handling Interrupt Message Read Requests.
+ WDF_IO_QUEUE_CONFIG_INIT(&queueConfig, 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.
+ queueConfig.PowerManaged = WdfFalse;
+
+ status = WdfIoQueueCreate(hDevice, &queueConfig, WDF_NO_OBJECT_ATTRIBUTES, &pDevContext->hInterruptMsgQueue);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfIoQueueCreate failed %!STATUS!\n", status);
+ return status;
+ }
+
+ // Create a timer to handle debouncing of switchpack
+ WDF_TIMER_CONFIG_INIT(&timerConfig, HidFx2EvtTimerFunction);
+ timerConfig.AutomaticSerialization = FALSE;
+
+ WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
+ attributes.ParentObject = hDevice;
+ status = WdfTimerCreate(&timerConfig, &attributes, &hTimer);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfTimerCreate failed status:%!STATUS!\n", status);
+ return status;
+ }
+
+ pDevContext->hDebounceTimer = hTimer;
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Exit\n");
+ return status;
+}
diff --git a/network/radio/HidSwitchDriverSample/hid.c b/network/radio/HidSwitchDriverSample/hid.c
new file mode 100644
index 00000000..27fcefea
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/hid.c
@@ -0,0 +1,659 @@
+#include <RadioSwitchHidUsbFx2.h>
+#include "hid.tmh"
+
+// Radio Management Collection - Scenario 1 control collection (Button only)
+//
+const HID_REPORT_DESCRIPTOR c_ButtonDescriptor[] = {
+ 0x05, GENERIC_DESKTOP_USAGE_PAGE, // USAGE_PAGE (Generic Desktop)
+ 0x09, WIRELESS_RADIO_CONTROLS_USAGE,// USAGE (Wireless Radio Controls)
+ 0xA1, 0x01, // COLLECTION (Application)
+ 0x85, GENERIC_DESKTOP_REPORT_ID, // REPORT_ID
+ 0x15, 0x00, // LOGICAL_MINIMUM(0)
+ 0x25, 0x01, // LOGICAL_MAXIMUM(1)
+ //
+ 0x09, WIRELESS_RADIO_BUTTON_USAGE, // USAGE (Wireless Radio Button)
+ 0x95, 0x01, // REPORT_COUNT (1)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x81, 0x06, // INPUT (Data, Variable, Rel) - button bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x81, 0x03, // INPUT (const, var, abs) -7 bits of padding
+ 0xC0 // END_COLLECTION
+};
+
+
+// Radio Management Collection - Scenario 2 control collection (Button with LED)
+//
+const HID_REPORT_DESCRIPTOR c_ButtonWithLedDescriptor[] = {
+ 0x05, GENERIC_DESKTOP_USAGE_PAGE, // USAGE_PAGE (Generic Desktop)
+ 0x09, WIRELESS_RADIO_CONTROLS_USAGE,// USAGE (Wireless Radio Controls)
+ 0xA1, 0x01, // COLLECTION (Application)
+ 0x85, GENERIC_DESKTOP_REPORT_ID, // REPORT_ID
+ 0x15, 0x00, // LOGICAL_MINIMUM(0)
+ 0x25, 0x01, // LOGICAL_MAXIMUM(1)
+ //
+ 0x09, WIRELESS_RADIO_BUTTON_USAGE, // USAGE (Wireless Radio Button)
+ 0x95, 0x01, // REPORT_COUNT (1)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x81, 0x06, // INPUT (Data, Variable, Rel) - button bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x81, 0x03, // INPUT (const, var, abs) -7 bits of padding
+ //
+ 0x09, WIRELESS_RADIO_LED_USAGE, // USAGE (Wireless Radio LED)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x91, 0x02, // OUTPUT (Data, Variable, Rel) -led bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x91, 0x03, // OUTPUT (const, var, abs) -7 bits of padding
+ 0xC0 // END_COLLECTION
+};
+
+
+// Radio Management Collection - Scenario 3 control collection (Slider Switch)
+//
+const HID_REPORT_DESCRIPTOR c_SliderSwitchDescriptor[] = {
+ 0x05, GENERIC_DESKTOP_USAGE_PAGE, // USAGE_PAGE (Generic Desktop)
+ 0x09, WIRELESS_RADIO_CONTROLS_USAGE,// USAGE (Wireless Radio Controls)
+ 0xA1, 0x01, // COLLECTION (Application)
+ 0x85, GENERIC_DESKTOP_REPORT_ID, // REPORT_ID
+ 0x15, 0x00, // LOGICAL_MINIMUM(0)
+ 0x25, 0x01, // LOGICAL_MAXIMUM(1)
+ //
+ 0x09, WIRELESS_RADIO_SLIDER_USAGE, // USAGE (Wireless Radio Slider Switch)
+ 0x95, 0x01, // REPORT_COUNT (1)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x81, 0x02, // INPUT (Data, Variable, Abs) -switch bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x81, 0x03, // INPUT (const, var, abs) -7 bits of padding
+ 0xC0 // END_COLLECTION
+};
+
+
+// Radio Management Collection - Scenario 4 control collection (Slider Switch with LED)
+//
+const HID_REPORT_DESCRIPTOR c_SliderSwitchWithLedDescriptor[] = {
+ 0x05, GENERIC_DESKTOP_USAGE_PAGE, // USAGE_PAGE (Generic Desktop)
+ 0x09, WIRELESS_RADIO_CONTROLS_USAGE,// USAGE (Wireless Radio Controls)
+ 0xA1, 0x01, // COLLECTION (Application)
+ 0x85, GENERIC_DESKTOP_REPORT_ID, // REPORT_ID
+ 0x15, 0x00, // LOGICAL_MINIMUM(0)
+ 0x25, 0x01, // LOGICAL_MAXIMUM(1)
+ //
+ 0x09, WIRELESS_RADIO_SLIDER_USAGE, // USAGE (Wireless Radio Slider Switch)
+ 0x95, 0x01, // REPORT_COUNT (1)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x81, 0x02, // INPUT (Data, Variable, Abs) -switch bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x81, 0x03, // INPUT (const, var, abs) -7 bits of padding
+ //
+ 0x09, WIRELESS_RADIO_LED_USAGE, // USAGE (Wireless Radio LED)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x91, 0x02, // OUTPUT (Data, Variable, Rel) -led bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x91, 0x03, // OUTPUT (const, var, abs) -7 bits of padding
+ 0xC0 // END_COLLECTION
+};
+
+
+// Radio Management Collection - Scenario 5 control collection (LED only)
+//
+const HID_REPORT_DESCRIPTOR c_LedOnlyDescriptor[] = {
+ 0x05, GENERIC_DESKTOP_USAGE_PAGE, // USAGE_PAGE (Generic Desktop)
+ 0x09, WIRELESS_RADIO_CONTROLS_USAGE,// USAGE (Wireless Radio Controls)
+ 0xA1, 0x01, // COLLECTION (Application)
+ 0x85, GENERIC_DESKTOP_REPORT_ID, // REPORT_ID
+ 0x15, 0x00, // LOGICAL_MINIMUM(0)
+ 0x25, 0x01, // LOGICAL_MAXIMUM(1)
+ //
+ 0x09, WIRELESS_RADIO_LED_USAGE, // USAGE (Wireless Radio LED)
+ 0x95, 0x01, // REPORT_COUNT (1)
+ 0x75, 0x01, // REPORT_SIZE (1)
+ 0x91, 0x02, // OUTPUT (Data, Variable, Rel) -led bit
+ 0x75, 0x07, // REPORT_SIZE (7)
+ 0x91, 0x03, // OUTPUT (const, var, abs) -7 bits of padding
+ 0xC0 // END_COLLECTION
+};
+
+
+#ifdef ALLOC_PRAGMA
+ #pragma alloc_text(PAGE, HidFx2SetOutput)
+ #pragma alloc_text(PAGE, HidFx2GetInput)
+ #pragma alloc_text(PAGE, SendVendorCommand)
+#endif
+
+
+// This event is called when the framework receives IRP_MJ_INTERNAL DEVICE_CONTROL requests from the system.
+//
+void HidFx2EvtInternalDeviceControl(
+ _In_ WDFQUEUE hQueue,
+ _In_ WDFREQUEST hRequest,
+ _In_ size_t cOutputBufferLength,
+ _In_ size_t cInputBufferLength,
+ _In_ ULONG ulIoControlCode
+ )
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDFDEVICE hDevice;
+ PDEVICE_EXTENSION pDevContext = NULL;
+
+ UNREFERENCED_PARAMETER(cOutputBufferLength);
+ UNREFERENCED_PARAMETER(cInputBufferLength);
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Enter\n");
+
+ hDevice = WdfIoQueueGetDevice(hQueue);
+ pDevContext = GetDeviceContext(hDevice);
+
+ TraceInfo(DBG_IOCTL, "(%!FUNC!) Queue:0x%p, Request:0x%p\n", hQueue, hRequest);
+
+ switch (ulIoControlCode)
+ {
+ case IOCTL_HID_GET_DEVICE_DESCRIPTOR:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_GET_DEVICE_DESCRIPTOR\n");
+ status = HidFx2GetHidDescriptor(hDevice, hRequest);
+ WdfRequestComplete(hRequest, status);
+ break;
+
+ case IOCTL_HID_GET_DEVICE_ATTRIBUTES:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_GET_DEVICE_ATTRIBUTES\n");
+ status = HidFx2GetDeviceAttributes(hRequest);
+ WdfRequestComplete(hRequest, status);
+ break;
+
+ case IOCTL_HID_GET_REPORT_DESCRIPTOR:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_GET_REPORT_DESCRIPTOR\n");
+ status = HidFx2GetReportDescriptor(hDevice, hRequest);
+ WdfRequestComplete(hRequest, status);
+ break;
+
+ case IOCTL_HID_READ_REPORT:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_READ_REPORT\n");
+ status = WdfRequestForwardToIoQueue(hRequest, pDevContext->hInterruptMsgQueue);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_IOCTL, "WdfRequestForwardToIoQueue failed with status: %!STATUS!\n", status);
+ WdfRequestComplete(hRequest, status);
+ }
+ break;
+
+ case IOCTL_HID_SEND_IDLE_NOTIFICATION_REQUEST:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_SEND_IDLE_NOTIFICATION_REQUEST\n");
+ status = HidFx2SendIdleNotification(hRequest);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_IOCTL, "SendIdleNotification failed with status: %!STATUS!\n", status);
+ WdfRequestComplete(hRequest, status);
+ }
+ break;
+
+ case IOCTL_HID_GET_INPUT_REPORT:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_GET_INPUT_REPORT\n");
+ HidFx2GetInput(hRequest);
+ WdfRequestComplete(hRequest, status);
+ break;
+
+ case IOCTL_HID_SET_OUTPUT_REPORT:
+ TraceInfo(DBG_IOCTL, "IOCTL_HID_SET_OUTPUT_REPORT\n");
+ status = HidFx2SetOutput(hRequest);
+ WdfRequestComplete(hRequest, status);
+ break;
+
+ default:
+ TraceInfo(DBG_IOCTL, "IOCTL Not Supported 0x%X\n", ulIoControlCode);
+ status = STATUS_NOT_SUPPORTED;
+ WdfRequestComplete(hRequest, status);
+ break;
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit\n");
+ return;
+}
+
+
+
+NTSTATUS HidFx2GetInput(_In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDF_REQUEST_PARAMETERS params;
+ WDFDEVICE hDevice;
+ PHID_XFER_PACKET pTransferPacket = NULL;
+ PHIDFX2_IO_REPORT pOutputReport = NULL;
+ unsigned char bSwitchState = 0;
+
+ PAGED_CODE();
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Enter\n");
+
+ hDevice = WdfIoQueueGetDevice(WdfRequestGetIoQueue(hRequest));
+
+ WDF_REQUEST_PARAMETERS_INIT(&params);
+ WdfRequestGetParameters(hRequest, &params);
+
+
+ if (params.Parameters.DeviceIoControl.OutputBufferLength < sizeof(HID_XFER_PACKET))
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Userbuffer is small %!STATUS!\n", status);
+ return status;
+ }
+
+ pTransferPacket = (PHID_XFER_PACKET) WdfRequestWdmGetIrp(hRequest)->UserBuffer;
+ if (pTransferPacket == NULL)
+ {
+ status = STATUS_INVALID_DEVICE_REQUEST;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Irp->UserBuffer is NULL %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportBufferLen == 0)
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) HID_XFER_PACKET->reportBufferLen is 0, %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportBufferLen < sizeof(UCHAR))
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) HID_XFER_PACKET->reportBufferLen is too small, %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportId != GENERIC_DESKTOP_REPORT_ID)
+ {
+ status = STATUS_INVALID_DEVICE_REQUEST;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Incorrect report ID, %!STATUS!\n", status);
+ return status;
+ }
+
+ pOutputReport = (PHIDFX2_IO_REPORT)pTransferPacket->reportBuffer;
+
+ // Get the switch state directly from the hardware
+ status = HidFx2GetSwitchState(hDevice, &bSwitchState);
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) switch state 0x%x\n", bSwitchState);
+
+ //Mask off everything except the actual switch bit
+ bSwitchState &= RADIO_SWITCH_BUTTONS_BIT_MASK;
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) maskedswitch state 0x%x\n", bSwitchState);
+
+ pOutputReport->bReportId = GENERIC_DESKTOP_REPORT_ID;
+ pOutputReport->bData = bSwitchState;
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit status %!STATUS!\n", status);
+ return status;
+}
+
+
+
+NTSTATUS HidFx2SetOutput(_In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ PHID_XFER_PACKET pTransferPacket = NULL;
+ WDF_REQUEST_PARAMETERS params;
+ PHIDFX2_IO_REPORT pOutputReport = NULL;
+ WDFDEVICE hDevice;
+
+ PAGED_CODE();
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Enter\n");
+
+ hDevice = WdfIoQueueGetDevice(WdfRequestGetIoQueue(hRequest));
+
+ WDF_REQUEST_PARAMETERS_INIT(&params);
+ WdfRequestGetParameters(hRequest, &params);
+
+ if (params.Parameters.DeviceIoControl.InputBufferLength < sizeof(HID_XFER_PACKET))
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Userbuffer is small %!STATUS!\n", status);
+ return status;
+ }
+
+ pTransferPacket = (PHID_XFER_PACKET) WdfRequestWdmGetIrp(hRequest)->UserBuffer;
+ if (pTransferPacket == NULL)
+ {
+ status = STATUS_INVALID_DEVICE_REQUEST;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Irp->UserBuffer is NULL %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportBufferLen == 0)
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) HID_XFER_PACKET->reportBufferLen is 0, %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportBufferLen < sizeof(UCHAR))
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) HID_XFER_PACKET->reportBufferLen is too small, %!STATUS!\n", status);
+ return status;
+ }
+
+ if (pTransferPacket->reportId != GENERIC_DESKTOP_REPORT_ID)
+ {
+ status = STATUS_INVALID_DEVICE_REQUEST;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Incorrect report ID, %!STATUS!\n", status);
+ return status;
+ }
+
+ pOutputReport = (PHIDFX2_IO_REPORT)pTransferPacket->reportBuffer;
+
+ if (pOutputReport->bData == 0)
+ {
+ status = SendVendorCommand(hDevice, HIDFX2_SET_BARGRAPH_DISPLAY, BARGRAPH_LED_ALL_OFF);
+ }
+ else
+ {
+ status = SendVendorCommand(hDevice, HIDFX2_SET_BARGRAPH_DISPLAY, BARGRAPH_LED_ALL_ON);
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit status %!STATUS!\n", status);
+ return status;
+}
+
+
+
+//This routine sets the state of the Feature: in this case Segment Display on the USB FX2 board.
+NTSTATUS SendVendorCommand(_In_ WDFDEVICE hDevice, _In_ unsigned char bVendorCommand, _In_ unsigned char bCommandData)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ ULONG cBytesTransferred = 0;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ WDF_MEMORY_DESCRIPTOR memDesc;
+ WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
+ WDF_REQUEST_SEND_OPTIONS sendOptions;
+
+ PAGED_CODE();
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Enter\n");
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ TraceInfo(DBG_IOCTL, "(%!FUNC!): Command:0x%x, data: 0x%x\n", bVendorCommand, bCommandData);
+
+ // Send the I/O with a timeout.
+ // We do that because we send the I/O in the context of the user thread and if it gets stuck, it would prevent the user process from existing.
+ WDF_REQUEST_SEND_OPTIONS_INIT(&sendOptions, WDF_REQUEST_SEND_OPTION_TIMEOUT);
+
+ WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(&sendOptions, WDF_REL_TIMEOUT_IN_SEC(5));
+
+ WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
+ BmRequestHostToDevice,
+ BmRequestToDevice,
+ bVendorCommand, // Request
+ 0, // Value
+ 0); // Index
+
+ WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc, &bCommandData, sizeof(bCommandData));
+
+ status = WdfUsbTargetDeviceSendControlTransferSynchronously(pDevContext->hUsbDevice,
+ WDF_NO_HANDLE, // Optional WDFREQUEST
+ &sendOptions, // PWDF_REQUEST_SEND_OPTIONS
+ &controlSetupPacket,
+ &memDesc,
+ &cBytesTransferred);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!): Failed to set Segment Display state - %!STATUS!\n", status);
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit\n");
+
+ return status;
+}
+
+
+
+// Finds the HID descriptor and copies it into the buffer provided by the Request.
+//
+NTSTATUS HidFx2GetHidDescriptor(_In_ WDFDEVICE hDevice, _In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ size_t cBytesToCopy = 0;
+ WDFMEMORY memory;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ HID_DESCRIPTOR hidDescriptor;
+
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Entry\n");
+
+ status = WdfRequestRetrieveOutputMemory(hRequest, &memory);
+ if (NT_SUCCESS(status))
+ {
+ hidDescriptor.bLength= sizeof(hidDescriptor); // length of HID descriptor
+ hidDescriptor.bDescriptorType= HID_HID_DESCRIPTOR_TYPE; // descriptor type == HID 0x21
+ hidDescriptor.bcdHID= HID_CLASS_SPEC_RELEASE_1_00; // hid spec release
+ hidDescriptor.bCountry= HID_COUNTRY_NON_LOCALIZED; // country code
+ hidDescriptor.bNumDescriptors= 0x01; // number of HID class descriptors
+ hidDescriptor.DescriptorList[0].bReportType =HID_REPORT_DESCRIPTOR_TYPE;
+ hidDescriptor.DescriptorList[0].wReportLength = sizeof(c_ButtonDescriptor);
+
+ pDevContext = GetDeviceContext(hDevice);
+ if (pDevContext != NULL)
+ {
+ // Set length of non default report descriptor
+ switch (pDevContext->driverMode)
+ {
+ case DM_BUTTON_AND_LED:
+ hidDescriptor.DescriptorList[0].wReportLength = sizeof(c_ButtonWithLedDescriptor);
+ break;
+ case DM_SLIDER_SWITCH:
+ hidDescriptor.DescriptorList[0].wReportLength = sizeof(c_SliderSwitchDescriptor);
+ break;
+ case DM_SLIDER_SWITCH_AND_LED:
+ hidDescriptor.DescriptorList[0].wReportLength = sizeof(c_SliderSwitchWithLedDescriptor);
+ break;
+ case DM_LED_ONLY:
+ hidDescriptor.DescriptorList[0].wReportLength = sizeof(c_LedOnlyDescriptor);
+ break;
+ default:
+ break;
+ }
+ }
+ cBytesToCopy = hidDescriptor.bLength;
+ if (cBytesToCopy != 0)
+ {
+ status = WdfMemoryCopyFromBuffer(memory, 0, (PVOID)&hidDescriptor, cBytesToCopy);
+ if (NT_SUCCESS(status))
+ {
+ // Report how many bytes were copied
+ WdfRequestSetInformation(hRequest, cBytesToCopy);
+ }
+ else // WdfMemoryCopyFromBuffer failed
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) WdfMemoryCopyFromBuffer failed %!STATUS!\n", status);
+ return status;
+ }
+ }
+ else // length is zero
+ {
+ status = STATUS_INVALID_DEVICE_STATE;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) c_DefaultHidDescriptor is zero, %!STATUS!\n", status);
+ return status;
+ }
+
+ }
+ else // WdfRequestRetrieveOutputMemory failed
+ {
+ TraceErr(DBG_IOCTL, " (%!FUNC!) WdfRequestRetrieveOutputMemory failed %!STATUS!\n", status);
+ return status;
+ }
+
+ TraceVerbose(DBG_IOCTL, " (%!FUNC!) HidFx2GetHidDescriptor Exit = %!STATUS!\n", status);
+ return status;
+}
+
+
+
+// Finds the Report descriptor and copies it into the buffer provided by the Request.
+//
+NTSTATUS HidFx2GetReportDescriptor(_In_ WDFDEVICE hDevice, _In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDFMEMORY memory;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ PVOID pBuffer = (PVOID)c_ButtonDescriptor;
+ size_t cBytesToCopy = sizeof(c_ButtonDescriptor);
+
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Entry\n");
+
+ status = WdfRequestRetrieveOutputMemory(hRequest, &memory);
+ if (NT_SUCCESS(status))
+ {
+ pDevContext = GetDeviceContext(hDevice);
+ if (pDevContext != NULL)
+ {
+ // Select a non default report descriptor
+ switch (pDevContext->driverMode)
+ {
+ case DM_BUTTON_AND_LED:
+ pBuffer = (PVOID)c_ButtonWithLedDescriptor;
+ cBytesToCopy = sizeof(c_ButtonWithLedDescriptor);
+ break;
+ case DM_SLIDER_SWITCH:
+ pBuffer = (PVOID)c_SliderSwitchDescriptor;
+ cBytesToCopy = sizeof(c_SliderSwitchDescriptor);
+ break;
+ case DM_SLIDER_SWITCH_AND_LED:
+ pBuffer = (PVOID)c_SliderSwitchWithLedDescriptor;
+ cBytesToCopy = sizeof(c_SliderSwitchWithLedDescriptor);
+ break;
+ case DM_LED_ONLY:
+ pBuffer = (PVOID)c_LedOnlyDescriptor;
+ cBytesToCopy = sizeof(c_LedOnlyDescriptor);
+ break;
+ default:
+ break;
+ }
+ }
+ if (cBytesToCopy != 0)
+ {
+ status = WdfMemoryCopyFromBuffer(memory, 0, pBuffer, cBytesToCopy);
+ if (NT_SUCCESS(status))
+ {
+ // Report how many bytes were copied
+ WdfRequestSetInformation(hRequest, cBytesToCopy);
+ }
+ else // WdfMemoryCopyFromBuffer failed
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) WdfMemoryCopyFromBuffer failed %!STATUS!\n", status);
+ }
+ }
+ else // report length is zero
+ {
+ status = STATUS_INVALID_DEVICE_STATE;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) c_DefaultHidDescriptor's reportLength is zero, %!STATUS!\n", status);
+ }
+ }
+ else // WdfRequestRetrieveOutputMemory failed
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!)WdfRequestRetrieveOutputMemory failed %!STATUS!\n", status);
+
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit = %!STATUS!\n", status);
+ return status;
+}
+
+
+
+// Fill in the given struct _HID_DEVICE_ATTRIBUTES
+//
+NTSTATUS HidFx2GetDeviceAttributes(_In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ PHID_DEVICE_ATTRIBUTES pDeviceAttributes = NULL;
+ PUSB_DEVICE_DESCRIPTOR pUsbDeviceDescriptor = NULL;
+ PDEVICE_EXTENSION pDeviceInfo = NULL;
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Entry\n");
+
+ pDeviceInfo = GetDeviceContext(WdfIoQueueGetDevice(WdfRequestGetIoQueue(hRequest)));
+ status = WdfRequestRetrieveOutputBuffer(hRequest, sizeof (HID_DEVICE_ATTRIBUTES), &pDeviceAttributes, NULL);
+ if (NT_SUCCESS(status))
+ {
+ // Retrieve USB device descriptor saved in device context
+ pUsbDeviceDescriptor = WdfMemoryGetBuffer(pDeviceInfo->hDeviceDescriptor, NULL);
+ pDeviceAttributes->Size = sizeof (HID_DEVICE_ATTRIBUTES);
+ pDeviceAttributes->VendorID = pUsbDeviceDescriptor->idVendor;
+ pDeviceAttributes->ProductID = pUsbDeviceDescriptor->idProduct;
+ pDeviceAttributes->VersionNumber = pUsbDeviceDescriptor->bcdDevice;
+ // Report how many bytes were copied
+ WdfRequestSetInformation(hRequest, sizeof (HID_DEVICE_ATTRIBUTES));
+ }
+ else // WdfRequestRetrieveOutputBuffer failed
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) WdfRequestRetrieveOutputBuffer failed %!STATUS!\n", status);
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit = %!STATUS!\n", status);
+ return status;
+}
+
+
+
+// Pass down Idle notification request to lower driver
+//
+NTSTATUS HidFx2SendIdleNotification(_In_ WDFREQUEST hRequest)
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ WDF_REQUEST_SEND_OPTIONS options;
+ WDFIOTARGET hNextLowerDriver;
+ WDFDEVICE hDevice;
+ PIO_STACK_LOCATION pCurrentIrpStack = NULL;
+ IO_STACK_LOCATION nextIrpStack;
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Entry\n");
+
+ hDevice = WdfIoQueueGetDevice(WdfRequestGetIoQueue(hRequest));
+ pCurrentIrpStack = IoGetCurrentIrpStackLocation(WdfRequestWdmGetIrp(hRequest));
+
+ // Convert the request to corresponding USB Idle notification request
+ if (pCurrentIrpStack->Parameters.DeviceIoControl.InputBufferLength >= sizeof(HID_SUBMIT_IDLE_NOTIFICATION_CALLBACK_INFO))
+ {
+ ASSERT(sizeof(HID_SUBMIT_IDLE_NOTIFICATION_CALLBACK_INFO) == sizeof(USB_IDLE_CALLBACK_INFO));
+ #pragma warning(suppress :4127) // conditional expression is constant warning
+ if (sizeof(HID_SUBMIT_IDLE_NOTIFICATION_CALLBACK_INFO) == sizeof(USB_IDLE_CALLBACK_INFO))
+ {
+ // prepare next stack location
+ RtlZeroMemory(&nextIrpStack, sizeof(IO_STACK_LOCATION));
+ nextIrpStack.MajorFunction = pCurrentIrpStack->MajorFunction;
+ nextIrpStack.Parameters.DeviceIoControl.InputBufferLength = pCurrentIrpStack->Parameters.DeviceIoControl.InputBufferLength;
+ nextIrpStack.Parameters.DeviceIoControl.Type3InputBuffer = pCurrentIrpStack->Parameters.DeviceIoControl.Type3InputBuffer;
+ nextIrpStack.Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION;
+ nextIrpStack.DeviceObject = WdfIoTargetWdmGetTargetDeviceObject(WdfDeviceGetIoTarget(hDevice));
+
+ // Format the I/O request for the driver's local I/O target by using the contents of the specified WDM I/O stack location structure.
+ WdfRequestWdmFormatUsingStackLocation(hRequest, &nextIrpStack);
+
+ // Send the request down using Fire and forget option.
+ WDF_REQUEST_SEND_OPTIONS_INIT(&options, WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET);
+ hNextLowerDriver = WdfDeviceGetIoTarget(hDevice);
+ if (WdfRequestSend(hRequest, hNextLowerDriver, &options) == FALSE)
+ {
+ status = STATUS_UNSUCCESSFUL;
+ }
+ }
+ else // Incorrect DeviceIoControl.InputBufferLength
+ {
+ status = STATUS_INFO_LENGTH_MISMATCH;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Incorrect DeviceIoControl.InputBufferLength, %!STATUS!\n", status);
+ return status;
+ }
+ }
+ else // DeviceIoControl.InputBufferLength too small
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ TraceErr(DBG_IOCTL, "(%!FUNC!) DeviceIoControl.InputBufferLength too small, %!STATUS!\n", status);
+ return status;
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit = %!STATUS!\n", status);
+ return status;
+}
+
+
+
+
+
diff --git a/network/radio/HidSwitchDriverSample/trace.h b/network/radio/HidSwitchDriverSample/trace.h
new file mode 100644
index 00000000..0ec09b91
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/trace.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#define WPP_CHECK_FOR_NULL_STRING //to prevent exceptions due to NULL strings
+
+#define WPP_CONTROL_GUIDS \
+ WPP_DEFINE_CONTROL_GUID(HidUsbFx2TraceGuid, (091182d7, 5167, 4e77, aa80, ca6c1e6201e9), \
+ WPP_DEFINE_BIT(DBG_INIT) \
+ WPP_DEFINE_BIT(DBG_PNP) \
+ WPP_DEFINE_BIT(DBG_IOCTL) \
+ )
+
+#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)
diff --git a/network/radio/HidSwitchDriverSample/usb.c b/network/radio/HidSwitchDriverSample/usb.c
new file mode 100644
index 00000000..e6ac2da7
--- /dev/null
+++ b/network/radio/HidSwitchDriverSample/usb.c
@@ -0,0 +1,466 @@
+#include <RadioSwitchHidUsbFx2.h>
+#include "usb.tmh"
+
+
+#ifdef ALLOC_PRAGMA
+#pragma alloc_text(PAGE, HidFx2EvtDevicePrepareHardware)
+#pragma alloc_text(PAGE, HidFx2EvtDeviceD0Exit)
+#pragma alloc_text(PAGE, HidFx2ConfigContReaderForInterruptEndPoint)
+#endif
+
+
+// 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.
+NTSTATUS
+HidFx2EvtDevicePrepareHardware(
+ _In_ WDFDEVICE hDevice,
+ _In_ WDFCMRESLIST hResourceList,
+ _In_ WDFCMRESLIST hResourceListTranslated
+ )
+{
+ NTSTATUS status = STATUS_SUCCESS;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
+ WDF_OBJECT_ATTRIBUTES attributes;
+ PUSB_DEVICE_DESCRIPTOR pUsbDeviceDescriptor = NULL;
+
+ UNREFERENCED_PARAMETER(hResourceList);
+ UNREFERENCED_PARAMETER(hResourceListTranslated);
+
+ PAGED_CODE ();
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Enter\n");
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ // Create a WDFUSBDEVICE object. WdfUsbTargetDeviceCreate obtains the USB device descriptor and the first USB configuration
+ //descriptor from the device and stores them. It also creates a framework USB interface object for each interface in the device's first configuration.
+ //
+ // The parent of each USB device object is the driver's framework driver object. The driver cannot change this parent, and the ParentObject
+ // member or the WDF_OBJECT_ATTRIBUTES structure must be NULL.
+ //
+ // We only create device the first time 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 (pDevContext->hUsbDevice == NULL)
+ {
+ status = WdfUsbTargetDeviceCreate(hDevice, WDF_NO_OBJECT_ATTRIBUTES, &pDevContext->hUsbDevice);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfUsbTargetDeviceCreate failed %!STATUS!\n", status);
+ return status;
+ }
+ }
+
+ // Select a device configuration by using a WDF_USB_DEVICE_SELECT_CONFIG_PARAMS
+ WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);
+ status = WdfUsbTargetDeviceSelectConfig(pDevContext->hUsbDevice, WDF_NO_OBJECT_ATTRIBUTES, &configParams);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfUsbTargetDeviceSelectConfig failed %!STATUS!\n", status);
+ return status;
+ }
+
+ pDevContext->hUsbInterface = configParams.Types.SingleInterface.ConfiguredUsbInterface;
+
+ // Get the device descriptor and store it in device context
+ WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
+ attributes.ParentObject = hDevice;
+ status = WdfMemoryCreate(&attributes,
+ NonPagedPool,
+ 0,
+ sizeof(USB_DEVICE_DESCRIPTOR),
+ &pDevContext->hDeviceDescriptor,
+ &pUsbDeviceDescriptor);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) WdfMemoryCreate for Device Descriptor failed %!STATUS!\n", status);
+ return status;
+ }
+
+ WdfUsbTargetDeviceGetDeviceDescriptor(pDevContext->hUsbDevice, pUsbDeviceDescriptor);
+
+ // Get the Interrupt pipe. There are other endpoints but we are only interested in interrupt endpoint since our HID data comes from this
+ pDevContext->hInterruptPipe = WdfUsbInterfaceGetConfiguredPipe(pDevContext->hUsbInterface, INTERRUPT_ENDPOINT_INDEX, NULL);
+ if (NULL == pDevContext->hInterruptPipe)
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) Failed to get interrupt pipe info\n");
+ status = STATUS_INVALID_DEVICE_STATE;
+ return status;
+ }
+
+ // Tell the framework that it's okay to read less than MaximumPacketSize
+ WdfUsbTargetPipeSetNoMaximumPacketSizeCheck(pDevContext->hInterruptPipe);
+
+ //configure continuous reader
+ status = HidFx2ConfigContReaderForInterruptEndPoint(pDevContext);
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Exit, Status: %!STATUS!\n", status);
+
+ return status;
+}
+
+
+
+// This routine configures a continuous reader on the interrupt endpoint. It's called from the PrepareHarware event.
+//
+NTSTATUS HidFx2ConfigContReaderForInterruptEndPoint(PDEVICE_EXTENSION pDeviceContext)
+{
+ WDF_USB_CONTINUOUS_READER_CONFIG contReaderConfig;
+ NTSTATUS status = STATUS_SUCCESS;
+
+ PAGED_CODE ();
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Enter\n");
+
+ WDF_USB_CONTINUOUS_READER_CONFIG_INIT(&contReaderConfig,
+ HidFx2EvtUsbInterruptPipeReadComplete,
+ pDeviceContext, // Context
+ sizeof(UCHAR)); // TransferLength
+
+ status = WdfUsbTargetPipeConfigContinuousReader(pDeviceContext->hInterruptPipe, &contReaderConfig);
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_INIT, "(%!FUNC!) failed %!STATUS!\n", status);
+ }
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Exit, status: %!STATUS!\n", status);
+
+ return status;
+}
+
+
+
+// This the completion routine of the continuous 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.
+//
+void HidFx2EvtUsbInterruptPipeReadComplete(
+ WDFUSBPIPE hPipe,
+ WDFMEMORY hBuffer,
+ size_t cNumBytesTransferred,
+ WDFCONTEXT pContext
+ )
+{
+ PDEVICE_EXTENSION pDevContext = pContext;
+ BOOLEAN fInTimerQueue;
+ unsigned char *pbSwitchState = NULL;
+ unsigned char bCurrentSwitchState = 0;
+ unsigned char bPrevSwitchState = 0;
+ unsigned char bToggledSwitch = 0;
+
+ UNREFERENCED_PARAMETER(cNumBytesTransferred);
+ UNREFERENCED_PARAMETER(hPipe);
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Enter\n");
+
+ // Interrupt endpoints sends switch state when first started or when resuming from suspend.
+ // We need to ignore that data since user did not change the switch state.
+ if (pDevContext->fIsPowerUpSwitchState)
+ {
+ pDevContext->fIsPowerUpSwitchState = FALSE;
+ TraceInfo(DBG_INIT, "(%!FUNC!) Dropping interrupt message since received during powerup/resume\n");
+ return;
+ }
+
+
+ // 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 (cNumBytesTransferred == 0)
+ {
+ TraceWarning(DBG_INIT, "(%!FUNC!) Zero length read occured on the Interrupt Pipe's Continuous Reader\n");
+ return;
+ }
+
+ pbSwitchState = WdfMemoryGetBuffer(hBuffer, NULL);
+ bCurrentSwitchState = ~(*pbSwitchState); // switchs are inverted on hardware boards
+ bCurrentSwitchState &= RADIO_SWITCH_BUTTONS_BIT_MASK; //Mask off everything except the actual radio switch bit
+ bPrevSwitchState = pDevContext->bCurrentSwitchState;
+
+ if (bPrevSwitchState ^ bCurrentSwitchState) // make sure we toggled the radio switch
+ {
+ switch(pDevContext->driverMode)
+ {
+ // If it's a slider switch we want 0->1 and 1->0 transitions.
+ case DM_SLIDER_SWITCH:
+ case DM_SLIDER_SWITCH_AND_LED:
+ bToggledSwitch = bCurrentSwitchState;
+ // A timer is started for 10 ms everytime there is a switch toggled
+ fInTimerQueue = WdfTimerStart(pDevContext->hDebounceTimer, WDF_REL_TIMEOUT_IN_MS(SWITCHPACK_DEBOUNCE_TIME));
+ TraceInfo(DBG_INIT, "(%!FUNC!) Debounce Timer started. Existing -%!bool!\n", fInTimerQueue);
+ break;
+ //If it's a button so we only report 0->1 transitions
+ case DM_BUTTON:
+ case DM_BUTTON_AND_LED:
+ bToggledSwitch = (bPrevSwitchState ^ bCurrentSwitchState) & bCurrentSwitchState;
+ if (bToggledSwitch != 0)
+ {
+ // A timer is started for 10 ms everytime there is a switch toggled on
+ fInTimerQueue = WdfTimerStart(pDevContext->hDebounceTimer, WDF_REL_TIMEOUT_IN_MS(SWITCHPACK_DEBOUNCE_TIME));
+ TraceInfo(DBG_INIT, "(%!FUNC!) Debounce Timer started. Existing -%!bool!\n", fInTimerQueue);
+ }
+ break;
+ // Ignore button presses if LED only
+ case DM_LED_ONLY:
+ default:
+ break;
+ }
+
+ // Store switch state in device context
+ pDevContext->bCurrentSwitchState = bCurrentSwitchState;
+ pDevContext->bLatestToggledSwitch = bToggledSwitch;
+ }
+ else
+ {
+ TraceInfo(DBG_INIT, "(%!FUNC!) Not a radio switch toggle\n");
+ }
+ TraceInfo(DBG_INIT, "(%!FUNC!) Switch 0x%x, prevSwitch:0x%x, X0R:0x%x\n", bCurrentSwitchState, bPrevSwitchState, bToggledSwitch);
+
+ TraceVerbose(DBG_INIT, "(%!FUNC!) Exit\n");
+}
+
+
+
+// This function gets called when the timeout period of debounce timer elapses.
+// It reports a switch change by completing a pending request
+//
+void HidFx2EvtTimerFunction(_In_ WDFTIMER hTimer)
+{
+ WDFDEVICE hDevice = NULL;
+ WDFREQUEST hRequest;
+ PDEVICE_EXTENSION pDevContext = NULL;
+ NTSTATUS status = STATUS_SUCCESS;
+ size_t cBytesReturned = 0;
+ unsigned char bToggledSwitch = 0;
+ ULONG cBytesToCopy = 0;
+ PHIDFX2_IO_REPORT pInputReport = NULL;
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Enter\n");
+
+
+ hDevice = WdfTimerGetParentObject(hTimer);
+ pDevContext = GetDeviceContext(hDevice);
+
+ bToggledSwitch = pDevContext->bLatestToggledSwitch;
+ TraceInfo(DBG_IOCTL, "(%!FUNC!) mode %d switch %d\n", pDevContext->driverMode, bToggledSwitch);
+
+ if (!((pDevContext->driverMode == DM_BUTTON || pDevContext->driverMode == DM_BUTTON_AND_LED) && bToggledSwitch == 0))
+ {
+ // 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->hInterruptMsgQueue, &hRequest);
+ if (NT_SUCCESS(status))
+ {
+ cBytesToCopy = sizeof(pInputReport[0]);
+ status = WdfRequestRetrieveOutputBuffer(hRequest,
+ cBytesToCopy,
+ &pInputReport,
+ &cBytesReturned); // BufferLength
+ if (NT_SUCCESS(status))
+ {
+ TraceInfo(DBG_IOCTL, "(%!FUNC!) WdfRequestRetrieveOutputBuffer switch %d\n", bToggledSwitch);
+
+ pInputReport->bReportId = GENERIC_DESKTOP_REPORT_ID;
+ pInputReport->bData = bToggledSwitch;
+ cBytesReturned = cBytesToCopy;
+ }
+ else // WdfRequestRetrieveOutputBuffer failed
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) WdfRequestRetrieveOutputBuffer failed with status: %!STATUS!\n", status);
+ }
+
+ WdfRequestCompleteWithInformation(hRequest, status, cBytesReturned);
+
+ }
+ else if (status != STATUS_NO_MORE_ENTRIES)
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) WdfIoQueueRetrieveNextRequest status %!STATUS!\n", status);
+ }
+ }
+ else
+ {
+ TraceInfo(DBG_IOCTL, "(%!FUNC!) ignore switch");
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit\n");
+}
+
+
+
+// This function gets the switch state of the USB device directly from the hardware
+//
+NTSTATUS HidFx2GetSwitchState(_In_ WDFDEVICE hDevice, _Out_ unsigned char *pbSwitchState)
+{
+ PDEVICE_EXTENSION pDevContext = NULL;
+ NTSTATUS status = STATUS_SUCCESS;
+ WDF_MEMORY_DESCRIPTOR memDesc;
+ WDF_USB_CONTROL_SETUP_PACKET controlSetupPacket;
+ ULONG cBytesTransferred = 0;
+
+ if(pbSwitchState != NULL)
+ {
+ *pbSwitchState = 0;
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Entry\n");
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ // set the segment state on the USB device
+ WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR(&controlSetupPacket,
+ BmRequestDeviceToHost,
+ BmRequestToDevice,
+ HIDFX2_READ_SWITCH_STATE, // Request
+ 0, // Value
+ 0); // Index
+
+ WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(&memDesc, pbSwitchState, sizeof(*pbSwitchState));
+
+ status = WdfUsbTargetDeviceSendControlTransferSynchronously(pDevContext->hUsbDevice,
+ NULL, // Optional WDFREQUEST
+ NULL, // PWDF_REQUEST_SEND_OPTIONS
+ &controlSetupPacket,
+ &memDesc,
+ &cBytesTransferred);
+
+ if (!NT_SUCCESS(status))
+ {
+ TraceErr(DBG_IOCTL, "(%!FUNC!) Failed to read switch state - %!STATUS! \n", status);
+ }
+ else
+ {
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Switch state is 0x%x\n", *pbSwitchState);
+ *pbSwitchState = ~(*pbSwitchState); // switchs are inverted on hardware boards
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Switch state is 0x%x\n", *pbSwitchState);
+ }
+
+ TraceVerbose(DBG_IOCTL, "(%!FUNC!) Exit, status: %!STATUS!\n", status);
+ return status;
+}
+
+
+
+// EvtDeviceD0Entry event callback must perform any operations that are necessary before the specified device is used.
+// Called every time the hardware needs to be initialized/reinitialized.
+// This function is not marked pageable because this function is in the device power up path.
+// This function runs at PASSIVE_LEVEL, even though it is not paged.
+//
+NTSTATUS HidFx2EvtDeviceD0Entry(_In_ WDFDEVICE hDevice, _In_ WDF_POWER_DEVICE_STATE previousState)
+{
+ PDEVICE_EXTENSION pDevContext = NULL;
+ NTSTATUS status = STATUS_SUCCESS;
+ unsigned char bSwitchState = 0;
+ unsigned char bMode = 0;
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Enter - coming from %S\n", DbgDevicePowerString(previousState));
+
+ SendVendorCommand(hDevice, HIDFX2_SET_BARGRAPH_DISPLAY, BARGRAPH_LED_ALL_OFF);
+
+ // Retrieve the current switch state and store it in device context
+ status = HidFx2GetSwitchState(hDevice, &bSwitchState);
+ if (NT_SUCCESS(status))
+ {
+ // Left most switches define Mode
+ bMode = bSwitchState & MODE_SELECTION_BUTTONS_BIT_MASK;
+ switch (bMode)
+ {
+ case SWITCHPACK_SELECTION_FOR_MODE2:
+ pDevContext->driverMode = DM_BUTTON_AND_LED;
+ SendVendorCommand(hDevice, HIDFX2_SET_7SEGMENT_DISPLAY, SEGMENT_DISPLAY_2);
+ break;
+ case SWITCHPACK_SELECTION_FOR_MODE3:
+ pDevContext->driverMode = DM_SLIDER_SWITCH;
+ SendVendorCommand(hDevice, HIDFX2_SET_7SEGMENT_DISPLAY, SEGMENT_DISPLAY_3);
+ break;
+ case SWITCHPACK_SELECTION_FOR_MODE4:
+ pDevContext->driverMode = DM_SLIDER_SWITCH_AND_LED;
+ SendVendorCommand(hDevice, HIDFX2_SET_7SEGMENT_DISPLAY, SEGMENT_DISPLAY_4);
+ break;
+ case SWITCHPACK_SELECTION_FOR_MODE5:
+ pDevContext->driverMode = DM_LED_ONLY;
+ SendVendorCommand(hDevice, HIDFX2_SET_7SEGMENT_DISPLAY, SEGMENT_DISPLAY_5);
+ break;
+ default:
+ pDevContext->driverMode = DM_BUTTON;
+ SendVendorCommand(hDevice, HIDFX2_SET_7SEGMENT_DISPLAY, SEGMENT_DISPLAY_1);
+ break;
+ }
+
+ pDevContext->bCurrentSwitchState = bSwitchState;
+
+ // Start the target. This will start the continuous reader
+ status = WdfIoTargetStart(WdfUsbTargetPipeGetIoTarget(pDevContext->hInterruptPipe));
+ if (NT_SUCCESS(status))
+ {
+ pDevContext->fIsPowerUpSwitchState = TRUE;
+ }
+ }
+ else
+ {
+ TraceErr(DBG_PNP, "(%!FUNC!) Failed to get current switch state, status: %!STATUS!\n", status);
+ }
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Exit, status: %!STATUS!\n", status);
+ return status;
+}
+
+
+
+/*
+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.
+*/
+NTSTATUS HidFx2EvtDeviceD0Exit(_In_ WDFDEVICE hDevice, _In_ WDF_POWER_DEVICE_STATE targetState)
+{
+ PDEVICE_EXTENSION pDevContext;
+
+ PAGED_CODE();
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Enter- moving to %S\n", DbgDevicePowerString(targetState));
+
+ pDevContext = GetDeviceContext(hDevice);
+
+ WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(pDevContext->hInterruptPipe), WdfIoTargetCancelSentIo);
+
+ TraceVerbose(DBG_PNP, "(%!FUNC!) Exit\n");
+
+ return STATUS_SUCCESS;
+}
+
+
+
+PCWSTR DbgDevicePowerString(_In_ WDF_POWER_DEVICE_STATE powerState)
+{
+ switch (powerState)
+ {
+ case WdfPowerDeviceInvalid:
+ return L"WdfPowerDeviceInvalid";
+ case WdfPowerDeviceD0:
+ return L"WdfPowerDeviceD0";
+ case PowerDeviceD1:
+ return L"WdfPowerDeviceD1";
+ case WdfPowerDeviceD2:
+ return L"WdfPowerDeviceD2";
+ case WdfPowerDeviceD3:
+ return L"WdfPowerDeviceD3";
+ case WdfPowerDeviceD3Final:
+ return L"WdfPowerDeviceD3Final";
+ case WdfPowerDevicePrepareForHibernation:
+ return L"WdfPowerDevicePrepareForHibernation";
+ case WdfPowerDeviceMaximum:
+ return L"PowerDeviceMaximum";
+ default:
+ return L"UnKnown Device Power State";
+ }
+}
+
diff --git a/network/radio/RadioManagerSample/RadioManagerSample.sln b/network/radio/RadioManagerSample/RadioManagerSample.sln
new file mode 100644
index 00000000..d5d0a144
--- /dev/null
+++ b/network/radio/RadioManagerSample/RadioManagerSample.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0
+MinimumVisualStudioVersion = 12.0
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SampleRM", "cpp\SampleRM.vcxproj", "{165D39D6-68AC-4E1F-89ED-483E13E84F9B}"
+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
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Debug|Win32.Build.0 = Debug|Win32
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Release|Win32.ActiveCfg = Release|Win32
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Release|Win32.Build.0 = Release|Win32
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Debug|x64.ActiveCfg = Debug|x64
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Debug|x64.Build.0 = Debug|x64
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Release|x64.ActiveCfg = Release|x64
+ {165D39D6-68AC-4E1F-89ED-483E13E84F9B}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/network/radio/RadioManagerSample/ReadMe.md b/network/radio/RadioManagerSample/ReadMe.md
new file mode 100644
index 00000000..4c481bbd
--- /dev/null
+++ b/network/radio/RadioManagerSample/ReadMe.md
@@ -0,0 +1,171 @@
+Windows Radio Management Sample
+===============================
+
+The Radio Manager sample demonstrates how to structure a Radio Manager for use with the Windows 8.1 Radio Management APIs.
+
+Starting with Windows 8.1, the operating system contains a set of APIs which are used as a software mechanism to control the various radios found on the machine. The APIs work by communicating with a Radio Manager, which is a COM object that relays commands from the APIs to turn the radio on or off, and reports back radio information to the APIs. This feature is designed in such a way that a separate Radio Manager is required for each radio media type. For example, a WLAN radio will be controlled by a different Radio Manager than a GPS radio. If there are 2 WLAN radios and a GPS radio, the 2 WLAN radios will be controlled by one Radio Manager, and the GPS radio will be controlled by a different Radio Manager. The Radio Manager must be able to run correctly within Local Service Account context. Under this context, the Radio Manager will have the minimum privilege on the local computer.
+
+When the user turns the radio off (either by using the specific radio software switch or the airplane mode switch), radio transmission must be turned off. The device can be powered off as long as the radio switch does not disappear from the UI. It is very important that the radio manager developer ensures that when the device is powered off, the radio switch does not disappear from the UI. If the radio switch disappears from the UI when the radio is turned off by the user, then user has no way to turn the radio back on! If it is desired to conserve power by cutting power to the device when the radio is turned off, but the device cannot be completely powered off because it disappears from the UI, then the solution would be to put the device in a low power state (e.g. D3).
+
+**Important**  The radio manager MUST be given a name. This is the name of the radio switch that is displayed to the user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example, for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's name or some other word related to the functionality of the radio (e.g. "Location" OR "port").
+
+
+Installation
+------------
+
+The sample contains a script, *install.cmd*, which copies the radio manager DLL to the system directory, registers as a COM component, and configures the registry.
+
+Copy the *install.cmd*, *SampleRM.reg* and *SampleRM.dll* files to a directory. Run *install.cmd*.
+
+Code Tour
+---------
+
+File
+
+Description
+
+install.cmd
+
+Installation script. Copies and registers the dll and executes SampleRM.reg.
+
+SampleRM.reg
+
+script to install the Sample Radio Manager into the registry, along with 2 radio instances.
+
+SampleRM.sln
+
+The Visual Studio solution file for building the Sample Radio Manager dll.
+
+sampleRM.idl
+
+The interface definition for the Sample Radio Manager.
+
+RadioMgr.idl
+
+The interface definition for a Windows Radio Manager.
+
+SampleRadioManager.h
+
+Header file for the functions required for a Radio Manager.
+
+SampleRadioInstance.h
+
+Header file for the functions required for a Radio Instance.
+
+SampleInstanceCollection.h
+
+Header file for the functions required for a Collection of Radio Instances.
+
+precomp.h
+
+Common header file.
+
+InternalInterfaces.h
+
+Header file for internal interface used for this sample.
+
+dllmain.cpp
+
+Standard dllmain.
+
+SampleRadioManager.cpp
+
+Implementation details for the Sample Radio Manager. Important concepts include:
+
+- Utilizing [IMediaRadioManagerNotifySink](http://msdn.microsoft.com/en-us/library/windows/hardware/hh406534) for radio instance events
+- Adding/Removing radio instances
+- Queuing and deploying worker jobs for system events
+
+SampleRadioInstance.cpp
+
+Implementation details for the Sample Radio Instance. Important concepts include:
+
+- Accessors & Modifiers for radio information
+- Instance change functions
+
+SampleInstanceCollection.cpp
+
+Implementation details for the Sample Instance Collection. Important concepts include:l
+
+- Radio Instance discovery and retrieval
+
+RadioMgr\_interface.cpp
+
+Helper source file to include the MIDL-generated files.
+
+Run the sample
+--------------
+
+Operation
+---------
+
+This sample Radio Manager does not operate on an actual radio. Instead, it uses registry keys to act as virtual radios.
+
+Each "radio" instance can have the following values:
+
+Name
+
+RadioState
+
+PreviousRadioState
+
+IsMultiComm
+
+IsAssociatingDevice
+
+\*\*\* It is required that the registry key has AT LEAST a Name value, otherwise the Sample Radio Manager will fail to initialize. \*\*\*
+
+**Important**  The radio manager must be given a name and the registry key must have, as a minimum, a Name value. Otherwise, the Sample Radio Manager will fail to initialize. This is the name of the radio switch that is displayed to the user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example, for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's name or some other word related to the functionality of the radio (e.g. "Location" OR "port").
+
+When the Radio Manager is initialized, it uses these registry keys to retrieve the "radio" information. The radio state values can be any of the following enum values:
+
+<table>
+<colgroup>
+<col width="100%" />
+</colgroup>
+<thead>
+<tr class="header">
+<th align="left">C++</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td align="left"><pre><code>typedef enum _DEVICE_RADIO_STATE
+{
+ DRS_RADIO_ON = 0,
+ DRS_SW_RADIO_OFF = 1,
+ DRS_HW_RADIO_OFF = 2,
+ DRS_SW_HW_RADIO_OFF = 3,
+ DRS_HW_RADIO_ON_UNCONTROLLABLE = 4,
+ DRS_RADIO_INVALID = 5,
+ DRS_HW_RADIO_OFF_UNCONTROLLABLE = 6,
+ DRS_RADIO_MAX = DRS_HW_RADIO_OFF_UNCONTROLLABLE
+} DEVICE_RADIO_STATE;</code></pre></td>
+</tr>
+</tbody>
+</table>
+
+For IsMultiComm and IsAssociatingDevice, a value of 0 means 'no' and 1 means 'yes'.
+
+Adding and Setting a Radio Instance
+-----------------------------------
+
+To add a new radio instance, add a new instance key to the registry key like the following entry:
+
+``` {.syntax xml:space="preserve"}
+[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\RadioManagement\Misc\SampleRadioManager\SampleRadioX]
+"RadioState"=dword:00000000
+"Name"="SampleRadioX"
+"IsMultiComm"=dword:00000000
+```
+
+Editing a Radio Instance
+------------------------
+
+Simply change the values in the registry. For example, change the radio state from DRS\_RADIO\_ON to DRS\_SW\_RADIO\_OFF by changing the 'RadioState' value from 0 to 1.
+
+Removing a Radio Instance
+-------------------------
+
+Delete the corresponding registry key.
+
diff --git a/network/radio/RadioManagerSample/SampleRM.reg b/network/radio/RadioManagerSample/SampleRM.reg
new file mode 100644
index 00000000..3ba004f1
--- /dev/null
+++ b/network/radio/RadioManagerSample/SampleRM.reg
Binary files differ
diff --git a/network/radio/RadioManagerSample/cpp/InternalInterfaces.h b/network/radio/RadioManagerSample/cpp/InternalInterfaces.h
new file mode 100644
index 00000000..6e7f7b02
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/InternalInterfaces.h
@@ -0,0 +1,23 @@
+#pragma once
+
+interface __declspec(uuid("{931D7B9C-11FB-45B6-97DA-47894D597F39}")) ISampleRadioInstanceInternal : public IUnknown
+{
+ IFACEMETHOD(OnSysRadioChange)(_In_ SYSTEM_RADIO_STATE sysRadioState) = 0;
+};
+
+interface __declspec(uuid("{98595167-4F34-4247-A669-CA41ABBC479A}")) ISampleRadioManagerInternal : public IUnknown
+{
+ IFACEMETHOD(OnInstanceRadioChange)(_In_ BSTR bstrRadioInstanceID, _In_ DEVICE_RADIO_STATE radioState) = 0;
+};
+
+
+HRESULT CSampleRadioInstance_CreateInstance(
+ _In_ PCWSTR pszKeyName,
+ _In_ ISampleRadioManagerInternal *pParentManager,
+ _COM_Outptr_ ISampleRadioInstanceInternal **ppRadioInstance);
+
+HRESULT CRadioInstanceCollection_CreateInstance(
+ _In_ DWORD cInstances,
+ _In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
+ _COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection);
+
diff --git a/network/radio/RadioManagerSample/cpp/RadioMgr.idl b/network/radio/RadioManagerSample/cpp/RadioMgr.idl
new file mode 100644
index 00000000..5c7b5866
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/RadioMgr.idl
@@ -0,0 +1,155 @@
+//
+// Microsoft Windows
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// File: RadioMgr.idl
+//
+//----------------------------------------------------------------------------
+
+
+cpp_quote("//+-------------------------------------------------------------------------")
+cpp_quote("//")
+cpp_quote("// Microsoft Windows")
+cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
+cpp_quote("//")
+cpp_quote("//--------------------------------------------------------------------------")
+
+cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN8)")
+
+import "oaidl.idl";
+import "wtypes.idl";
+
+
+interface IMediaRadioManager;
+interface IRadioInstanceCollection;
+interface IRadioInstance;
+interface IMediaRadioManagerNotifySink;
+
+typedef enum _DEVICE_RADIO_STATE
+{
+ DRS_RADIO_ON = 0,
+ DRS_SW_RADIO_OFF = 1,
+ DRS_HW_RADIO_OFF = 2,
+ DRS_SW_HW_RADIO_OFF = 3,
+ DRS_HW_RADIO_ON_UNCONTROLLABLE = 4,
+ DRS_RADIO_INVALID = 5,
+ DRS_HW_RADIO_OFF_UNCONTROLLABLE = 6,
+ DRS_RADIO_MAX = DRS_HW_RADIO_OFF_UNCONTROLLABLE
+} DEVICE_RADIO_STATE;
+
+typedef enum _SYSTEM_RADIO_STATE
+{
+ SRS_RADIO_ENABLED = 0,
+ SRS_RADIO_DISABLED = 1,
+} SYSTEM_RADIO_STATE;
+
+//+--------------------------------------------------------------------------------
+// IMediaRadioManager -- Represents high level radio operations on each radio type.
+// The object implementing this interface will implement a Connection point (IConnectionPoint)
+// for IMediaRadioManagerNotifySink.
+// Each IMediaRadioManager object controls several or no IRadioInstance objects.
+[
+ local,
+ object,
+ uuid(6CFDCAB5-FC47-42A5-9241-074B58830E73),
+ pointer_default(unique)
+]
+interface IMediaRadioManager : IUnknown
+{
+ HRESULT GetRadioInstances(
+ [out] IRadioInstanceCollection **ppCollection
+ );
+
+ HRESULT OnSystemRadioStateChange(
+ [in] SYSTEM_RADIO_STATE sysRadioState,
+ [in] UINT32 uTimeoutSec
+ );
+
+};
+
+
+//+---------------------------------------------------------------------------
+// IRadioInstanceCollection -- a flat list of radio instances
+//
+[
+ local,
+ object,
+ uuid(E5791FAE-5665-4E0C-95BE-5FDE31644185),
+ pointer_default(unique)
+]
+interface IRadioInstanceCollection : IUnknown
+{
+ HRESULT GetCount(
+ [out] UINT32 *pcInstance
+ );
+
+ HRESULT GetAt(
+ [in] UINT32 uIndex,
+ [out] IRadioInstance **ppRadioInstance
+ );
+};
+
+//+---------------------------------------------------------------------------
+// IRadioInstance -- Interface to control specific radio instance
+//
+[
+ local,
+ object,
+ uuid(70AA1C9E-F2B4-4C61-86D3-6B9FB75FD1A2),
+ pointer_default(unique)
+]
+interface IRadioInstance : IUnknown
+{
+ HRESULT GetRadioManagerSignature(
+ [out] GUID *pguidSignature
+ );
+
+ HRESULT GetInstanceSignature(
+ [out, string] BSTR *pbstrId
+ );
+
+ HRESULT GetFriendlyName(
+ [in] LCID lcid,
+ [out, string] BSTR *pbstrName
+ );
+
+ HRESULT GetRadioState(
+ [out] DEVICE_RADIO_STATE *pRadioState
+ );
+
+ HRESULT SetRadioState(
+ [in] DEVICE_RADIO_STATE radioState,
+ [in] UINT32 uTimeoutSec
+ );
+
+ BOOL IsMultiComm();
+
+ BOOL IsAssociatingDevice();
+}
+
+//+---------------------------------------------------------------------------
+// IMediaRadioManagerNotifySink -- notify instance add/remove and radio state change event
+//
+[
+ local,
+ object,
+ uuid(89D81F5F-C147-49ED-A11C-77B20C31E7C9),
+ pointer_default(unique)
+]
+interface IMediaRadioManagerNotifySink : IUnknown
+{
+ HRESULT OnInstanceAdd(
+ [in] IRadioInstance *pRadioInstance
+ );
+
+ HRESULT OnInstanceRemove(
+ [in, string] BSTR bstrRadioInstanceId
+ );
+
+ HRESULT OnInstanceRadioChange(
+ [in, string] BSTR bstrRadioInstanceId,
+ [in] DEVICE_RADIO_STATE radioState
+ );
+};
+
+cpp_quote("#endif // (NTDDI >= NTDDI_WIN8)")
diff --git a/network/radio/RadioManagerSample/cpp/RadioMgr_interface.cpp b/network/radio/RadioManagerSample/cpp/RadioMgr_interface.cpp
new file mode 100644
index 00000000..427e27fe
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/RadioMgr_interface.cpp
@@ -0,0 +1,3 @@
+#include "precomp.h"
+#pragma hdrstop
+#include "RadioMgr_i.c" \ No newline at end of file
diff --git a/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.cpp b/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.cpp
new file mode 100644
index 00000000..5a4371de
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.cpp
@@ -0,0 +1,102 @@
+#include "precomp.h"
+#pragma hdrstop
+
+HRESULT CRadioInstanceCollection_CreateInstance(
+ _In_ DWORD cInstances,
+ _In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
+ _COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection)
+{
+ return CRadioInstanceCollection::CreateInstance(cInstances, rgpIRadioInstance, ppInstanceCollection);
+}
+
+void CRadioInstanceCollection::FinalRelease()
+{
+ POSITION p;
+ while (nullptr != (p = _listRadioInstances.GetHeadPosition()))
+ {
+ IRadioInstance *pRadioInstance = _listRadioInstances.GetAt(p);
+ pRadioInstance->Release();
+ _listRadioInstances.SetAt(p, nullptr);
+ _listRadioInstances.RemoveHeadNoReturn();
+ }
+}
+
+// static
+HRESULT CRadioInstanceCollection::CreateInstance(
+ _In_ DWORD cInstances,
+ _In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
+ _COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection)
+{
+ HRESULT hr;
+ CComObject<CRadioInstanceCollection> *pInstanceCollection;
+ CComPtr<IRadioInstanceCollection> spInstanceCollection;
+
+ *ppInstanceCollection = nullptr;
+
+ hr = CComObject<CRadioInstanceCollection>::CreateInstance(&pInstanceCollection);
+
+ if (SUCCEEDED(hr) && (pInstanceCollection != nullptr))
+ {
+ hr = pInstanceCollection->QueryInterface(IID_PPV_ARGS(&spInstanceCollection));
+ }
+
+ if (SUCCEEDED(hr) && (pInstanceCollection != nullptr))
+ {
+ for (DWORD dwIndex = 0; dwIndex < cInstances; dwIndex++)
+ {
+ _ATLTRY
+ {
+ pInstanceCollection->_listRadioInstances.AddTail(rgpIRadioInstance[dwIndex]);
+ rgpIRadioInstance[dwIndex]->AddRef();
+ }
+ _ATLCATCH(e)
+ {
+ hr = e;
+ break;
+ }
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ *ppInstanceCollection = spInstanceCollection.Detach();
+ }
+
+ return hr;
+}
+
+IFACEMETHODIMP CRadioInstanceCollection::GetCount(_Out_ UINT32 *pcInstance)
+{
+ if (nullptr == pcInstance)
+ {
+ return E_INVALIDARG;
+ }
+
+ *pcInstance = static_cast<UINT32>(_listRadioInstances.GetCount());
+ return S_OK;
+}
+
+IFACEMETHODIMP CRadioInstanceCollection::GetAt(_In_ UINT32 uIndex, _COM_Outptr_ IRadioInstance **ppRadioInstance)
+{
+ if (nullptr == ppRadioInstance)
+ {
+ return E_INVALIDARG;
+ }
+
+ HRESULT hr;
+ *ppRadioInstance = nullptr;
+
+ POSITION p = _listRadioInstances.FindIndex(uIndex);
+ *ppRadioInstance = _listRadioInstances.GetAt(p);
+ if (nullptr != *ppRadioInstance)
+ {
+ (*ppRadioInstance)->AddRef();
+ hr = S_OK;
+ }
+ else
+ {
+ hr = E_FAIL;
+ }
+
+ return hr;
+}
diff --git a/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.h b/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.h
new file mode 100644
index 00000000..b210adcb
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleInstanceCollection.h
@@ -0,0 +1,32 @@
+#pragma once
+
+class ATL_NO_VTABLE CRadioInstanceCollection :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CRadioInstanceCollection>,
+ public IRadioInstanceCollection
+{
+public:
+ DECLARE_CLASSFACTORY()
+ DECLARE_NOT_AGGREGATABLE(CRadioInstanceCollection)
+
+ DECLARE_NO_REGISTRY()
+
+ BEGIN_COM_MAP(CRadioInstanceCollection)
+ COM_INTERFACE_ENTRY(IRadioInstanceCollection)
+ END_COM_MAP()
+
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+ void FinalRelease();
+
+ static HRESULT CreateInstance(
+ _In_ DWORD cInstances,
+ _In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
+ _COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection);
+
+ IFACEMETHOD(GetCount)(_Out_ UINT32 *pcInstance);
+ IFACEMETHOD(GetAt)(_In_ UINT32 uIndex, _COM_Outptr_ IRadioInstance **ppRadioInstance);
+
+private:
+ CAtlList<IRadioInstance *> _listRadioInstances;
+};
diff --git a/network/radio/RadioManagerSample/cpp/SampleRM.def b/network/radio/RadioManagerSample/cpp/SampleRM.def
new file mode 100644
index 00000000..535078cd
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRM.def
@@ -0,0 +1,8 @@
+LIBRARY SampleRM
+
+EXPORTS
+ DllCanUnloadNow PRIVATE
+ DllGetClassObject PRIVATE
+ DllRegisterServer PRIVATE
+ DllUnregisterServer PRIVATE
+
diff --git a/network/radio/RadioManagerSample/cpp/SampleRM.rc b/network/radio/RadioManagerSample/cpp/SampleRM.rc
new file mode 100644
index 00000000..2f491770
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRM.rc
@@ -0,0 +1,10 @@
+#include <ntverp.h>
+#include <winver.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Sample Radio Manager"
+#define VER_INTERNALNAME_STR "SampleRM.dll"
+
+#include <common.ver>
+
diff --git a/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj
new file mode 100644
index 00000000..f26b9385
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj
@@ -0,0 +1,326 @@
+<?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>{165D39D6-68AC-4E1F-89ED-483E13E84F9B}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{6D846F43-0EBE-4FCD-90E5-915DE0BCBA42}</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>DynamicLibrary</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>DynamicLibrary</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>DynamicLibrary</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>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" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>SampleRM</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>SampleRM</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>SampleRM</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>SampleRM</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalOptions>%(AdditionalOptions) -N</AdditionalOptions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalOptions>%(AdditionalOptions) -N</AdditionalOptions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalOptions>%(AdditionalOptions) -N</AdditionalOptions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalOptions>%(AdditionalOptions) -N</AdditionalOptions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <UseOfAtl>Dynamic</UseOfAtl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <UseOfAtl>Dynamic</UseOfAtl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <UseOfAtl>Dynamic</UseOfAtl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <UseOfAtl>Dynamic</UseOfAtl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;UNICODE;_UNICODE;_NTSDK=1;WPP_USE_NTDLL_FUNCTIONS</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <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'">
+ <ClCompile>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <WarningLevel>Level4</WarningLevel>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);ntdll.lib;Kernel32.lib;advapi32.lib;oleaut32.lib;ole32.lib;uuid.lib;User32.lib</AdditionalDependencies>
+ <ModuleDefinitionFile>SampleRM.def</ModuleDefinitionFile>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </Midl>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <WarningLevel>Level4</WarningLevel>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);ntdll.lib;Kernel32.lib;advapi32.lib;oleaut32.lib;ole32.lib;uuid.lib;User32.lib</AdditionalDependencies>
+ <ModuleDefinitionFile>SampleRM.def</ModuleDefinitionFile>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </Midl>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <WarningLevel>Level4</WarningLevel>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);ntdll.lib;Kernel32.lib;advapi32.lib;oleaut32.lib;ole32.lib;uuid.lib;User32.lib</AdditionalDependencies>
+ <ModuleDefinitionFile>SampleRM.def</ModuleDefinitionFile>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </Midl>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <WarningLevel>Level4</WarningLevel>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies);ntdll.lib;Kernel32.lib;advapi32.lib;oleaut32.lib;ole32.lib;uuid.lib;User32.lib</AdditionalDependencies>
+ <ModuleDefinitionFile>SampleRM.def</ModuleDefinitionFile>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </Midl>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dllmain.cpp">
+ <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile>
+ <PreCompiledHeader>Use</PreCompiledHeader>
+ <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile>
+ </ClCompile>
+ <ClCompile Include="precompsrc.cpp">
+ <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile>
+ <PreCompiledHeader>Create</PreCompiledHeader>
+ <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile>
+ </ClCompile>
+ <ClCompile Include="SampleInstanceCollection.cpp">
+ <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile>
+ <PreCompiledHeader>Use</PreCompiledHeader>
+ <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile>
+ </ClCompile>
+ <ClCompile Include="SampleRadioInstance.cpp">
+ <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile>
+ <PreCompiledHeader>Use</PreCompiledHeader>
+ <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile>
+ </ClCompile>
+ <ClCompile Include="SampleRadioManager.cpp">
+ <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile>
+ <PreCompiledHeader>Use</PreCompiledHeader>
+ <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile>
+ </ClCompile>
+ <Midl Include="SampleRM.idl" />
+ <ResourceCompile Include="SampleRM.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+ </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/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters
new file mode 100644
index 00000000..837a0aab
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters
@@ -0,0 +1,45 @@
+<?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>{6C044E6F-8320-46E5-9EBE-BDB0427DF29D}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{55F7F46D-B2E7-422F-8140-2F6D4D30D4FE}</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>{EB9B7D59-264D-421A-8077-FA89E50F57CF}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dllmain.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="precompsrc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SampleInstanceCollection.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SampleRadioInstance.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SampleRadioManager.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <Midl Include="SampleRM.idl">
+ <Filter>Source Files</Filter>
+ </Midl>
+ <None Include="SampleRM.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="SampleRM.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioInstance.cpp b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.cpp
new file mode 100644
index 00000000..08f7e285
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.cpp
@@ -0,0 +1,523 @@
+#include "precomp.h"
+#pragma hdrstop
+
+HRESULT CSampleRadioInstance_CreateInstance(
+ _In_ PCWSTR pszKeyName,
+ _In_ ISampleRadioManagerInternal *pParentManager,
+ _COM_Outptr_ ISampleRadioInstanceInternal **ppRadioInstance)
+{
+ return CSampleRadioInstance::CreateInstance(pszKeyName, pParentManager, ppRadioInstance);
+}
+
+PCWSTR CSampleRadioInstance::s_pszInstanceName = L"Name";
+PCWSTR CSampleRadioInstance::s_pszInstanceRadioState = L"RadioState";
+PCWSTR CSampleRadioInstance::s_pszPreviousRadioState = L"PreviousRadioState";
+PCWSTR CSampleRadioInstance::s_pszMultiComm = L"IsMultiComm";
+PCWSTR CSampleRadioInstance::s_pszAssocatingDevice = L"IsAssociatingDevice";
+
+CSampleRadioInstance::CSampleRadioInstance()
+ : _pParentManager(nullptr),
+ _fClosing(false),
+ _fIsMultiCommDevice(false)
+{
+}
+
+void CSampleRadioInstance::FinalRelease()
+{
+ if ((nullptr != _hRegChangeEvent) && (nullptr != _hEventThread))
+ {
+ {
+ // Critical section scope.
+ CComCritSecLock<CComAutoCriticalSection> lock(_criticalSection);
+ _fClosing = true;
+ SetEvent(_hRegChangeEvent);
+ }
+ WaitForSingleObject(_hEventThread, INFINITE);
+ }
+
+ _Cleanup();
+}
+
+// static
+HRESULT CSampleRadioInstance::CreateInstance(
+ _In_ PCWSTR pszKeyName,
+ _In_ ISampleRadioManagerInternal *pParentManager,
+ _COM_Outptr_ ISampleRadioInstanceInternal **ppRadioInstance)
+{
+ HRESULT hr;
+ CComObject<CSampleRadioInstance> *pRadioInstance;
+ CComPtr<ISampleRadioInstanceInternal> spRadioInstanceInternal;
+
+ *ppRadioInstance = nullptr;
+
+ hr = CComObject<CSampleRadioInstance>::CreateInstance(&pRadioInstance);
+ if (SUCCEEDED(hr) && (pRadioInstance != nullptr))
+ {
+ hr = pRadioInstance->QueryInterface(IID_PPV_ARGS(&spRadioInstanceInternal));
+ }
+ if (SUCCEEDED(hr) && (pRadioInstance != nullptr))
+ {
+ hr = pRadioInstance->_Init(pszKeyName, pParentManager);
+ }
+ if (SUCCEEDED(hr))
+ {
+ *ppRadioInstance = spRadioInstanceInternal.Detach();
+ }
+
+ return hr;
+}
+
+HRESULT CSampleRadioInstance::_Init(_In_ PCWSTR pszKeyName, _In_ ISampleRadioManagerInternal *pParentManager)
+{
+ HRESULT hr;
+ DWORD dwError;
+ WCHAR szInstanceName[128] = {};
+ DWORD cchInstanceName = ARRAYSIZE(szInstanceName);
+
+ _ATLTRY
+ {
+ _strInstanceId = pszKeyName;
+ }
+ _ATLCATCH(e)
+ {
+ return e;
+ }
+
+ _pParentManager = pParentManager;
+
+ dwError = _hKeyRoot.Open(HKEY_LOCAL_MACHINE, _strInstanceId, KEY_ALL_ACCESS);
+
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ dwError = _hKeyRoot.QueryStringValue(s_pszInstanceName, szInstanceName, &cchInstanceName);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ _ATLTRY
+ {
+ _strInstanceName = szInstanceName;
+ }
+ _ATLCATCH(e)
+ {
+ UNREFERENCED_PARAMETER(e);
+ dwError = ERROR_OUTOFMEMORY;
+ }
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ DWORD dwTemp = 0;
+ dwError = _hKeyRoot.QueryDWORDValue(s_pszMultiComm, dwTemp);
+ // only when key read successfully with non zero value, we regard device as multicomm chip
+ if ((ERROR_SUCCESS == dwError) && (0 != dwTemp))
+ {
+ _fIsMultiCommDevice = true;
+ }
+
+ // ignore the case when there is no IsMultiComm value in the registry, set ERROR_SUCCESS to continue with _Init
+ dwError = ERROR_SUCCESS;
+ }
+ }
+ }
+
+ // register the regkey value change event
+ if (ERROR_SUCCESS == dwError)
+ {
+ HANDLE hRegChangeEvent = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
+ if ((NULL == hRegChangeEvent) || (INVALID_HANDLE_VALUE == hRegChangeEvent))
+ {
+ dwError = GetLastError();
+ }
+ else
+ {
+ _hRegChangeEvent.Attach(hRegChangeEvent);
+ }
+ }
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ HANDLE hThread= ::CreateThread(nullptr,
+ 0,
+ CSampleRadioInstance::s_ThreadInstanceChange,
+ reinterpret_cast<PVOID>(this),
+ 0,
+ nullptr);
+
+ if ((NULL == hThread) || (INVALID_HANDLE_VALUE == hThread))
+ {
+ dwError = GetLastError();
+ }
+ else
+ {
+ _hEventThread.Attach(hThread);
+ }
+
+ }
+
+ hr = HRESULT_FROM_WIN32(dwError);
+
+ if (FAILED(hr))
+ {
+ _Cleanup();
+ }
+
+ return hr;
+}
+
+void CSampleRadioInstance::_Cleanup()
+{
+ if (nullptr != _pParentManager)
+ {
+ _pParentManager = nullptr;
+ }
+}
+
+IFACEMETHODIMP CSampleRadioInstance::GetRadioManagerSignature(_Out_ GUID *pguidSignature)
+{
+ if (nullptr == pguidSignature)
+ {
+ return E_INVALIDARG;
+ }
+
+ *pguidSignature = __uuidof(SampleRadioManager);
+
+ return S_OK;
+}
+
+IFACEMETHODIMP CSampleRadioInstance::GetInstanceSignature(_Out_ BSTR *pbstrID)
+{
+ if (nullptr == pbstrID)
+ {
+ return E_INVALIDARG;
+ }
+
+ HRESULT hr = S_OK;
+
+ *pbstrID = _strInstanceId.AllocSysString();
+ if (nullptr == *pbstrID)
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ return hr;
+}
+
+IFACEMETHODIMP CSampleRadioInstance::GetFriendlyName(_In_ LCID /* lcid*/, _Out_ BSTR *pbstrName)
+{
+ if (nullptr == pbstrName)
+ {
+ return E_INVALIDARG;
+ }
+
+ HRESULT hr = S_OK;
+
+ *pbstrName = _strInstanceName.AllocSysString();
+ if (nullptr == *pbstrName)
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ return hr;
+}
+
+IFACEMETHODIMP CSampleRadioInstance::GetRadioState(_Out_ DEVICE_RADIO_STATE *pRadioState)
+{
+ if (nullptr == pRadioState)
+ {
+ return E_INVALIDARG;
+ }
+
+ DWORD dwRadioState;
+ DEVICE_RADIO_STATE radioState = DRS_RADIO_ON;
+
+ *pRadioState = DRS_RADIO_ON;
+
+ // Read radio state directly from device. we do not save radio state in our module to avoid out of sync
+ DWORD dwError = _hKeyRoot.QueryDWORDValue(s_pszInstanceRadioState, dwRadioState);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ if ((dwRadioState > DRS_RADIO_MAX) || (dwRadioState == DRS_RADIO_INVALID))
+ {
+ radioState = DRS_HW_RADIO_ON_UNCONTROLLABLE;
+ }
+ else
+ {
+ radioState = static_cast<DEVICE_RADIO_STATE>(dwRadioState);
+ }
+
+ *pRadioState = radioState;
+ }
+
+ return HRESULT_FROM_WIN32(dwError);
+}
+
+
+IFACEMETHODIMP CSampleRadioInstance::SetRadioState(_In_ DEVICE_RADIO_STATE radioState, _In_ UINT32 uTimeoutSec)
+{
+ if ((radioState != DRS_RADIO_ON) && (radioState != DRS_SW_RADIO_OFF))
+ {
+ return E_INVALIDARG; // invalid input
+ }
+
+ DEVICE_RADIO_STATE drsCurrent;
+ bool fRefAdded = false;
+ HRESULT hr = GetRadioState(&drsCurrent);
+
+ // fail to get current radio state or current radio state is uncontrollable
+ if (FAILED(hr) || (drsCurrent & DRS_HW_RADIO_ON_UNCONTROLLABLE))
+ {
+ return E_FAIL;
+ }
+
+ if ((drsCurrent & DRS_SW_RADIO_OFF) == radioState)
+ {
+ return S_OK; // current software radio is same as target software radio
+ }
+
+ // Keep all other bits same, only change the last bit of radio state to represent software radio change
+ DEVICE_RADIO_STATE drsState = static_cast<DEVICE_RADIO_STATE>((drsCurrent & DRS_HW_RADIO_OFF) | radioState);
+
+ CAutoPtr<SET_DEVICE_RADIO_JOB> spSetDeviceRadioJob;
+
+ spSetDeviceRadioJob.Attach(new SET_DEVICE_RADIO_JOB);
+ if (nullptr == spSetDeviceRadioJob)
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ spSetDeviceRadioJob->hr = E_FAIL;
+ spSetDeviceRadioJob->drsTarget = drsState;
+ spSetDeviceRadioJob->pInstance = this;
+
+ // Let working thread hold ref on object such that object won't be released before working thread return.
+ this->AddRef();
+ fRefAdded = true;
+
+ HANDLE hEvent = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
+ if (nullptr == hEvent)
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+ else
+ {
+ spSetDeviceRadioJob->hEvent.Attach(hEvent);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ if (!QueueUserWorkItem(CSampleRadioInstance::s_ThreadSetRadio, spSetDeviceRadioJob, WT_EXECUTEDEFAULT))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ DWORD dwIgnore;
+ hr = CoWaitForMultipleHandles(0,
+ uTimeoutSec * 1000,
+ 1,
+ reinterpret_cast<LPHANDLE>(&(spSetDeviceRadioJob->hEvent)),
+ &dwIgnore);
+ if (RPC_S_CALLPENDING == hr)
+ {
+ spSetDeviceRadioJob.Detach();
+ }
+ else
+ {
+ hr = spSetDeviceRadioJob->hr;
+ }
+ }
+
+ if (fRefAdded)
+ {
+ this->Release();
+ }
+ return hr;
+}
+
+IFACEMETHODIMP_(BOOL) CSampleRadioInstance::IsMultiComm()
+{
+ return _fIsMultiCommDevice ? TRUE : FALSE;
+}
+
+IFACEMETHODIMP_(BOOL) CSampleRadioInstance::IsAssociatingDevice()
+{
+ BOOL fIsAssociatingDevice = FALSE;
+ DWORD dwAssociatingDevice = 0;
+
+ DWORD dwError = _hKeyRoot.QueryDWORDValue(s_pszAssocatingDevice, dwAssociatingDevice);
+
+ // When key read successfully with non zero value, we regard device associating now.
+ if ((ERROR_SUCCESS == dwError) && (0 != dwAssociatingDevice))
+ {
+ fIsAssociatingDevice = TRUE;
+ }
+
+ return fIsAssociatingDevice;
+}
+
+IFACEMETHODIMP CSampleRadioInstance::OnSysRadioChange(_In_ SYSTEM_RADIO_STATE sysRadioState)
+{
+ if ((sysRadioState != SRS_RADIO_ENABLED) && (sysRadioState != SRS_RADIO_DISABLED))
+ {
+ return E_INVALIDARG;
+ }
+
+ DEVICE_RADIO_STATE drsCurrent;
+ DWORD dwError = ERROR_SUCCESS;
+ DEVICE_RADIO_STATE drsTarget = DRS_RADIO_ON;
+ DEVICE_RADIO_STATE drsPrevious = DRS_RADIO_ON;
+ DWORD dwPreviousState;
+ bool fSetRadioState = false;
+
+ HRESULT hr = GetRadioState(&drsCurrent);
+
+ // fail to get current radio state or current radio state is uncontrollable, ignore this call
+ if (FAILED(hr) || (drsCurrent & DRS_HW_RADIO_ON_UNCONTROLLABLE))
+ {
+ return S_OK;
+ }
+
+ if (SRS_RADIO_ENABLED == sysRadioState)
+ {
+ // If device current software radio is already on during system radio enabled,
+ // we ignore the saved previous radio state and do nothing.
+ // radio state will be updated only when current state is off during system radio enabling.
+ if (DRS_RADIO_ON != (drsCurrent & DRS_SW_RADIO_OFF))
+ {
+ // System radio enable, need get previous radio state and set to previous radio state.
+ // If fail to get previous radio state, assume previous radio state is software radio on.
+ dwError = _hKeyRoot.QueryDWORDValue(s_pszPreviousRadioState, dwPreviousState);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ if ((DRS_RADIO_ON == dwPreviousState) || (DRS_SW_RADIO_OFF == dwPreviousState))
+ {
+ drsPrevious = static_cast<DEVICE_RADIO_STATE>(dwPreviousState);
+ }
+ }
+
+ if ((drsCurrent & DRS_SW_RADIO_OFF) != drsPrevious)
+ {
+ drsTarget = static_cast<DEVICE_RADIO_STATE>((drsCurrent & DRS_HW_RADIO_OFF) | drsPrevious);
+ fSetRadioState = true;
+ }
+ }
+ }
+ else
+ { // System radio disable, need record previous radio state.
+ _hKeyRoot.SetDWORDValue(s_pszPreviousRadioState, static_cast<DWORD>(drsCurrent));
+
+ if ((drsCurrent & DRS_SW_RADIO_OFF) != DRS_SW_RADIO_OFF)
+ {
+ drsTarget = static_cast<DEVICE_RADIO_STATE>((drsCurrent & DRS_HW_RADIO_OFF) | DRS_SW_RADIO_OFF);
+ fSetRadioState = true;
+ }
+ }
+
+ if (fSetRadioState)
+ {
+ dwError = _hKeyRoot.SetDWORDValue(s_pszInstanceRadioState, static_cast<DWORD>(drsTarget));
+ }
+
+ return HRESULT_FROM_WIN32(dwError);
+}
+
+HRESULT CSampleRadioInstance::_SetRadioState(_In_ DEVICE_RADIO_STATE radioState)
+{
+ DWORD dwError = _hKeyRoot.SetDWORDValue(s_pszInstanceRadioState, static_cast<DWORD>(radioState));
+
+ return HRESULT_FROM_WIN32(dwError);
+}
+
+void CSampleRadioInstance::_OnInstanceUpdate()
+{
+ DWORD dwError;
+ DWORD dwRadioState = 0;
+ DEVICE_RADIO_STATE drsCurrent;
+
+ dwError = _hKeyRoot.QueryDWORDValue(s_pszInstanceRadioState, dwRadioState);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ if ((dwRadioState > DRS_RADIO_MAX) || (dwRadioState == DRS_RADIO_INVALID))
+ {
+ drsCurrent = DRS_HW_RADIO_ON_UNCONTROLLABLE;
+ }
+ else
+ {
+ drsCurrent = static_cast<DEVICE_RADIO_STATE>(dwRadioState);
+ }
+ CComBSTR sbstrID = _strInstanceId.AllocSysString();
+
+ if (nullptr != sbstrID)
+ {
+ _pParentManager->OnInstanceRadioChange(sbstrID, drsCurrent);
+ }
+ }
+}
+
+DWORD WINAPI CSampleRadioInstance::s_ThreadInstanceChange(LPVOID pThis)
+{
+ CSampleRadioInstance *pRadioInstance = reinterpret_cast<CSampleRadioInstance *>(pThis);
+ DWORD dwError = ERROR_SUCCESS;
+
+ {
+ CComCritSecLock<CComAutoCriticalSection> lock(pRadioInstance->_criticalSection);
+ if (pRadioInstance->_fClosing)
+ {
+ dwError = ERROR_APP_INIT_FAILURE;
+ }
+ else
+ {
+ dwError = pRadioInstance->_hKeyRoot.NotifyChangeKeyValue(FALSE,
+ REG_NOTIFY_CHANGE_LAST_SET,
+ pRadioInstance->_hRegChangeEvent,
+ TRUE);
+ }
+ }
+
+ if (ERROR_SUCCESS != dwError)
+ {
+ return dwError;
+ }
+
+
+ while (ERROR_SUCCESS == dwError)
+ {
+ WaitForSingleObject(pRadioInstance->_hRegChangeEvent, INFINITE);
+
+ {
+ CComCritSecLock<CComAutoCriticalSection> lock(pRadioInstance->_criticalSection);
+ if (pRadioInstance->_fClosing)
+ {
+ break;
+ }
+
+ ResetEvent(pRadioInstance->_hRegChangeEvent);
+
+ dwError = pRadioInstance->_hKeyRoot.NotifyChangeKeyValue(FALSE,
+ REG_NOTIFY_CHANGE_LAST_SET,
+ pRadioInstance->_hRegChangeEvent,
+ TRUE);
+ }
+ pRadioInstance->_OnInstanceUpdate();
+ }
+
+ return dwError;
+}
+
+DWORD WINAPI CSampleRadioInstance::s_ThreadSetRadio(LPVOID pThis)
+{
+ SET_DEVICE_RADIO_JOB *pJob = reinterpret_cast<SET_DEVICE_RADIO_JOB *>(pThis);
+
+ pJob->hr = pJob->pInstance->_SetRadioState(pJob->drsTarget);
+
+ SetEvent(pJob->hEvent);
+ return ERROR_SUCCESS;
+}
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
new file mode 100644
index 00000000..176aca3c
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
@@ -0,0 +1,71 @@
+#pragma once
+
+class ATL_NO_VTABLE CSampleRadioInstance :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CSampleRadioInstance>,
+ public IRadioInstance,
+ public ISampleRadioInstanceInternal
+{
+public:
+ DECLARE_CLASSFACTORY()
+ DECLARE_NOT_AGGREGATABLE(CSampleRadioInstance)
+ DECLARE_NO_REGISTRY()
+
+ BEGIN_COM_MAP(CSampleRadioInstance)
+ COM_INTERFACE_ENTRY(IRadioInstance)
+ COM_INTERFACE_ENTRY(ISampleRadioInstanceInternal)
+ END_COM_MAP()
+
+ CSampleRadioInstance();
+
+ void FinalRelease();
+
+ static HRESULT CreateInstance(
+ _In_ PCWSTR pszKeyName,
+ _In_ ISampleRadioManagerInternal *pParentManager,
+ _COM_Outptr_ ISampleRadioInstanceInternal **pRadioInstance);
+
+ // IRadioInstance
+ IFACEMETHOD(GetRadioManagerSignature)(_Out_ GUID *pguidSignature);
+ IFACEMETHOD(GetInstanceSignature)(_Out_ BSTR *pbstrID);
+ IFACEMETHOD(GetFriendlyName)(_In_ LCID lcid, _Out_ BSTR *pbstrName);
+ IFACEMETHOD(GetRadioState)(_Out_ DEVICE_RADIO_STATE *pRadioState);
+ IFACEMETHOD(SetRadioState)(_In_ DEVICE_RADIO_STATE radioState, _In_ UINT32 uTimeoutSec);
+ IFACEMETHOD_(BOOL, IsMultiComm)();
+ IFACEMETHOD_(BOOL, IsAssociatingDevice)();
+
+ // ISampleRadioInstanceInternal
+ IFACEMETHOD(OnSysRadioChange)(_In_ SYSTEM_RADIO_STATE sysRadioSate);
+
+private:
+ HRESULT _Init(_In_ PCWSTR pszKeyName, _In_ ISampleRadioManagerInternal *pParentManager);
+ void _Cleanup();
+ void _OnInstanceUpdate();
+ HRESULT _SetRadioState(_In_ DEVICE_RADIO_STATE radioState);
+ static DWORD WINAPI s_ThreadInstanceChange(LPVOID pThis);
+ static DWORD WINAPI s_ThreadSetRadio(LPVOID pThis);
+
+ ISampleRadioManagerInternal *_pParentManager;
+ CComAutoCriticalSection _criticalSection;
+ CString _strInstanceId;
+ CString _strInstanceName;
+ bool _fIsMultiCommDevice;
+
+ CHandle _hEventThread;
+ bool _fClosing; // object is closing
+ CHandle _hRegChangeEvent;
+ CRegKey _hKeyRoot;
+ static PCWSTR s_pszInstanceName;
+ static PCWSTR s_pszInstanceRadioState;
+ static PCWSTR s_pszPreviousRadioState;
+ static PCWSTR s_pszMultiComm;
+ static PCWSTR s_pszAssocatingDevice;
+};
+
+typedef struct _SET_DEVICE_RADIO_JOB{
+ HRESULT hr;
+ CHandle hEvent;
+ CSampleRadioInstance *pInstance;
+ DEVICE_RADIO_STATE drsTarget;
+} SET_DEVICE_RADIO_JOB;
+
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioManager.cpp b/network/radio/RadioManagerSample/cpp/SampleRadioManager.cpp
new file mode 100644
index 00000000..53bc4757
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioManager.cpp
@@ -0,0 +1,570 @@
+#include "precomp.h"
+#pragma hdrstop
+
+PCWSTR CSampleRadioManager::s_pszRootKey = L"SYSTEM\\CurrentControlSet\\Control\\RadioManagement\\Misc\\SampleRadioManager";
+
+CSampleRadioManager::CSampleRadioManager()
+ : _fClosing(false)
+{
+}
+
+HRESULT CSampleRadioManager::FinalConstruct()
+{
+ DWORD dwError;
+ HRESULT hr = S_OK;
+ WCHAR szSubKeyName[128];
+ DWORD cchSubKeyName;
+
+ dwError = _hKeyRoot.Open(HKEY_LOCAL_MACHINE, s_pszRootKey, KEY_ALL_ACCESS);
+
+
+ if (ERROR_SUCCESS == dwError)
+ {
+
+ // Enumerate all instances
+ DWORD dwCount = 0;
+ while (true)
+ {
+ cchSubKeyName = ARRAYSIZE(szSubKeyName);
+ dwError = _hKeyRoot.EnumKey(dwCount, szSubKeyName, &cchSubKeyName, NULL);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ CString strSubKeyName;
+ _ATLTRY
+ {
+ strSubKeyName.Format(L"%s\\%s", s_pszRootKey, szSubKeyName);
+ }
+ _ATLCATCH(e)
+ {
+ hr = e;
+ }
+ if (SUCCEEDED(hr))
+ {
+ hr = _AddInstance(strSubKeyName, nullptr);
+ }
+
+ dwCount++;
+ }
+ else
+ {
+ dwError = ERROR_SUCCESS;
+ break;
+ }
+ }
+
+ }
+
+ // register the regkey subkey add/remove event
+ if (ERROR_SUCCESS == dwError)
+ {
+ HANDLE hRegChangeEvent = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
+ if (nullptr == hRegChangeEvent)
+ {
+ dwError = GetLastError();
+ }
+ else
+ {
+ _hRegChangeEvent.Attach(hRegChangeEvent);
+ }
+ }
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ HANDLE hThread = ::CreateThread(nullptr,
+ 0,
+ CSampleRadioManager::s_ThreadRegChange,
+ reinterpret_cast<PVOID>(this),
+ 0,
+ nullptr);
+
+ if (nullptr == hThread)
+ {
+ dwError = GetLastError();
+ }
+ else
+ {
+ _hEventThread.Attach(hThread);
+ }
+ }
+
+ hr = HRESULT_FROM_WIN32(dwError);
+
+ if (FAILED(hr))
+ {
+ _Cleanup();
+ }
+
+ return hr;
+}
+
+void CSampleRadioManager::FinalRelease()
+{
+ if ((nullptr != _hRegChangeEvent) && (nullptr != _hEventThread))
+ {
+ {
+ CComCritSecLock<CComAutoCriticalSection> lock(_criticalSection);
+
+ _fClosing = true;
+ SetEvent(_hRegChangeEvent); // inform reg listening thread obj is leaving
+ }
+
+ WaitForSingleObject(_hEventThread, INFINITE); // wait reg listening thread finish
+ }
+
+ _Cleanup();
+}
+
+void CSampleRadioManager::_Cleanup()
+{
+ POSITION p;
+ while (nullptr != (p = _listRadioInstances.GetHeadPosition()))
+ {
+ INSTANCE_LIST_OBJ *pListObj = _listRadioInstances.GetAt(p);
+ if (nullptr != pListObj)
+ {
+ _listRadioInstances.SetAt(p, nullptr);
+ _listRadioInstances.RemoveHeadNoReturn();
+ delete pListObj;
+ }
+ }
+}
+
+IFACEMETHODIMP CSampleRadioManager::GetRadioInstances(_Out_ IRadioInstanceCollection **ppCollection)
+{
+ CAutoVectorPtr<IRadioInstance *> rgpIRadioInstance;
+ HRESULT hr = S_OK;
+ DWORD cInstance;
+
+ if (nullptr == ppCollection)
+ {
+ return E_INVALIDARG;
+ }
+
+ *ppCollection = nullptr;
+
+ CComCritSecLock<CComAutoCriticalSection> lock(_criticalSection);
+ cInstance = static_cast<DWORD>(_listRadioInstances.GetCount());
+ if (cInstance > 0)
+ {
+ if (!rgpIRadioInstance.Allocate(cInstance))
+ {
+ hr = E_OUTOFMEMORY;
+ }
+ if (SUCCEEDED(hr))
+ {
+ ZeroMemory(rgpIRadioInstance, sizeof(rgpIRadioInstance[0]) * cInstance);
+ DWORD dwIndex = 0;
+
+ for (POSITION p = _listRadioInstances.GetHeadPosition(); nullptr != p; _listRadioInstances.GetNext(p))
+ {
+ hr = (_listRadioInstances.GetAt(p))->spRadioInstance.QueryInterface(&(rgpIRadioInstance[dwIndex]));
+ if (FAILED(hr))
+ {
+ break;
+ }
+ else
+ {
+ dwIndex++;
+ }
+ }
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ hr = CRadioInstanceCollection_CreateInstance(cInstance, rgpIRadioInstance, ppCollection);
+ }
+
+ for (DWORD dwIndex = 0; dwIndex < cInstance; dwIndex++)
+ {
+ if (nullptr != rgpIRadioInstance[dwIndex])
+ {
+ rgpIRadioInstance[dwIndex]->Release();
+ }
+ }
+
+ return hr;
+}
+
+IFACEMETHODIMP CSampleRadioManager::OnSystemRadioStateChange(
+ _In_ SYSTEM_RADIO_STATE sysRadioState,
+ _In_ UINT32 uTimeoutSec)
+{
+ HRESULT hr = S_OK;
+ CAutoPtr<SET_SYS_RADIO_JOB> spSetSysRadioJob;
+ bool fRefAdded = false;
+
+ spSetSysRadioJob.Attach(new SET_SYS_RADIO_JOB);
+ if (nullptr == spSetSysRadioJob)
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ spSetSysRadioJob->hr = E_FAIL;
+ spSetSysRadioJob->srsTarget = sysRadioState;
+ spSetSysRadioJob->pSampleRM = this;
+
+ // Add ref to object to avoid object release before working thread return
+ this->AddRef();
+ fRefAdded = true;
+
+ HANDLE hEvent = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
+ if (nullptr == hEvent)
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+ else
+ {
+ spSetSysRadioJob->hEvent.Attach(hEvent);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ if (!QueueUserWorkItem(CSampleRadioManager::s_ThreadSetSysRadio, spSetSysRadioJob, WT_EXECUTEDEFAULT))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ DWORD dwIgnore;
+ hr = CoWaitForMultipleHandles(0,
+ uTimeoutSec * 1000,
+ 1,
+ reinterpret_cast<LPHANDLE>(&(spSetSysRadioJob->hEvent)),
+ &dwIgnore);
+ if (RPC_S_CALLPENDING == hr)
+ {
+ spSetSysRadioJob.Detach();
+ }
+ else
+ {
+ hr = spSetSysRadioJob->hr;
+ }
+ }
+
+ if (fRefAdded)
+ {
+ this->Release();
+ }
+
+ return hr;
+}
+
+IFACEMETHODIMP CSampleRadioManager::OnInstanceRadioChange(
+ _In_ BSTR bstrRadioInstanceID,
+ _In_ DEVICE_RADIO_STATE radioState)
+{
+ return _FireEventOnInstanceRadioChange(bstrRadioInstanceID, radioState);
+}
+
+HRESULT CSampleRadioManager::_FireEventOnInstanceAdd(_In_ IRadioInstance *pRadioInstance)
+{
+ HRESULT hr;
+
+ Lock();
+ for (IUnknown** ppUnkSrc = m_vec.begin(); ppUnkSrc < m_vec.end(); ppUnkSrc++)
+ {
+ if ((nullptr != ppUnkSrc) && (nullptr != *ppUnkSrc))
+ {
+ CComPtr<IMediaRadioManagerNotifySink> spSink;
+
+ hr = (*ppUnkSrc)->QueryInterface(IID_PPV_ARGS(&spSink));
+ if (SUCCEEDED(hr))
+ {
+ spSink->OnInstanceAdd(pRadioInstance);
+ }
+ }
+ }
+ Unlock();
+
+ return S_OK;
+}
+
+HRESULT CSampleRadioManager::_FireEventOnInstanceRemove(_In_ BSTR bstrRadioInstanceID)
+{
+ HRESULT hr;
+
+ Lock();
+ for (IUnknown** ppUnkSrc = m_vec.begin(); ppUnkSrc < m_vec.end(); ppUnkSrc++)
+ {
+ if ((nullptr != ppUnkSrc) && (nullptr != *ppUnkSrc))
+ {
+ CComPtr<IMediaRadioManagerNotifySink> spSink;
+
+ hr = (*ppUnkSrc)->QueryInterface(IID_PPV_ARGS(&spSink));
+ if (SUCCEEDED(hr))
+ {
+ spSink->OnInstanceRemove(bstrRadioInstanceID);
+ }
+ }
+ }
+ Unlock();
+
+ return S_OK;
+}
+
+HRESULT CSampleRadioManager::_FireEventOnInstanceRadioChange(
+ _In_ BSTR bstrRadioInstanceID,
+ _In_ DEVICE_RADIO_STATE radioState
+ )
+{
+ HRESULT hr;
+
+ Lock();
+ for (IUnknown** ppUnkSrc = m_vec.begin(); ppUnkSrc < m_vec.end(); ppUnkSrc++)
+ {
+ if ((nullptr != ppUnkSrc) && (nullptr != *ppUnkSrc))
+ {
+ CComPtr<IMediaRadioManagerNotifySink> spSink;
+
+ hr = (*ppUnkSrc)->QueryInterface(IID_PPV_ARGS(&spSink));
+ if (SUCCEEDED(hr))
+ {
+ spSink->OnInstanceRadioChange(bstrRadioInstanceID, radioState);
+ }
+ }
+ }
+ Unlock();
+
+ return S_OK;
+}
+
+
+HRESULT CSampleRadioManager::_AddInstance(_In_ PCWSTR pszKeyName, _Out_opt_ IRadioInstance **ppRadioInstance)
+{
+ HRESULT hr = S_OK;
+ CComPtr<ISampleRadioInstanceInternal> spRadioInstance;
+ CAutoPtr<INSTANCE_LIST_OBJ> spInstanceObj;
+
+ CComCritSecLock<CComAutoCriticalSection> lock(_criticalSection);
+
+ spInstanceObj.Attach(new INSTANCE_LIST_OBJ);
+ if (nullptr == spInstanceObj)
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ CComPtr<ISampleRadioManagerInternal> spRMInternal = this;
+ hr = CSampleRadioInstance_CreateInstance(pszKeyName, spRMInternal, &spRadioInstance);
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ spInstanceObj->fExisting = true;
+ spInstanceObj->spRadioInstance = spRadioInstance;
+
+ _ATLTRY
+ {
+ spInstanceObj->strRadioInstanceID = pszKeyName;
+ _listRadioInstances.AddTail(spInstanceObj);
+ spInstanceObj.Detach();
+ }
+ _ATLCATCH(e)
+ {
+ hr = e;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ if (ppRadioInstance != nullptr)
+ {
+ hr = spRadioInstance->QueryInterface(IID_PPV_ARGS(ppRadioInstance));
+ }
+ }
+ }
+
+ return hr;
+}
+
+void CSampleRadioManager::_OnInstanceAddRemove()
+{
+ DWORD dwError;
+ HRESULT hr= S_OK;
+ WCHAR szSubKeyName[128];
+ DWORD cchSubKeyName;
+ POSITION p;
+
+ // Set all instances as invalid
+ for (p = _listRadioInstances.GetHeadPosition(); p != nullptr; _listRadioInstances.GetNext(p))
+ {
+ INSTANCE_LIST_OBJ *pRadioInstanceObj = _listRadioInstances.GetAt(p);
+ pRadioInstanceObj->fExisting = false;
+ }
+
+ DWORD dwCount = 0;
+ while (true)
+ {
+ cchSubKeyName = ARRAYSIZE(szSubKeyName);
+ dwError = _hKeyRoot.EnumKey(dwCount, szSubKeyName, &cchSubKeyName, NULL);
+
+ if (ERROR_SUCCESS == dwError)
+ {
+ CString strKeyName;
+ _ATLTRY
+ {
+ strKeyName.Format(L"%s\\%s",s_pszRootKey,szSubKeyName);
+ }
+ _ATLCATCH(e)
+ {
+ hr = e;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ for (p = _listRadioInstances.GetHeadPosition(); p != nullptr; _listRadioInstances.GetNext(p))
+ {
+ INSTANCE_LIST_OBJ *pRadioInstanceObj = _listRadioInstances.GetAt(p);
+ if (pRadioInstanceObj->strRadioInstanceID == strKeyName)
+ {
+ break;
+ }
+ }
+
+ // find new instance
+ if (nullptr == p)
+ {
+ CComPtr<IRadioInstance> spRadioInstance;
+ hr = _AddInstance(strKeyName, &spRadioInstance);
+ if(SUCCEEDED(hr))
+ {
+ _FireEventOnInstanceAdd(spRadioInstance);
+ }
+ }
+ else
+ {
+ // The instance still valid.
+ INSTANCE_LIST_OBJ *pRadioInstanceObj = _listRadioInstances.GetAt(p);
+ pRadioInstanceObj->fExisting = true;
+ }
+ }
+
+ dwCount++;
+ }
+ else
+ {
+ dwError = ERROR_SUCCESS;
+ break;
+ }
+ }
+
+ // Remove deleted instance from list
+ p = _listRadioInstances.GetHeadPosition();
+ while (nullptr != p)
+ {
+ INSTANCE_LIST_OBJ *pRadioInstanceObj = _listRadioInstances.GetAt(p);
+ if ((pRadioInstanceObj != nullptr) && !pRadioInstanceObj->fExisting)
+ {
+ POSITION pTmp = p;
+ _listRadioInstances.GetPrev(pTmp);
+
+ _listRadioInstances.RemoveAt(p);
+ CComBSTR bstrTmp = pRadioInstanceObj->strRadioInstanceID.AllocSysString();
+ if (nullptr != bstrTmp)
+ {
+ _FireEventOnInstanceRemove(bstrTmp);
+ }
+ delete pRadioInstanceObj;
+ p = pTmp;
+ }
+
+ if (nullptr != p)
+ {
+ _listRadioInstances.GetNext(p);
+ }
+ else
+ {
+ p = _listRadioInstances.GetHeadPosition();
+ }
+ }
+}
+
+HRESULT CSampleRadioManager::_SetSysRadioState(_In_ SYSTEM_RADIO_STATE sysRadioState)
+{
+ // Since set regkey is fast enough, this implemtation is to set instance radio sequentially.
+ // If set instance radio takes long time and there are multiple instance within one RM,
+ // it is better to do it parallelly.
+ HRESULT hr = S_OK;
+ CComCritSecLock<CComAutoCriticalSection> lock(_criticalSection);
+ for (POSITION p = _listRadioInstances.GetHeadPosition(); nullptr != p; _listRadioInstances.GetNext(p))
+ {
+ INSTANCE_LIST_OBJ *pInstanceObj = _listRadioInstances.GetAt(p);
+ hr = pInstanceObj->spRadioInstance->OnSysRadioChange(sysRadioState);
+ if (FAILED(hr))
+ {
+ break;
+ }
+ }
+ return hr;
+}
+
+DWORD WINAPI CSampleRadioManager::s_ThreadRegChange(LPVOID pThis)
+{
+ CSampleRadioManager *pRadioMgr = reinterpret_cast<CSampleRadioManager *>(pThis);
+ DWORD dwError = ERROR_SUCCESS;
+
+ {
+ CComCritSecLock<CComAutoCriticalSection> lock(pRadioMgr->_criticalSection);
+ if (pRadioMgr->_fClosing)
+ {
+ dwError = ERROR_APP_INIT_FAILURE;
+ }
+ else
+ {
+ dwError = pRadioMgr->_hKeyRoot.NotifyChangeKeyValue(FALSE,
+ REG_NOTIFY_CHANGE_NAME,
+ pRadioMgr->_hRegChangeEvent,
+ TRUE);
+ }
+ }
+
+ if (ERROR_SUCCESS != dwError)
+ {
+ return dwError;
+ }
+
+ while (ERROR_SUCCESS == dwError)
+ {
+ if (WaitForSingleObject(pRadioMgr->_hRegChangeEvent, INFINITE) == WAIT_FAILED)
+ {
+ break;
+ }
+
+ {
+ CComCritSecLock<CComAutoCriticalSection> lock(pRadioMgr->_criticalSection);
+ if (pRadioMgr->_fClosing) // main thread is leaving
+ {
+ break;
+ }
+
+ ResetEvent(pRadioMgr->_hRegChangeEvent);
+
+ dwError = pRadioMgr->_hKeyRoot.NotifyChangeKeyValue(FALSE,
+ REG_NOTIFY_CHANGE_NAME,
+ pRadioMgr->_hRegChangeEvent,
+ TRUE);
+ }
+ // Receive reg subkey add/remove event. update list
+ pRadioMgr->_OnInstanceAddRemove();
+ }
+
+ return dwError;
+}
+
+DWORD WINAPI CSampleRadioManager::s_ThreadSetSysRadio(LPVOID pThis)
+{
+ SET_SYS_RADIO_JOB *pJob = reinterpret_cast<SET_SYS_RADIO_JOB *>(pThis);
+
+ pJob->hr = pJob->pSampleRM->_SetSysRadioState(pJob->srsTarget);
+
+ SetEvent(pJob->hEvent);
+ return ERROR_SUCCESS;
+}
+
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioManager.h b/network/radio/RadioManagerSample/cpp/SampleRadioManager.h
new file mode 100644
index 00000000..a39673ed
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioManager.h
@@ -0,0 +1,79 @@
+#pragma once
+
+typedef struct {
+ CString strRadioInstanceID;
+ bool fExisting;
+ CComPtr<ISampleRadioInstanceInternal> spRadioInstance;
+} INSTANCE_LIST_OBJ;
+
+EXTERN_C const IID IID_IMediaRadioManagerNotifySink;
+
+class ATL_NO_VTABLE CSampleRadioManager :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CSampleRadioManager, &CLSID_SampleRadioManager>,
+ public IConnectionPointContainerImpl<CSampleRadioManager>,
+ public IConnectionPointImpl<CSampleRadioManager, &IID_IMediaRadioManagerNotifySink>,
+ public IMediaRadioManager,
+ public ISampleRadioManagerInternal
+{
+public:
+
+ DECLARE_CLASSFACTORY()
+ DECLARE_NOT_AGGREGATABLE(CSampleRadioManager)
+
+ DECLARE_NO_REGISTRY()
+
+ BEGIN_COM_MAP(CSampleRadioManager)
+ COM_INTERFACE_ENTRY(IMediaRadioManager)
+ COM_INTERFACE_ENTRY(ISampleRadioManagerInternal)
+ COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
+ END_COM_MAP()
+
+ BEGIN_CONNECTION_POINT_MAP(CSampleRadioManager)
+ CONNECTION_POINT_ENTRY(IID_IMediaRadioManagerNotifySink)
+ END_CONNECTION_POINT_MAP()
+
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+ CSampleRadioManager();
+
+ HRESULT FinalConstruct();
+ void FinalRelease();
+
+ // IMediaRadioManager interface
+ IFACEMETHOD(GetRadioInstances)(_Out_ IRadioInstanceCollection **ppCollection);
+ IFACEMETHOD(OnSystemRadioStateChange)(_In_ SYSTEM_RADIO_STATE sysRadioState, _In_ UINT32 uTimeoutSec);
+
+ // ISampleRadioManagerInternal interface
+ IFACEMETHOD(OnInstanceRadioChange)(_In_ BSTR bstrRadioInstanceID, _In_ DEVICE_RADIO_STATE radioState);
+
+private:
+ HRESULT _FireEventOnInstanceAdd(_In_ IRadioInstance *pRadioInstance);
+ HRESULT _FireEventOnInstanceRemove(_In_ BSTR bstrRadioInstanceID);
+ HRESULT _FireEventOnInstanceRadioChange(_In_ BSTR bstrRadioInstanceID, _In_ DEVICE_RADIO_STATE radioState);
+
+ void _Cleanup();
+ HRESULT _AddInstance(_In_ PCWSTR pszKeyName, _Out_opt_ IRadioInstance **ppRadioInstance);
+ void _OnInstanceAddRemove();
+ HRESULT _SetSysRadioState(_In_ SYSTEM_RADIO_STATE sysRadioState);
+ static DWORD WINAPI s_ThreadRegChange(LPVOID pThis);
+ static DWORD WINAPI s_ThreadSetSysRadio(LPVOID pThis);
+
+ CComAutoCriticalSection _criticalSection;
+ CAtlList<INSTANCE_LIST_OBJ *> _listRadioInstances;
+
+ CRegKey _hKeyRoot;
+ CHandle _hRegChangeEvent;
+ CHandle _hEventThread;
+ bool _fClosing; // object is closing
+
+ static PCWSTR s_pszRootKey;
+};
+
+typedef struct _SET_SYS_RADIO_JOB{
+ HRESULT hr;
+ CHandle hEvent;
+ CSampleRadioManager *pSampleRM;
+ SYSTEM_RADIO_STATE srsTarget;
+} SET_SYS_RADIO_JOB;
+
diff --git a/network/radio/RadioManagerSample/cpp/dllmain.cpp b/network/radio/RadioManagerSample/cpp/dllmain.cpp
new file mode 100644
index 00000000..61d6898b
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/dllmain.cpp
@@ -0,0 +1,57 @@
+#include "precomp.h"
+#pragma hdrstop
+
+OBJECT_ENTRY_AUTO(__uuidof(SampleRadioManager), CSampleRadioManager);
+
+class CSampleRadioModule : public CAtlDllModuleT<CSampleRadioModule>
+{
+public:
+};
+
+static CSampleRadioModule s_AtlModule;
+
+//+---------------------------------------------------------------------------
+// DLL Entry Point
+//
+
+EXTERN_C BOOL WINAPI DllMain
+(
+ HINSTANCE /*hInstance*/,
+ DWORD dwReason,
+ LPVOID pvReserved
+)
+{
+ return s_AtlModule.DllMain(dwReason, pvReserved);
+}
+
+STDAPI DllCanUnloadNow(void)
+{
+ return s_AtlModule.DllCanUnloadNow();
+}
+
+STDAPI DllGetClassObject(
+ _In_ REFCLSID rclsid,
+ _In_ REFIID riid,
+ _Outptr_ LPVOID* ppv
+ )
+{
+ return s_AtlModule.DllGetClassObject(rclsid, riid, ppv);
+}
+
+
+//+---------------------------------------------------------------------------
+// Adds entries to the system registry. Needed because the binary need copy to test machine.
+// If binary is deployed by manifest, these functions are not needed.
+STDAPI
+DllRegisterServer ()
+{
+ s_AtlModule.DllRegisterServer(FALSE);
+ return S_OK;
+}
+
+STDAPI
+DllUnregisterServer ()
+{
+ HRESULT hr = s_AtlModule.DllUnregisterServer();
+ return hr;
+}
diff --git a/network/radio/RadioManagerSample/cpp/precomp.h b/network/radio/RadioManagerSample/cpp/precomp.h
new file mode 100644
index 00000000..346a3fe6
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/precomp.h
@@ -0,0 +1,17 @@
+#include <windows.h>
+#include <Winreg.h>
+
+// ATL includes
+#include <ATLBase.h>
+#include <ATLCom.h>
+#include <ATLColl.h>
+#include <ATLStr.h>
+
+
+// radio mamanager includes
+#include "RadioMgr.h"
+#include "SampleRM.h"
+#include "internalInterfaces.h"
+#include "SampleRadioInstance.h"
+#include "SampleInstanceCollection.h"
+#include "SampleRadioManager.h"
diff --git a/network/radio/RadioManagerSample/cpp/precompsrc.cpp b/network/radio/RadioManagerSample/cpp/precompsrc.cpp
new file mode 100644
index 00000000..5944cf51
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/precompsrc.cpp
@@ -0,0 +1 @@
+#include "precomp.h" \ No newline at end of file
diff --git a/network/radio/RadioManagerSample/cpp/sampleRM.idl b/network/radio/RadioManagerSample/cpp/sampleRM.idl
new file mode 100644
index 00000000..64ec3fc5
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/sampleRM.idl
@@ -0,0 +1,21 @@
+import "oaidl.idl";
+import "RadioMgr.idl";
+
+[
+ uuid(4BE52AA0-EF10-420F-9341-681FBCCD772C),
+ version(1.0),
+ helpstring("Sample Radio Manager library")
+]
+library SampleRadioManagerLib
+{
+ importlib("stdole2.tlb");
+
+ [
+ uuid(41DC5063-AFAF-47DF-86B3-4B2ED82A82CF),
+ helpstring("Sample Media Radio Manager")
+ ]
+ coclass SampleRadioManager
+ {
+ [default] interface IMediaRadioManager;
+ }
+}
diff --git a/network/radio/RadioManagerSample/install.cmd b/network/radio/RadioManagerSample/install.cmd
new file mode 100644
index 00000000..59b84572
--- /dev/null
+++ b/network/radio/RadioManagerSample/install.cmd
@@ -0,0 +1,3 @@
+copy SampleRM.dll %windir%\system32\
+regsvr32 SampleRM.dll
+SampleRM.reg
diff --git a/network/radio/RadioManagerSample/readme.txt b/network/radio/RadioManagerSample/readme.txt
new file mode 100644
index 00000000..2bdd69bd
--- /dev/null
+++ b/network/radio/RadioManagerSample/readme.txt
@@ -0,0 +1,192 @@
+Sample Radio Manager
+====================
+Demonstrates how to structure a Radio Manager for use with the Windows 8 Radio Management APIs.
+
+On Windows 8 and later, the operating system contains a set of APIs which are used as a software mechanism
+to control the various radios found on the machine. The APIs work by communicating with a Radio Manager,
+which is a COM object that relays commands from the APIs to turn the radio on or off, and reports back
+radio information to the APIs. This feature is designed in such a way that a separate Radio Manager is
+required for each radio media type. For example, a WLAN radio will be controlled by a different Radio
+Manager than a GPS radio. If there are 2 WLAN radios and a GPS radio, the 2 WLAN radios will be controlled
+by one Radio Manager, and the GPS radio will be controlled by a different Radio Manager. The Radio Manager
+must be able to run correctly within Local Service Account context. Under this context, the Radio Manager
+will have the minimum privilege on the local computer.
+
+When the user turns the radio off (either by using the specific radio software switch or the airplane mode switch),
+radio transmission must be turned off. The device can be powered off as long as the radio switch does not disappear
+from the UI. It is very important that the radio manager developer ensures that when the device is powered off, the
+radio switch does not disappear from the UI. If the radio switch disappears from the UI when the radio is turned off
+by the user, then user has no way to turn the radio back on! If it is desired to conserve power by cutting power to
+the device when the radio is turned off, but the device cannot be completely powered off because it disappears from
+the UI, then the solution would be to put the device in a low power state (e.g. D3).
+
+IMPORTANT! The radio manager must be given a name � this is the name of the radio switch that is displayed to the
+user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example,
+for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should
+be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's
+name or some other word related to the functionality of the radio (e.g. "Location" OR "port").
+
+
+
+Sample Language Implementations
+===============================
+This sample is available in the following language implementations:
+ C++
+
+
+Installation Files
+==================
+install.cmd
+- Installation script. Copies and registers the dll and executes SampleRM.reg
+
+SampleRM.reg
+- script to install the Sample Radio Manager into the registry, along with 2 radio instances
+
+
+Source Files
+============
+SampleRM.sln
+- The Visual Studio 2010 solution file for building the Sample Radio Manager dll
+
+sampleRM.idl
+- The interface definition for the Sample Radio Manager
+
+RadioMgr.idl
+- The interface definition for a Windows Radio Manager
+
+SampleRadioManager.h
+- Header file for the functions required for a Radio Manager
+
+SampleRadioInstance.h
+- Header file for the functions required for a Radio Instance
+
+SampleInstanceCollection.h
+- Header file for the functions required for a Collection of Radio Instances
+
+precomp.h
+- Common header file
+
+InternalInterfaces.h
+- Header file for internal interface used for this sample
+
+dllmain.cpp
+- Standard dllmain
+
+SampleRadioManager.cpp
+- Implementation details for the Sample Radio Manager. Important concepts include:
+ - Utilizing IMediaRadioManagerNotifySink for radio instance events
+ - Adding/Removing radio instances
+ - Queuing and deploying worker jobs for system events
+
+SampleRadioInstance.cpp
+- Implementation details for the Sample Radio Instance. Important concepts include:
+ - Accessors & Modifiers for radio information
+ - Instance change functions
+
+SampleInstanceCollection.cpp
+- Implementation details for the Sample Instance Collection. Important concepts include:
+ - Radio Instance discovery and retrieval
+
+RadioMgr_interface.cpp
+- Helper source file to include the MIDL-generated files.
+
+
+How the sample works
+====================
+This sample Radio Manager does not operate on an actual radio. Instead, it uses registry keys to act as
+virtual radios. Each "radio" instance can have the following values:
+ -Name
+ -RadioState
+ -PreviousRadioState
+ -IsMultiComm
+ -IsAssociatingDevice
+
+***It is required that the registry key has AT LEAST a Name value, otherwise the Sample Radio Manager will
+fail to initialize***
+
+IMPORTANT! The radio manager must be given a name � this is the name of the radio switch that is displayed to the
+user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example,
+for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should
+be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's
+name or some other word related to the functionality of the radio (e.g. "Location" OR "port").
+
+
+When the Radio Manager is initialized, it uses these registry keys to retrieve the "radio" information.
+The radio state values can be any of the following enum values:
+
+ typedef enum _DEVICE_RADIO_STATE
+ {
+ DRS_RADIO_ON = 0,
+ DRS_SW_RADIO_OFF = 1,
+ DRS_HW_RADIO_OFF = 2,
+ DRS_SW_HW_RADIO_OFF = 3,
+ DRS_HW_RADIO_ON_UNCONTROLLABLE = 4,
+ DRS_RADIO_INVALID = 5,
+ DRS_HW_RADIO_OFF_UNCONTROLLABLE = 6,
+ DRS_RADIO_MAX = DRS_HW_RADIO_OFF_UNCONTROLLABLE
+ } DEVICE_RADIO_STATE;
+
+For IsMultiComm and IsAssociatingDevice, a value of 0 means 'no' and 1 means 'yes.
+
+
+To Add a Radio Instance
+=======================
+Add a new item to the registry:
+[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\RadioManagement\Misc\SampleRadioManager\SampleRadioX]
+"RadioState"=dword:00000000
+"Name"="SampleRadioX"
+"IsMultiComm"=dword:00000000
+
+To Edit a Radio Instance
+========================
+Simply change the values in the registry. For example, change the radio state from DRS_RADIO_ON to DRS_SW_RADIO_OFF
+by changing the 'RadioState' value from 0 to 1.
+
+
+To Remove a Radio Instance
+==========================
+Delete the corresponding registry key.
+
+
+Prerequisites for viewing and building solution
+===============================================
+1. Windows 7
+2. Visual Studio 2010
+
+
+To build the sample using Visual Studio 2010 (preferred method):
+===============================================================
+1. Open File Explorer and navigate to the directory.
+2. Double-click the icon for the SampleRM.sln (solution) file to open the file in Visual Studio.
+3. In the Build menu, select Build Solution. The dll will be built in the default \Debug or \Release directory
+
+
+Prerequisites for installing Radio Manager
+==========================================
+1. Windows 8
+2. The VC++ 2010 Redistributable package must be installed for this dll to load.
+
+
+Installing Radio Manager
+========================
+1. Copy the install.cmd, SampleRM.reg and SampleRM.dll files to a directory
+2. Run install.cmd
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/network/trans/ddproxy/ddproxy.sln b/network/trans/ddproxy/ddproxy.sln
index 9115b369..b420611e 100644
--- a/network/trans/ddproxy/ddproxy.sln
+++ b/network/trans/ddproxy/ddproxy.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddproxy", "sys\ddproxy.vcxproj", "{F5ED1745-0947-474A-924D-CB5D3D2D6C5E}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddproxy", "sys\ddproxy.vcxproj", "{CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Debug|Win32.ActiveCfg = Debug|Win32
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Debug|Win32.Build.0 = Debug|Win32
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Release|Win32.ActiveCfg = Release|Win32
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Release|Win32.Build.0 = Release|Win32
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Debug|x64.ActiveCfg = Debug|x64
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Debug|x64.Build.0 = Debug|x64
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Release|x64.ActiveCfg = Release|x64
- {F5ED1745-0947-474A-924D-CB5D3D2D6C5E}.Release|x64.Build.0 = Release|x64
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Debug|Win32.Build.0 = Debug|Win32
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Release|Win32.ActiveCfg = Release|Win32
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Release|Win32.Build.0 = Release|Win32
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Debug|x64.ActiveCfg = Debug|x64
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Debug|x64.Build.0 = Debug|x64
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Release|x64.ActiveCfg = Release|x64
+ {CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/trans/ddproxy/sys/ddproxy.vcxproj b/network/trans/ddproxy/sys/ddproxy.vcxproj
index 9fd6e6af..516c68a3 100644
--- a/network/trans/ddproxy/sys/ddproxy.vcxproj
+++ b/network/trans/ddproxy/sys/ddproxy.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{F5ED1745-0947-474A-924D-CB5D3D2D6C5E}</ProjectGuid>
+ <ProjectGuid>{CBE3E4FB-B5D5-46F1-B97E-B8400FC372C8}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{91B8C3EC-EC68-40D0-BDAE-FECDC2A5A69E}</SampleGuid>
+ <SampleGuid>{4805FA90-5926-46C2-845B-2FC0F749B960}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters b/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters
index 9728a6bb..6d7db8de 100644
--- a/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters
+++ b/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{667070D4-ABD3-4134-83D9-C2E8E3B4D990}</UniqueIdentifier>
+ <UniqueIdentifier>{58F05CCD-742F-44E4-8DCB-61983C2AAC0C}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{55D8461C-9BC4-4CBA-8364-1C9E8628AD2E}</UniqueIdentifier>
+ <UniqueIdentifier>{6FA03C9B-94CF-45F5-ADA3-F23B54700362}</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>{89C687B6-C04D-48DD-BFC4-36AB091E7E94}</UniqueIdentifier>
+ <UniqueIdentifier>{6D410DAF-C0BC-40CF-8D06-F53EA77C7354}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{3E15A537-E520-445D-AFC4-4CFCEF6234E6}</UniqueIdentifier>
+ <UniqueIdentifier>{6F97EAF5-00A6-4E35-9A51-AF4244397FF6}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/trans/inspect/inspect.sln b/network/trans/inspect/inspect.sln
index 79901c54..eb1f632d 100644
--- a/network/trans/inspect/inspect.sln
+++ b/network/trans/inspect/inspect.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inspect", "sys\inspect.vcxproj", "{43AC1739-03F1-4465-8A16-F5FCD06BC2E9}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inspect", "sys\inspect.vcxproj", "{F850B54F-985A-485A-A99A-E787184F31D8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Debug|Win32.ActiveCfg = Debug|Win32
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Debug|Win32.Build.0 = Debug|Win32
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Release|Win32.ActiveCfg = Release|Win32
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Release|Win32.Build.0 = Release|Win32
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Debug|x64.ActiveCfg = Debug|x64
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Debug|x64.Build.0 = Debug|x64
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Release|x64.ActiveCfg = Release|x64
- {43AC1739-03F1-4465-8A16-F5FCD06BC2E9}.Release|x64.Build.0 = Release|x64
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Debug|Win32.Build.0 = Debug|Win32
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Release|Win32.ActiveCfg = Release|Win32
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Release|Win32.Build.0 = Release|Win32
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Debug|x64.ActiveCfg = Debug|x64
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Debug|x64.Build.0 = Debug|x64
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Release|x64.ActiveCfg = Release|x64
+ {F850B54F-985A-485A-A99A-E787184F31D8}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/trans/inspect/sys/inspect.vcxproj b/network/trans/inspect/sys/inspect.vcxproj
index d403b025..cf5d67cb 100644
--- a/network/trans/inspect/sys/inspect.vcxproj
+++ b/network/trans/inspect/sys/inspect.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{43AC1739-03F1-4465-8A16-F5FCD06BC2E9}</ProjectGuid>
+ <ProjectGuid>{F850B54F-985A-485A-A99A-E787184F31D8}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{CA2EEED8-4078-42F4-947A-29D46ACCC30F}</SampleGuid>
+ <SampleGuid>{1BE47893-DEA2-451D-B25B-B9485B05A13E}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/trans/inspect/sys/inspect.vcxproj.Filters b/network/trans/inspect/sys/inspect.vcxproj.Filters
index 7fbd1b25..b8b1fd4b 100644
--- a/network/trans/inspect/sys/inspect.vcxproj.Filters
+++ b/network/trans/inspect/sys/inspect.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{89A4FDF7-7B2B-42A3-A13C-4855905159BF}</UniqueIdentifier>
+ <UniqueIdentifier>{090AD1B0-632B-470E-A4F5-19B122F18E4A}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{893A15B9-96A4-4181-9353-D9C59D6D343C}</UniqueIdentifier>
+ <UniqueIdentifier>{1F438D75-BA91-40B8-A34B-21A50AB1DB2D}</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>{174E13A1-2D15-477C-9E80-060424681A41}</UniqueIdentifier>
+ <UniqueIdentifier>{C99C7FAB-3055-4C61-98EC-42F2C637694C}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{3D55D549-7A89-4DEB-9C7B-149E8332DD7C}</UniqueIdentifier>
+ <UniqueIdentifier>{6EEC81C3-277F-4A14-831C-A84E74534082}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/trans/msnmntr/exe/monitor.vcxproj b/network/trans/msnmntr/exe/monitor.vcxproj
index 06902c7c..47135984 100644
--- a/network/trans/msnmntr/exe/monitor.vcxproj
+++ b/network/trans/msnmntr/exe/monitor.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{BF8F75F9-23E9-4925-96A1-76FD729EBA93}</ProjectGuid>
+ <ProjectGuid>{FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{DED4B73F-AFBE-4142-AD53-004F9F079AA7}</SampleGuid>
+ <SampleGuid>{BC6143C7-DF6C-4466-8AF0-FBE869102EEC}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/trans/msnmntr/exe/monitor.vcxproj.Filters b/network/trans/msnmntr/exe/monitor.vcxproj.Filters
index 2838b33f..88c9cd7f 100644
--- a/network/trans/msnmntr/exe/monitor.vcxproj.Filters
+++ b/network/trans/msnmntr/exe/monitor.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{AB53852E-BB5F-49F9-8184-98DAFA476C33}</UniqueIdentifier>
+ <UniqueIdentifier>{E70DDE2C-E112-4C1D-AFC4-39EA907AE848}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{253A5086-E26E-4352-B8E1-BBBEB6A81F31}</UniqueIdentifier>
+ <UniqueIdentifier>{16A331F5-433A-4195-BA31-CB3D082B7F8A}</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>{714E88E3-7CAD-4F49-8A28-32DD65C6691E}</UniqueIdentifier>
+ <UniqueIdentifier>{ECFC1BCD-5BF5-4402-B1D2-3C2CDE9E5291}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/trans/msnmntr/msnmntr.sln b/network/trans/msnmntr/msnmntr.sln
index ac6d8e3e..5a24d0b5 100644
--- a/network/trans/msnmntr/msnmntr.sln
+++ b/network/trans/msnmntr/msnmntr.sln
@@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{18ABBE0C-EBB5-4181-AB5D-AD526B2CB283}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{14AC7312-9D93-4A70-896D-97D9FDB48125}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{B9075E40-A5B9-42B8-A185-CB3290C4EC12}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{04F57F95-9237-4AE9-908B-41F30AA8BB1E}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monitor", "exe\monitor.vcxproj", "{BF8F75F9-23E9-4925-96A1-76FD729EBA93}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monitor", "exe\monitor.vcxproj", "{FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msnmntr", "sys\msnmntr.vcxproj", "{A0314F39-C7C2-463C-B2BE-DF387AB755F5}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msnmntr", "sys\msnmntr.vcxproj", "{FB90ED51-1865-4ADC-B3A7-827EFE7302EA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,28 +19,28 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Debug|Win32.ActiveCfg = Debug|Win32
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Debug|Win32.Build.0 = Debug|Win32
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Release|Win32.ActiveCfg = Release|Win32
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Release|Win32.Build.0 = Release|Win32
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Debug|x64.ActiveCfg = Debug|x64
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Debug|x64.Build.0 = Debug|x64
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Release|x64.ActiveCfg = Release|x64
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93}.Release|x64.Build.0 = Release|x64
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Debug|Win32.ActiveCfg = Debug|Win32
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Debug|Win32.Build.0 = Debug|Win32
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Release|Win32.ActiveCfg = Release|Win32
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Release|Win32.Build.0 = Release|Win32
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Debug|x64.ActiveCfg = Debug|x64
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Debug|x64.Build.0 = Debug|x64
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Release|x64.ActiveCfg = Release|x64
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5}.Release|x64.Build.0 = Release|x64
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Debug|Win32.Build.0 = Debug|Win32
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Release|Win32.ActiveCfg = Release|Win32
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Release|Win32.Build.0 = Release|Win32
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Debug|x64.ActiveCfg = Debug|x64
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Debug|x64.Build.0 = Debug|x64
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Release|x64.ActiveCfg = Release|x64
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A}.Release|x64.Build.0 = Release|x64
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Debug|Win32.Build.0 = Debug|Win32
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Release|Win32.ActiveCfg = Release|Win32
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Release|Win32.Build.0 = Release|Win32
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Debug|x64.ActiveCfg = Debug|x64
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Debug|x64.Build.0 = Debug|x64
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Release|x64.ActiveCfg = Release|x64
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {BF8F75F9-23E9-4925-96A1-76FD729EBA93} = {18ABBE0C-EBB5-4181-AB5D-AD526B2CB283}
- {A0314F39-C7C2-463C-B2BE-DF387AB755F5} = {B9075E40-A5B9-42B8-A185-CB3290C4EC12}
+ {FCC67889-AD0A-4C2F-A826-7D2AD714FC6A} = {14AC7312-9D93-4A70-896D-97D9FDB48125}
+ {FB90ED51-1865-4ADC-B3A7-827EFE7302EA} = {04F57F95-9237-4AE9-908B-41F30AA8BB1E}
EndGlobalSection
EndGlobal
diff --git a/network/trans/msnmntr/sys/msnmntr.vcxproj b/network/trans/msnmntr/sys/msnmntr.vcxproj
index 19d05a61..fd2ee8a8 100644
--- a/network/trans/msnmntr/sys/msnmntr.vcxproj
+++ b/network/trans/msnmntr/sys/msnmntr.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{A0314F39-C7C2-463C-B2BE-DF387AB755F5}</ProjectGuid>
+ <ProjectGuid>{FB90ED51-1865-4ADC-B3A7-827EFE7302EA}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{2235E7F5-485C-4A50-AC6E-7D5127C63D50}</SampleGuid>
+ <SampleGuid>{37A322AB-C708-4912-A65E-32CF743F1620}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters b/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters
index 7a507ae9..7c24c232 100644
--- a/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters
+++ b/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{061ABC02-158F-4210-A282-D00E6E173776}</UniqueIdentifier>
+ <UniqueIdentifier>{C234D0E2-4C06-4AD3-911B-E5B20C7AA72D}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{EAF55685-C4D1-47E0-A3A8-B3E417170A02}</UniqueIdentifier>
+ <UniqueIdentifier>{65D341DD-B365-45C9-9EDE-816F5EE76E72}</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>{7449D543-948C-4CDB-AB03-EE885873121D}</UniqueIdentifier>
+ <UniqueIdentifier>{023B8D22-079E-43B6-8C96-623C9ED0B1F1}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{E3258914-96DA-44CC-9DB9-3F58E7232911}</UniqueIdentifier>
+ <UniqueIdentifier>{D2F25005-E168-4EEF-8F96-23805D06AAAE}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/trans/stmedit/stmedit.sln b/network/trans/stmedit/stmedit.sln
index 7f1cb436..b626c402 100644
--- a/network/trans/stmedit/stmedit.sln
+++ b/network/trans/stmedit/stmedit.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stmedit", "sys\stmedit.vcxproj", "{98513F1C-C28D-4F03-99A8-88FD4BD707C7}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stmedit", "sys\stmedit.vcxproj", "{047B99BF-F490-4938-BFDA-3697680EE8AB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Debug|Win32.ActiveCfg = Debug|Win32
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Debug|Win32.Build.0 = Debug|Win32
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Release|Win32.ActiveCfg = Release|Win32
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Release|Win32.Build.0 = Release|Win32
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Debug|x64.ActiveCfg = Debug|x64
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Debug|x64.Build.0 = Debug|x64
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Release|x64.ActiveCfg = Release|x64
- {98513F1C-C28D-4F03-99A8-88FD4BD707C7}.Release|x64.Build.0 = Release|x64
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Debug|Win32.Build.0 = Debug|Win32
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Release|Win32.ActiveCfg = Release|Win32
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Release|Win32.Build.0 = Release|Win32
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Debug|x64.ActiveCfg = Debug|x64
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Debug|x64.Build.0 = Debug|x64
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Release|x64.ActiveCfg = Release|x64
+ {047B99BF-F490-4938-BFDA-3697680EE8AB}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/trans/stmedit/sys/stmedit.vcxproj b/network/trans/stmedit/sys/stmedit.vcxproj
index bc3ef00b..0a3e35b0 100644
--- a/network/trans/stmedit/sys/stmedit.vcxproj
+++ b/network/trans/stmedit/sys/stmedit.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{98513F1C-C28D-4F03-99A8-88FD4BD707C7}</ProjectGuid>
+ <ProjectGuid>{047B99BF-F490-4938-BFDA-3697680EE8AB}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{72C54687-6A7C-47CA-9E90-E2D689DC07FF}</SampleGuid>
+ <SampleGuid>{E10325C3-F867-4F5D-BD53-F06AA0782EB0}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/trans/stmedit/sys/stmedit.vcxproj.Filters b/network/trans/stmedit/sys/stmedit.vcxproj.Filters
index 54528237..474bda82 100644
--- a/network/trans/stmedit/sys/stmedit.vcxproj.Filters
+++ b/network/trans/stmedit/sys/stmedit.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{C9744BA5-8ED9-44CA-83D6-EFDEDA84812B}</UniqueIdentifier>
+ <UniqueIdentifier>{3D06BA82-AC80-46D1-B13E-F01845AF9A9C}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{2B1C683F-EF24-453C-B303-9CAE8061F7C3}</UniqueIdentifier>
+ <UniqueIdentifier>{2D8AF9DE-2497-4917-9CCF-7C147BB503A4}</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>{FF447D8A-41FE-4980-B0AE-27782414E0C0}</UniqueIdentifier>
+ <UniqueIdentifier>{B9C19587-10DE-473E-AF48-2BDC5E84B3D7}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{A061D6F2-D701-4D44-9CAB-055FBD8E95A9}</UniqueIdentifier>
+ <UniqueIdentifier>{02D242A6-B147-4BA5-BCAA-8086413C2C7E}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/wlan/ihvsample/ihvsample.vcxproj b/network/wlan/ihvsample/ihvsample.vcxproj
index 8b0dde8a..8222ef43 100644
--- a/network/wlan/ihvsample/ihvsample.vcxproj
+++ b/network/wlan/ihvsample/ihvsample.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{C2DB15CB-342E-4E84-BFD0-5E839DE380DE}</ProjectGuid>
+ <ProjectGuid>{098D97D4-8A9D-4AEA-8BBB-B5330EC55613}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{D58AEDC0-211B-4E2E-B92B-D297D272865F}</SampleGuid>
+ <SampleGuid>{DD05EC52-7706-4D38-9EB6-596FBE935277}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/wlan/ihvsample/ihvsample.vcxproj.Filters b/network/wlan/ihvsample/ihvsample.vcxproj.Filters
index 7a93e51c..41235fc2 100644
--- a/network/wlan/ihvsample/ihvsample.vcxproj.Filters
+++ b/network/wlan/ihvsample/ihvsample.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{C3AD44B7-58F4-43D6-8928-4E57B6E0C023}</UniqueIdentifier>
+ <UniqueIdentifier>{2BFA3B7C-5457-42F0-AD10-BCFC2B55D74E}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{76ABC86D-F7B4-4BB5-8600-84AEDE01171B}</UniqueIdentifier>
+ <UniqueIdentifier>{3558D843-4C29-406E-87A5-E654CFF05FC4}</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>{25477ACB-EF62-4C7A-9AAC-8DF8119A6070}</UniqueIdentifier>
+ <UniqueIdentifier>{87382B19-B7AA-4E7F-AB03-0AE307E2059E}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj
index c4fe2319..cccce063 100644
--- a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj
+++ b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{A6B24475-C40B-4105-9896-6076AB284D92}</ProjectGuid>
+ <ProjectGuid>{5576312E-999E-4699-8F35-62D86C7E24B7}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{BFF15FF4-CA6C-4126-AE5C-43FEAC2373DA}</SampleGuid>
+ <SampleGuid>{CC668046-DE22-495D-BF12-86B0754ADBA4}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters
index 35f3326f..cd389088 100644
--- a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters
+++ b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{94F31788-CC51-4779-82A7-949AF23515AB}</UniqueIdentifier>
+ <UniqueIdentifier>{7A398CC0-086B-4682-9345-45CFA3130E1A}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{2AFE8613-F5FD-4251-B520-F5354B519860}</UniqueIdentifier>
+ <UniqueIdentifier>{FC7DD856-4C33-419F-B10E-5BF283171077}</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>{4C783C36-ECB3-435F-B739-9B522EEF773A}</UniqueIdentifier>
+ <UniqueIdentifier>{260AC1C3-C7B5-451F-B4BB-FA1C77706860}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/network/wlan/wlan.sln b/network/wlan/wlan.sln
index 4d92aa78..45081799 100644
--- a/network/wlan/wlan.sln
+++ b/network/wlan/wlan.sln
@@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsample", "Ihvsample", "{7ECA32F1-551B-4AF3-9726-A319C35A19D3}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsample", "Ihvsample", "{4F0C336F-C969-4455-9DC3-5AC3E4321343}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsampleui", "Ihvsampleui", "{42757992-DA8D-4434-9B9C-ED549C43BA83}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsampleui", "Ihvsampleui", "{A185AFB8-6C0D-42D1-AF6A-7790F0CFA38C}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ihvsample", "ihvsample\ihvsample.vcxproj", "{C2DB15CB-342E-4E84-BFD0-5E839DE380DE}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ihvsample", "ihvsample\ihvsample.vcxproj", "{098D97D4-8A9D-4AEA-8BBB-B5330EC55613}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IHVSampleUI", "ihvsampleui\IHVSampleUI.vcxproj", "{A6B24475-C40B-4105-9896-6076AB284D92}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IHVSampleUI", "ihvsampleui\IHVSampleUI.vcxproj", "{5576312E-999E-4699-8F35-62D86C7E24B7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,28 +19,28 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Debug|Win32.ActiveCfg = Debug|Win32
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Debug|Win32.Build.0 = Debug|Win32
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Release|Win32.ActiveCfg = Release|Win32
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Release|Win32.Build.0 = Release|Win32
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Debug|x64.ActiveCfg = Debug|x64
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Debug|x64.Build.0 = Debug|x64
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Release|x64.ActiveCfg = Release|x64
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE}.Release|x64.Build.0 = Release|x64
- {A6B24475-C40B-4105-9896-6076AB284D92}.Debug|Win32.ActiveCfg = Debug|Win32
- {A6B24475-C40B-4105-9896-6076AB284D92}.Debug|Win32.Build.0 = Debug|Win32
- {A6B24475-C40B-4105-9896-6076AB284D92}.Release|Win32.ActiveCfg = Release|Win32
- {A6B24475-C40B-4105-9896-6076AB284D92}.Release|Win32.Build.0 = Release|Win32
- {A6B24475-C40B-4105-9896-6076AB284D92}.Debug|x64.ActiveCfg = Debug|x64
- {A6B24475-C40B-4105-9896-6076AB284D92}.Debug|x64.Build.0 = Debug|x64
- {A6B24475-C40B-4105-9896-6076AB284D92}.Release|x64.ActiveCfg = Release|x64
- {A6B24475-C40B-4105-9896-6076AB284D92}.Release|x64.Build.0 = Release|x64
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Debug|Win32.ActiveCfg = Debug|Win32
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Debug|Win32.Build.0 = Debug|Win32
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Release|Win32.ActiveCfg = Release|Win32
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Release|Win32.Build.0 = Release|Win32
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Debug|x64.ActiveCfg = Debug|x64
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Debug|x64.Build.0 = Debug|x64
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Release|x64.ActiveCfg = Release|x64
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613}.Release|x64.Build.0 = Release|x64
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Debug|Win32.Build.0 = Debug|Win32
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Release|Win32.ActiveCfg = Release|Win32
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Release|Win32.Build.0 = Release|Win32
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Debug|x64.ActiveCfg = Debug|x64
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Debug|x64.Build.0 = Debug|x64
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Release|x64.ActiveCfg = Release|x64
+ {5576312E-999E-4699-8F35-62D86C7E24B7}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {C2DB15CB-342E-4E84-BFD0-5E839DE380DE} = {7ECA32F1-551B-4AF3-9726-A319C35A19D3}
- {A6B24475-C40B-4105-9896-6076AB284D92} = {42757992-DA8D-4434-9B9C-ED549C43BA83}
+ {098D97D4-8A9D-4AEA-8BBB-B5330EC55613} = {4F0C336F-C969-4455-9DC3-5AC3E4321343}
+ {5576312E-999E-4699-8F35-62D86C7E24B7} = {A185AFB8-6C0D-42D1-AF6A-7790F0CFA38C}
EndGlobalSection
EndGlobal
diff --git a/network/wsk/echosrv/echosrv.sln b/network/wsk/echosrv/echosrv.sln
index ce0d54fc..c21b2bf1 100644
--- a/network/wsk/echosrv/echosrv.sln
+++ b/network/wsk/echosrv/echosrv.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echosrv", "echosrv.vcxproj", "{FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echosrv", "echosrv.vcxproj", "{8E78BC0A-849D-4702-9E81-6F042E9390D6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Debug|Win32.ActiveCfg = Debug|Win32
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Debug|Win32.Build.0 = Debug|Win32
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Release|Win32.ActiveCfg = Release|Win32
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Release|Win32.Build.0 = Release|Win32
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Debug|x64.ActiveCfg = Debug|x64
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Debug|x64.Build.0 = Debug|x64
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Release|x64.ActiveCfg = Release|x64
- {FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}.Release|x64.Build.0 = Release|x64
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Debug|Win32.Build.0 = Debug|Win32
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Release|Win32.ActiveCfg = Release|Win32
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Release|Win32.Build.0 = Release|Win32
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Debug|x64.ActiveCfg = Debug|x64
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Debug|x64.Build.0 = Debug|x64
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Release|x64.ActiveCfg = Release|x64
+ {8E78BC0A-849D-4702-9E81-6F042E9390D6}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/network/wsk/echosrv/echosrv.vcxproj b/network/wsk/echosrv/echosrv.vcxproj
index 670bbe52..7ccd0d41 100644
--- a/network/wsk/echosrv/echosrv.vcxproj
+++ b/network/wsk/echosrv/echosrv.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{FFEE1E8D-35BB-4B3B-A59E-CC8D6DE39B5D}</ProjectGuid>
+ <ProjectGuid>{8E78BC0A-849D-4702-9E81-6F042E9390D6}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{356832D6-4003-4E04-991A-8885A867DFF1}</SampleGuid>
+ <SampleGuid>{0B7202D2-759C-425C-B5C5-FAE073649589}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/network/wsk/echosrv/echosrv.vcxproj.Filters b/network/wsk/echosrv/echosrv.vcxproj.Filters
index f0757e26..22d8f67f 100644
--- a/network/wsk/echosrv/echosrv.vcxproj.Filters
+++ b/network/wsk/echosrv/echosrv.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{7A5FF825-82E8-4B8C-A384-AFE5DDF0241F}</UniqueIdentifier>
+ <UniqueIdentifier>{F13DC512-BF50-42A6-A954-1C591BDB2EF6}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{7BD60EFA-8AB3-4BA8-8624-F096458DF6FD}</UniqueIdentifier>
+ <UniqueIdentifier>{239F589A-028C-461F-B097-D81EBE166FDF}</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>{02D631B3-0A60-43EF-A6F1-92F34CD3105C}</UniqueIdentifier>
+ <UniqueIdentifier>{724E389F-B1ED-4B03-A345-5153DC92B75C}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{81350963-697B-4F08-9AEA-8A5426D14C60}</UniqueIdentifier>
+ <UniqueIdentifier>{B9E8C901-FCC9-4990-990F-3D7CBBA234FC}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>