Compare commits

..

91 Commits
1.2g ... ver1.1

Author SHA1 Message Date
d2bf903a49 Update README.md 2018-12-06 08:35:58 +01:00
951c765dc1 Force SHA-256 digest for timestamp signatures
Comodo timestamp server defaults to SHA-1. To make sure timestamp
signatures are SHA-256, add appropriate signtool.exe flag.
2018-11-06 19:56:20 +01:00
a419991d9c Update translations and add Estonian translation 2018-11-06 19:56:20 +01:00
6136d3d1e9 Silence the missing shcore.dll warning on Windows 7 2018-11-06 19:56:20 +01:00
727ef20a8a Preset version to 1.1h 2018-11-06 19:55:19 +01:00
8ba410eb0b Update sub-modules 2018-09-30 16:53:22 +02:00
f9602b703e Make GUI DPI-aware 2018-09-17 11:45:50 +02:00
f981dfb16b Clean-up 2018-09-08 01:12:26 +02:00
a530618f7f Run MSBuild tasks in parallel 2018-09-07 12:55:28 +02:00
ba9c6d3419 Pre-set version to 1.1g 2018-09-07 12:41:23 +02:00
00bf771b5e Set version to 1.1f 2018-09-07 12:30:45 +02:00
56d545baba Add support for ARM64 platform 2018-09-07 12:29:25 +02:00
f637189b90 Fix mess from 59c5fc9d64 2018-09-05 14:12:29 +02:00
75c226a1ef Switch to Visual Studio 2017 2018-09-05 14:05:09 +02:00
96270389cf Stop using internal unique_ptr::_Myptr member 2018-09-05 13:59:09 +02:00
b4de1dd233 Register en_US language in nmake register
When "Language" setting is absent in registry, the initialization of
wxWidget localization raises asserts.
2018-09-05 12:50:28 +02:00
192e1b278c Add explicit constructors/operators to sanitizing_blob_(z)f
Otherwise the compiler might generate default ones - and delete them
too.
2018-09-04 15:49:48 +02:00
9f13059d66 Review implicit narrowing conversions 2018-09-04 15:46:46 +02:00
59c5fc9d64 Distinguish or merge variables with same names
...to resolve C4457 warnings.
2018-09-04 15:25:13 +02:00
1f61096c3d Force disable incremental linking
Incremental linking and reference optimization are mutually exclusive.
While VC2010 defaulted to non-incremental linking, this conflict was not
apparent.
2018-09-04 13:45:01 +02:00
5fbfc3dcc8 Fix incorrect template parameter tolerated by VC2010 2018-09-04 12:26:20 +02:00
ee012e30c5 Remove MFC dependency 2018-09-04 12:12:48 +02:00
1d0410af59 VS10Solution.sln => GEANTLink.sln 2018-09-04 11:37:19 +02:00
b5dd5080f5 Update MSIBuild sub-module 2018-09-04 11:29:51 +02:00
dd805e7199 Upgrade to wxWidgets 3.1.1 and wxFormBuilder 3.8.1 2018-09-03 13:55:51 +02:00
3220e36206 Switch to SHA-256 signing of final MSI files
This breaks support for Windows Vista.
2018-07-04 11:15:43 +02:00
4767fb9a13 Import translations from Transifex 2018-07-04 10:25:13 +02:00
4bfae4a27d Update sub-module 2018-07-04 10:25:05 +02:00
c42b080c31 Update translation template 2018-06-20 15:33:24 +02:00
bc7893804e Stop using <> parentheses to avoid XML/HTML markup
Transifex treats strings enclosed in <> as HTML.
2018-06-20 14:53:47 +02:00
4597e6c78f .gitignore output WLANManager.exe properly 2018-06-20 14:40:22 +02:00
6eb15355e9 Switch to SHA-256 signing 2018-06-20 14:39:05 +02:00
20a9222057 Preset version to 1.1e 2018-06-20 14:38:49 +02:00
36d4ff8757 Enable Italian GUI 2018-06-20 14:37:23 +02:00
a59147ca1c Update translations 2018-06-20 14:36:52 +02:00
5d6bd7aa52 Auto-detect devenv.com path 2018-06-20 14:36:22 +02:00
b1ea8465f4 Set version to 1.1d 2017-12-05 09:39:31 +01:00
0ecb5710b9 Translation update 2017-12-05 09:38:25 +01:00
4e136ecb28 Update wxExtend module 2017-12-05 09:37:49 +01:00
da4f300b47 Update WinStd submodule 2017-12-05 09:37:34 +01:00
e8f2cd237a Ignore post v1.1 folders
For easier switching between branches the non-v1.1 folders has been
.gitignored.
2017-12-05 09:36:39 +01:00
9eaa46e185 Distribution folder changed 2017-11-20 12:07:18 +01:00
067fc26b32 Issue with NULL-initialized new profile configuration fixed 2017-07-10 10:48:55 +02:00
97c788298e Translation update 2017-05-30 12:40:49 +02:00
3ba8cfb4c4 Sub-module update 2017-05-30 12:39:00 +02:00
1a89ca5e70 Version set to 1.1c 2017-05-22 09:29:50 +02:00
54d69aeec1 daea1bba62 reverted 2017-05-22 09:16:27 +02:00
54934a619e WMI\Autologger records not installed any more, since they caused feature completeness check trouble: MsiUseFeature() reports feature broken, when it is denied access to any component folder or registry key
# Conflicts:
#	Makefile
2017-05-22 09:16:27 +02:00
c5f514ac56 MsiUseFeature() returning INSTALLSTATE_BROKEN is tolerated in non-elevated process now 2017-05-22 08:42:16 +02:00
3edcf6e1fd WLANManager.exe now deployed as WLANManager-Win32.exe and WLANManager-x64.exe 2017-05-17 13:02:54 +02:00
9248c02db0 Documentation update 2017-05-17 12:51:16 +02:00
e2287c07c0 Sub-module update 2017-05-17 12:47:51 +02:00
b693f464d3 Secondary error message pop-up removed 2017-05-17 12:45:32 +02:00
753f55ffc0 WLANManager support for multiple wireless interfaces 2017-05-17 12:45:32 +02:00
920d0ab2f7 Indentation fix 2017-03-14 09:37:33 +01:00
d3b9a21c81 Version set to 1.1b 2017-02-24 12:16:02 +01:00
4281672d13 Clean-up 2017-02-23 12:14:20 +01:00
b3b292a848 Incorrect CoCreateInstance() result evaluation fixed
# Conflicts:
#	lib/WinStd
2017-02-23 11:14:32 +01:00
f39d192d91 Debugging-related exception in WlanUIEditProfile() resolved 2017-02-23 11:14:09 +01:00
5bd970b9e7 Locale is dynamic now, since wxLocale does not support re-initialization (when module is reused) 2017-02-22 09:43:57 +01:00
1b143cdbc9 Documentation update
# Conflicts:
#	lib/GTC_UI/include/GTC_UI.h
2017-02-22 09:43:57 +01:00
7b6e1b2438 New version of wxExtend 2017-02-20 10:59:13 +01:00
fc85c6e4bb Compilation of debug MSI files fixed 2017-02-20 10:07:46 +01:00
0bae6380c9 Documentation update 2017-02-13 07:59:50 +01:00
f8f32262c2 64-bit language detection removed from 32-bit MSI resolving ICE80 warning 2017-02-09 13:41:33 +01:00
f43488be98 Uninitialized enum higher bytes when reading as unsigned char fixed 2017-02-09 11:43:55 +01:00
f32d653bb8 eap::config split to eap::config and eap::packable 2017-02-07 09:38:01 +01:00
7e5c98ef39 Version set to 1.1a 2017-02-06 08:15:58 +01:00
af37909893 Translation update 2017-02-06 08:05:33 +01:00
3ff617a048 __DANGEROUS__LOG_CONFIDENTIAL_DATA is now 0/1 #defined 2017-02-02 13:58:21 +01:00
fc0bf839c2 EAP_INNER_EAPHOST is now 0/1 #defined 2017-02-02 13:51:17 +01:00
6ef00f3fc2 EAP_USE_NATIVE_CREDENTIAL_CACHE is now 0/1 #defined 2017-02-02 13:27:54 +01:00
8dcddb9ded Documentation update 2017-02-02 12:17:34 +01:00
d3b69976b9 EapHost credential prompt result evaluation fixed 2017-02-02 11:38:16 +01:00
e93a771e16 EapHost conditional compilation directive fixed 2017-02-02 11:38:16 +01:00
6689383824 Clean-up 2017-02-01 14:38:37 +01:00
58b9b1cf88 Clean-up 2017-02-01 13:12:25 +01:00
89139e824b EapHost peer initialization conditional now 2017-02-01 11:04:07 +01:00
e3904b31eb get_ui_context() upgraded 2017-02-01 10:54:31 +01:00
a6eac3beb4 Simple BLOB encryption/decryption added & comment updates 2017-02-01 10:28:04 +01:00
9e0fc09c40 Missing namespace added 2017-02-01 10:13:41 +01:00
8c0330f324 Clean-up 2017-01-31 13:57:33 +01:00
5bf303aac3 EAP errors now correctly displayed in Event Viewer 2017-01-31 12:38:01 +01:00
d2998c9210 Incorrect RFC quote removed 2017-01-31 11:07:55 +01:00
33fb62a256 Both event channels are registered using Makefile disabled now, to prevent Events.dll getting constantly locked by Event Log service.
# Conflicts:
#	Makefile
2017-01-31 10:45:48 +01:00
368afacbb9 "User ID" and "Password" labels vertically centered 2017-01-31 10:45:15 +01:00
65483351f4 Additional clarification of UI context handling 2017-01-30 14:52:08 +01:00
a3af704d8e Comment fixed 2017-01-30 14:52:08 +01:00
c7ed9c0845 EAP types look-up extended 2017-01-30 12:19:45 +01:00
67426d5db4 Distribution folder changed 2017-01-30 08:57:23 +01:00
ea15fde6c1 Version set to 1.1 2017-01-30 08:51:46 +01:00
166 changed files with 5382 additions and 9364 deletions

View File

@@ -30,26 +30,26 @@
<ProjectGuid>{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}</ProjectGuid> <ProjectGuid>{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>CredWrite</RootNamespace> <RootNamespace>CredWrite</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -57,21 +57,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -156,7 +156,7 @@
<ProjectReference Include="..\lib\TLS\build\TLS.vcxproj"> <ProjectReference Include="..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project> <Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

View File

@@ -116,8 +116,7 @@ static int CredWrite()
} }
_Use_decl_annotations_ int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ {
UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine); UNREFERENCED_PARAMETER(lpCmdLine);

View File

@@ -1,9 +1,7 @@
# CredWrite # CredWrite
Imports given credentials to Windows Credential Manager for GÉANTLink use Imports given credentials to Windows Credential Manager for GÉANTLink use
## Usage ## Usage
``` ```
CredWrite <username> <password> [<realm> [level]] CredWrite <username> <password> [<realm> [level]]
``` ```
@@ -15,15 +13,8 @@ CredWrite <username> <password> [<realm> [level]]
The credentials are stored to Windows Credential Manager in invoking user's roaming profile. The credentials are stored to Windows Credential Manager in invoking user's roaming profile.
### Return codes Return codes:
- -1 = Invalid parameters - -1 = Invalid parameters
- 0 = Success - 0 = Success
- 1 = Error parsing command line - 1 = Error parsing command line
- 2 = Error encrypting password or writing credentials - 2 = Error encrypting password or writing credentials
### Example
```
CredWrite dXNlckBjb250b3NvLmNvbQ== cGFzc3dvcmQxMjM= urn:RFC4282:realm:contoso.com 1
```

View File

@@ -29,7 +29,6 @@
#include <Windows.h> #include <Windows.h>
#include <eaptypes.h> // Must include after <Windows.h> #include <eaptypes.h> // Must include after <Windows.h>
#include <shellapi.h>
#include <tchar.h> #include <tchar.h>
#include <memory> #include <memory>

View File

@@ -794,7 +794,6 @@ EXCLUDE = \
EventMonitor\res \ EventMonitor\res \
lib\EAPBase_UI\res \ lib\EAPBase_UI\res \
lib\EapHost_UI\res \ lib\EapHost_UI\res \
lib\GTC_UI\res \
lib\TLS_UI\res \ lib\TLS_UI\res \
lib\TTLS_UI\res \ lib\TTLS_UI\res \
lib\WinStd \ lib\WinStd \

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid> <ProjectGuid>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid>
<RootNamespace>EAPTTLS</RootNamespace> <RootNamespace>EAPTTLS</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -147,9 +147,6 @@
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj"> <ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project> <Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\lib\GTC\build\GTC.vcxproj">
<Project>{114a70bb-8698-4a0c-8c90-58f22edd8129}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj"> <ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project> <Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference> </ProjectReference>
@@ -162,7 +159,7 @@
<ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj"> <ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj">
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project> <Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid> <ProjectGuid>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid>
<RootNamespace>EAPTTLSUI</RootNamespace> <RootNamespace>EAPTTLSUI</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -153,12 +153,6 @@
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj"> <ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project> <Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\lib\GTC\build\GTC.vcxproj">
<Project>{114a70bb-8698-4a0c-8c90-58f22edd8129}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\GTC_UI\build\GTC_UI.vcxproj">
<Project>{34680813-3a52-46fb-b5a8-1e4bbf770855}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj"> <ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project> <Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference> </ProjectReference>
@@ -183,10 +177,10 @@
<ProjectReference Include="..\..\lib\TTLS_UI\build\TTLS_UI.vcxproj"> <ProjectReference Include="..\..\lib\TTLS_UI\build\TTLS_UI.vcxproj">
<Project>{42f0f0f4-c928-4860-a4e4-94991c2c3d90}</Project> <Project>{42f0f0f4-c928-4860-a4e4-94991c2c3d90}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\lib\wxExtend\build\wxExtendLib-16.0.vcxproj"> <ProjectReference Include="..\..\lib\wxExtend\build\wxExtendLib-15.0.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project> <Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

File diff suppressed because it is too large Load Diff

View File

@@ -903,7 +903,7 @@ msgstr "Използвай &празна външна самоличност"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Пропусни моето потребителско име и използвай само @mydomain.org" msgstr "Пропусни моето потребителско име и използвай само @mydomain.org"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -1,7 +1,6 @@
# Translators: # Translators:
# eduki <ecercos@xtec.cat>, 2017
# Simon Rozman <simon@rozman.si>, 2018 # Simon Rozman <simon@rozman.si>, 2018
# eduki <ecercos@xtec.cat>, 2018
# jmontane, 2019
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@@ -9,7 +8,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n" "Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2018-06-20 15:30+0200\n" "POT-Creation-Date: 2018-06-20 15:30+0200\n"
"PO-Revision-Date: 2016-08-25 06:18+0000\n" "PO-Revision-Date: 2016-08-25 06:18+0000\n"
"Last-Translator: jmontane, 2019\n" "Last-Translator: Simon Rozman <simon@rozman.si>, 2018\n"
"Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n" "Language-Team: Catalan (Spain) (https://www.transifex.com/eduroam_devel/teams/11799/ca_ES/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -117,13 +116,13 @@ msgstr "Ha fallat l'esborrat de credencials (error %u)."
#: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:854 #: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:854
#, c-format #, c-format
msgid "(error %u)" msgid "(error %u)"
msgstr "(error %u)" msgstr ""
#: master/lib/EAPBase_UI/include/EAP_UI.h:859 #: master/lib/EAPBase_UI/include/EAP_UI.h:859
#: ver1.0/lib/EAPBase_UI/include/EAP_UI.h:792 #: ver1.0/lib/EAPBase_UI/include/EAP_UI.h:792
#: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:858 #: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:858
msgid "(error)" msgid "(error)"
msgstr "(error)" msgstr ""
#: master/lib/EAPBase_UI/include/EAP_UI.h:870 #: master/lib/EAPBase_UI/include/EAP_UI.h:870
#: master/lib/EAPBase_UI/include/EAP_UI.h:879 #: master/lib/EAPBase_UI/include/EAP_UI.h:879
@@ -144,7 +143,7 @@ msgstr "(buit)"
#: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:869 #: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:869
#: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:878 #: ver1.1/lib/EAPBase_UI/include/EAP_UI.h:878
msgid "(blank ID)" msgid "(blank ID)"
msgstr "(ID buit)" msgstr ""
#: master/lib/EAPBase_UI/include/EAP_UI.h:919 #: master/lib/EAPBase_UI/include/EAP_UI.h:919
#: ver1.0/lib/EAPBase_UI/include/EAP_UI.h:854 #: ver1.0/lib/EAPBase_UI/include/EAP_UI.h:854
@@ -174,7 +173,7 @@ msgstr "+"
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:38 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:38
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:38 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider" msgid "Adds new provider"
msgstr "Afegeix un proveïdor nou" msgstr "Afegir nou proveidor"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:42 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:42
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:42 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:42
@@ -186,7 +185,7 @@ msgstr "-"
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:43 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:43
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:43 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider" msgid "Removes selected provider"
msgstr "Esborra el proveïdor seleccionat" msgstr "Esborrar proveidor seleccionat"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:47 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:47
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:47 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:47
@@ -243,7 +242,7 @@ msgstr ""
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:272 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:272
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:272 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:272
msgid "&Clear Credentials" msgid "&Clear Credentials"
msgstr "&Esborra les credencials" msgstr "&Esborrar Credencials"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:273 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:273
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:273 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:273
@@ -262,7 +261,7 @@ msgstr ""
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:277 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:277
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:316 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:316
msgid "&Set Credentials..." msgid "&Set Credentials..."
msgstr "&Desa les credencials..." msgstr "&Desar Credencials..."
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:278 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:278
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:317 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:317
@@ -305,7 +304,7 @@ msgstr "ID d'usuari i contrasenya"
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:369 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:369
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:369 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:369
msgid "Please provide your user ID and password." msgid "Please provide your user ID and password."
msgstr "Introduïu el vostre ID d'usuari i contrasenya" msgstr "Sisplau introduiu el vostre ID d'usuari i contrasenya"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:379 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:379
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:443 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:443
@@ -320,7 +319,7 @@ msgstr "ID d'usuari:"
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:384 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:384
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)" msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr "" msgstr ""
"Introduïu el vostre identificador aquí (identificador@domini.org, " "Introduiu el vostre identificador aquí (identificador@domini.org, "
"DOMINI\\identificador, etc.)" "DOMINI\\identificador, etc.)"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:388 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:388
@@ -333,7 +332,7 @@ msgstr "Contrasenya:"
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:393 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:393
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:393 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:393
msgid "Enter your password here" msgid "Enter your password here"
msgstr "Introduïu la vostra contrasenya aquí" msgstr "Introduiu la vostra contrasenya aquí"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:423 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:423
msgid "User ID" msgid "User ID"
@@ -341,7 +340,7 @@ msgstr "ID d'usuari"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:433 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:433
msgid "Please provide your user ID." msgid "Please provide your user ID."
msgstr "Introduïu el vostre ID." msgstr "Sisplau introduïu el vostre ID."
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:473 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:473
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:424 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:424
@@ -378,7 +377,7 @@ msgstr ""
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:451 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:451
#: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:451 #: ver1.1/lib/EAPBase_UI/res/wxEAP_UI.cpp:451
msgid "(Keep it short, please)" msgid "(Keep it short, please)"
msgstr "(Sigueu breu)" msgstr "(Sigueu breus, sisplau)"
#: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:510 #: master/lib/EAPBase_UI/res/wxEAP_UI.cpp:510
#: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:461 #: ver1.0/lib/EAPBase_UI/res/wxEAP_UI.cpp:461
@@ -619,7 +618,8 @@ msgstr ""
#: ver1.0/lib/EAPBase_UI/src/EAP_UI.cpp:283 #: ver1.0/lib/EAPBase_UI/src/EAP_UI.cpp:283
#: ver1.1/lib/EAPBase_UI/src/EAP_UI.cpp:251 #: ver1.1/lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid "Please, reconsider necessity to enter your credentials." msgid "Please, reconsider necessity to enter your credentials."
msgstr "Reconsidereu la necessitat d'introduir les vostres credencials." msgstr ""
"Sisplau, reconsidereu la necessitat d'introduir les vostres credencials."
#: master/lib/EapHost_UI/res/wxEapHost_UI.cpp:17 #: master/lib/EapHost_UI/res/wxEapHost_UI.cpp:17
#: ver1.1/lib/EapHost_UI/res/wxEapHost_UI.cpp:17 #: ver1.1/lib/EapHost_UI/res/wxEapHost_UI.cpp:17
@@ -667,11 +667,11 @@ msgstr "Repte GTC"
#: master/lib/GTC_UI/res/wxGTC_UI.cpp:26 #: master/lib/GTC_UI/res/wxGTC_UI.cpp:26
msgid "Please provide your response." msgid "Please provide your response."
msgstr "Indiqueu la vostra resposta." msgstr "Faciliteu sisplau la vostra resposta."
#: master/lib/GTC_UI/res/wxGTC_UI.cpp:38 #: master/lib/GTC_UI/res/wxGTC_UI.cpp:38
msgid "Server challenge" msgid "Server challenge"
msgstr "Repte del servidor" msgstr "Repte del Servidor"
#: master/lib/GTC_UI/res/wxGTC_UI.cpp:43 #: master/lib/GTC_UI/res/wxGTC_UI.cpp:43
msgid "Enter your response here" msgid "Enter your response here"
@@ -752,7 +752,7 @@ msgstr ""
#: master/lib/TLS_UI/res/wxTLS_UI.cpp:52 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:52 #: master/lib/TLS_UI/res/wxTLS_UI.cpp:52 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:52
#: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:52 #: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..." msgid "Add CA from File..."
msgstr "Afegeix CA des d'un fitxer..." msgstr "Afegir CA des d'un fitxer..."
#: master/lib/TLS_UI/res/wxTLS_UI.cpp:53 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:53 #: master/lib/TLS_UI/res/wxTLS_UI.cpp:53 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:53
#: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:53 #: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:53
@@ -762,7 +762,7 @@ msgstr "Afegeix una nova autoritat de certificació des de d'un arxiu"
#: master/lib/TLS_UI/res/wxTLS_UI.cpp:57 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:57 #: master/lib/TLS_UI/res/wxTLS_UI.cpp:57 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:57
#: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:57 #: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA" msgid "&Remove CA"
msgstr "&Elimina CA" msgstr "&Eliminar CA"
#: master/lib/TLS_UI/res/wxTLS_UI.cpp:58 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:58 #: master/lib/TLS_UI/res/wxTLS_UI.cpp:58 ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:58
#: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:58 #: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:58
@@ -810,7 +810,7 @@ msgstr "Certificat de client per a l'autenticació"
#: ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:142 #: ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:142
#: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:142 #: ver1.1/lib/TLS_UI/res/wxTLS_UI.cpp:142
msgid "Custom &identity:" msgid "Custom &identity:"
msgstr "Personalitza la &identitat:" msgstr "Personalitzar la &identitat:"
#: master/lib/TLS_UI/res/wxTLS_UI.cpp:147 #: master/lib/TLS_UI/res/wxTLS_UI.cpp:147
#: ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:147 #: ver1.0/lib/TLS_UI/res/wxTLS_UI.cpp:147
@@ -825,7 +825,7 @@ msgstr ""
#: master/lib/TLS_UI/src/TLS_UI.cpp:252 ver1.0/lib/TLS_UI/src/TLS_UI.cpp:246 #: master/lib/TLS_UI/src/TLS_UI.cpp:252 ver1.0/lib/TLS_UI/src/TLS_UI.cpp:246
#: ver1.1/lib/TLS_UI/src/TLS_UI.cpp:252 #: ver1.1/lib/TLS_UI/src/TLS_UI.cpp:252
msgid "Add Certificate" msgid "Add Certificate"
msgstr "Afegeix un certificat" msgstr "Afegir Certificat"
#: master/lib/TLS_UI/src/TLS_UI.cpp:253 ver1.0/lib/TLS_UI/src/TLS_UI.cpp:247 #: master/lib/TLS_UI/src/TLS_UI.cpp:253 ver1.0/lib/TLS_UI/src/TLS_UI.cpp:247
#: ver1.1/lib/TLS_UI/src/TLS_UI.cpp:253 #: ver1.1/lib/TLS_UI/src/TLS_UI.cpp:253
@@ -892,7 +892,7 @@ msgstr "Utilitza una identitat externa &buida"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Omet el meu identificador i utilitza només @elmeudomini.org" msgstr "Omet el meu identificador i utilitza només @elmeudomini.org"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -847,7 +847,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -897,7 +897,7 @@ msgstr "Leeren N&utzernamen verwenden"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
"Im unverschlüsselten Teil den Nutzernamen weglassen und nur den @domain Teil" "Im unverschlüsselten Teil den Nutzernamen weglassen und nur den @domain Teil"
" senden" " senden"

View File

@@ -907,7 +907,7 @@ msgstr "Χρησιμοποιήστε &κενή εξωτερική ταυτότη
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
"Παραλείψτε το όνομα χρήστη μου και χρησιμοποιήστε μόνο το @mydomain.org" "Παραλείψτε το όνομα χρήστη μου και χρησιμοποιήστε μόνο το @mydomain.org"

View File

@@ -901,7 +901,7 @@ msgstr "Usar una identidad externa &vacía"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Omitir mi nombre de usuario y usar @midominio.org sólo" msgstr "Omitir mi nombre de usuario y usar @midominio.org sólo"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -1,7 +1,7 @@
# Translators: # Translators:
# Simon Rozman <simon@rozman.si>, 2018 # Simon Rozman <simon@rozman.si>, 2018
# Indrek Rokk <indrek.rokk@eenet.ee>, 2018 # Indrek Rokk <indrek.rokk@eenet.ee>, 2018
# Anne M <anne@eenet.ee>, 2019 # Anne M <anne@eenet.ee>, 2018
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: EAPMethods\n" "Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2018-06-20 15:30+0200\n" "POT-Creation-Date: 2018-06-20 15:30+0200\n"
"PO-Revision-Date: 2016-08-25 06:18+0000\n" "PO-Revision-Date: 2016-08-25 06:18+0000\n"
"Last-Translator: Anne M <anne@eenet.ee>, 2019\n" "Last-Translator: Anne M <anne@eenet.ee>, 2018\n"
"Language-Team: Estonian (https://www.transifex.com/eduroam_devel/teams/11799/et/)\n" "Language-Team: Estonian (https://www.transifex.com/eduroam_devel/teams/11799/et/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -94,7 +94,7 @@ msgstr "%s kasutajakonto andmed"
#, c-format #, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)" msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr "" msgstr ""
"Viga kasutajakonto andmete kirjutamisel kasutajakonto halduris (Credential " "Viga kasutajakonto andmete kirjustamisel kasutajakonto halduris (Credential "
"Manager): %hs (viga %u)" "Manager): %hs (viga %u)"
#: master/lib/EAPBase_UI/include/EAP_UI.h:796 #: master/lib/EAPBase_UI/include/EAP_UI.h:796
@@ -888,7 +888,7 @@ msgstr "Kasuta t&ühja välist identiteeti"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Jäta mu kasutajanimi ära ja kasuta ainult @minudomeeni" msgstr "Jäta mu kasutajanimi ära ja kasuta ainult @minudomeeni"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -883,7 +883,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
"Koristi samo @mojadomena.hr (ovo nije podržano za korisnike iz sustava " "Koristi samo @mojadomena.hr (ovo nije podržano za korisnike iz sustava "
"AAI@EduHr)" "AAI@EduHr)"

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -895,7 +895,7 @@ msgstr "Usa una identità esterna &vuota"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Ometti il mio nome utente e usa solo @mydomain.org" msgstr "Ometti il mio nome utente e usa solo @mydomain.org"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -847,7 +847,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -882,7 +882,7 @@ msgstr "Naudoti &tuščią išorinę tapatybę"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Praleisti mano naudotojo vardą ir naudoti tik @domenas.lt" msgstr "Praleisti mano naudotojo vardą ir naudoti tik @domenas.lt"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -885,7 +885,7 @@ msgstr "Bruk &tom ytre identitet"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Utelat mitt brukernavn og bruk kun @mydomian.org" msgstr "Utelat mitt brukernavn og bruk kun @mydomian.org"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -894,7 +894,7 @@ msgstr "Użyj &pustego identyfikatora zewnętrznego"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Pomiń mój identyfikator i użyj tylko @mydomain.org" msgstr "Pomiń mój identyfikator i użyj tylko @mydomain.org"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -847,7 +847,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -882,7 +882,7 @@ msgstr "Uporabi prazno zunanjo id&entiteto"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Izpusti moje uporabniško ime in uporabi samo @mojadomena.si" msgstr "Izpusti moje uporabniško ime in uporabi samo @mojadomena.si"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -896,7 +896,7 @@ msgstr "Koristi &empty spoljni identitet"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "Izostavi korisničko ime i koristi samo @mojdomen.ac.rs" msgstr "Izostavi korisničko ime i koristi samo @mojdomen.ac.rs"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -848,7 +848,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

View File

@@ -846,7 +846,7 @@ msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.0/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
#: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41 #: ver1.1/lib/TTLS_UI/res/wxTTLS_UI.cpp:41
msgid "Omit my user name and use @mydomain.org only" msgid "Ommit my user name and use @mydomain.org only"
msgstr "" msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48 #: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

File diff suppressed because it is too large Load Diff

View File

@@ -76,8 +76,7 @@ BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID l
/// ///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx) /// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
/// ///
_Use_decl_annotations_ VOID WINAPI EapPeerFreeMemory(_In_ void *pUIContextData)
VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
{ {
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__)); event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
@@ -91,8 +90,7 @@ VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
/// ///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx) /// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
/// ///
_Use_decl_annotations_ VOID WINAPI EapPeerFreeErrorMemory(_In_ EAP_ERROR *ppEapError)
VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
{ {
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__)); event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
@@ -106,14 +104,13 @@ VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
/// ///
/// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx) /// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx)
/// ///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigXml2Blob( DWORD WINAPI EapPeerConfigXml2Blob(
DWORD dwFlags, _In_ DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType, _In_ EAP_METHOD_TYPE eapMethodType,
IXMLDOMDocument2 *pConfigDoc, _In_ IXMLDOMDocument2 *pConfigDoc,
BYTE **pConnectionDataOut, _Out_ BYTE **pConnectionDataOut,
DWORD *pdwConnectionDataOutSize, _Out_ DWORD *pdwConnectionDataOutSize,
EAP_ERROR **ppEapError) _Out_ EAP_ERROR **ppEapError)
{ {
DWORD dwResult = ERROR_SUCCESS; DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult)); event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
@@ -121,35 +118,42 @@ DWORD WINAPI EapPeerConfigXml2Blob(
//Sleep(10000); //Sleep(10000);
#endif #endif
// Initialize output parameters.
if (pConnectionDataOut)
*pConnectionDataOut = NULL;
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppEapError)
*ppEapError = NULL;
// Parameter check // Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != 67532) if (!ppEapError)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConfigDoc || !pConnectionDataOut || !pdwConnectionDataOutSize)
return dwResult = ERROR_INVALID_PARAMETER; return dwResult = ERROR_INVALID_PARAMETER;
// Configure XML selection namespaces used. assert(!*ppEapError);
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// <Config> if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
com_obj<IXMLDOMElement> pXmlElConfig; g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig))) else if (eapMethodType.dwAuthorId != 67532)
return dwResult = g_peer.log_error(ppEapError, ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element.")); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConfigDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConfigDoc is NULL.")));
else if (!pConnectionDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionDataOut is NULL.")));
else if (!pdwConnectionDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwConnectionDataOutSize is NULL.")));
else {
// Configure XML selection namespaces used.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
// Load configuration. // <Config>
try { com_obj<IXMLDOMElement> pXmlElConfig;
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize); if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig))) {
} catch (std::exception &err) { g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element.")));
dwResult = g_peer.log_error(ppEapError, err); return dwResult;
} catch (...) { }
dwResult = ERROR_INVALID_DATA;
// Load configuration.
try {
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
} }
return dwResult; return dwResult;
@@ -163,14 +167,13 @@ DWORD WINAPI EapPeerConfigXml2Blob(
/// ///
/// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx) /// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx)
/// ///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigBlob2Xml( DWORD WINAPI EapPeerConfigBlob2Xml(
DWORD dwFlags, _In_ DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType, _In_ EAP_METHOD_TYPE eapMethodType,
const BYTE *pConnectionData, _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
DWORD dwConnectionDataSize, _In_ DWORD dwConnectionDataSize,
IXMLDOMDocument2 **ppConfigDoc, _Out_ IXMLDOMDocument2 **ppConfigDoc,
EAP_ERROR **ppEapError) _Out_ EAP_ERROR **ppEapError)
{ {
DWORD dwResult = ERROR_SUCCESS; DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult)); event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
@@ -178,54 +181,67 @@ DWORD WINAPI EapPeerConfigBlob2Xml(
//Sleep(10000); //Sleep(10000);
#endif #endif
// Initialize output parameters.
if (ppConfigDoc)
*ppConfigDoc = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check // Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != 67532) if (!ppEapError)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !ppConfigDoc)
return dwResult = ERROR_INVALID_PARAMETER; return dwResult = ERROR_INVALID_PARAMETER;
HRESULT hr; assert(!*ppEapError);
// Create configuration XML document. if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
com_obj<IXMLDOMDocument2> pConfigDoc; g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)eapMethodType.eapType.type, (int)EAPMETHOD_TYPE).c_str()));
if (FAILED(hr = pConfigDoc.create(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER))) else if (eapMethodType.dwAuthorId != 67532)
return dwResult = g_peer.log_error(ppEapError, HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error creating XML document.")); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!ppConfigDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppConfigDoc is NULL.")));
else {
HRESULT hr;
pConfigDoc->put_async(VARIANT_FALSE); // Create configuration XML document.
com_obj<IXMLDOMDocument2> pConfigDoc;
if (FAILED(hr = pConfigDoc.create(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error creating XML document.")));
return dwResult;
}
// Load empty XML configuration. pConfigDoc->put_async(VARIANT_FALSE);
VARIANT_BOOL isSuccess = VARIANT_FALSE;
if (FAILED((hr = pConfigDoc->loadXML(L"<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"></Config>", &isSuccess))))
return dwResult = g_peer.log_error(ppEapError, HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error loading XML document template."));
if (!isSuccess)
return dwResult = g_peer.log_error(ppEapError, ERROR_XML_PARSE_ERROR, _T(__FUNCTION__) _T(" Loading XML template failed."));
// Configure XML selection namespaces used. // Load empty XML configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\"")); VARIANT_BOOL isSuccess = VARIANT_FALSE;
if (FAILED((hr = pConfigDoc->loadXML(L"<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"></Config>", &isSuccess)))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error loading XML document template.")));
return dwResult;
}
if (!isSuccess) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_XML_PARSE_ERROR, _T(__FUNCTION__) _T(" Loading XML template failed.")));
return dwResult;
}
// Select <Config> node. // Configure XML selection namespaces used.
com_obj<IXMLDOMNode> pXmlElConfig; pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\" xmlns:eaphostconfig=\"http://www.microsoft.com/provisioning/EapHostConfig\""));
if (FAILED(eapxml::select_node(pConfigDoc, bstr(L"eaphostconfig:Config"), pXmlElConfig)))
return dwResult = g_peer.log_error(ppEapError, ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <Config> element."));
// Save configuration. // Select <Config> node.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\"")); com_obj<IXMLDOMNode> pXmlElConfig;
try { if (FAILED(eapxml::select_node(pConfigDoc, bstr(L"eaphostconfig:Config"), pXmlElConfig))) {
g_peer.config_blob2xml(dwFlags, pConnectionData, dwConnectionDataSize, pConfigDoc, pXmlElConfig); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <Config> element.")));
} catch (std::exception &err) { return dwResult;
dwResult = g_peer.log_error(ppEapError, err); }
} catch (...) {
return dwResult = ERROR_INVALID_DATA; // Save configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.config_blob2xml(dwFlags, pConnectionData, dwConnectionDataSize, pConfigDoc, pXmlElConfig);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
return dwResult = (*ppEapError)->dwWinError;
} catch (...) {
return dwResult = ERROR_INVALID_DATA;
}
*ppConfigDoc = pConfigDoc.detach();
} }
*ppConfigDoc = pConfigDoc.detach();
return dwResult; return dwResult;
} }
@@ -235,16 +251,15 @@ DWORD WINAPI EapPeerConfigBlob2Xml(
/// ///
/// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx) /// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx)
/// ///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeConfigUI( DWORD WINAPI EapPeerInvokeConfigUI(
const EAP_METHOD_TYPE *pEapType, _In_ const EAP_METHOD_TYPE *pEapType,
HWND hwndParent, _In_ HWND hwndParent,
DWORD dwFlags, _In_ DWORD dwFlags,
DWORD dwConnectionDataInSize, _In_ DWORD dwConnectionDataInSize,
const BYTE *pConnectionDataIn, _In_count_(dwConnectionDataInSize) const BYTE *pConnectionDataIn,
DWORD *pdwConnectionDataOutSize, _Out_ DWORD *pdwConnectionDataOutSize,
BYTE **ppConnectionDataOut, _Out_ BYTE **ppConnectionDataOut,
EAP_ERROR **ppEapError) _Out_ EAP_ERROR **ppEapError)
{ {
UNREFERENCED_PARAMETER(dwFlags); UNREFERENCED_PARAMETER(dwFlags);
DWORD dwResult = ERROR_SUCCESS; DWORD dwResult = ERROR_SUCCESS;
@@ -254,26 +269,33 @@ DWORD WINAPI EapPeerInvokeConfigUI(
//Sleep(10000); //Sleep(10000);
#endif #endif
// Initialize output parameters.
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppConnectionDataOut)
*ppConnectionDataOut = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check // Parameter check
if (!pEapType || !pConnectionDataIn && dwConnectionDataInSize || !pdwConnectionDataOutSize || !ppConnectionDataOut) if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER; return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != 67532)
return dwResult = ERROR_NOT_SUPPORTED;
try { assert(!*ppEapError);
g_peer.invoke_config_ui(hwndParent, pConnectionDataIn, dwConnectionDataInSize, ppConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) { if (!pEapType)
dwResult = g_peer.log_error(ppEapError, err); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
} catch (...) { else if (pEapType->eapType.type != EAPMETHOD_TYPE)
dwResult = ERROR_INVALID_DATA; g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pConnectionDataIn && dwConnectionDataInSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionDataIn is NULL.")));
else if (!pdwConnectionDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwConnectionDataOutSize is NULL.")));
else if (!ppConnectionDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppConnectionDataOut is NULL.")));
else {
try {
g_peer.invoke_config_ui(hwndParent, pConnectionDataIn, dwConnectionDataInSize, ppConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
} }
return dwResult; return dwResult;
@@ -285,19 +307,18 @@ DWORD WINAPI EapPeerInvokeConfigUI(
/// ///
/// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx) /// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx)
/// ///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeIdentityUI( DWORD WINAPI EapPeerInvokeIdentityUI(
const EAP_METHOD_TYPE *pEapType, _In_ const EAP_METHOD_TYPE *pEapType,
DWORD dwFlags, _In_ DWORD dwFlags,
HWND hwndParent, _In_ HWND hwndParent,
DWORD dwConnectionDataSize, _In_ DWORD dwConnectionDataSize,
const BYTE *pConnectionData, _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
DWORD dwUserDataSize, _In_ DWORD dwUserDataSize,
const BYTE *pUserData, _In_count_(dwUserDataSize) const BYTE *pUserData,
DWORD *pdwUserDataOutSize, _Out_ DWORD *pdwUserDataOutSize,
BYTE **ppUserDataOut, _Out_ BYTE **ppUserDataOut,
LPWSTR *ppwszIdentity, _Out_ LPWSTR *ppwszIdentity,
EAP_ERROR **ppEapError) _Out_ EAP_ERROR **ppEapError)
{ {
DWORD dwResult = ERROR_SUCCESS; DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult)); event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
@@ -306,28 +327,37 @@ DWORD WINAPI EapPeerInvokeIdentityUI(
//Sleep(10000); //Sleep(10000);
#endif #endif
// Initialize output parameters.
if (pdwUserDataOutSize)
*pdwUserDataOutSize = 0;
if (ppUserDataOut)
*ppUserDataOut = NULL;
if (ppwszIdentity)
*ppwszIdentity = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check // Parameter check
if (!pEapType || !pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pdwUserDataOutSize || !ppUserDataOut || !ppwszIdentity) if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER; dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != 67532)
return dwResult = ERROR_NOT_SUPPORTED;
try { assert(!*ppEapError);
g_peer.invoke_identity_ui(hwndParent, dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, ppwszIdentity);
} catch (std::exception &err) { if (!pEapType)
dwResult = g_peer.log_error(ppEapError, err); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
} catch (...) { else if (pEapType->eapType.type != EAPMETHOD_TYPE)
dwResult = ERROR_INVALID_DATA; g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pConnectionData && dwConnectionDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pConnectionData is NULL.")));
else if (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!pdwUserDataOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUserDataOutSize is NULL.")));
else if (!ppUserDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUserDataOut is NULL.")));
else if (!ppwszIdentity)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppwszIdentity is NULL.")));
else {
try {
g_peer.invoke_identity_ui(hwndParent, dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, ppwszIdentity);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
} }
return dwResult; return dwResult;
@@ -339,15 +369,14 @@ DWORD WINAPI EapPeerInvokeIdentityUI(
/// ///
/// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx) /// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx)
/// ///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeInteractiveUI( DWORD WINAPI EapPeerInvokeInteractiveUI(
const EAP_METHOD_TYPE *pEapType, _In_ const EAP_METHOD_TYPE *pEapType,
HWND hwndParent, _In_ HWND hwndParent,
DWORD dwUIContextDataSize, _In_ DWORD dwUIContextDataSize,
const BYTE *pUIContextData, _In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
DWORD *pdwDataFromInteractiveUISize, _Out_ DWORD *pdwDataFromInteractiveUISize,
BYTE **ppDataFromInteractiveUI, _Out_ BYTE **ppDataFromInteractiveUI,
EAP_ERROR **ppEapError) _Out_ EAP_ERROR **ppEapError)
{ {
DWORD dwResult = ERROR_SUCCESS; DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult)); event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
@@ -356,26 +385,33 @@ DWORD WINAPI EapPeerInvokeInteractiveUI(
//Sleep(10000); //Sleep(10000);
#endif #endif
// Initialize output parameters.
if (pdwDataFromInteractiveUISize)
*pdwDataFromInteractiveUISize = 0;
if (ppDataFromInteractiveUI)
*ppDataFromInteractiveUI = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check // Parameter check
if (!pEapType || !pUIContextData && dwUIContextDataSize || !pdwDataFromInteractiveUISize || !ppDataFromInteractiveUI) if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER; return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != 67532)
return dwResult = ERROR_NOT_SUPPORTED;
try { assert(!*ppEapError);
g_peer.invoke_interactive_ui(hwndParent, pUIContextData, dwUIContextDataSize, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
} catch (std::exception &err) { if (!pEapType)
dwResult = g_peer.log_error(ppEapError, err); g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
} catch (...) { else if (pEapType->eapType.type != EAPMETHOD_TYPE)
dwResult = ERROR_INVALID_DATA; g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" Input EAP type (%d) does not match the supported EAP type (%d)."), (int)pEapType->eapType.type, (int)EAPMETHOD_TYPE).c_str()));
else if (pEapType->dwAuthorId != 67532)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_SUPPORTED, wstring_printf(_T(__FUNCTION__) _T(" EAP author (%d) does not match the supported author (%d)."), (int)pEapType->dwAuthorId, (int)67532).c_str()));
else if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
else if (!pdwDataFromInteractiveUISize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwDataFromInteractiveUISize is NULL.")));
else if (!ppDataFromInteractiveUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppDataFromInteractiveUI is NULL.")));
else {
try {
g_peer.invoke_interactive_ui(hwndParent, pUIContextData, dwUIContextDataSize, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
} }
return dwResult; return dwResult;

View File

@@ -28,7 +28,6 @@
// wxEventMonitorApp // wxEventMonitorApp
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#pragma warning(suppress: 28251)
wxIMPLEMENT_APP(wxEventMonitorApp); wxIMPLEMENT_APP(wxEventMonitorApp);

View File

@@ -132,8 +132,11 @@ VOID WINAPI wxEventTraceProcessorThread::EventRecordCallback(_In_ PEVENT_RECORD
wxASSERT_MSG(pEvent->UserContext, wxT("thread is NULL")); wxASSERT_MSG(pEvent->UserContext, wxT("thread is NULL"));
wxEventTraceProcessorThread *_this = ((wxEventTraceProcessorThread*)pEvent->UserContext); wxEventTraceProcessorThread *_this = ((wxEventTraceProcessorThread*)pEvent->UserContext);
if (!_this || _this->TestDestroy())
if (_this->TestDestroy()) {
// Event processing is pending destruction.
return; return;
}
_this->m_parent->QueueEvent(new wxETWEvent(wxEVT_ETW_EVENT, *pEvent)); _this->m_parent->QueueEvent(new wxETWEvent(wxEVT_ETW_EVENT, *pEvent));
} }
@@ -175,7 +178,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
m_col_format_width[0] = 26; m_col_format_width[0] = 26;
m_col_format_width[1] = 5; m_col_format_width[1] = 5;
m_col_format_width[2] = 5; m_col_format_width[2] = 5;
m_col_format_width[3] = std::max<size_t>(std::max<size_t>(_countof("EapHost"), _countof("Schannel")), _countof(PRODUCT_NAME_STR)) - 1; m_col_format_width[3] = std::max<int>(std::max<int>(_countof("EapHost"), _countof("Schannel")), _countof(PRODUCT_NAME_STR)) - 1;
m_col_format_width[4] = 0; m_col_format_width[4] = 0;
// Prepare all possible item attributes. // Prepare all possible item attributes.
@@ -216,11 +219,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
properties->Wnode.BufferSize = ulSize; properties->Wnode.BufferSize = ulSize;
properties->Wnode.Flags = WNODE_FLAG_TRACED_GUID; properties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
properties->Wnode.ClientContext = 1; //QPC clock resolution properties->Wnode.ClientContext = 1; //QPC clock resolution
HRESULT hr = CoCreateGuid(&(properties->Wnode.Guid)); CoCreateGuid(&(properties->Wnode.Guid));
if (FAILED(hr)) {
wxLogError(winstd::tstring_printf(wxT("error 0x%08x generating GUID"), hr).c_str());
continue;
}
properties->LogFileMode = /*EVENT_TRACE_FILE_MODE_SEQUENTIAL |*/ EVENT_TRACE_REAL_TIME_MODE; properties->LogFileMode = /*EVENT_TRACE_FILE_MODE_SEQUENTIAL |*/ EVENT_TRACE_REAL_TIME_MODE;
properties->MaximumFileSize = 1; // 1 MB properties->MaximumFileSize = 1; // 1 MB
properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES); properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
@@ -777,13 +776,13 @@ static tstring MapToString(_In_ const EVENT_MAP_INFO *pMapInfo, _In_ ULONG ulDat
((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_VALUEMAP ) && (pMapInfo->Flag & ~EVENTMAP_INFO_FLAG_WBEM_VALUEMAP) != EVENTMAP_INFO_FLAG_WBEM_FLAG)) ((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_VALUEMAP ) && (pMapInfo->Flag & ~EVENTMAP_INFO_FLAG_WBEM_VALUEMAP) != EVENTMAP_INFO_FLAG_WBEM_FLAG))
{ {
if ((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_NO_MAP) == EVENTMAP_INFO_FLAG_WBEM_NO_MAP) if ((pMapInfo->Flag & EVENTMAP_INFO_FLAG_WBEM_NO_MAP) == EVENTMAP_INFO_FLAG_WBEM_NO_MAP)
return tstring_printf(_T("%ls"), (LPCWSTR)((PBYTE)pMapInfo + pMapInfo->MapEntryArray[ulData].OutputOffset)); return tstring_printf(_T("%ls"), (PBYTE)pMapInfo + pMapInfo->MapEntryArray[ulData].OutputOffset);
else { else {
for (ULONG i = 0; ; i++) { for (ULONG i = 0; ; i++) {
if (i >= pMapInfo->EntryCount) if (i >= pMapInfo->EntryCount)
return tstring_printf(_T("%lu"), ulData); return tstring_printf(_T("%lu"), ulData);
else if (pMapInfo->MapEntryArray[i].Value == ulData) else if (pMapInfo->MapEntryArray[i].Value == ulData)
return tstring_printf(_T("%ls"), (LPCWSTR)((PBYTE)pMapInfo + pMapInfo->MapEntryArray[i].OutputOffset)); return tstring_printf(_T("%ls"), (PBYTE)pMapInfo + pMapInfo->MapEntryArray[i].OutputOffset);
} }
} }
} else if ( } else if (
@@ -818,7 +817,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_UNICODESTRING: case TDH_INTYPE_UNICODESTRING:
case TDH_INTYPE_NONNULLTERMINATEDSTRING: case TDH_INTYPE_NONNULLTERMINATEDSTRING:
case TDH_INTYPE_UNICODECHAR: case TDH_INTYPE_UNICODECHAR:
return tstring_printf(_T("%.*ls"), (unsigned int)(nDataSize/sizeof(WCHAR)), (LPCWSTR)pData); return tstring_printf(_T("%.*ls"), nDataSize/sizeof(WCHAR), pData);
case TDH_INTYPE_ANSISTRING: case TDH_INTYPE_ANSISTRING:
case TDH_INTYPE_NONNULLTERMINATEDANSISTRING: case TDH_INTYPE_NONNULLTERMINATEDANSISTRING:
@@ -919,7 +918,6 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_BINARY: case TDH_INTYPE_BINARY:
switch (OutType) { switch (OutType) {
case TDH_OUTTYPE_IPV6: { case TDH_OUTTYPE_IPV6: {
#pragma warning(suppress: 6387) // ntdll.dll *must* exist.
auto RtlIpv6AddressToString = (LPTSTR(NTAPI*)(const IN6_ADDR*, LPTSTR))GetProcAddress(GetModuleHandle(_T("ntdll.dll")), auto RtlIpv6AddressToString = (LPTSTR(NTAPI*)(const IN6_ADDR*, LPTSTR))GetProcAddress(GetModuleHandle(_T("ntdll.dll")),
#ifdef _UNICODE #ifdef _UNICODE
"RtlIpv6AddressToStringW" "RtlIpv6AddressToStringW"
@@ -947,12 +945,8 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_GUID: { case TDH_INTYPE_GUID: {
assert(nDataSize >= sizeof(GUID)); assert(nDataSize >= sizeof(GUID));
WCHAR szGuid[39]; WCHAR szGuid[39];
if (StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid))) StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid));
return tstring_printf(_T("%ls"), szGuid); return tstring_printf(_T("%ls"), szGuid);
else {
assert(0);
return _T("(GUID)");
}
} }
case TDH_INTYPE_POINTER: case TDH_INTYPE_POINTER:
@@ -1001,7 +995,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
// 32-bit computer and 16 bytes on a 64-bit computer. // 32-bit computer and 16 bytes on a 64-bit computer.
// Doubling the pointer size handles both cases. // Doubling the pointer size handles both cases.
assert(nDataSize >= (SIZE_T)nPtrSize * 2); assert(nDataSize >= (SIZE_T)nPtrSize * 2);
return (PULONG)pData > 0 ? DataToString(TDH_INTYPE_SID, OutType, pData + (SIZE_T)nPtrSize * 2, nDataSize - (SIZE_T)nPtrSize * 2, pMapInfo, nPtrSize) : _T("(WBEM SID)"); return (PULONG)pData > 0 ? DataToString(TDH_INTYPE_SID, OutType, pData + nPtrSize * 2, nDataSize - nPtrSize * 2, pMapInfo, nPtrSize) : _T("(WBEM SID)");
case TDH_INTYPE_SID: { case TDH_INTYPE_SID: {
assert(nDataSize >= sizeof(SID)); assert(nDataSize >= sizeof(SID));
@@ -1033,7 +1027,7 @@ static ULONG GetArraySize(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, ULONG i
ULONG ulResult; ULONG ulResult;
// Get array count property. // Get array count property.
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[pInfo->EventPropertyInfoArray[i].countPropertyIndex].NameOffset, ULONG_MAX }; PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[pInfo->EventPropertyInfoArray[i].countPropertyIndex].NameOffset), ULONG_MAX };
vector<unsigned char> count; vector<unsigned char> count;
if ((ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, count)) != ERROR_SUCCESS) if ((ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, count)) != ERROR_SUCCESS)
return ulResult; return ulResult;
@@ -1073,7 +1067,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
if (out_nonfirst) out += _T(", "); else out_nonfirst = true; if (out_nonfirst) out += _T(", "); else out_nonfirst = true;
out += _T('('); out += _T('(');
for (USHORT j = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex, usLastMember = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex + pInfo->EventPropertyInfoArray[ulPropIndex].structType.NumOfStructMembers; j < usLastMember; j++) { for (USHORT j = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex, usLastMember = pInfo->EventPropertyInfoArray[ulPropIndex].structType.StructStartIndex + pInfo->EventPropertyInfoArray[ulPropIndex].structType.NumOfStructMembers; j < usLastMember; j++) {
out += tstring_printf(_T("%ls: "), (LPCWSTR)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[j].NameOffset)); out += tstring_printf(_T("%ls: "), reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[j].NameOffset);
out += PropertyToString(pEvent, pInfo, j, reinterpret_cast<LPWSTR>(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k, nPtrSize); out += PropertyToString(pEvent, pInfo, j, reinterpret_cast<LPWSTR>(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k, nPtrSize);
} }
out += _T(')'); out += _T(')');
@@ -1092,12 +1086,12 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// The first descriptor in the array identifies the name of the structure and the second // The first descriptor in the array identifies the name of the structure and the second
// descriptor defines the member of the structure whose data you want to retrieve. // descriptor defines the member of the structure whose data you want to retrieve.
PROPERTY_DATA_DESCRIPTOR data_desc[2] = { PROPERTY_DATA_DESCRIPTOR data_desc[2] = {
{ (ULONGLONG)pStructureName , ulStructIndex }, { (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset, k } { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k }
}; };
ulResult = TdhGetProperty(pEvent, 0, NULL, _countof(data_desc), data_desc, data); ulResult = TdhGetProperty(pEvent, 0, NULL, _countof(data_desc), data_desc, data);
} else { } else {
PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset, k }; PROPERTY_DATA_DESCRIPTOR data_desc = { (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k };
ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, data); ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, data);
} }
if (ulResult == ERROR_EVT_INVALID_EVENT_DATA) { if (ulResult == ERROR_EVT_INVALID_EVENT_DATA) {

View File

@@ -150,7 +150,7 @@ protected:
private: private:
/// \cond internal /// \cond internal
static VOID WINAPI EventRecordCallback(_In_ PEVENT_RECORD pEvent); static VOID WINAPI EventRecordCallback(PEVENT_RECORD pEvent);
/// \endcond /// \endcond
protected: protected:

View File

@@ -30,26 +30,26 @@
<ProjectGuid>{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}</ProjectGuid> <ProjectGuid>{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>EventMonitor</RootNamespace> <RootNamespace>EventMonitor</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -57,21 +57,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -156,10 +156,10 @@
<ProjectReference Include="..\lib\Events\build\Events.vcxproj"> <ProjectReference Include="..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project> <Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib-16.0.vcxproj"> <ProjectReference Include="..\lib\wxExtend\build\wxExtendLib-15.0.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project> <Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

View File

@@ -34,9 +34,6 @@ class wxPersistentEventMonitorFrame;
#include <WinStd/Win.h> #include <WinStd/Win.h>
#pragma warning(push)
#pragma warning(disable: 26444)
/// \addtogroup EventMonitor /// \addtogroup EventMonitor
/// @{ /// @{
@@ -176,5 +173,3 @@ inline wxPersistentObject *wxCreatePersistentObject(wxEventMonitorFrame *wnd)
} }
/// @} /// @}
#pragma warning(pop)

View File

@@ -2,219 +2,269 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EventMonitor\n" "Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2019-08-12 14:04+0200\n" "POT-Creation-Date: 2016-11-08 11:55+0100\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n" "PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n" "Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n" "Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n" "X-Generator: Poedit 1.8.11\n"
"X-Poedit-Basepath: ..\n" "X-Poedit-Basepath: ../../..\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n" "X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: master/EventMonitor\n"
"X-Poedit-SearchPath-1: ver1.0/EventMonitor\n"
#: App.cpp:61 Frame.h:75 MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4 #: master/EventMonitor/App.cpp:61 ver1.0/EventMonitor/App.cpp:61
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: master/EventMonitor/Frame.h:75 ver1.0/EventMonitor/Frame.h:75
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Event Monitor" msgid "Event Monitor"
msgstr "" msgstr ""
#: ETWLog.cpp:83 #: master/EventMonitor/ETWLog.cpp:83 ver1.0/EventMonitor/ETWLog.cpp:83
#, c-format #, c-format
msgid "Error opening event trace (error %u)." msgid "Error opening event trace (error %u)."
msgstr "" msgstr ""
#: ETWLog.cpp:171 #: master/EventMonitor/ETWLog.cpp:171 ver1.0/EventMonitor/ETWLog.cpp:171
msgid "Time" msgid "Time"
msgstr "" msgstr ""
#: ETWLog.cpp:172 #: master/EventMonitor/ETWLog.cpp:172 ver1.0/EventMonitor/ETWLog.cpp:172
msgid "PID" msgid "PID"
msgstr "" msgstr ""
#: ETWLog.cpp:173 #: master/EventMonitor/ETWLog.cpp:173 ver1.0/EventMonitor/ETWLog.cpp:173
msgid "TID" msgid "TID"
msgstr "" msgstr ""
#: ETWLog.cpp:174 #: master/EventMonitor/ETWLog.cpp:174 ver1.0/EventMonitor/ETWLog.cpp:174
msgid "Source" msgid "Source"
msgstr "" msgstr ""
#: ETWLog.cpp:175 #: master/EventMonitor/ETWLog.cpp:175 ver1.0/EventMonitor/ETWLog.cpp:175
msgid "Event" msgid "Event"
msgstr "" msgstr ""
#: ETWLog.cpp:232 #: master/EventMonitor/ETWLog.cpp:232 ver1.0/EventMonitor/ETWLog.cpp:232
msgid "Access denied creating event session: you need administrative privileges (Run As Administrator) or be a member of Performance Log Users group to start event tracing session." msgid "Access denied creating event session: you need administrative privileges (Run As Administrator) or be a member of Performance Log Users group to start event tracing session."
msgstr "" msgstr ""
#: ETWLog.cpp:235 #: master/EventMonitor/ETWLog.cpp:235 ver1.0/EventMonitor/ETWLog.cpp:235
#, c-format #, c-format
msgid "The %s event session already exists." msgid "The %s event session already exists."
msgstr "" msgstr ""
#: ETWLog.cpp:239 #: master/EventMonitor/ETWLog.cpp:239 ver1.0/EventMonitor/ETWLog.cpp:239
#, c-format #, c-format
msgid "Error creating event session (error %u)." msgid "Error creating event session (error %u)."
msgstr "" msgstr ""
#: ETWLog.cpp:255 ETWLog.cpp:271 ETWLog.cpp:285 #: master/EventMonitor/ETWLog.cpp:255 master/EventMonitor/ETWLog.cpp:271
#: master/EventMonitor/ETWLog.cpp:285 ver1.0/EventMonitor/ETWLog.cpp:255
#: ver1.0/EventMonitor/ETWLog.cpp:271 ver1.0/EventMonitor/ETWLog.cpp:285
#, c-format #, c-format
msgid "Error enabling %s event provider (error %u)." msgid "Error enabling %s event provider (error %u)."
msgstr "" msgstr ""
#: Frame.cpp:48 Frame.cpp:108 Frame.cpp:113 Frame.cpp:168 Frame.cpp:170 #: master/EventMonitor/Frame.cpp:48 master/EventMonitor/Frame.cpp:108
#: master/EventMonitor/Frame.cpp:113 master/EventMonitor/Frame.cpp:168
#: master/EventMonitor/Frame.cpp:170 ver1.0/EventMonitor/Frame.cpp:48
#: ver1.0/EventMonitor/Frame.cpp:108 ver1.0/EventMonitor/Frame.cpp:113
#: ver1.0/EventMonitor/Frame.cpp:168 ver1.0/EventMonitor/Frame.cpp:170
#, c-format #, c-format
msgid "Toggles display of %s records" msgid "Toggles display of %s records"
msgstr "" msgstr ""
#: Frame.cpp:65 #: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
msgid "E&xit" msgid "E&xit"
msgstr "" msgstr ""
#: Frame.cpp:65 #: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
msgid "Quits this program" msgid "Quits this program"
msgstr "" msgstr ""
#: Frame.cpp:69 #: master/EventMonitor/Frame.cpp:69 ver1.0/EventMonitor/Frame.cpp:69
msgid "&Program" msgid "&Program"
msgstr "" msgstr ""
#: Frame.cpp:73 #: master/EventMonitor/Frame.cpp:73 ver1.0/EventMonitor/Frame.cpp:73
msgid "&Copy" msgid "&Copy"
msgstr "" msgstr ""
#: Frame.cpp:73 Frame.cpp:154 #: master/EventMonitor/Frame.cpp:73 master/EventMonitor/Frame.cpp:154
#: ver1.0/EventMonitor/Frame.cpp:73 ver1.0/EventMonitor/Frame.cpp:154
msgid "Copies selected records to clipboard" msgid "Copies selected records to clipboard"
msgstr "" msgstr ""
#: Frame.cpp:78 #: master/EventMonitor/Frame.cpp:78 ver1.0/EventMonitor/Frame.cpp:78
msgid "Copy A&ll" msgid "Copy A&ll"
msgstr "" msgstr ""
#: Frame.cpp:78 Frame.cpp:156 #: master/EventMonitor/Frame.cpp:78 master/EventMonitor/Frame.cpp:156
#: ver1.0/EventMonitor/Frame.cpp:78 ver1.0/EventMonitor/Frame.cpp:156
msgid "Copies all records to clipboard (including hidden)" msgid "Copies all records to clipboard (including hidden)"
msgstr "" msgstr ""
#: Frame.cpp:83 Frame.cpp:158 #: master/EventMonitor/Frame.cpp:83 master/EventMonitor/Frame.cpp:158
#: ver1.0/EventMonitor/Frame.cpp:83 ver1.0/EventMonitor/Frame.cpp:158
msgid "Clear" msgid "Clear"
msgstr "" msgstr ""
#: Frame.cpp:83 Frame.cpp:158 #: master/EventMonitor/Frame.cpp:83 master/EventMonitor/Frame.cpp:158
#: ver1.0/EventMonitor/Frame.cpp:83 ver1.0/EventMonitor/Frame.cpp:158
msgid "Clears all records from the log" msgid "Clears all records from the log"
msgstr "" msgstr ""
#: Frame.cpp:90 #: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
msgid "Select &All" msgid "Select &All"
msgstr "" msgstr ""
#: Frame.cpp:90 #: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
msgid "Selects all visible records" msgid "Selects all visible records"
msgstr "" msgstr ""
#: Frame.cpp:94 #: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
msgid "Select &None" msgid "Select &None"
msgstr "" msgstr ""
#: Frame.cpp:94 #: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
msgid "Clears record selection" msgid "Clears record selection"
msgstr "" msgstr ""
#: Frame.cpp:97 Frame.cpp:142 #: master/EventMonitor/Frame.cpp:97 master/EventMonitor/Frame.cpp:142
#: ver1.0/EventMonitor/Frame.cpp:97 ver1.0/EventMonitor/Frame.cpp:142
msgid "&Edit" msgid "&Edit"
msgstr "" msgstr ""
#: Frame.cpp:101 #: master/EventMonitor/Frame.cpp:101 ver1.0/EventMonitor/Frame.cpp:101
msgid "Auto &Scroll" msgid "Auto &Scroll"
msgstr "" msgstr ""
#: Frame.cpp:101 Frame.cpp:164 #: master/EventMonitor/Frame.cpp:101 master/EventMonitor/Frame.cpp:164
#: ver1.0/EventMonitor/Frame.cpp:101 ver1.0/EventMonitor/Frame.cpp:164
msgid "Automatically scrolls to the most recent records as they come-in" msgid "Automatically scrolls to the most recent records as they come-in"
msgstr "" msgstr ""
#: Frame.cpp:123 Frame.cpp:176 #: master/EventMonitor/Frame.cpp:123 master/EventMonitor/Frame.cpp:176
#: ver1.0/EventMonitor/Frame.cpp:123 ver1.0/EventMonitor/Frame.cpp:176
msgid "Verbose" msgid "Verbose"
msgstr "" msgstr ""
#: Frame.cpp:123 Frame.cpp:176 #: master/EventMonitor/Frame.cpp:123 master/EventMonitor/Frame.cpp:176
#: ver1.0/EventMonitor/Frame.cpp:123 ver1.0/EventMonitor/Frame.cpp:176
msgid "Displays all levels of records" msgid "Displays all levels of records"
msgstr "" msgstr ""
#: Frame.cpp:127 Frame.cpp:178 #: master/EventMonitor/Frame.cpp:127 master/EventMonitor/Frame.cpp:178
#: ver1.0/EventMonitor/Frame.cpp:127 ver1.0/EventMonitor/Frame.cpp:178
msgid "Informational" msgid "Informational"
msgstr "" msgstr ""
#: Frame.cpp:127 Frame.cpp:178 #: master/EventMonitor/Frame.cpp:127 master/EventMonitor/Frame.cpp:178
#: ver1.0/EventMonitor/Frame.cpp:127 ver1.0/EventMonitor/Frame.cpp:178
msgid "Displays all records up to informational level" msgid "Displays all records up to informational level"
msgstr "" msgstr ""
#: Frame.cpp:131 Frame.cpp:180 #: master/EventMonitor/Frame.cpp:131 master/EventMonitor/Frame.cpp:180
#: ver1.0/EventMonitor/Frame.cpp:131 ver1.0/EventMonitor/Frame.cpp:180
msgid "Warning" msgid "Warning"
msgstr "" msgstr ""
#: Frame.cpp:131 Frame.cpp:180 #: master/EventMonitor/Frame.cpp:131 master/EventMonitor/Frame.cpp:180
#: ver1.0/EventMonitor/Frame.cpp:131 ver1.0/EventMonitor/Frame.cpp:180
msgid "Displays all records up to warning level" msgid "Displays all records up to warning level"
msgstr "" msgstr ""
#: Frame.cpp:135 Frame.cpp:182 #: master/EventMonitor/Frame.cpp:135 master/EventMonitor/Frame.cpp:182
#: ver1.0/EventMonitor/Frame.cpp:135 ver1.0/EventMonitor/Frame.cpp:182
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: Frame.cpp:135 Frame.cpp:182 #: master/EventMonitor/Frame.cpp:135 master/EventMonitor/Frame.cpp:182
#: ver1.0/EventMonitor/Frame.cpp:135 ver1.0/EventMonitor/Frame.cpp:182
msgid "Displays error level records only" msgid "Displays error level records only"
msgstr "" msgstr ""
#: Frame.cpp:142 Frame.cpp:146 #: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: ver1.0/EventMonitor/Frame.cpp:142 ver1.0/EventMonitor/Frame.cpp:146
#, c-format #, c-format
msgid "%s toolbar" msgid "%s toolbar"
msgstr "" msgstr ""
#: Frame.cpp:142 Frame.cpp:146 #: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: ver1.0/EventMonitor/Frame.cpp:142 ver1.0/EventMonitor/Frame.cpp:146
#, c-format #, c-format
msgid "Toggles display of %s toolbar" msgid "Toggles display of %s toolbar"
msgstr "" msgstr ""
#: Frame.cpp:142 Frame.cpp:146 Frame.cpp:185 #: master/EventMonitor/Frame.cpp:142 master/EventMonitor/Frame.cpp:146
#: master/EventMonitor/Frame.cpp:185 ver1.0/EventMonitor/Frame.cpp:142
#: ver1.0/EventMonitor/Frame.cpp:146 ver1.0/EventMonitor/Frame.cpp:185
msgid "View" msgid "View"
msgstr "" msgstr ""
#: Frame.cpp:146 Frame.cpp:149 #: master/EventMonitor/Frame.cpp:146 master/EventMonitor/Frame.cpp:149
#: ver1.0/EventMonitor/Frame.cpp:146 ver1.0/EventMonitor/Frame.cpp:149
msgid "&View" msgid "&View"
msgstr "" msgstr ""
#: Frame.cpp:154 #: master/EventMonitor/Frame.cpp:154 ver1.0/EventMonitor/Frame.cpp:154
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
#: Frame.cpp:156 #: master/EventMonitor/Frame.cpp:156 ver1.0/EventMonitor/Frame.cpp:156
msgid "Copy All" msgid "Copy All"
msgstr "" msgstr ""
#: Frame.cpp:161 #: master/EventMonitor/Frame.cpp:161 ver1.0/EventMonitor/Frame.cpp:161
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: Frame.cpp:164 #: master/EventMonitor/Frame.cpp:164 ver1.0/EventMonitor/Frame.cpp:164
msgid "Auto Scroll" msgid "Auto Scroll"
msgstr "" msgstr ""
#: Frame.cpp:189 #: master/EventMonitor/Frame.cpp:189 ver1.0/EventMonitor/Frame.cpp:189
msgid "Trace Log" msgid "Trace Log"
msgstr "" msgstr ""
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Real-time display of internal events" msgid "Real-time display of internal events"
msgstr "" msgstr ""
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4 #: master/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: ver1.0/EventMonitor/MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "EVENTM~1|GÉANTLink Event Monitor" msgid "EVENTM~1|GÉANTLink Event Monitor"
msgstr "" msgstr ""

View File

@@ -1,6 +1,6 @@
# Translators: # Translators:
# eduroam_devel <stefan.winter@restena.lu>, 2016
# Eric Hoch <eric.hoch@hhu.de>, 2016 # Eric Hoch <eric.hoch@hhu.de>, 2016
# eduroam_devel <stefan.winter@restena.lu>, 2016
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n" "Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2017-02-02 18:14+0100\n" "POT-Creation-Date: 2017-02-02 18:14+0100\n"
"PO-Revision-Date: 2016-08-27 11:21+0000\n" "PO-Revision-Date: 2016-08-27 11:21+0000\n"
"Last-Translator: Eric Hoch <eric.hoch@hhu.de>, 2016\n" "Last-Translator: eduroam_devel <stefan.winter@restena.lu>, 2016\n"
"Language-Team: German (https://www.transifex.com/eduroam_devel/teams/11799/de/)\n" "Language-Team: German (https://www.transifex.com/eduroam_devel/teams/11799/de/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

View File

@@ -1,6 +1,6 @@
# Translators: # Translators:
# Vicky Kons <vickyk@admin.grnet.gr>, 2016
# Zenon Mousmoulas <zenon@mousmoulas.gr>, 2016 # Zenon Mousmoulas <zenon@mousmoulas.gr>, 2016
# Vicky Kons <vickyk@admin.grnet.gr>, 2016
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n" "Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2017-02-02 18:14+0100\n" "POT-Creation-Date: 2017-02-02 18:14+0100\n"
"PO-Revision-Date: 2016-08-27 11:21+0000\n" "PO-Revision-Date: 2016-08-27 11:21+0000\n"
"Last-Translator: Zenon Mousmoulas <zenon@mousmoulas.gr>, 2016\n" "Last-Translator: Vicky Kons <vickyk@admin.grnet.gr>, 2016\n"
"Language-Team: Greek (https://www.transifex.com/eduroam_devel/teams/11799/el/)\n" "Language-Team: Greek (https://www.transifex.com/eduroam_devel/teams/11799/el/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

View File

@@ -1,6 +1,6 @@
# Translators: # Translators:
# Indrek Rokk <indrek.rokk@eenet.ee>, 2018 # Indrek Rokk <indrek.rokk@eenet.ee>, 2018
# Anne M <anne@eenet.ee>, 2019 # Anne M <anne@eenet.ee>, 2018
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: EventMonitor\n" "Project-Id-Version: EventMonitor\n"
"POT-Creation-Date: 2017-02-02 18:14+0100\n" "POT-Creation-Date: 2017-02-02 18:14+0100\n"
"PO-Revision-Date: 2016-08-27 11:21+0000\n" "PO-Revision-Date: 2016-08-27 11:21+0000\n"
"Last-Translator: Anne M <anne@eenet.ee>, 2019\n" "Last-Translator: Anne M <anne@eenet.ee>, 2018\n"
"Language-Team: Estonian (https://www.transifex.com/eduroam_devel/teams/11799/et/)\n" "Language-Team: Estonian (https://www.transifex.com/eduroam_devel/teams/11799/et/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -79,9 +79,10 @@ msgid ""
"(Run As Administrator) or be a member of Performance Log Users group to " "(Run As Administrator) or be a member of Performance Log Users group to "
"start event tracing session." "start event tracing session."
msgstr "" msgstr ""
"Puudub pääsuluba: sündmuse jälitusseansi loomiseks vajad " "Puudub pääsuluba sündmuse seansi: sündmuse jälitusseansi alustamiseks on Sul"
"administraatoriõigusi (Run As Administrator) või kuulumist soorituste logi " " vaja administraatoriõigusi (käivita administraatorina, inglise keeles Run "
"kasutajagruppi (Performance Log Users)" "As Administrator) või kuulumist soorituste logi (Performance Log) kasutajate"
" gruppi"
#: master/EventMonitor/ETWLog.cpp:235 ver1.0/EventMonitor/ETWLog.cpp:235 #: master/EventMonitor/ETWLog.cpp:235 ver1.0/EventMonitor/ETWLog.cpp:235
#: ver1.1/EventMonitor/ETWLog.cpp:235 #: ver1.1/EventMonitor/ETWLog.cpp:235

View File

@@ -15,7 +15,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EAPTTLS", "EAPMethods\EAPTT
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{E66A3FE1-4EE4-401F-8EAD-BE518B230393}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{E66A3FE1-4EE4-401F-8EAD-BE518B230393}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd-16.0.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd-15.0.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7B5EC9B7-208C-426A-941D-DAF9271BD4A4}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7B5EC9B7-208C-426A-941D-DAF9271BD4A4}"
EndProject EndProject
@@ -45,7 +45,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MsiUseFeature", "MsiUseFeat
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EventMonitor", "EventMonitor\EventMonitor.vcxproj", "{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EventMonitor", "EventMonitor\EventMonitor.vcxproj", "{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtendLib-16.0.vcxproj", "{D3E29951-D9F5-486D-A167-20AE8E90B1FA}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtendLib-15.0.vcxproj", "{D3E29951-D9F5-486D-A167-20AE8E90B1FA}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WLANManager", "WLANManager\WLANManager.vcxproj", "{BFCAA3B4-97A9-4EA9-8FE1-F30280142BCC}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WLANManager", "WLANManager\WLANManager.vcxproj", "{BFCAA3B4-97A9-4EA9-8FE1-F30280142BCC}"
EndProject EndProject
@@ -57,10 +57,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EapHost", "lib\EapHost\buil
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EapHost_UI", "lib\EapHost_UI\build\EapHost_UI.vcxproj", "{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EapHost_UI", "lib\EapHost_UI\build\EapHost_UI.vcxproj", "{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTC", "lib\GTC\build\GTC.vcxproj", "{114A70BB-8698-4A0C-8C90-58F22EDD8129}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTC_UI", "lib\GTC_UI\build\GTC_UI.vcxproj", "{34680813-3A52-46FB-B5A8-1E4BBF770855}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64 Debug|ARM64 = Debug|ARM64
@@ -323,30 +319,6 @@ Global
{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x64.Build.0 = Release|x64 {13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x64.Build.0 = Release|x64
{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x86.ActiveCfg = Release|Win32 {13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x86.ActiveCfg = Release|Win32
{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x86.Build.0 = Release|Win32 {13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}.Release|x86.Build.0 = Release|Win32
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|ARM64.ActiveCfg = Debug|ARM64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|ARM64.Build.0 = Debug|ARM64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|x64.ActiveCfg = Debug|x64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|x64.Build.0 = Debug|x64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|x86.ActiveCfg = Debug|Win32
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Debug|x86.Build.0 = Debug|Win32
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|ARM64.ActiveCfg = Release|ARM64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|ARM64.Build.0 = Release|ARM64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|x64.ActiveCfg = Release|x64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|x64.Build.0 = Release|x64
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|x86.ActiveCfg = Release|Win32
{114A70BB-8698-4A0C-8C90-58F22EDD8129}.Release|x86.Build.0 = Release|Win32
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|ARM64.ActiveCfg = Debug|ARM64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|ARM64.Build.0 = Debug|ARM64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|x64.ActiveCfg = Debug|x64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|x64.Build.0 = Debug|x64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|x86.ActiveCfg = Debug|Win32
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Debug|x86.Build.0 = Debug|Win32
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|ARM64.ActiveCfg = Release|ARM64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|ARM64.Build.0 = Release|ARM64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|x64.ActiveCfg = Release|x64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|x64.Build.0 = Release|x64
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|x86.ActiveCfg = Release|Win32
{34680813-3A52-46FB-B5A8-1E4BBF770855}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@@ -373,10 +345,8 @@ Global
{7AF5B922-7C17-428A-97E0-09E3B41A684D} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393} {7AF5B922-7C17-428A-97E0-09E3B41A684D} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
{B385EC2B-C3F4-48BB-9BAC-8B996DE7F754} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393} {B385EC2B-C3F4-48BB-9BAC-8B996DE7F754} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393} {13D2D8B5-F6AA-459D-B5F7-29B95DD9D583} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
{114A70BB-8698-4A0C-8C90-58F22EDD8129} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
{34680813-3A52-46FB-B5A8-1E4BBF770855} = {E66A3FE1-4EE4-401F-8EAD-BE518B230393}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E52A6A8F-2AF5-43C7-8E01-9808E865BCF0} SolutionGuid = {7A3D177B-1258-49A3-893B-79C928DB6A25}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -2,36 +2,59 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GÉANTLink MSI\n" "Project-Id-Version: GÉANTLink MSI\n"
"POT-Creation-Date: 2019-08-12 14:04+0200\n" "POT-Creation-Date: 2016-11-08 11:55+0100\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n" "PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n" "Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n" "Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n" "X-Generator: Poedit 1.8.11\n"
"X-Poedit-Basepath: ..\n" "X-Poedit-Basepath: ../../../..\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n" "X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: Main\n" "X-Poedit-SearchPath-0: master/MSI/Base/Main\n"
"X-Poedit-SearchPath-1: ver1.0/MSI/Base/Main\n"
#: Main/en_US.ARM64.Release.LaunchCondition-2.idtx:4 #: master/MSI/Base/Main/en_US.Win32.Debug.LaunchCondition-2.idtx:4
#: Main/en_US.Win32.Release.LaunchCondition-2.idtx:4 #: master/MSI/Base/Main/en_US.Win32.Release.LaunchCondition-2.idtx:4
#: Main/en_US.x64.Release.LaunchCondition-2.idtx:4 #: master/MSI/Base/Main/en_US.x64.Debug.LaunchCondition-2.idtx:4
#: master/MSI/Base/Main/en_US.x64.Release.LaunchCondition-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.Win32.Debug.LaunchCondition-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.Win32.Release.LaunchCondition-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.x64.Debug.LaunchCondition-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.x64.Release.LaunchCondition-2.idtx:4
msgid "[ProductName] requires Windows Vista or later version of Windows." msgid "[ProductName] requires Windows Vista or later version of Windows."
msgstr "" msgstr ""
#: Main/en_US.ARM64.Release.Property-2.idtx:4 #: master/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:4
#: Main/en_US.ARM64.Release.Property-2.idtx:5 #: master/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:5
#: Main/en_US.Win32.Release.Property-2.idtx:4 #: master/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:4
#: Main/en_US.Win32.Release.Property-2.idtx:5 #: master/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:5
#: Main/en_US.x64.Release.Property-2.idtx:4 #: master/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:4
#: Main/en_US.x64.Release.Property-2.idtx:5 #: master/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:5
#: master/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:4
#: master/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:5
#: ver1.0/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:5
#: ver1.0/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:5
#: ver1.0/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:5
#: ver1.0/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:4
#: ver1.0/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:5
msgid "http://www.geant.org/" msgid "http://www.geant.org/"
msgstr "" msgstr ""
#: Main/en_US.ARM64.Release.Property-2.idtx:6 #: master/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:6
#: Main/en_US.Win32.Release.Property-2.idtx:6 #: master/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:6
#: Main/en_US.x64.Release.Property-2.idtx:6 #: master/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:6
#: master/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:6
#: ver1.0/MSI/Base/Main/en_US.Win32.Debug.Property-2.idtx:6
#: ver1.0/MSI/Base/Main/en_US.Win32.Release.Property-2.idtx:6
#: ver1.0/MSI/Base/Main/en_US.x64.Debug.Property-2.idtx:6
#: ver1.0/MSI/Base/Main/en_US.x64.Release.Property-2.idtx:6
msgid "https://github.com/Amebis/GEANTLink/releases" msgid "https://github.com/Amebis/GEANTLink/releases"
msgstr "" msgstr ""

BIN
Makefile

Binary file not shown.

View File

@@ -76,8 +76,7 @@ static int MsiUseFeature()
} }
_Use_decl_annotations_ int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ {
UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hInstance);
UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(hPrevInstance);

View File

@@ -30,26 +30,26 @@
<ProjectGuid>{679D03C5-CD70-4FFA-93F8-A4AB3637509B}</ProjectGuid> <ProjectGuid>{679D03C5-CD70-4FFA-93F8-A4AB3637509B}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>MsiUseFeature</RootNamespace> <RootNamespace>MsiUseFeature</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -57,21 +57,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -147,7 +147,7 @@
<ResourceCompile Include="MsiUseFeature.rc" /> <ResourceCompile Include="MsiUseFeature.rc" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

View File

@@ -1,9 +1,7 @@
# MsiUseFeature # MsiUseFeature
Checks the installation state of the given feature of GÉANTLink product Checks the installation state of the given feature of GÉANTLink product
## Usage ## Usage
``` ```
MsiUseFeature <feature name> [language] MsiUseFeature <feature name> [language]
``` ```
@@ -13,8 +11,7 @@ MsiUseFeature <feature name> [language]
Note: The MSI product code changes on every release. Therefore, `MsiUseFeature` utility with identical version should be used. Note: The MSI product code changes on every release. Therefore, `MsiUseFeature` utility with identical version should be used.
### Return codes Return codes:
- -1 = Invalid parameters - -1 = Invalid parameters
- 0 = Success - 0 = Success
- 1 = The product is not installed, or feature state is unknown - 1 = The product is not installed, or feature state is unknown

View File

@@ -27,7 +27,6 @@
#include <Windows.h> #include <Windows.h>
#include <Msi.h> #include <Msi.h>
#include <shellapi.h>
#include <tchar.h> #include <tchar.h>
#include <memory> #include <memory>

View File

@@ -3,21 +3,17 @@
Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterprise network authentication Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterprise network authentication
## Features ## Features
- Integrates into Windows seamlessly - Integrates into Windows seamlessly
- Wired and wireless network support - Wired and wireless network support
### Authentication methods ### Authentication methods
- EAP-TTLS with the following inner methods: - EAP-TTLS with the following inner methods:
- PAP - PAP
- MSCHAPv2 - MSCHAPv2
- EAP-MSCHAPv2 - EAP-MSCHAPv2
- EAP-GTC: Challenge/Response and Password authentication modes
- System-installed EAP method chaining (experimental) - System-installed EAP method chaining (experimental)
### Security ### Security
- Microsoft Windows Credential Manager stored user credentials - Microsoft Windows Credential Manager stored user credentials
- User credentials can be shared between different network profiles, regardless of their connection: wired or wireless - User credentials can be shared between different network profiles, regardless of their connection: wired or wireless
- Encrypted EapHost inter-process communication - Encrypted EapHost inter-process communication
@@ -27,24 +23,20 @@ Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterpr
- Post-authentication CRL check - Post-authentication CRL check
### Diagnostics ### Diagnostics
- Reporting to Event Log channels: Operational and Analytic verbosity - Reporting to Event Log channels: Operational and Analytic verbosity
- Real-time event monitoring utility - Real-time event monitoring utility
### User interface ### User interface
- Customizable helpdesk contact information - Customizable helpdesk contact information
- Lockable network profile configuration - Lockable network profile configuration
### Deployment ### Deployment
- Released as multi-lingual x86, x64, and ARM64 MSI packages; Group Policy deployment supported - Released as multi-lingual x86, x64, and ARM64 MSI packages; Group Policy deployment supported
- [MsiUseFeature utility](https://github.com/Amebis/GEANTLink/tree/master/MsiUseFeature) for GÉANTLink install state testing (for embedding GÉANTLink into other setup packages) - [MsiUseFeature utility](https://github.com/Amebis/GEANTLink/tree/ver1.1/MsiUseFeature) for GÉANTLink install state testing (for embedding GÉANTLink into other setup packages)
- [CredWrite utility](https://github.com/Amebis/GEANTLink/tree/master/CredWrite) for automated user credential import to Credential Manager - [CredWrite utility](https://github.com/Amebis/GEANTLink/tree/ver1.1/CredWrite) for automated user credential import to Credential Manager
- [WLANManager utility](https://github.com/Amebis/GEANTLink/tree/master/WLANManager) to allow network profile configuration dialog shortcuts - [WLANManager utility](https://github.com/Amebis/GEANTLink/tree/ver1.1/WLANManager) to allow network profile configuration dialog shortcuts
### Supported operating systems ### Supported operating systems
- Windows Vista, Windows Server 2008 - Windows Vista, Windows Server 2008
- Windows 7, Windows Server 2008 R2 - Windows 7, Windows Server 2008 R2
- Windows 8 Desktop, Windows Server 2012 - Windows 8 Desktop, Windows Server 2012
@@ -52,53 +44,44 @@ Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterpr
- Windows 10 Desktop, Windows Server 2016 - Windows 10 Desktop, Windows Server 2016
## Download ## Download
Binaries are available for download [here](https://github.com/Amebis/GEANTLink/releases). Binaries are available for download [here](https://github.com/Amebis/GEANTLink/releases).
## Building ## Building
### Building Environment Requirements ### Building Environment Requirements
- Microsoft Windows Vista or later - Microsoft Windows Vista or later
- Microsoft Visual Studio 2019 - Microsoft Visual Studio 2017
- _msgfmt.exe_ from [gettext](https://www.gnu.org/software/gettext/); - _msgfmt.exe_ from [gettext](https://www.gnu.org/software/gettext/);
Hint: [Poedit](https://poedit.net/) contains up-to-date binary Win32 compiled gettext-utilities. Install it and add `GettextTools\bin` folder to the system path. Hint: [Poedit](https://poedit.net/) contains up-to-date binary Win32 compiled gettext-utilities. Install it and add `GettextTools\bin` folder to the system path.
- _sed.exe_ and _grep.exe_ - _sed.exe_ and _grep.exe_
Hint: [Git for Windows](https://gitforwindows.org/) contains up-to-date set of GNU utilities.
- _MsiDb.Exe_ and other command line utilities for MSI packaging distributed as a part of Microsoft Windows SDK (installed with Visual Studio). Add SDK's `Bin` folder to the system path. - _MsiDb.Exe_ and other command line utilities for MSI packaging distributed as a part of Microsoft Windows SDK (installed with Visual Studio). Add SDK's `Bin` folder to the system path.
### wxWidgets ### wxWidgets
GÉANTLink is using wxWidgets static libraries. Since upstream wxWidgets libraries don't support ARM64 yet, a clone with ARM64 support was prepared at [GitHub](https://github.com/Amebis/wxWidgets.git). GÉANTLink is using wxWidgets static libraries. Since upstream wxWidgets libraries don't support ARM64 yet, a clone with ARM64 support was prepared at [GitHub](https://github.com/Amebis/wxWidgets.git).
#### Compiling wxWidgets x86 static libraries #### Compiling wxWidgets x86 static libraries
1. Start _x86 Native Tools Command Prompt for VS 2017_
1. Start _x86 Native Tools Command Prompt for VS 2019_
2. Change working folder to `build\msw` 2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142` 3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142 BUILD=release` 4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 BUILD=release`
#### Compiling wxWidgets x64 static libraries #### Compiling wxWidgets x64 static libraries
1. Start _x64 Native Tools Command Prompt for VS 2017_
1. Start _x64 Native Tools Command Prompt for VS 2019_
2. Change working folder to `build\msw` 2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142 TARGET_CPU=X64` 3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=X64`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142 TARGET_CPU=X64 BUILD=release` 4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=X64 BUILD=release`
#### Compiling wxWidgets ARM64 static libraries #### Compiling wxWidgets ARM64 static libraries
1. Start command prompt 1. Start command prompt
2. Change working folder to `build\msw` 2. Change working folder to `build\msw`
3. Run: `"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsamd64_arm64.bat"` 3. Run: `"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsamd64_arm64.bat"`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142 TARGET_CPU=ARM64 USE_OPENGL=0` 3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=ARM64 USE_OPENGL=0`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=142 TARGET_CPU=ARM64 USE_OPENGL=0 BUILD=release` 4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=ARM64 USE_OPENGL=0 BUILD=release`
#### Specifying wxWidgets path #### Specifying wxWidgets path
GÉANTLink compilation references wxWidgets libraries using `WXWIN` environment variable. Please set it to wxWidgets folder (i.e. `C:\SDK\wxWidgets`). GÉANTLink compilation references wxWidgets libraries using `WXWIN` environment variable. Please set it to wxWidgets folder (i.e. `C:\SDK\wxWidgets`).
### Digital Signing of Build Outputs ### Digital Signing of Build Outputs
In order to have the build process digitally sign output files, one should provide the following: In order to have the build process digitally sign output files, one should provide the following:
1. A signing certificate installed in the current users certificate store. 1. A signing certificate installed in the current users certificate store.
@@ -111,7 +94,6 @@ Please note that only Release builds are configured for timestamp signing. Debug
### Building ### Building
#### Building in Visual Studio IDE #### Building in Visual Studio IDE
GÉANTLink has some submodules. When cloning Git repository, make sure to use `--recursive` Git switch to clone submodules too. Example: GÉANTLink has some submodules. When cloning Git repository, make sure to use `--recursive` Git switch to clone submodules too. Example:
`git clone --recursive "https://github.com/Amebis/GEANTLink.git" "C:\Projects\GEANTLink"` `git clone --recursive "https://github.com/Amebis/GEANTLink.git" "C:\Projects\GEANTLink"`
@@ -126,7 +108,6 @@ Next, one must configure a network profile actually using GÉANTLink for the aut
GÉANTLink EAP modules are divided into two DLLs: backend (i.e. _EAPTTLS.dll_) and GUI (i.e. _EAPTTLSUI.dll_). GÉANTLink EAP modules are divided into two DLLs: backend (i.e. _EAPTTLS.dll_) and GUI (i.e. _EAPTTLSUI.dll_).
##### Backend DLL ##### Backend DLL
The backend DLL is loaded by _Eap3Host.exe_ process when connecting to the network. One approach to debug the module is to start Visual C++ elevated, open _GEANTLink.sln_, and attach to the running _Eap3Host.exe_ process. The backend DLL is loaded by _Eap3Host.exe_ process when connecting to the network. One approach to debug the module is to start Visual C++ elevated, open _GEANTLink.sln_, and attach to the running _Eap3Host.exe_ process.
On initial connection attempt _Eap3Host.exe_ will load the DLL and will not release it until _EapHost_ service is restarted. To release our DLL (i.e. for rebuild) you have to restart _EapHost_ service manually or run `nmake register` again. On initial connection attempt _Eap3Host.exe_ will load the DLL and will not release it until _EapHost_ service is restarted. To release our DLL (i.e. for rebuild) you have to restart _EapHost_ service manually or run `nmake register` again.
@@ -134,7 +115,6 @@ On initial connection attempt _Eap3Host.exe_ will load the DLL and will not rele
To debug early life of our backend DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to catch emerging _Eap3Host.exe_ process and attach the debugger to it before our DLL starts servicing authentication. To debug early life of our backend DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to catch emerging _Eap3Host.exe_ process and attach the debugger to it before our DLL starts servicing authentication.
##### GUI DLL ##### GUI DLL
The GUI DLL is loaded by _DllHost.exe_ process on XML profile configuration import/export and when interactive user interface is required. The GUI DLL is loaded by _DllHost.exe_ process on XML profile configuration import/export and when interactive user interface is required.
A few seconds after desired function call has finished, _DllHost.exe_ terminates and releases the DLL. A few seconds after desired function call has finished, _DllHost.exe_ terminates and releases the DLL.
@@ -142,8 +122,7 @@ A few seconds after desired function call has finished, _DllHost.exe_ terminates
To debug early life of our GUI DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to attach the debugger to _DllHost.exe_ process before our DLL starts. To debug early life of our GUI DLL, uncomment `Sleep(10000)` in `DllMain()` of the module, and set breakpoints. This should give you plenty of time to attach the debugger to _DllHost.exe_ process before our DLL starts.
#### Building in command line #### Building in command line
Open _x64 Native Tools Command Prompt for VS 2017_ for building.
Open _x64 Native Tools Command Prompt for VS 2019_ for building.
Use Microsoft NMAKE to build the project. Use Microsoft NMAKE to build the project.
@@ -158,5 +137,4 @@ Command | Explanation
The `/ls` flag can be appended to the commands above to reduce NMAKEs verbosity. You can combine multiple targets (i.e. nmake Unregister Clean). Please, see NMAKE reference for further reading. The `/ls` flag can be appended to the commands above to reduce NMAKEs verbosity. You can combine multiple targets (i.e. nmake Unregister Clean). Please, see NMAKE reference for further reading.
### Translating into your language ### Translating into your language
GÉANTLink is fully localizable. We kindly invite you to help [translating it on Transifex](https://www.transifex.com/eduroam_devel/geantlink/). GÉANTLink is fully localizable. We kindly invite you to help [translating it on Transifex](https://www.transifex.com/eduroam_devel/geantlink/).

View File

@@ -1,7 +0,0 @@
@echo off
nmake.exe /ls All LANG=en_US CFG=Debug PLAT=Win32
nmake.exe /ls All LANG=en_US CFG=Debug PLAT=x64
nmake.exe /ls All LANG=en_US CFG=Debug PLAT=ARM64
nmake.exe /ls All LANG=en_US CFG=Release PLAT=Win32
nmake.exe /ls All LANG=en_US CFG=Release PLAT=x64
nmake.exe /ls All LANG=en_US CFG=Release PLAT=ARM64

View File

@@ -1,7 +0,0 @@
@echo off
nmake.exe /ls Clean LANG=en_US CFG=Debug PLAT=Win32
nmake.exe /ls Clean LANG=en_US CFG=Debug PLAT=x64
nmake.exe /ls Clean LANG=en_US CFG=Debug PLAT=ARM64
nmake.exe /ls Clean LANG=en_US CFG=Release PLAT=Win32
nmake.exe /ls Clean LANG=en_US CFG=Release PLAT=x64
nmake.exe /ls Clean LANG=en_US CFG=Release PLAT=ARM64

View File

@@ -130,7 +130,6 @@ static int WLANManager()
// Launch WLAN profile config dialog. // Launch WLAN profile config dialog.
WLAN_REASON_CODE wlrc = L2_REASON_CODE_SUCCESS; WLAN_REASON_CODE wlrc = L2_REASON_CODE_SUCCESS;
#pragma warning(suppress: 6387) // TODO: MSDN nor SAL annotation don't indicate NULL HWND are OK with WlanUIEditProfile().
DWORD dwResult = WlanUIEditProfile(WLAN_UI_API_VERSION, pwcArglist[2], &(interfaces->InterfaceInfo[i].InterfaceGuid), NULL, WLSecurityPage, NULL, &wlrc); DWORD dwResult = WlanUIEditProfile(WLAN_UI_API_VERSION, pwcArglist[2], &(interfaces->InterfaceInfo[i].InterfaceGuid), NULL, WLSecurityPage, NULL, &wlrc);
if (dwResult != ERROR_SUCCESS) { if (dwResult != ERROR_SUCCESS) {
// WlanUIEditProfile() displays own error dialog on failure. // WlanUIEditProfile() displays own error dialog on failure.
@@ -154,8 +153,7 @@ static int WLANManager()
} }
_Use_decl_annotations_ int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ {
UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hInstance);
UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(hPrevInstance);

View File

@@ -1,18 +1,14 @@
# WLANManager #WLANManager
Invokes standard Windows Wireless Network Properties dialog Invokes standard Windows Wireless Network Properties dialog
## Usage ##Usage
``` ```
WLANManager profile <profile name> [interface <interface name>] WLANManager profile <name> [interface <name>]
``` ```
- `profile name` - The name of the network profile (not neccessarely the same as SSID) - `name` - The name of the network profile (not neccessarely the same as SSID)
- `interface name` - The name of the specific network interface to search the profile at
### Return codes
Return codes:
- -1 = Invalid parameters - -1 = Invalid parameters
- 0 = Success - 0 = Success
- 1 = Error parsing command line - 1 = Error parsing command line

View File

@@ -29,7 +29,6 @@
#include <Windows.h> #include <Windows.h>
#include <CommCtrl.h> #include <CommCtrl.h>
#include <devguid.h> #include <devguid.h>
#include <shellapi.h>
#include <tchar.h> #include <tchar.h>
#include <memory> #include <memory>

View File

@@ -30,26 +30,26 @@
<ProjectGuid>{BFCAA3B4-97A9-4EA9-8FE1-F30280142BCC}</ProjectGuid> <ProjectGuid>{BFCAA3B4-97A9-4EA9-8FE1-F30280142BCC}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>WLANManager</RootNamespace> <RootNamespace>WLANManager</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -57,21 +57,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -144,7 +144,7 @@
<ResourceCompile Include="WLANManager.rc" /> <ResourceCompile Include="WLANManager.rc" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\lib\WinStd\build\WinStd-16.0.vcxproj"> <ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project> <Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

View File

@@ -2,21 +2,22 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WLANManager\n" "Project-Id-Version: WLANManager\n"
"POT-Creation-Date: 2019-08-12 14:09+0200\n" "POT-Creation-Date: 2016-11-08 11:51+0100\n"
"PO-Revision-Date: 2016-06-02 12:27+0200\n" "PO-Revision-Date: 2016-06-02 12:27+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n" "Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n" "Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n" "X-Generator: Poedit 1.8.11\n"
"X-Poedit-Basepath: ..\n" "X-Poedit-Basepath: ../../..\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n" "X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: master/WLANManager\n"
"X-Poedit-SearchPath-1: ver1.0/WLANManager\n"
#: MSIBuild/en_US.ARM64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4 #: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
@@ -24,8 +25,6 @@ msgstr ""
msgid "WLAN Manager" msgid "WLAN Manager"
msgstr "" msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4 #: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4

View File

@@ -29,19 +29,15 @@
<IncludePath>$(WXWIN)\include\msvc;$(WXWIN)\include;$(IncludePath)</IncludePath> <IncludePath>$(WXWIN)\include\msvc;$(WXWIN)\include;$(IncludePath)</IncludePath>
<SourcePath>$(WXWIN)\src\aui;$(WXWIN)\src\cocoa;$(WXWIN)\src\common;$(WXWIN)\src\dfb;$(WXWIN)\src\expat;$(WXWIN)\src\generic;$(WXWIN)\src\gtk;$(WXWIN)\src\gtk1;$(WXWIN)\src\html;$(WXWIN)\src\jpeg;$(WXWIN)\src\motif;$(WXWIN)\src\msdos;$(WXWIN)\src\msw;$(WXWIN)\src\os2;$(WXWIN)\src\osx;$(WXWIN)\src\png;$(WXWIN)\src\propgrid;$(WXWIN)\src\regex;$(WXWIN)\src\ribbon;$(WXWIN)\src\richtext;$(WXWIN)\src\stc;$(WXWIN)\src\tiff;$(WXWIN)\src\univ;$(WXWIN)\src\unix;$(WXWIN)\src\x11;$(WXWIN)\src\xml;$(WXWIN)\src\xrc;$(WXWIN)\src\zlib;$(SourcePath)</SourcePath> <SourcePath>$(WXWIN)\src\aui;$(WXWIN)\src\cocoa;$(WXWIN)\src\common;$(WXWIN)\src\dfb;$(WXWIN)\src\expat;$(WXWIN)\src\generic;$(WXWIN)\src\gtk;$(WXWIN)\src\gtk1;$(WXWIN)\src\html;$(WXWIN)\src\jpeg;$(WXWIN)\src\motif;$(WXWIN)\src\msdos;$(WXWIN)\src\msw;$(WXWIN)\src\os2;$(WXWIN)\src\osx;$(WXWIN)\src\png;$(WXWIN)\src\propgrid;$(WXWIN)\src\regex;$(WXWIN)\src\ribbon;$(WXWIN)\src\richtext;$(WXWIN)\src\stc;$(WXWIN)\src\tiff;$(WXWIN)\src\univ;$(WXWIN)\src\unix;$(WXWIN)\src\x11;$(WXWIN)\src\xml;$(WXWIN)\src\xrc;$(WXWIN)\src\zlib;$(SourcePath)</SourcePath>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CAExcludePath>$(WXWIN);$(CAExcludePath)</CAExcludePath>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>_WIN32_WINNT=0x0600;ISOLATION_AWARE_ENABLED=1;SECURITY_WIN32;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;EAP_TLS=1;wxMSVC_VERSION=$(PlatformToolsetVersion);WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_WIN32_WINNT=0x0600;ISOLATION_AWARE_ENABLED=1;SECURITY_WIN32;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;EAP_TLS=1;wxMSVC_VERSION=$(PlatformToolsetVersion);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
<EnablePREfast>true</EnablePREfast>
</ClCompile> </ClCompile>
<Link> <Link>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>

View File

@@ -32,7 +32,6 @@
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks> <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile> </ClCompile>
<Link> <Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>

View File

@@ -29,7 +29,7 @@
// Product version as a single DWORD // Product version as a single DWORD
// Note: Used for version comparison within C/C++ code. // Note: Used for version comparison within C/C++ code.
// //
#define PRODUCT_VERSION 0x01020b00 #define PRODUCT_VERSION 0x01010b00
// //
// Product version by components // Product version by components
@@ -38,27 +38,27 @@
// separately. // separately.
// //
#define PRODUCT_VERSION_MAJ 1 #define PRODUCT_VERSION_MAJ 1
#define PRODUCT_VERSION_MIN 2 #define PRODUCT_VERSION_MIN 1
#define PRODUCT_VERSION_REV 11 #define PRODUCT_VERSION_REV 11
#define PRODUCT_VERSION_BUILD 0 #define PRODUCT_VERSION_BUILD 0
// //
// Human readable product version and build year for UI // Human readable product version and build year for UI
// //
#define PRODUCT_VERSION_STR "1.2g" #define PRODUCT_VERSION_STR "1.1h"
#define PRODUCT_BUILD_YEAR_STR "2019" #define PRODUCT_BUILD_YEAR_STR "2018"
// //
// Numerical version presentation for ProductVersion propery in // Numerical version presentation for ProductVersion propery in
// MSI packages (syntax: N.N[.N[.N]]) // MSI packages (syntax: N.N[.N[.N]])
// //
#define PRODUCT_VERSION_INST "1.2.11" #define PRODUCT_VERSION_INST "1.1.11"
// //
// The product code for ProductCode property in MSI packages // The product code for ProductCode property in MSI packages
// Replace with new on every version change, regardless how minor it is. // Replace with new on every version change, regardless how minor it is.
// //
#define PRODUCT_VERSION_GUID "{9724DC5C-8574-47AF-9978-04ED7FA83EF4}" #define PRODUCT_VERSION_GUID "{DB1D7807-D9E7-4BB8-8B47-4631256F1C4B}"
// //
// Product vendor // Product vendor

2
lib/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/GTC
/GTC_UI

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{AD6816A0-9600-4E01-8C49-39D03D1E791F}</ProjectGuid> <ProjectGuid>{AD6816A0-9600-4E01-8C49-39D03D1E791F}</ProjectGuid>
<RootNamespace>EAPBase</RootNamespace> <RootNamespace>EAPBase</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -127,7 +127,6 @@
<ClInclude Include="..\include\EAPXML.h" /> <ClInclude Include="..\include\EAPXML.h" />
<ClInclude Include="..\include\Method.h" /> <ClInclude Include="..\include\Method.h" />
<ClInclude Include="..\include\Module.h" /> <ClInclude Include="..\include\Module.h" />
<ClInclude Include="..\include\UIContext.h" />
<ClInclude Include="..\src\StdAfx.h" /> <ClInclude Include="..\src\StdAfx.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -144,7 +143,6 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="..\src\UIContext.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Events\build\Events.vcxproj"> <ProjectReference Include="..\..\Events\build\Events.vcxproj">

View File

@@ -32,9 +32,6 @@
<ClInclude Include="..\include\Credentials.h"> <ClInclude Include="..\include\Credentials.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\include\UIContext.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\src\StdAfx.cpp"> <ClCompile Include="..\src\StdAfx.cpp">
@@ -55,8 +52,5 @@
<ClCompile Include="..\src\EAP.cpp"> <ClCompile Include="..\src\EAP.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\src\UIContext.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -83,7 +83,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config(_Inout_ config &&other) noexcept; config(_Inout_ config &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -101,7 +101,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config& operator=(_Inout_ config &&other) noexcept; config& operator=(_Inout_ config &&other);
/// ///
/// Clones this object /// Clones this object
@@ -187,7 +187,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config_method(_Inout_ config_method &&other) noexcept; config_method(_Inout_ config_method &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -205,7 +205,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config_method& operator=(_Inout_ config_method &&other) noexcept; config_method& operator=(_Inout_ config_method &&other);
/// \name XML management /// \name XML management
/// @{ /// @{
@@ -271,7 +271,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config_method_with_cred(_Inout_ config_method_with_cred &&other) noexcept; config_method_with_cred(_Inout_ config_method_with_cred &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -289,7 +289,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config_method_with_cred& operator=(_Inout_ config_method_with_cred &&other) noexcept; config_method_with_cred& operator=(_Inout_ config_method_with_cred &&other);
/// \name XML management /// \name XML management
/// @{ /// @{
@@ -335,7 +335,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config_provider(_Inout_ config_provider &&other) noexcept; config_provider(_Inout_ config_provider &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -353,7 +353,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config_provider& operator=(_Inout_ config_provider &&other) noexcept; config_provider& operator=(_Inout_ config_provider &&other);
virtual config* clone() const; virtual config* clone() const;
@@ -431,7 +431,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config_connection(_Inout_ config_connection &&other) noexcept; config_connection(_Inout_ config_connection &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -449,7 +449,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config_connection& operator=(_Inout_ config_connection &&other) noexcept; config_connection& operator=(_Inout_ config_connection &&other);
virtual config* clone() const; virtual config* clone() const;

View File

@@ -86,7 +86,7 @@ namespace eap
/// ///
/// \param[in] other Credentials to move from /// \param[in] other Credentials to move from
/// ///
credentials(_Inout_ credentials &&other) noexcept; credentials(_Inout_ credentials &&other);
/// ///
/// Copies credentials /// Copies credentials
@@ -104,7 +104,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
credentials& operator=(_Inout_ credentials &&other) noexcept; credentials& operator=(_Inout_ credentials &&other);
/// ///
/// Resets credentials /// Resets credentials
@@ -216,7 +216,7 @@ namespace eap
/// ///
virtual source_t combine( virtual source_t combine(
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser, _In_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached, _In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg, _In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName) = 0; _In_opt_z_ LPCTSTR pszTargetName) = 0;
@@ -226,98 +226,6 @@ namespace eap
}; };
///
/// Identity-only based method credentials
///
class credentials_identity : public credentials
{
public:
///
/// Constructs credentials
///
/// \param[in] mod EAP module to use for global services
///
credentials_identity(_In_ module &mod);
///
/// Copies credentials
///
/// \param[in] other Credentials to copy from
///
credentials_identity(_In_ const credentials_identity &other);
///
/// Moves credentials
///
/// \param[in] other Credentials to move from
///
credentials_identity(_Inout_ credentials_identity &&other) noexcept;
///
/// Copies credentials
///
/// \param[in] other Credentials to copy from
///
/// \returns Reference to this object
///
credentials_identity& operator=(_In_ const credentials_identity &other);
///
/// Moves credentials
///
/// \param[in] other Credentials to move from
///
/// \returns Reference to this object
///
credentials_identity& operator=(_Inout_ credentials_identity &&other) noexcept;
virtual config* clone() const;
/// \name XML management
/// @{
virtual void save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot) const;
virtual void load(_In_ IXMLDOMNode *pConfigRoot);
/// @}
/// \name Storage
/// @{
virtual void store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int level) const;
virtual void retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int level);
///
/// @copydoc eap::credentials::target_suffix()
/// \returns This implementation always returns `_T("pass")`
///
virtual LPCTSTR target_suffix() const;
/// @}
///
/// Combine credentials in the following order:
///
/// 1. Cached credentials
/// 2. Configured credentials (if \p cfg is derived from `config_method_with_cred`)
/// 3. Stored credentials
///
/// \param[in] dwFlags A combination of [EAP flags](https://msdn.microsoft.com/en-us/library/windows/desktop/bb891975.aspx) that describe the EAP authentication session behavior
/// \param[in] hTokenImpersonateUser Impersonation token for a logged-on user to collect user-related information
/// \param[in] cred_cached Cached credentials (optional, can be \c NULL)
/// \param[in] cfg Method configuration (when derived from `config_method_with_cred`, metod attempt to load credentials from \p cfg)
/// \param[in] pszTargetName The name in Windows Credential Manager to retrieve credentials from (optional, can be \c NULL)
///
/// \returns
/// - \c source_cache Credentials were obtained from EapHost cache
/// - \c source_config Credentials were set by method configuration
/// - \c source_storage Credentials were loaded from Windows Credential Manager
///
virtual source_t combine(
_In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName);
};
/// ///
/// Password based method credentials /// Password based method credentials
/// ///
@@ -354,7 +262,7 @@ namespace eap
/// ///
/// \param[in] other Credentials to move from /// \param[in] other Credentials to move from
/// ///
credentials_pass(_Inout_ credentials_pass &&other) noexcept; credentials_pass(_Inout_ credentials_pass &&other);
/// ///
/// Copies credentials /// Copies credentials
@@ -372,7 +280,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
credentials_pass& operator=(_Inout_ credentials_pass &&other) noexcept; credentials_pass& operator=(_Inout_ credentials_pass &&other);
virtual config* clone() const; virtual config* clone() const;
virtual void clear(); virtual void clear();
@@ -423,7 +331,7 @@ namespace eap
/// ///
virtual source_t combine( virtual source_t combine(
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser, _In_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached, _In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg, _In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName); _In_opt_z_ LPCTSTR pszTargetName);
@@ -465,7 +373,7 @@ namespace eap
/// ///
/// \param[in] other Credentials to move from /// \param[in] other Credentials to move from
/// ///
credentials_connection(_Inout_ credentials_connection &&other) noexcept; credentials_connection(_Inout_ credentials_connection &&other);
/// ///
/// Copies credentials /// Copies credentials
@@ -483,7 +391,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
credentials_connection& operator=(_Inout_ credentials_connection &&other) noexcept; credentials_connection& operator=(_Inout_ credentials_connection &&other);
virtual config* clone() const; virtual config* clone() const;

View File

@@ -262,7 +262,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ size_t &val);
/// \param[inout] cursor Memory cursor /// \param[inout] cursor Memory cursor
/// \param[in] val String to pack /// \param[in] val String to pack
/// ///
template<class _Traits, class _Ax> inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<char, _Traits, _Ax> &val); template<class _Elem, class _Traits, class _Ax> inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val);
/// ///
/// Returns packed size of a string /// Returns packed size of a string
@@ -271,7 +271,7 @@ template<class _Traits, class _Ax> inline void operator<<(_Inout_ eap::cursor_ou
/// ///
/// \returns Size of data when packed (in bytes) /// \returns Size of data when packed (in bytes)
/// ///
template<class _Traits, class _Ax> inline size_t pksizeof(_In_ const std::basic_string<char, _Traits, _Ax> &val); template<class _Elem, class _Traits, class _Ax> inline size_t pksizeof(_In_ const std::basic_string<_Elem, _Traits, _Ax> &val);
/// ///
/// Unpacks a string /// Unpacks a string
@@ -279,7 +279,7 @@ template<class _Traits, class _Ax> inline size_t pksizeof(_In_ const std::basic_
/// \param[inout] cursor Memory cursor /// \param[inout] cursor Memory cursor
/// \param[out] val String to unpack to /// \param[out] val String to unpack to
/// ///
template<class _Traits, class _Ax> inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<char, _Traits, _Ax> &val); template<class _Elem, class _Traits, class _Ax> inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val);
/// ///
/// Packs a wide string /// Packs a wide string
@@ -551,7 +551,7 @@ inline unsigned __int64 htonll(unsigned __int64 val);
/// \param[in ] val A 24-bit unsigned number in host byte order /// \param[in ] val A 24-bit unsigned number in host byte order
/// \param[out] out A 24-bit unsigned number in network byte order /// \param[out] out A 24-bit unsigned number in network byte order
/// ///
inline void hton24(_In_ unsigned int val, _Out_writes_(3) unsigned char out[3]); inline void hton24(_In_ unsigned int val, _Out_ unsigned char out[3]);
/// ///
/// Converts a 24-bit integer from TCP/IP network to host byte order. /// Converts a 24-bit integer from TCP/IP network to host byte order.
@@ -658,9 +658,6 @@ namespace eap
/// ///
/// Constructor /// Constructor
/// ///
/// Note: This constructor does not initialize data. Use sanitizing_blob_zf class when zero-initialization is required.
///
#pragma warning(suppress: 26495)
inline sanitizing_blob_f() inline sanitizing_blob_f()
{ {
} }
@@ -680,7 +677,7 @@ namespace eap
/// ///
/// \param[inout] other BLOB to move from /// \param[inout] other BLOB to move from
/// ///
inline sanitizing_blob_f(_Inout_ sanitizing_blob_f<N> &&other) noexcept inline sanitizing_blob_f(_Inout_ sanitizing_blob_f<N> &&other)
{ {
memcpy(data, other.data, N); memcpy(data, other.data, N);
} }
@@ -690,7 +687,7 @@ namespace eap
/// ///
/// \param[inout] other Zero-initialized BLOB to move from /// \param[inout] other Zero-initialized BLOB to move from
/// ///
inline sanitizing_blob_f(_Inout_ sanitizing_blob_zf<N> &&other) noexcept inline sanitizing_blob_f(_Inout_ sanitizing_blob_zf<N> &&other)
{ {
memcpy(data, other.data, N); memcpy(data, other.data, N);
memset(other.data, 0, N); memset(other.data, 0, N);
@@ -725,7 +722,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
inline sanitizing_blob_f& operator=(_Inout_ sanitizing_blob_f<N> &&other) noexcept inline sanitizing_blob_f& operator=(_Inout_ sanitizing_blob_f<N> &&other)
{ {
if (this != std::addressof(other)) if (this != std::addressof(other))
memcpy(data, other.data, N); memcpy(data, other.data, N);
@@ -739,7 +736,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
inline sanitizing_blob_f& operator=(_Inout_ sanitizing_blob_zf<N> &&other) noexcept inline sanitizing_blob_f& operator=(_Inout_ sanitizing_blob_zf<N> &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
memcpy(data, other.data, N); memcpy(data, other.data, N);
@@ -830,7 +827,7 @@ namespace eap
/// ///
/// \param[inout] other Zero-initialized BLOB to move from /// \param[inout] other Zero-initialized BLOB to move from
/// ///
inline sanitizing_blob_zf(_Inout_ sanitizing_blob_zf<N> &&other) noexcept : inline sanitizing_blob_zf(_Inout_ sanitizing_blob_zf<N> &&other) :
sanitizing_blob_f<N>(std::move(other)) sanitizing_blob_f<N>(std::move(other))
{ {
memset(other.data, 0, N); memset(other.data, 0, N);
@@ -851,7 +848,7 @@ namespace eap
/// ///
/// \param[inout] other BLOB to move from /// \param[inout] other BLOB to move from
/// ///
inline sanitizing_blob_zf(_Inout_ sanitizing_blob_f<N> &&other) noexcept : inline sanitizing_blob_zf(_Inout_ sanitizing_blob_f<N> &&other) :
sanitizing_blob_f<N>(std::move(other)) sanitizing_blob_f<N>(std::move(other))
{ {
} }
@@ -877,7 +874,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
inline sanitizing_blob_zf& operator=(_Inout_ sanitizing_blob_zf<N> &&other) noexcept inline sanitizing_blob_zf& operator=(_Inout_ sanitizing_blob_zf<N> &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
memcpy(data, other.data, N); memcpy(data, other.data, N);
@@ -907,7 +904,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
inline sanitizing_blob_zf& operator=(_Inout_ sanitizing_blob_f<N> &&other) noexcept inline sanitizing_blob_zf& operator=(_Inout_ sanitizing_blob_f<N> &&other)
{ {
if (this != std::addressof(other)) if (this != std::addressof(other))
memcpy(data, other.data, N); memcpy(data, other.data, N);
@@ -1065,66 +1062,59 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ size_t &val)
#endif #endif
template<class _Traits, class _Ax> template<class _Elem, class _Traits, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<char, _Traits, _Ax> &val) inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val)
{ {
size_t count = val.length(); size_t count = val.length();
assert(strlen(val.c_str()) == count); // String should not contain zero terminators. assert(strlen(val.c_str()) == count); // String should not contain zero terminators.
size_t size = sizeof(char)*(count + 1); size_t size = sizeof(_Elem)*(count + 1);
auto ptr_end = cursor.ptr + size; auto ptr_end = cursor.ptr + size;
assert(ptr_end <= cursor.ptr_end); assert(ptr_end <= cursor.ptr_end);
memcpy(cursor.ptr, (const char*)val.c_str(), size); memcpy(cursor.ptr, (const _Elem*)val.c_str(), size);
cursor.ptr = ptr_end; cursor.ptr = ptr_end;
} }
template<class _Traits, class _Ax> template<class _Elem, class _Traits, class _Ax>
inline size_t pksizeof(_In_ const std::basic_string<char, _Traits, _Ax> &val) inline size_t pksizeof(_In_ const std::basic_string<_Elem, _Traits, _Ax> &val)
{ {
return sizeof(char)*(val.length() + 1); return sizeof(_Elem)*(val.length() + 1);
} }
template<class _Traits, class _Ax> template<class _Elem, class _Traits, class _Ax>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<char, _Traits, _Ax> &val) inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<_Elem, _Traits, _Ax> &val)
{ {
size_t count_max = cursor.ptr_end - cursor.ptr; size_t count_max = cursor.ptr_end - cursor.ptr;
size_t count = strnlen((const char*)cursor.ptr, count_max); size_t count = strnlen((const _Elem*&)cursor.ptr, count_max);
assert(count < count_max); // String should be zero terminated. assert(count < count_max); // String should be zero terminated.
val.assign((const char*)cursor.ptr, count); val.assign((const _Elem*&)cursor.ptr, count);
cursor.ptr += sizeof(char)*(count + 1); cursor.ptr += sizeof(_Elem)*(count + 1);
} }
template<class _Traits, class _Ax> template<class _Traits, class _Ax>
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val) inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val)
{ {
size_t count = val.length(); std::string val_utf8;
assert(wcslen(val.c_str()) == count); // String should not contain zero terminators. WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL);
size_t size_max = cursor.ptr_end - cursor.ptr; cursor << val_utf8;
assert(size_max <= INT_MAX);
size_t size = WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)count, (char*)cursor.ptr, (int)size_max, NULL, NULL);
assert(!count && !size || count && size);
cursor.ptr += size;
cursor << (unsigned char)0;
} }
template<class _Traits, class _Ax> template<class _Traits, class _Ax>
inline size_t pksizeof(_In_ const std::basic_string<wchar_t, _Traits, _Ax> &val) inline size_t pksizeof(_In_ const std::basic_string<wchar_t, _Traits, _Ax> &val)
{ {
return sizeof(char)*(WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)val.length(), NULL, 0, NULL, NULL)) + sizeof(char); return sizeof(char)*(WideCharToMultiByte(CP_UTF8, 0, val.c_str(), (int)val.length(), NULL, 0, NULL, NULL) + 1);
} }
template<class _Traits, class _Ax> template<class _Traits, class _Ax>
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val) inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &val)
{ {
size_t count_max = cursor.ptr_end - cursor.ptr; std::string val_utf8;
size_t count = strnlen((const char*)cursor.ptr, count_max); cursor >> val_utf8;
assert(count < count_max); // String should be zero terminated. MultiByteToWideChar(CP_UTF8, 0, val_utf8, val);
MultiByteToWideChar(CP_UTF8, 0, (const char*)cursor.ptr, (int)count, val);
cursor.ptr += sizeof(char)*(count + 1);
} }
@@ -1270,7 +1260,7 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ winstd::cert_contex
cursor >> (unsigned int&)dwCertEncodingType; cursor >> (unsigned int&)dwCertEncodingType;
DWORD dwCertEncodedSize; DWORD dwCertEncodedSize;
assert(sizeof(dwCertEncodedSize) == sizeof(unsigned int)); assert(sizeof(dwCertEncodingType) == sizeof(unsigned int));
cursor >> (unsigned int&)dwCertEncodedSize; cursor >> (unsigned int&)dwCertEncodedSize;
if (dwCertEncodedSize) { if (dwCertEncodedSize) {
@@ -1410,7 +1400,7 @@ inline unsigned __int64 htonll(unsigned __int64 val)
#endif #endif
inline void hton24(_In_ unsigned int val, _Out_writes_(3) unsigned char out[3]) inline void hton24(_In_ unsigned int val, _Out_ unsigned char out[3])
{ {
assert(val <= 0xffffff); assert(val <= 0xffffff);
out[0] = (val >> 16) & 0xff; out[0] = (val >> 16) & 0xff;

View File

@@ -357,7 +357,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_element_base64(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement = NULL); inline HRESULT put_element_base64(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement = NULL);
/// ///
/// Creates a new child element with hexadecimal encoded text from BLOB /// Creates a new child element with hexadecimal encoded text from BLOB
@@ -376,7 +376,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_element_hex(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement = NULL); inline HRESULT put_element_hex(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement = NULL);
/// ///
/// Returns attribute text /// Returns attribute text
@@ -481,7 +481,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_z_ const BSTR bstrValue); inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_opt_z_ _In_z_ const BSTR bstrValue);
/// ///
/// Sets node attribute converted from number /// Sets node attribute converted from number
@@ -496,7 +496,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_ DWORD dwValue); inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_opt_z_ _In_ DWORD dwValue);
/// ///
/// Sets node attribute converted from boolean /// Sets node attribute converted from boolean
@@ -511,7 +511,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_ bool bValue); inline HRESULT put_attrib_value(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_opt_z_ _In_ bool bValue);
/// ///
/// Sets node attribute to Base64 encoded text from BLOB /// Sets node attribute to Base64 encoded text from BLOB
@@ -527,7 +527,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_attrib_base64(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen); inline HRESULT put_attrib_base64(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_opt_z_ _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen);
/// ///
/// Sets node attribute to hexadecimal encoded text from BLOB /// Sets node attribute to hexadecimal encoded text from BLOB
/// ///
@@ -542,7 +542,7 @@ namespace eapxml
/// - <0 if failed. /// - <0 if failed.
/// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure. /// Use `SUCCEEDED()` macro to test for first two cases (>=0) or `FAILED()` to test for failure.
/// ///
inline HRESULT put_attrib_hex(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen); inline HRESULT put_attrib_hex(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen);
/// ///
/// Builds XPath for a given node /// Builds XPath for a given node
@@ -786,7 +786,7 @@ namespace eapxml
pbstrValue = std::move(bstrEn); pbstrValue = std::move(bstrEn);
return S_OK; return S_OK;
} else } else
return HRESULT_FROM_WIN32(ERROR_NOT_FOUND); return ERROR_NOT_FOUND;
} }
winstd::com_obj<IXMLDOMNode> pXmlElLocalizedText; winstd::com_obj<IXMLDOMNode> pXmlElLocalizedText;
@@ -831,6 +831,7 @@ namespace eapxml
{ {
assert(pDoc); assert(pDoc);
assert(pCurrentDOMNode); assert(pCurrentDOMNode);
assert(ppXmlElement);
static const VARIANT varNodeTypeEl = { VT_I4, 0, 0, 0, { NODE_ELEMENT } }; static const VARIANT varNodeTypeEl = { VT_I4, 0, 0, 0, { NODE_ELEMENT } };
HRESULT hr; HRESULT hr;
@@ -877,7 +878,7 @@ namespace eapxml
} }
inline HRESULT put_element_base64(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement) inline HRESULT put_element_base64(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement)
{ {
std::wstring sBase64; std::wstring sBase64;
winstd::base64_enc enc; winstd::base64_enc enc;
@@ -886,7 +887,7 @@ namespace eapxml
} }
inline HRESULT put_element_hex(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement) inline HRESULT put_element_hex(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrElementName, _In_opt_z_ const BSTR bstrNamespace, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen, _Out_opt_ winstd::com_obj<IXMLDOMElement> *ppXmlElement)
{ {
std::wstring sHex; std::wstring sHex;
winstd::hex_enc enc; winstd::hex_enc enc;
@@ -935,6 +936,8 @@ namespace eapxml
inline HRESULT get_attrib_value(_In_ IXMLDOMNode *pXmlParent, _In_z_ const BSTR bstrAttributeName, _Out_ bool &pbValue) inline HRESULT get_attrib_value(_In_ IXMLDOMNode *pXmlParent, _In_z_ const BSTR bstrAttributeName, _Out_ bool &pbValue)
{ {
assert(pbValue);
winstd::bstr bstr; winstd::bstr bstr;
HRESULT hr = get_attrib_value(pXmlParent, bstrAttributeName, bstr); HRESULT hr = get_attrib_value(pXmlParent, bstrAttributeName, bstr);
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
@@ -1009,7 +1012,7 @@ namespace eapxml
} }
inline HRESULT put_attrib_base64(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen) inline HRESULT put_attrib_base64(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen)
{ {
std::wstring sBase64; std::wstring sBase64;
winstd::base64_enc enc; winstd::base64_enc enc;
@@ -1018,7 +1021,7 @@ namespace eapxml
} }
inline HRESULT put_attrib_hex(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_bytecount_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen) inline HRESULT put_attrib_hex(_In_ IXMLDOMNode *pCurrentDOMNode, _In_z_ const BSTR bstrAttributeName, _In_count_(nValueLen) LPCVOID pValue, _In_ SIZE_T nValueLen)
{ {
std::wstring sHex; std::wstring sHex;
winstd::hex_enc enc; winstd::hex_enc enc;

View File

@@ -69,7 +69,7 @@ namespace eap
/// ///
/// \param[in] other Method to move from /// \param[in] other Method to move from
/// ///
method(_Inout_ method &&other) noexcept; method(_Inout_ method &&other);
/// ///
/// Moves a method /// Moves a method
@@ -78,7 +78,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
method& operator=(_Inout_ method &&other) noexcept; method& operator=(_Inout_ method &&other);
/// \name Session management /// \name Session management
/// @{ /// @{
@@ -144,12 +144,12 @@ namespace eap
/// ///
/// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx) /// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx)
/// ///
/// \param[in ] reason The reason code for the authentication result returned in \p pResult. /// \param[in ] reason The reason code for the authentication result returned in \p pResult.
/// \param[inout] pResult A pointer to a structure that contains the authentication results. /// \param[out] pResult A pointer to a structure that contains the authentication results.
/// ///
virtual void get_result( virtual void get_result(
_In_ EapPeerMethodResultReason reason, _In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *pResult); _Out_ EapPeerMethodResult *pResult);
/// \name User Interaction /// \name User Interaction
/// @{ /// @{
@@ -236,7 +236,7 @@ namespace eap
/// ///
/// \param[in] other Method to move from /// \param[in] other Method to move from
/// ///
method_tunnel(_Inout_ method_tunnel &&other) noexcept; method_tunnel(_Inout_ method_tunnel &&other);
/// ///
/// Moves a method /// Moves a method
@@ -245,7 +245,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
method_tunnel& operator=(_Inout_ method_tunnel &&other) noexcept; method_tunnel& operator=(_Inout_ method_tunnel &&other);
/// \name Session management /// \name Session management
/// @{ /// @{
@@ -274,8 +274,8 @@ namespace eap
/// @} /// @}
virtual void get_result( virtual void get_result(
_In_ EapPeerMethodResultReason reason, _In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *pResult); _Out_ EapPeerMethodResult *pResult);
/// \name User Interaction /// \name User Interaction
/// @{ /// @{
@@ -326,7 +326,7 @@ namespace eap
/// ///
/// \param[in] other Method to move from /// \param[in] other Method to move from
/// ///
method_eap(_Inout_ method_eap &&other) noexcept; method_eap(_Inout_ method_eap &&other);
/// ///
/// Moves a method /// Moves a method
@@ -335,7 +335,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
method_eap& operator=(_Inout_ method_eap &&other) noexcept; method_eap& operator=(_Inout_ method_eap &&other);
/// \name Session management /// \name Session management
/// @{ /// @{

View File

@@ -93,17 +93,17 @@ namespace eap
/// ///
/// Allocate BLOB /// Allocate BLOB
/// ///
BYTE* alloc_memory(_In_ size_t size) const; BYTE* alloc_memory(_In_ size_t size);
/// ///
/// Free BLOB allocated with this peer /// Free BLOB allocated with this peer
/// ///
void free_memory(_In_ BYTE *ptr) const; void free_memory(_In_ BYTE *ptr);
/// ///
/// Free EAP_ERROR allocated with `make_error()` method /// Free EAP_ERROR allocated with `make_error()` method
/// ///
void free_error_memory(_In_ EAP_ERROR *err) const; void free_error_memory(_In_ EAP_ERROR *err);
/// ///
/// Makes a new method configuration /// Makes a new method configuration
@@ -147,35 +147,6 @@ namespace eap
/// ///
void log_error(_In_ const EAP_ERROR *err) const; void log_error(_In_ const EAP_ERROR *err) const;
///
/// Logs error and optionally returns EAP_ERROR
///
inline DWORD log_error(_Out_opt_ EAP_ERROR **eap_err, _In_ DWORD dwErrorCode, _In_opt_z_ LPCWSTR pszRootCauseString = NULL, _In_opt_z_ LPCWSTR pszRepairString = NULL, _In_opt_ DWORD dwReasonCode = 0, _In_opt_ LPCGUID pRootCauseGuid = NULL, _In_opt_ LPCGUID pRepairGuid = NULL, _In_opt_ LPCGUID pHelpLinkGuid = NULL) const
{
EAP_ERROR *e = make_error(dwErrorCode, pszRootCauseString, pszRepairString, dwReasonCode, pRootCauseGuid, pRepairGuid, pHelpLinkGuid);
log_error(e);
if (eap_err)
*eap_err = e;
else
free_error_memory(e);
return dwErrorCode;
}
///
/// Logs error and optionally returns EAP_ERROR
///
inline DWORD log_error(_Out_opt_ EAP_ERROR **eap_err, _In_ std::exception &err) const
{
EAP_ERROR *e = make_error(err);
log_error(e);
DWORD dwWinError = e->dwWinError;
if (eap_err)
*eap_err = e;
else
free_error_memory(e);
return dwWinError;
}
/// ///
/// Logs Unicode string config value /// Logs Unicode string config value
/// ///
@@ -317,7 +288,7 @@ namespace eap
/// ///
/// \returns Encrypted data /// \returns Encrypted data
/// ///
std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ HCRYPTHASH hHash = NULL) const; std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _Out_opt_ HCRYPTHASH hHash = NULL) const;
/// ///
@@ -330,7 +301,7 @@ namespace eap
/// \returns Encrypted data /// \returns Encrypted data
/// ///
template<class _Elem, class _Traits, class _Ax> template<class _Elem, class _Traits, class _Ax>
std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val, _In_opt_ HCRYPTHASH hHash = NULL) const std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<_Elem, _Traits, _Ax> &val, _Out_opt_ HCRYPTHASH hHash = NULL) const
{ {
return encrypt(hProv, val.c_str(), val.length()*sizeof(_Elem), hHash); return encrypt(hProv, val.c_str(), val.length()*sizeof(_Elem), hHash);
} }
@@ -346,7 +317,7 @@ namespace eap
/// \returns Encrypted data /// \returns Encrypted data
/// ///
template<class _Traits, class _Ax> template<class _Traits, class _Ax>
std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val, _In_opt_ HCRYPTHASH hHash = NULL) const std::vector<unsigned char> encrypt(_In_ HCRYPTPROV hProv, _In_ const std::basic_string<wchar_t, _Traits, _Ax> &val, _Out_opt_ HCRYPTHASH hHash = NULL) const
{ {
winstd::sanitizing_string val_utf8; winstd::sanitizing_string val_utf8;
WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL); WideCharToMultiByte(CP_UTF8, 0, val, val_utf8, NULL, NULL);
@@ -409,15 +380,13 @@ namespace eap
/// \returns Decrypted data /// \returns Decrypted data
/// ///
template<class _Ty, class _Ax> template<class _Ty, class _Ax>
std::vector<_Ty, _Ax> decrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ HCRYPTHASH hHash = NULL) const std::vector<_Ty, _Ax> decrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _Out_opt_ HCRYPTHASH hHash = NULL) const
{ {
// Import the private RSA key. // Import the private RSA key.
HRSRC res = FindResource(m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PRIVATE), RT_RCDATA); HRSRC res = FindResource(m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PRIVATE), RT_RCDATA);
if (!res) assert(res);
throw winstd::win_runtime_error(__FUNCTION__ " FindResource failed.");
HGLOBAL res_handle = LoadResource(m_instance, res); HGLOBAL res_handle = LoadResource(m_instance, res);
if (!res_handle) assert(res_handle);
throw winstd::win_runtime_error(__FUNCTION__ " LoadResource failed.");
winstd::crypt_key key_rsa; winstd::crypt_key key_rsa;
std::unique_ptr<unsigned char[], winstd::LocalFree_delete<unsigned char[]> > keyinfo_data; std::unique_ptr<unsigned char[], winstd::LocalFree_delete<unsigned char[]> > keyinfo_data;
DWORD keyinfo_size = 0; DWORD keyinfo_size = 0;
@@ -454,7 +423,7 @@ namespace eap
/// \returns Decrypted string /// \returns Decrypted string
/// ///
template<class _Elem, class _Traits, class _Ax> template<class _Elem, class _Traits, class _Ax>
std::basic_string<_Elem, _Traits, _Ax> decrypt_str(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ HCRYPTHASH hHash = NULL) const std::basic_string<_Elem, _Traits, _Ax> decrypt_str(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _Out_opt_ HCRYPTHASH hHash = NULL) const
{ {
std::vector<_Elem, sanitizing_allocator<_Elem> > buf(std::move(decrypt(hProv, data, size, hHash))); std::vector<_Elem, sanitizing_allocator<_Elem> > buf(std::move(decrypt(hProv, data, size, hHash)));
return std::basic_string<_Elem, _Traits, _Ax>(buf.data(), buf.size()); return std::basic_string<_Elem, _Traits, _Ax>(buf.data(), buf.size());
@@ -472,7 +441,7 @@ namespace eap
/// \returns Decrypted string /// \returns Decrypted string
/// ///
template<class _Traits, class _Ax> template<class _Traits, class _Ax>
std::basic_string<wchar_t, _Traits, _Ax> decrypt_str(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ HCRYPTHASH hHash = NULL) const std::basic_string<wchar_t, _Traits, _Ax> decrypt_str(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _Out_opt_ HCRYPTHASH hHash = NULL) const
{ {
winstd::sanitizing_string buf(std::move(decrypt_str(hProv, data, size, hHash))); winstd::sanitizing_string buf(std::move(decrypt_str(hProv, data, size, hHash)));
std::basic_string<wchar_t, _Traits, _Ax> dec; std::basic_string<wchar_t, _Traits, _Ax> dec;
@@ -896,13 +865,13 @@ namespace eap
/// \param[out] ppDataFromInteractiveUI A pointer that receives a credentials BLOB that can be used in authentication. The caller should free the inner pointers using the function \p EapPeerFreeMemory(), starting at the innermost pointer. If a non-NULL value is supplied for this parameter, meaning that an existing data BLOB is passed to it, the supplied data BLOB will be updated and returned in this parameter. /// \param[out] ppDataFromInteractiveUI A pointer that receives a credentials BLOB that can be used in authentication. The caller should free the inner pointers using the function \p EapPeerFreeMemory(), starting at the innermost pointer. If a non-NULL value is supplied for this parameter, meaning that an existing data BLOB is passed to it, the supplied data BLOB will be updated and returned in this parameter.
/// ///
virtual void query_ui_blob_from_interactive_ui_input_fields( virtual void query_ui_blob_from_interactive_ui_input_fields(
_In_ DWORD dwVersion, _In_ DWORD dwVersion,
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_ DWORD dwUIContextDataSize, _In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData, _In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData, _In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
_Out_ DWORD *pdwDataFromInteractiveUISize, _Out_ DWORD *pdwDataFromInteractiveUISize,
_Outptr_result_buffer_(*pdwDataFromInteractiveUISize) BYTE **ppDataFromInteractiveUI) const; _Out_ BYTE **ppDataFromInteractiveUI) const;
/// \name Session management /// \name Session management
/// @{ /// @{
@@ -973,9 +942,9 @@ namespace eap
/// \param[inout] pdwSendPacketSize A pointer to a value that contains the size in bytes of the buffer allocated for the response packet. On return, this parameter receives a pointer to the actual size in bytes of \p pSendPacket. /// \param[inout] pdwSendPacketSize A pointer to a value that contains the size in bytes of the buffer allocated for the response packet. On return, this parameter receives a pointer to the actual size in bytes of \p pSendPacket.
/// ///
virtual void get_response_packet( virtual void get_response_packet(
_In_ EAP_SESSION_HANDLE hSession, _In_ EAP_SESSION_HANDLE hSession,
_Out_bytecapcount_(*pdwSendPacketSize) EapPacket *pSendPacket, _Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
_Inout_ DWORD *pdwSendPacketSize) = 0; _Inout_ DWORD *pdwSendPacketSize) = 0;
/// @} /// @}
@@ -984,14 +953,14 @@ namespace eap
/// ///
/// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx) /// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx)
/// ///
/// \param[in ] hSession A unique handle for this EAP authentication session on the EAPHost server. This handle is returned in the \p pSessionHandle parameter in a previous call to `EapPeerBeginSession()`. /// \param[in ] hSession A unique handle for this EAP authentication session on the EAPHost server. This handle is returned in the \p pSessionHandle parameter in a previous call to `EapPeerBeginSession()`.
/// \param[in ] reason The reason code for the authentication result returned in \p pResult. /// \param[in ] reason The reason code for the authentication result returned in \p pResult.
/// \param[inout] pResult A pointer to a structure that contains the authentication results. /// \param[out] pResult A pointer to a structure that contains the authentication results.
/// ///
virtual void get_result( virtual void get_result(
_In_ EAP_SESSION_HANDLE hSession, _In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason, _In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *pResult) = 0; _Out_ EapPeerMethodResult *pResult) = 0;
/// \name User Interaction /// \name User Interaction
/// @{ /// @{

View File

@@ -1,102 +0,0 @@
/*
Copyright 2015-2017 Amebis
Copyright 2016-2017 GÉANT
This file is part of GÉANTLink.
GÉANTLink is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GÉANTLink is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
namespace eap
{
class ui_context;
}
#pragma once
#include "Config.h"
#include "Credentials.h"
#include "Module.h"
#include "../../../include/Version.h"
namespace eap
{
///
/// \defgroup EAPBaseUICtx UI Context
/// Back and front-end inter-process data exchange
///
/// @{
///
/// UI context
///
class ui_context : public packable
{
public:
///
/// Constructs context
///
/// \param[in] cfg Connection configuration
/// \param[in] cred Connection credentials
///
ui_context(_In_ config_connection &cfg, _In_ credentials_connection &cred);
///
/// Copies context
///
/// \param[in] other Credentials to copy from
///
ui_context(_In_ const ui_context &other);
///
/// Moves context
///
/// \param[in] other Credentials to move from
///
ui_context(_Inout_ ui_context &&other) noexcept;
///
/// Copies context
///
/// \param[in] other Credentials to copy from
///
/// \returns Reference to this object
///
ui_context& operator=(_In_ const ui_context &other);
///
/// Moves context
///
/// \param[in] other Configuration to move from
///
/// \returns Reference to this object
///
ui_context& operator=(_Inout_ ui_context &&other) noexcept;
/// \name BLOB management
/// @{
virtual void operator<<(_Inout_ cursor_out &cursor) const;
virtual size_t get_pk_size() const;
virtual void operator>>(_Inout_ cursor_in &cursor);
/// @}
public:
config_connection &m_cfg; ///< Connection configuration
credentials_connection &m_cred; ///< Connection credentials
};
/// @}
}

View File

@@ -40,7 +40,7 @@ eap::config::config(_In_ const config &other) :
} }
eap::config::config(_Inout_ config &&other) noexcept : eap::config::config(_Inout_ config &&other) :
m_module(other.m_module) m_module(other.m_module)
{ {
} }
@@ -55,7 +55,7 @@ eap::config& eap::config::operator=(_In_ const config &other)
} }
eap::config& eap::config::operator=(_Inout_ config &&other) noexcept eap::config& eap::config::operator=(_Inout_ config &&other)
{ {
if (this != &other) if (this != &other)
assert(&m_module == &other.m_module); assert(&m_module == &other.m_module);
@@ -103,7 +103,7 @@ eap::config_method::config_method(_In_ const config_method &other) :
} }
eap::config_method::config_method(_Inout_ config_method &&other) noexcept : eap::config_method::config_method(_Inout_ config_method &&other) :
m_level (std::move(other.m_level )), m_level (std::move(other.m_level )),
m_allow_save (std::move(other.m_allow_save )), m_allow_save (std::move(other.m_allow_save )),
m_last_status(std::move(other.m_last_status)), m_last_status(std::move(other.m_last_status)),
@@ -127,7 +127,7 @@ eap::config_method& eap::config_method::operator=(_In_ const config_method &othe
} }
eap::config_method& eap::config_method::operator=(_Inout_ config_method &&other) noexcept eap::config_method& eap::config_method::operator=(_Inout_ config_method &&other)
{ {
if (this != &other) { if (this != &other) {
assert(m_level == other.m_level); // Allow move within same configuration level only. assert(m_level == other.m_level); // Allow move within same configuration level only.
@@ -231,7 +231,7 @@ eap::config_method_with_cred::config_method_with_cred(_In_ const config_method_w
} }
eap::config_method_with_cred::config_method_with_cred(_Inout_ config_method_with_cred &&other) noexcept : eap::config_method_with_cred::config_method_with_cred(_Inout_ config_method_with_cred &&other) :
m_use_cred (std::move(other.m_use_cred)), m_use_cred (std::move(other.m_use_cred)),
m_cred (std::move(other.m_cred )), m_cred (std::move(other.m_cred )),
config_method(std::move(other )) config_method(std::move(other ))
@@ -251,7 +251,7 @@ eap::config_method_with_cred& eap::config_method_with_cred::operator=(_In_ const
} }
eap::config_method_with_cred& eap::config_method_with_cred::operator=(_Inout_ config_method_with_cred &&other) noexcept eap::config_method_with_cred& eap::config_method_with_cred::operator=(_Inout_ config_method_with_cred &&other)
{ {
if (this != &other) { if (this != &other) {
(config_method&)*this = std::move(other ); (config_method&)*this = std::move(other );
@@ -362,7 +362,7 @@ eap::config_provider::config_provider(_In_ const config_provider &other) :
} }
eap::config_provider::config_provider(_Inout_ config_provider &&other) noexcept : eap::config_provider::config_provider(_Inout_ config_provider &&other) :
m_namespace (std::move(other.m_namespace )), m_namespace (std::move(other.m_namespace )),
m_id (std::move(other.m_id )), m_id (std::move(other.m_id )),
m_read_only (std::move(other.m_read_only )), m_read_only (std::move(other.m_read_only )),
@@ -404,7 +404,7 @@ eap::config_provider& eap::config_provider::operator=(_In_ const config_provider
} }
eap::config_provider& eap::config_provider::operator=(_Inout_ config_provider &&other) noexcept eap::config_provider& eap::config_provider::operator=(_Inout_ config_provider &&other)
{ {
if (this != &other) { if (this != &other) {
(config&&)*this = std::move(other ); (config&&)*this = std::move(other );
@@ -700,7 +700,7 @@ eap::config_connection::config_connection(_In_ const config_connection &other) :
} }
eap::config_connection::config_connection(_Inout_ config_connection &&other) noexcept : eap::config_connection::config_connection(_Inout_ config_connection &&other) :
m_providers(std::move(other.m_providers)), m_providers(std::move(other.m_providers)),
config (std::move(other )) config (std::move(other ))
{ {
@@ -718,7 +718,7 @@ eap::config_connection& eap::config_connection::operator=(_In_ const config_conn
} }
eap::config_connection& eap::config_connection::operator=(_Inout_ config_connection &&other) noexcept eap::config_connection& eap::config_connection::operator=(_Inout_ config_connection &&other)
{ {
if (this != &other) { if (this != &other) {
(config&&)*this = std::move(other ); (config&&)*this = std::move(other );

View File

@@ -53,7 +53,7 @@ eap::credentials::credentials(_In_ const credentials &other) :
} }
eap::credentials::credentials(_Inout_ credentials &&other) noexcept : eap::credentials::credentials(_Inout_ credentials &&other) :
m_identity(std::move(other.m_identity)), m_identity(std::move(other.m_identity)),
config(std::move(other)) config(std::move(other))
{ {
@@ -71,7 +71,7 @@ eap::credentials& eap::credentials::operator=(_In_ const credentials &other)
} }
eap::credentials& eap::credentials::operator=(_Inout_ credentials &&other) noexcept eap::credentials& eap::credentials::operator=(_Inout_ credentials &&other)
{ {
if (this != &other) { if (this != &other) {
(config&)*this = std::move(other); (config&)*this = std::move(other);
@@ -163,183 +163,6 @@ tstring eap::credentials::get_name() const
} }
//////////////////////////////////////////////////////////////////////
// eap::credentials_identity
//////////////////////////////////////////////////////////////////////
eap::credentials_identity::credentials_identity(_In_ module &mod) : credentials(mod)
{
}
eap::credentials_identity::credentials_identity(_In_ const credentials_identity &other) : credentials(other)
{
}
eap::credentials_identity::credentials_identity(_Inout_ credentials_identity &&other) noexcept : credentials(std::move(other))
{
}
eap::credentials_identity& eap::credentials_identity::operator=(_In_ const credentials_identity &other)
{
if (this != &other)
(credentials&)*this = other;
return *this;
}
eap::credentials_identity& eap::credentials_identity::operator=(_Inout_ credentials_identity &&other) noexcept
{
if (this != &other)
(credentials&)*this = std::move(other);
return *this;
}
eap::config* eap::credentials_identity::clone() const
{
return new credentials_identity(*this);
}
void eap::credentials_identity::save(_In_ IXMLDOMDocument *pDoc, _In_ IXMLDOMNode *pConfigRoot) const
{
assert(pDoc);
assert(pConfigRoot);
// We could have used credentials::save() to save identity,
// but that method tolerates absence of <UserName> element,
// whereas for this class the absence of <UserName> is fatal.
config::save(pDoc, pConfigRoot);
HRESULT hr;
// <UserName>
if (FAILED(hr = eapxml::put_element_value(pDoc, pConfigRoot, bstr(L"UserName"), namespace_eapmetadata, bstr(m_identity))))
throw com_runtime_error(hr, __FUNCTION__ " Error creating <UserName> element.");
}
void eap::credentials_identity::load(_In_ IXMLDOMNode *pConfigRoot)
{
assert(pConfigRoot);
HRESULT hr;
// We could have used credentials::load() to load identity,
// but that method tolerates absence of <UserName> element,
// whereas for this class the absence of <UserName> is fatal.
config::load(pConfigRoot);
wstring xpath(eapxml::get_xpath(pConfigRoot));
if (FAILED(hr = eapxml::get_element_value(pConfigRoot, bstr(L"eap-metadata:UserName"), m_identity)))
throw com_runtime_error(hr, __FUNCTION__ " Error reading <UserName> element.");
m_module.log_config((xpath + L"/UserName").c_str(), m_identity.c_str());
}
void eap::credentials_identity::store(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int level) const
{
assert(pszTargetName);
tstring target(target_name(pszTargetName, level));
// Write credentials.
assert(m_identity.length() < CRED_MAX_USERNAME_LENGTH);
CREDENTIAL cred = {
0, // Flags
CRED_TYPE_GENERIC, // Type
const_cast<LPTSTR>(target.c_str()), // TargetName
_T(""), // Comment
{ 0, 0 }, // LastWritten
0, // CredentialBlobSize
NULL, // CredentialBlob
CRED_PERSIST_ENTERPRISE, // Persist
0, // AttributeCount
NULL, // Attributes
NULL, // TargetAlias
const_cast<LPTSTR>(m_identity.c_str()) // UserName
};
if (!CredWrite(&cred, 0))
throw win_runtime_error(__FUNCTION__ " CredWrite failed.");
}
void eap::credentials_identity::retrieve(_In_z_ LPCTSTR pszTargetName, _In_ unsigned int level)
{
assert(pszTargetName);
// Read credentials.
unique_ptr<CREDENTIAL, CredFree_delete<CREDENTIAL> > cred;
if (!CredRead(target_name(pszTargetName, level).c_str(), CRED_TYPE_GENERIC, 0, (PCREDENTIAL*)&cred))
throw win_runtime_error(__FUNCTION__ " CredRead failed.");
if (cred->UserName)
m_identity = cred->UserName;
else
m_identity.clear();
wstring xpath(pszTargetName);
m_module.log_config((xpath + L"/Identity").c_str(), m_identity.c_str());
}
LPCTSTR eap::credentials_identity::target_suffix() const
{
return _T("id");
}
eap::credentials::source_t eap::credentials_identity::combine(
_In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName)
{
UNREFERENCED_PARAMETER(dwFlags);
if (cred_cached) {
// Using EAP service cached credentials.
*this = *dynamic_cast<const credentials_identity*>(cred_cached);
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CACHED2, event_data((unsigned int)cfg.get_method_id()), event_data(credentials_identity::get_name()), event_data(pszTargetName), event_data::blank);
return source_cache;
}
auto cfg_with_cred = dynamic_cast<const config_method_with_cred*>(&cfg);
if (cfg_with_cred && cfg_with_cred->m_use_cred) {
// Using configured credentials.
*this = *dynamic_cast<const credentials_identity*>(cfg_with_cred->m_cred.get());
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_CONFIG2, event_data((unsigned int)cfg.get_method_id()), event_data(credentials_identity::get_name()), event_data(pszTargetName), event_data::blank);
return source_config;
}
if (pszTargetName) {
// Switch user context.
user_impersonator impersonating(hTokenImpersonateUser);
try {
credentials_identity cred_loaded(m_module);
cred_loaded.retrieve(pszTargetName, cfg.m_level);
// Using stored credentials.
*this = std::move(cred_loaded);
m_module.log_event(&EAPMETHOD_TRACE_EVT_CRED_STORED2, event_data((unsigned int)cfg.get_method_id()), event_data(credentials_identity::get_name()), event_data(pszTargetName), event_data::blank);
return source_storage;
} catch (...) {
// Not actually an error.
}
}
return source_unknown;
}
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// eap::credentials_pass // eap::credentials_pass
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
@@ -359,7 +182,7 @@ eap::credentials_pass::credentials_pass(_In_ const credentials_pass &other) :
} }
eap::credentials_pass::credentials_pass(_Inout_ credentials_pass &&other) noexcept : eap::credentials_pass::credentials_pass(_Inout_ credentials_pass &&other) :
m_password (std::move(other.m_password)), m_password (std::move(other.m_password)),
m_enc_alg (std::move(other.m_enc_alg )), m_enc_alg (std::move(other.m_enc_alg )),
credentials(std::move(other )) credentials(std::move(other ))
@@ -379,7 +202,7 @@ eap::credentials_pass& eap::credentials_pass::operator=(_In_ const credentials_p
} }
eap::credentials_pass& eap::credentials_pass::operator=(_Inout_ credentials_pass &&other) noexcept eap::credentials_pass& eap::credentials_pass::operator=(_Inout_ credentials_pass &&other)
{ {
if (this != &other) { if (this != &other) {
(credentials&)*this = std::move(other ); (credentials&)*this = std::move(other );
@@ -603,7 +426,7 @@ LPCTSTR eap::credentials_pass::target_suffix() const
eap::credentials::source_t eap::credentials_pass::combine( eap::credentials::source_t eap::credentials_pass::combine(
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser, _In_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached, _In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg, _In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName) _In_opt_z_ LPCTSTR pszTargetName)
@@ -737,7 +560,7 @@ eap::credentials_connection::credentials_connection(_In_ const credentials_conne
} }
eap::credentials_connection::credentials_connection(_Inout_ credentials_connection &&other) noexcept : eap::credentials_connection::credentials_connection(_Inout_ credentials_connection &&other) :
m_cfg ( other.m_cfg ), m_cfg ( other.m_cfg ),
m_namespace(std::move(other.m_namespace)), m_namespace(std::move(other.m_namespace)),
m_id (std::move(other.m_id )), m_id (std::move(other.m_id )),
@@ -760,7 +583,7 @@ eap::credentials_connection& eap::credentials_connection::operator=(_In_ const c
} }
eap::credentials_connection& eap::credentials_connection::operator=(_Inout_ credentials_connection &&other) noexcept eap::credentials_connection& eap::credentials_connection::operator=(_Inout_ credentials_connection &&other)
{ {
if (this != &other) { if (this != &other) {
(config&)*this = std::move(other ); (config&)*this = std::move(other );
@@ -948,7 +771,7 @@ template<class _Elem, class _Traits, class _Ax>
inline static basic_string<_Elem, _Traits, _Ax> kph_encrypt(_In_ HCRYPTPROV hProv, _In_z_ const char *src) inline static basic_string<_Elem, _Traits, _Ax> kph_encrypt(_In_ HCRYPTPROV hProv, _In_z_ const char *src)
{ {
basic_string<_Elem, _Traits, _Ax> str; basic_string<_Elem, _Traits, _Ax> str;
unsigned short key[8] = { 0 }; unsigned short key[8];
// Generate the key. // Generate the key.
if (!CryptGenRandom(hProv, sizeof(key), (BYTE*)key)) if (!CryptGenRandom(hProv, sizeof(key), (BYTE*)key))

View File

@@ -34,13 +34,13 @@ eap::method::method(_In_ module &mod) :
} }
eap::method::method(_Inout_ method &&other) noexcept : eap::method::method(_Inout_ method &&other) :
m_module(other.m_module) m_module(other.m_module)
{ {
} }
eap::method& eap::method::operator=(_Inout_ method &&other) noexcept eap::method& eap::method::operator=(_Inout_ method &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
assert(std::addressof(m_module) == std::addressof(other.m_module)); // Move method within same module only! assert(std::addressof(m_module) == std::addressof(other.m_module)); // Move method within same module only!
@@ -96,7 +96,7 @@ EapPeerMethodResponseAction eap::method::set_ui_context(
} }
void eap::method::get_response_attributes(_Out_ EapAttributes *pAttribs) void eap::method::get_response_attributes(_Inout_ EapAttributes *pAttribs)
{ {
assert(pAttribs); assert(pAttribs);
@@ -126,14 +126,14 @@ eap::method_tunnel::method_tunnel(_In_ module &mod, _In_ method *inner) :
} }
eap::method_tunnel::method_tunnel(_Inout_ method_tunnel &&other) noexcept : eap::method_tunnel::method_tunnel(_Inout_ method_tunnel &&other) :
m_inner(std::move(other.m_inner)), m_inner(std::move(other.m_inner)),
method (std::move(other )) method (std::move(other ))
{ {
} }
eap::method_tunnel& eap::method_tunnel::operator=(_Inout_ method_tunnel &&other) noexcept eap::method_tunnel& eap::method_tunnel::operator=(_Inout_ method_tunnel &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
(method&)*this = std::move(other ); (method&)*this = std::move(other );
@@ -213,7 +213,7 @@ EapPeerMethodResponseAction eap::method_tunnel::set_ui_context(
} }
void eap::method_tunnel::get_response_attributes(_Out_ EapAttributes *pAttribs) void eap::method_tunnel::get_response_attributes(_Inout_ EapAttributes *pAttribs)
{ {
assert(m_inner); assert(m_inner);
m_inner->get_response_attributes(pAttribs); m_inner->get_response_attributes(pAttribs);
@@ -240,7 +240,7 @@ eap::method_eap::method_eap(_In_ module &mod, _In_ winstd::eap_type_t eap_method
} }
eap::method_eap::method_eap(_Inout_ method_eap &&other) noexcept : eap::method_eap::method_eap(_Inout_ method_eap &&other) :
m_eap_method (std::move(other.m_eap_method)), m_eap_method (std::move(other.m_eap_method)),
m_id (std::move(other.m_id )), m_id (std::move(other.m_id )),
m_send_nak (std::move(other.m_send_nak )), m_send_nak (std::move(other.m_send_nak )),
@@ -249,7 +249,7 @@ eap::method_eap::method_eap(_Inout_ method_eap &&other) noexcept :
} }
eap::method_eap& eap::method_eap::operator=(_Inout_ method_eap &&other) noexcept eap::method_eap& eap::method_eap::operator=(_Inout_ method_eap &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
assert(m_eap_method == other.m_eap_method); // Move method within same EAP method type only! assert(m_eap_method == other.m_eap_method); // Move method within same EAP method type only!
@@ -274,7 +274,7 @@ void eap::method_eap::begin_session(
// Inner method can generate packets of up to 64kB (less the EAP packet header). // Inner method can generate packets of up to 64kB (less the EAP packet header).
// Initialize inner method with appropriately less packet size maximum. // Initialize inner method with appropriately less packet size maximum.
if (dwMaxSendPacketSize < sizeof(EapPacket)) if (dwMaxSendPacketSize < sizeof(EapPacket))
throw invalid_argument(string_printf(__FUNCTION__ " Maximum packet size too small (minimum: %zu, available: %u).", sizeof(EapPacket) + 1, dwMaxSendPacketSize)); throw invalid_argument(string_printf(__FUNCTION__ " Maximum packet size too small (minimum: %u, available: %u).", sizeof(EapPacket) + 1, dwMaxSendPacketSize));
assert(m_inner); assert(m_inner);
m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, std::min<DWORD>(dwMaxSendPacketSize, MAXWORD) - sizeof(EapPacket)); m_inner->begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, std::min<DWORD>(dwMaxSendPacketSize, MAXWORD) - sizeof(EapPacket));
} }
@@ -337,7 +337,7 @@ void eap::method_eap::get_response_packet(
// Check packet size. We will suggest one EAP method alone, so we need one byte for data. // Check packet size. We will suggest one EAP method alone, so we need one byte for data.
size_t size_packet = sizeof(EapPacket) + 1; size_t size_packet = sizeof(EapPacket) + 1;
if (size_packet > size_max) if (size_packet > size_max)
throw invalid_argument(string_printf(__FUNCTION__ " This method does not support packet fragmentation, but the data size is too big to fit in one packet (packet: %zu, maximum: %u).", size_packet, size_max)); throw invalid_argument(string_printf(__FUNCTION__ " This method does not support packet fragmentation, but the data size is too big to fit in one packet (packet: %u, maximum: %u).", size_packet, size_max));
packet.reserve(size_packet); // To avoid reallocation when inserting EAP packet header later. packet.reserve(size_packet); // To avoid reallocation when inserting EAP packet header later.
// Data of Legacy Nak packet is a list of supported EAP types: our method alone. // Data of Legacy Nak packet is a list of supported EAP types: our method alone.

View File

@@ -28,7 +28,7 @@ using namespace winstd;
// eap::module // eap::module
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
eap::module::module(_In_ eap_type_t eap_method) : eap::module::module(eap_type_t eap_method) :
m_eap_method(eap_method), m_eap_method(eap_method),
m_instance(NULL) m_instance(NULL)
{ {
@@ -141,16 +141,16 @@ EAP_ERROR* eap::module::make_error(_In_ const EAP_ERROR *err) const
} }
BYTE* eap::module::alloc_memory(_In_ size_t size) const BYTE* eap::module::alloc_memory(_In_ size_t size)
{ {
BYTE *p = (BYTE*)HeapAlloc(m_heap, 0, size); BYTE *p = (BYTE*)HeapAlloc(m_heap, 0, size);
if (!p) if (!p)
throw win_runtime_error(winstd::string_printf(__FUNCTION__ " Error allocating memory for BLOB (%zuB).", size)); throw win_runtime_error(winstd::string_printf(__FUNCTION__ " Error allocating memory for BLOB (%uB).", size));
return p; return p;
} }
void eap::module::free_memory(_In_ BYTE *ptr) const void eap::module::free_memory(_In_ BYTE *ptr)
{ {
#if !EAP_ENCRYPT_BLOBS #if !EAP_ENCRYPT_BLOBS
// Since we do security here and some of the BLOBs contain credentials, sanitize every memory block before freeing. // Since we do security here and some of the BLOBs contain credentials, sanitize every memory block before freeing.
@@ -160,7 +160,7 @@ void eap::module::free_memory(_In_ BYTE *ptr) const
} }
void eap::module::free_error_memory(_In_ EAP_ERROR *err) const void eap::module::free_error_memory(_In_ EAP_ERROR *err)
{ {
// pRootCauseString and pRepairString always trail the ppEapError to reduce number of (de)allocations. // pRootCauseString and pRepairString always trail the ppEapError to reduce number of (de)allocations.
HeapFree(m_heap, 0, err); HeapFree(m_heap, 0, err);
@@ -193,7 +193,7 @@ eap::config_method* eap::module::make_config_method()
} }
std::vector<unsigned char> eap::module::encrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ HCRYPTHASH hHash) const std::vector<unsigned char> eap::module::encrypt(_In_ HCRYPTPROV hProv, _In_bytecount_(size) const void *data, _In_ size_t size, _Out_opt_ HCRYPTHASH hHash) const
{ {
// Generate 256-bit AES session key. // Generate 256-bit AES session key.
crypt_key key_aes; crypt_key key_aes;
@@ -202,11 +202,9 @@ std::vector<unsigned char> eap::module::encrypt(_In_ HCRYPTPROV hProv, _In_bytec
// Import the public RSA key. // Import the public RSA key.
HRSRC res = FindResource(m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PUBLIC), RT_RCDATA); HRSRC res = FindResource(m_instance, MAKEINTRESOURCE(IDR_EAP_KEY_PUBLIC), RT_RCDATA);
if (!res) assert(res);
throw winstd::win_runtime_error(__FUNCTION__ " FindResource failed.");
HGLOBAL res_handle = LoadResource(m_instance, res); HGLOBAL res_handle = LoadResource(m_instance, res);
if (!res_handle) assert(res_handle);
throw winstd::win_runtime_error(__FUNCTION__ " LoadResource failed.");
crypt_key key_rsa; crypt_key key_rsa;
unique_ptr<CERT_PUBLIC_KEY_INFO, LocalFree_delete<CERT_PUBLIC_KEY_INFO> > keyinfo_data; unique_ptr<CERT_PUBLIC_KEY_INFO, LocalFree_delete<CERT_PUBLIC_KEY_INFO> > keyinfo_data;
DWORD keyinfo_size = 0; DWORD keyinfo_size = 0;
@@ -323,13 +321,13 @@ void eap::peer::query_interactive_ui_input_fields(
void eap::peer::query_ui_blob_from_interactive_ui_input_fields( void eap::peer::query_ui_blob_from_interactive_ui_input_fields(
_In_ DWORD dwVersion, _In_ DWORD dwVersion,
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_ DWORD dwUIContextDataSize, _In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData, _In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData, _In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
_Out_ DWORD *pdwDataFromInteractiveUISize, _Out_ DWORD *pdwDataFromInteractiveUISize,
_Outptr_result_buffer_(*pdwDataFromInteractiveUISize) BYTE **ppDataFromInteractiveUI) const _Out_ BYTE **ppDataFromInteractiveUI) const
{ {
UNREFERENCED_PARAMETER(dwVersion); UNREFERENCED_PARAMETER(dwVersion);
UNREFERENCED_PARAMETER(dwFlags); UNREFERENCED_PARAMETER(dwFlags);

View File

@@ -24,7 +24,6 @@
#include "../include/Credentials.h" #include "../include/Credentials.h"
#include "../include/Method.h" #include "../include/Method.h"
#include "../include/Module.h" #include "../include/Module.h"
#include "../include/UIContext.h"
#include "../include/EAP.h" #include "../include/EAP.h"
#include "../include/EAPXML.h" #include "../include/EAPXML.h"

View File

@@ -1,100 +0,0 @@
/*
Copyright 2015-2016 Amebis
Copyright 2016 GÉANT
This file is part of GÉANTLink.
GÉANTLink is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GÉANTLink is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GÉANTLink. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StdAfx.h"
using namespace std;
using namespace winstd;
//////////////////////////////////////////////////////////////////////
// eap::ui_context
//////////////////////////////////////////////////////////////////////
eap::ui_context::ui_context(_In_ config_connection &cfg, _In_ credentials_connection &cred) :
m_cfg(cfg),
m_cred(cred)
{
}
eap::ui_context::ui_context(_In_ const ui_context &other) :
m_cfg (other.m_cfg ),
m_cred (other.m_cred),
packable(other )
{
}
eap::ui_context::ui_context(_Inout_ ui_context &&other) noexcept :
m_cfg ( other.m_cfg ),
m_cred ( other.m_cred ),
packable(std::move(other ))
{
}
eap::ui_context& eap::ui_context::operator=(_In_ const ui_context &other)
{
if (this != &other) {
assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Copy context within same configuration only!
assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Copy context within same credentials only!
(packable&)*this = other;
}
return *this;
}
eap::ui_context& eap::ui_context::operator=(_Inout_ ui_context &&other) noexcept
{
if (this != &other) {
assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Move context within same configuration only!
assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Move context within same credentials only!
(packable&)*this = std::move(other);
}
return *this;
}
void eap::ui_context::operator<<(_Inout_ cursor_out &cursor) const
{
packable::operator<<(cursor);
cursor << m_cfg ;
cursor << m_cred;
}
size_t eap::ui_context::get_pk_size() const
{
return
packable::get_pk_size() +
pksizeof(m_cfg ) +
pksizeof(m_cred);
}
void eap::ui_context::operator>>(_Inout_ cursor_in &cursor)
{
packable::operator>>(cursor);
cursor >> m_cfg ;
cursor >> m_cred;
}

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{D4B54856-BE1F-4937-A8F7-495125BE76BE}</ProjectGuid> <ProjectGuid>{D4B54856-BE1F-4937-A8F7-495125BE76BE}</ProjectGuid>
<RootNamespace>EAPBase_UI</RootNamespace> <RootNamespace>EAPBase_UI</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

View File

@@ -43,7 +43,6 @@ class wxEAPProviderIDPanel;
class wxEAPConfigProvider; class wxEAPConfigProvider;
template <class _Tcred, class _wxT> class wxEAPCredentialsConfigPanel; template <class _Tcred, class _wxT> class wxEAPCredentialsConfigPanel;
template <class _Tcred, class _Tbase> class wxEAPCredentialsPanel; template <class _Tcred, class _Tbase> class wxEAPCredentialsPanel;
template <class _Tcred, class _Tbase> class wxIdentityCredentialsPanel;
template <class _Tcred, class _Tbase> class wxPasswordCredentialsPanel; template <class _Tcred, class _Tbase> class wxPasswordCredentialsPanel;
class wxEAPProviderSelectDialog; class wxEAPProviderSelectDialog;
@@ -106,12 +105,15 @@ inline void wxInitializeConfig();
/// @} /// @}
namespace eap
{
class monitor_ui;
}
#pragma once #pragma once
#pragma warning(push) #include <wx/msw/winundef.h> // Fixes `CreateDialog` name collision
#pragma warning(disable: 26444)
#include "../res/wxEAP_UI.h" #include "../res/wxEAP_UI.h"
#pragma warning(pop)
#include "../../EAPBase/include/Config.h" #include "../../EAPBase/include/Config.h"
#include "../../EAPBase/include/Credentials.h" #include "../../EAPBase/include/Credentials.h"
@@ -128,10 +130,6 @@ inline void wxInitializeConfig();
#include <list> #include <list>
#include <memory> #include <memory>
#pragma warning(push)
#pragma warning(disable: 26444)
/// \addtogroup EAPBaseGUI /// \addtogroup EAPBaseGUI
/// @{ /// @{
@@ -201,7 +199,7 @@ public:
m_providers), m_providers),
is_single ? is_single ?
wxEAPGetProviderName(provider->m_name) : wxEAPGetProviderName(provider->m_name) :
winstd::tstring_printf(_T("%s (%zu)"), static_cast<LPCTSTR>(wxEAPGetProviderName(provider->m_name)), count)); winstd::tstring_printf(_T("%s (%u)"), static_cast<LPCTSTR>(wxEAPGetProviderName(provider->m_name)), count));
} }
} }
@@ -254,11 +252,7 @@ protected:
// Create provider. // Create provider.
eap::config_provider cfg_provider(m_cfg.m_module); eap::config_provider cfg_provider(m_cfg.m_module);
GUID guid; GUID guid;
HRESULT hr = CoCreateGuid(&guid); CoCreateGuid(&guid);
if (FAILED(hr)) {
wxLogError(winstd::tstring_printf(wxT("error 0x%08x generating GUID"), hr).c_str());
return;
}
cfg_provider.m_namespace = L"urn:uuid"; cfg_provider.m_namespace = L"urn:uuid";
cfg_provider.m_id = winstd::wstring_guid(guid).substr(1, 36); cfg_provider.m_id = winstd::wstring_guid(guid).substr(1, 36);
cfg_provider.m_methods.push_back(std::move(cfg_method)); cfg_provider.m_methods.push_back(std::move(cfg_method));
@@ -268,7 +262,7 @@ protected:
eap::config_provider &cfg_provider2 = m_cfg.m_providers.back(); eap::config_provider &cfg_provider2 = m_cfg.m_providers.back();
eap::config_method *cfg_method2 = cfg_provider2.m_methods.front().get(); eap::config_method *cfg_method2 = cfg_provider2.m_methods.front().get();
_wxT *page = new _wxT(cfg_provider2, *cfg_method2, m_providers); _wxT *page = new _wxT(cfg_provider2, *cfg_method2, m_providers);
m_providers->InsertPage((size_t)m_providers->GetSelection() + 1, page, wxEAPGetProviderName(cfg_provider2.m_name), true); m_providers->InsertPage(m_providers->GetSelection() + 1, page, wxEAPGetProviderName(cfg_provider2.m_name), true);
this->Layout(); this->Layout();
this->GetSizer()->Fit(this); this->GetSizer()->Fit(this);
@@ -959,14 +953,14 @@ protected:
/// ///
/// Generic identity credential entry panel /// Generic password credential entry panel
/// ///
template <class _Tcred, class _Tbase> template <class _Tcred, class _Tbase>
class wxIdentityCredentialsPanel : public wxEAPCredentialsPanel<_Tcred, _Tbase> class wxPasswordCredentialsPanel : public wxEAPCredentialsPanel<_Tcred, _Tbase>
{ {
public: public:
/// ///
/// Constructs a identity credentials panel /// Constructs a password credentials panel
/// ///
/// \param[in] prov Provider configuration data /// \param[in] prov Provider configuration data
/// \param[in] cfg Method configuration data /// \param[in] cfg Method configuration data
@@ -974,13 +968,14 @@ public:
/// \param[in] parent Parent window /// \param[in] parent Parent window
/// \param[in] is_config Is this panel used to config credentials? /// \param[in] is_config Is this panel used to config credentials?
/// ///
wxIdentityCredentialsPanel(const eap::config_provider &prov, const eap::config_method_with_cred &cfg, _Tcred &cred, wxWindow* parent, bool is_config = false) : wxPasswordCredentialsPanel(const eap::config_provider &prov, const eap::config_method_with_cred &cfg, _Tcred &cred, wxWindow* parent, bool is_config = false) :
m_password_set(false),
wxEAPCredentialsPanel<_Tcred, _Tbase>(prov, cfg, cred, parent, is_config) wxEAPCredentialsPanel<_Tcred, _Tbase>(prov, cfg, cred, parent, is_config)
{ {
// Load and set icon. // Load and set icon.
winstd::library lib_shell32; winstd::library lib_shell32;
if (lib_shell32.load(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE)) if (lib_shell32.load(_T("imageres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))
m_credentials_icon->SetIcon(wxLoadIconFromResource(lib_shell32, MAKEINTRESOURCE(/*16770*/269))); m_credentials_icon->SetIcon(wxLoadIconFromResource(lib_shell32, MAKEINTRESOURCE(82)));
bool layout = false; bool layout = false;
if (!m_prov.m_lbl_alt_credential.empty()) { if (!m_prov.m_lbl_alt_credential.empty()) {
@@ -994,6 +989,11 @@ public:
layout = true; layout = true;
} }
if (!m_prov.m_lbl_alt_password.empty()) {
m_password_label->SetLabel(m_prov.m_lbl_alt_password);
layout = true;
}
if (layout) if (layout)
this->Layout(); this->Layout();
} }
@@ -1005,85 +1005,26 @@ protected:
{ {
m_identity->SetValue(m_cred.m_identity); m_identity->SetValue(m_cred.m_identity);
m_identity->SetSelection(0, -1); m_identity->SetSelection(0, -1);
if (!m_is_config && m_cfg.m_use_cred) {
// Credential prompt mode & Using configured credentials
m_identity_label->Enable(false);
m_identity ->Enable(false);
}
return wxEAPCredentialsPanel<_Tcred, _Tbase>::TransferDataToWindow();
}
virtual bool TransferDataFromWindow()
{
if (!wxEAPCredentialsPanel<_Tcred, _Tbase>::TransferDataFromWindow())
return false;
m_cred.m_identity = m_identity->GetValue();
return true;
}
/// \endcond
};
/// @}
///
/// Generic password credential entry panel
///
template <class _Tcred, class _Tbase>
class wxPasswordCredentialsPanel : public wxIdentityCredentialsPanel<_Tcred, _Tbase>
{
public:
///
/// Constructs a password credentials panel
///
/// \param[in] prov Provider configuration data
/// \param[in] cfg Method configuration data
/// \param[inout] cred Credentials data
/// \param[in] parent Parent window
/// \param[in] is_config Is this panel used to config credentials?
///
wxPasswordCredentialsPanel(const eap::config_provider &prov, const eap::config_method_with_cred &cfg, _Tcred &cred, wxWindow* parent, bool is_config = false) :
m_password_set(false),
wxIdentityCredentialsPanel<_Tcred, _Tbase>(prov, cfg, cred, parent, is_config)
{
// Load and set icon.
winstd::library lib_shell32;
if (lib_shell32.load(_T("imageres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))
m_credentials_icon->SetIcon(wxLoadIconFromResource(lib_shell32, MAKEINTRESOURCE(82)));
if (!m_prov.m_lbl_alt_password.empty()) {
m_password_label->SetLabel(m_prov.m_lbl_alt_password);
this->Layout();
}
}
protected:
/// \cond internal
virtual bool TransferDataToWindow()
{
m_password->SetValue(m_cred.m_password.empty() ? wxEmptyString : wxT("dummypass")); m_password->SetValue(m_cred.m_password.empty() ? wxEmptyString : wxT("dummypass"));
m_password_set = false; m_password_set = false;
if (!m_is_config && m_cfg.m_use_cred) { if (!m_is_config && m_cfg.m_use_cred) {
// Credential prompt mode & Using configured credentials // Credential prompt mode & Using configured credentials
m_identity_label->Enable(false);
m_identity ->Enable(false);
m_password_label->Enable(false); m_password_label->Enable(false);
m_password ->Enable(false); m_password ->Enable(false);
} }
return wxIdentityCredentialsPanel<_Tcred, _Tbase>::TransferDataToWindow(); return wxEAPCredentialsPanel<_Tcred, wxPasswordCredentialsPanelBase>::TransferDataToWindow();
} }
virtual bool TransferDataFromWindow() virtual bool TransferDataFromWindow()
{ {
if (!wxIdentityCredentialsPanel<_Tcred, _Tbase>::TransferDataFromWindow()) if (!wxEAPCredentialsPanel<_Tcred, wxPasswordCredentialsPanelBase>::TransferDataFromWindow())
return false; return false;
m_cred.m_identity = m_identity->GetValue();
if (m_password_set) if (m_password_set)
m_cred.m_password = m_password->GetValue(); m_cred.m_password = m_password->GetValue();
@@ -1092,7 +1033,7 @@ protected:
virtual void OnPasswordText(wxCommandEvent& event) virtual void OnPasswordText(wxCommandEvent& event)
{ {
wxIdentityCredentialsPanel<_Tcred, _Tbase>::OnPasswordText(event); wxEAPCredentialsPanel<_Tcred, _Tbase>::OnPasswordText(event);
m_password_set = true; m_password_set = true;
} }
@@ -1143,4 +1084,94 @@ inline void wxInitializeConfig()
if (cfgPrev) wxDELETE(cfgPrev); if (cfgPrev) wxDELETE(cfgPrev);
} }
#pragma warning(pop)
namespace eap
{
/// \addtogroup EAPBaseGUI
/// @{
///
/// Base class to enable single instance of the same dialog (master) return result to multiple threads (slaves)
///
class monitor_ui
{
public:
///
/// Constructs a UI monitor
///
monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid);
///
/// Destructs the UI monitor
///
virtual ~monitor_ui();
///
/// Sets pop-up window handle
///
/// \param[in] hwnd Handle of window to set as a new pop-up
///
void set_popup(_In_ HWND hwnd);
///
/// Notifies all slaves waiting for this master and send them result data
///
/// \param[in] data Pointer to result data
/// \param[in] size \p data size in bytes
///
void release_slaves(_In_bytecount_(size) const void *data, _In_ size_t size) const;
///
/// Returns true if this is a master
///
inline bool is_master() const
{
return m_is_master;
}
///
/// Returns true if this is a slave
///
inline bool is_slave() const
{
return !is_master();
}
///
/// Returns the data master send
///
inline const std::vector<unsigned char>& master_data() const
{
return m_data;
}
protected:
/// \cond internal
virtual LRESULT winproc(
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam);
static LRESULT CALLBACK winproc(
_In_ HWND hwnd,
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam);
/// \endcond
protected:
bool m_is_master; ///< Is this monitor master?
HWND m_hwnd; ///< Message window handle
std::list<HWND> m_slaves; ///< List of slaves to notify on finish
HWND m_hwnd_popup; ///< Pop-up window handle
std::vector<unsigned char> m_data; ///< Data master sent
// Custom window messages
static const UINT s_msg_attach; ///< Slave sends this message to attach to master
static const UINT s_msg_finish; ///< Master sends this message to slaves to notify them it has finished (wparam has size, lparam has data)
};
/// @}
}

View File

@@ -21,7 +21,6 @@
namespace eap namespace eap
{ {
class peer_ui; class peer_ui;
class monitor_ui;
} }
#pragma once #pragma once
@@ -149,92 +148,4 @@ namespace eap
}; };
/// @} /// @}
/// \addtogroup EAPBaseGUI
/// @{
///
/// Base class to enable single instance of the same dialog (master) return result to multiple threads (slaves)
///
class monitor_ui
{
public:
///
/// Constructs a UI monitor
///
monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid);
///
/// Destructs the UI monitor
///
virtual ~monitor_ui();
///
/// Sets pop-up window handle
///
/// \param[in] hwnd Handle of window to set as a new pop-up
///
void set_popup(_In_ HWND hwnd);
///
/// Notifies all slaves waiting for this master and send them result data
///
/// \param[in] data Pointer to result data
/// \param[in] size \p data size in bytes
///
void release_slaves(_In_bytecount_(size) const void *data, _In_ size_t size) const;
///
/// Returns true if this is a master
///
inline bool is_master() const
{
return m_is_master;
}
///
/// Returns true if this is a slave
///
inline bool is_slave() const
{
return !is_master();
}
///
/// Returns the data master send
///
inline const std::vector<unsigned char>& master_data() const
{
return m_data;
}
protected:
/// \cond internal
virtual LRESULT winproc(
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam);
static LRESULT CALLBACK winproc(
_In_ HWND hwnd,
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam);
/// \endcond
protected:
bool m_is_master; ///< Is this monitor master?
HWND m_hwnd; ///< Message window handle
std::list<HWND> m_slaves; ///< List of slaves to notify on finish
volatile HWND m_hwnd_popup; ///< Pop-up window handle
std::vector<unsigned char> m_data; ///< Data master sent
// Custom window messages
static const UINT s_msg_attach; ///< Slave sends this message to attach to master
static const UINT s_msg_finish; ///< Master sends this message to slaves to notify them it has finished (wparam has size, lparam has data)
};
/// @}
} }

View File

@@ -418,55 +418,6 @@ wxPasswordCredentialsPanelBase::~wxPasswordCredentialsPanelBase()
} }
wxIdentityCredentialsPanelBase::wxIdentityCredentialsPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, long style, const wxString& name ) : wxEAPCredentialsPanelBase( parent, id, pos, parent->FromDIP(wxSize( 500,-1 )), style, name )
{
m_sb_credentials = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("User ID") ), wxVERTICAL );
wxBoxSizer* sb_credentials_horiz;
sb_credentials_horiz = new wxBoxSizer( wxHORIZONTAL );
m_credentials_icon = new wxStaticBitmap( m_sb_credentials->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
sb_credentials_horiz->Add( m_credentials_icon, 0, wxALL, FromDIP(5) );
m_sb_credentials_vert = new wxBoxSizer( wxVERTICAL );
m_credentials_label = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, _("Please provide your user ID."), wxDefaultPosition, wxDefaultSize, 0 );
m_credentials_label->Wrap( FromDIP(440) );
m_sb_credentials_vert->Add( m_credentials_label, 0, wxALL|wxEXPAND, FromDIP(5) );
wxFlexGridSizer* sb_credentials_tbl;
sb_credentials_tbl = new wxFlexGridSizer( 0, 2, FromDIP(5), FromDIP(5) );
sb_credentials_tbl->AddGrowableCol( 1 );
sb_credentials_tbl->SetFlexibleDirection( wxBOTH );
sb_credentials_tbl->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_identity_label = new wxStaticText( m_sb_credentials->GetStaticBox(), wxID_ANY, _("User ID:"), wxDefaultPosition, wxDefaultSize, 0 );
m_identity_label->Wrap( -1 );
sb_credentials_tbl->Add( m_identity_label, 0, wxALIGN_CENTER_VERTICAL, FromDIP(5) );
m_identity = new wxTextCtrl( m_sb_credentials->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_identity->SetToolTip( _("Enter your user name here (user@domain.org, DOMAIN\\User, etc.)") );
sb_credentials_tbl->Add( m_identity, 2, wxEXPAND|wxALIGN_CENTER_VERTICAL, FromDIP(5) );
m_sb_credentials_vert->Add( sb_credentials_tbl, 0, wxEXPAND|wxALL, FromDIP(5) );
sb_credentials_horiz->Add( m_sb_credentials_vert, 1, wxEXPAND, FromDIP(5) );
m_sb_credentials->Add( sb_credentials_horiz, 0, wxEXPAND, FromDIP(5) );
this->SetSizer( m_sb_credentials );
this->Layout();
}
wxIdentityCredentialsPanelBase::~wxIdentityCredentialsPanelBase()
{
}
wxEAPProviderContactInfoPanelBase::wxEAPProviderContactInfoPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, long style, const wxString& name ) : wxPanel( parent, id, pos, parent->FromDIP(wxSize( 500,-1 )), style, name ) wxEAPProviderContactInfoPanelBase::wxEAPProviderContactInfoPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, long style, const wxString& name ) : wxPanel( parent, id, pos, parent->FromDIP(wxSize( 500,-1 )), style, name )
{ {
wxStaticBoxSizer* sb_provider_contact; wxStaticBoxSizer* sb_provider_contact;

File diff suppressed because it is too large Load Diff

View File

@@ -220,28 +220,6 @@ class wxPasswordCredentialsPanelBase : public wxEAPCredentialsPanelBase
}; };
///////////////////////////////////////////////////////////////////////////////
/// Class wxIdentityCredentialsPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxIdentityCredentialsPanelBase : public wxEAPCredentialsPanelBase
{
private:
protected:
wxStaticBoxSizer* m_sb_credentials;
wxStaticBitmap* m_credentials_icon;
wxBoxSizer* m_sb_credentials_vert;
wxStaticText* m_credentials_label;
wxStaticText* m_identity_label;
wxTextCtrl* m_identity;
public:
wxIdentityCredentialsPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~wxIdentityCredentialsPanelBase();
};
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// Class wxEAPProviderContactInfoPanelBase /// Class wxEAPProviderContactInfoPanelBase
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@@ -467,3 +467,200 @@ void wxEAPProviderSelectDialog::OnProvSelect(wxCommandEvent& event)
event.Skip(); event.Skip();
} }
/// \endcond /// \endcond
using namespace std;
using namespace winstd;
//////////////////////////////////////////////////////////////////////
// eap::monitor_ui
//////////////////////////////////////////////////////////////////////
eap::monitor_ui::monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid) :
m_hwnd_popup(NULL)
{
// Verify if the monitor is already running.
const WNDCLASSEX wnd_class_desc_master = {
sizeof(WNDCLASSEX), // cbSize
0, // style
winproc, // lpfnWndProc
0, // cbClsExtra
0, // cbWndExtra
module, // hInstance
NULL, // hIcon
NULL, // hCursor
NULL, // hbrBackground
NULL, // lpszMenuName
_T(__FUNCTION__), // lpszClassName
NULL // hIconSm
};
ATOM wnd_class = RegisterClassEx(&wnd_class_desc_master);
if (!wnd_class)
throw win_runtime_error(__FUNCTION__ " Error registering master monitor window class.");
tstring_guid guid_str(guid);
HWND hwnd_master = FindWindowEx(HWND_MESSAGE, NULL, reinterpret_cast<LPCTSTR>(wnd_class), guid_str.c_str());
if (hwnd_master) {
// Another monitor is already running.
m_is_master = false;
// Register slave windows class slightly different, not to include slaves in FindWindowEx().
const WNDCLASSEX wnd_class_desc_slave = {
sizeof(WNDCLASSEX), // cbSize
0, // style
winproc, // lpfnWndProc
0, // cbClsExtra
0, // cbWndExtra
module, // hInstance
NULL, // hIcon
NULL, // hCursor
NULL, // hbrBackground
NULL, // lpszMenuName
_T(__FUNCTION__) _T("-Slave"), // lpszClassName
NULL // hIconSm
};
wnd_class = RegisterClassEx(&wnd_class_desc_slave);
if (!wnd_class)
throw win_runtime_error(__FUNCTION__ " Error registering slave monitor window class.");
} else {
// This is a fresh monitor.
m_is_master = true;
}
m_hwnd = CreateWindowEx(
0, // dwExStyle
reinterpret_cast<LPCTSTR>(wnd_class), // lpClassName
guid_str.c_str(), // lpWindowName
0, // dwStyle
0, // x
0, // y
0, // nWidth
0, // nHeight
HWND_MESSAGE, // hWndParent
NULL, // hMenu
module, // hInstance
this); // lpParam
if (!m_is_master) {
// Notify master we are waiting him.
SendMessage(hwnd_master, s_msg_attach, 0, (LPARAM)m_hwnd);
// Slaves must pump message queue until finished.
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
eap::monitor_ui::~monitor_ui()
{
if (m_hwnd)
DestroyWindow(m_hwnd);
}
void eap::monitor_ui::set_popup(_In_ HWND hwnd)
{
m_hwnd_popup = hwnd;
}
void eap::monitor_ui::release_slaves(_In_bytecount_(size) const void *data, _In_ size_t size) const
{
assert(!size || data);
for (auto slave = m_slaves.cbegin(), slave_end = m_slaves.cend(); slave != slave_end; ++slave) {
// Get slave's PID.
DWORD pid_slave;
GetWindowThreadProcessId(*slave, &pid_slave);
// Get slave's process handle.
process proc_slave;
if (!proc_slave.open(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, 0, pid_slave))
continue;
// Allocate memory in slave's virtual memory space and save data to it.
vmemory mem_slave;
if (!mem_slave.alloc(proc_slave, NULL, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE))
continue;
if (!WriteProcessMemory(proc_slave, mem_slave, data, size, NULL))
continue;
// Notify slave. Use SendMessage(), not PostMessage(), as memory will get cleaned up.
SendMessage(*slave, s_msg_finish, (WPARAM)size, (LPARAM)(LPVOID)mem_slave);
}
}
/// \cond internal
LRESULT eap::monitor_ui::winproc(
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam)
{
UNREFERENCED_PARAMETER(wparam);
if (msg == s_msg_attach) {
// Attach a new slave.
assert(m_is_master);
m_slaves.push_back((HWND)lparam);
if (m_hwnd_popup) {
// Bring pop-up window up.
if (::IsIconic(m_hwnd_popup))
::SendMessage(m_hwnd_popup, WM_SYSCOMMAND, SC_RESTORE, 0);
::SetActiveWindow(m_hwnd_popup);
::SetForegroundWindow(m_hwnd_popup);
}
return TRUE;
} else if (msg == s_msg_finish) {
// Master finished.
assert(!m_is_master);
m_data.assign(reinterpret_cast<const unsigned char*>(lparam), reinterpret_cast<const unsigned char*>(lparam) + wparam);
// Finish slave too.
DestroyWindow(m_hwnd);
return TRUE;
} else if (msg == WM_DESTROY) {
// Stop the message pump.
PostQuitMessage(0);
return 0;
}
return DefWindowProc(m_hwnd, msg, wparam, lparam);
}
LRESULT CALLBACK eap::monitor_ui::winproc(
_In_ HWND hwnd,
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam)
{
if (msg == WM_CREATE) {
// Set window's user data to "this" pointer.
const CREATESTRUCT *cs = (CREATESTRUCT*)lparam;
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)cs->lpCreateParams);
// Forward to our handler.
return ((eap::monitor_ui*)cs->lpCreateParams)->winproc(msg, wparam, lparam);
} else {
// Get "this" pointer from window's user data.
eap::monitor_ui *_this = (eap::monitor_ui*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (_this) {
// Forward to our handler.
return _this->winproc(msg, wparam, lparam);
} else
return DefWindowProc(hwnd, msg, wparam, lparam);
}
}
/// \endcond
const UINT eap::monitor_ui::s_msg_attach = RegisterWindowMessage(_T(PRODUCT_NAME_STR) _T("-Attach"));
const UINT eap::monitor_ui::s_msg_finish = RegisterWindowMessage(_T(PRODUCT_NAME_STR) _T("-Finish"));

View File

@@ -30,208 +30,3 @@ using namespace winstd;
eap::peer_ui::peer_ui(_In_ eap_type_t eap_method) : module(eap_method) eap::peer_ui::peer_ui(_In_ eap_type_t eap_method) : module(eap_method)
{ {
} }
//////////////////////////////////////////////////////////////////////
// eap::monitor_ui
//////////////////////////////////////////////////////////////////////
eap::monitor_ui::monitor_ui(_In_ HINSTANCE module, _In_ const GUID &guid) :
m_hwnd_popup(NULL)
{
// Verify if the monitor is already running.
const WNDCLASSEX wnd_class_desc_master = {
sizeof(WNDCLASSEX), // cbSize
0, // style
winproc, // lpfnWndProc
0, // cbClsExtra
0, // cbWndExtra
module, // hInstance
NULL, // hIcon
NULL, // hCursor
NULL, // hbrBackground
NULL, // lpszMenuName
_T(__FUNCTION__), // lpszClassName
NULL // hIconSm
};
LPCTSTR wnd_class = reinterpret_cast<LPCTSTR>(RegisterClassEx(&wnd_class_desc_master));
if (!wnd_class) {
DWORD dwResult = GetLastError();
if (dwResult == ERROR_CLASS_ALREADY_EXISTS)
wnd_class = _T(__FUNCTION__);
else
throw win_runtime_error(dwResult, __FUNCTION__ " Error registering master monitor window class.");
}
tstring_guid guid_str(guid);
HWND hwnd_master = FindWindowEx(HWND_MESSAGE, NULL, wnd_class, guid_str.c_str());
if (hwnd_master) {
// Another monitor is already running.
m_is_master = false;
// Register slave windows class slightly different, not to include slaves in FindWindowEx().
const WNDCLASSEX wnd_class_desc_slave = {
sizeof(WNDCLASSEX), // cbSize
0, // style
winproc, // lpfnWndProc
0, // cbClsExtra
0, // cbWndExtra
module, // hInstance
NULL, // hIcon
NULL, // hCursor
NULL, // hbrBackground
NULL, // lpszMenuName
_T(__FUNCTION__) _T("-Slave"), // lpszClassName
NULL // hIconSm
};
wnd_class = reinterpret_cast<LPCTSTR>(RegisterClassEx(&wnd_class_desc_slave));
if (!wnd_class) {
DWORD dwResult = GetLastError();
if (dwResult == ERROR_CLASS_ALREADY_EXISTS)
wnd_class = _T(__FUNCTION__) _T("-Slave");
else
throw win_runtime_error(dwResult, __FUNCTION__ " Error registering slave monitor window class.");
}
} else {
// This is a fresh monitor.
m_is_master = true;
}
m_hwnd = CreateWindowEx(
0, // dwExStyle
reinterpret_cast<LPCTSTR>(wnd_class), // lpClassName
guid_str.c_str(), // lpWindowName
0, // dwStyle
0, // x
0, // y
0, // nWidth
0, // nHeight
HWND_MESSAGE, // hWndParent
NULL, // hMenu
module, // hInstance
this); // lpParam
if (!m_is_master) {
// Notify master we are waiting him.
SendMessage(hwnd_master, s_msg_attach, 0, (LPARAM)m_hwnd);
// Slaves must pump message queue until finished.
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
eap::monitor_ui::~monitor_ui()
{
if (m_hwnd)
DestroyWindow(m_hwnd);
}
void eap::monitor_ui::set_popup(_In_ HWND hwnd)
{
m_hwnd_popup = hwnd;
}
void eap::monitor_ui::release_slaves(_In_bytecount_(size) const void *data, _In_ size_t size) const
{
assert(!size || data);
for (auto slave = m_slaves.cbegin(), slave_end = m_slaves.cend(); slave != slave_end; ++slave) {
// Get slave's PID.
DWORD pid_slave;
GetWindowThreadProcessId(*slave, &pid_slave);
// Get slave's process handle.
process proc_slave;
if (!proc_slave.open(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, 0, pid_slave))
continue;
// Allocate memory in slave's virtual memory space and save data to it.
vmemory mem_slave;
if (!mem_slave.alloc(proc_slave, NULL, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE))
continue;
if (!WriteProcessMemory(proc_slave, mem_slave, data, size, NULL))
continue;
// Notify slave. Use SendMessage(), not PostMessage(), as memory will get cleaned up.
SendMessage(*slave, s_msg_finish, (WPARAM)size, (LPARAM)(LPVOID)mem_slave);
}
}
/// \cond internal
LRESULT eap::monitor_ui::winproc(
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam)
{
UNREFERENCED_PARAMETER(wparam);
if (msg == s_msg_attach) {
// Attach a new slave.
assert(m_is_master);
m_slaves.push_back((HWND)lparam);
HWND hwnd_popup = m_hwnd_popup;
if (hwnd_popup) {
// Bring pop-up window up.
if (::IsIconic(hwnd_popup))
::SendMessage(hwnd_popup, WM_SYSCOMMAND, SC_RESTORE, 0);
::SetActiveWindow(hwnd_popup);
::SetForegroundWindow(hwnd_popup);
}
return TRUE;
} else if (msg == s_msg_finish) {
// Master finished.
assert(!m_is_master);
m_data.assign(reinterpret_cast<const unsigned char*>(lparam), reinterpret_cast<const unsigned char*>(lparam) + wparam);
// Finish slave too.
DestroyWindow(m_hwnd);
return TRUE;
} else if (msg == WM_DESTROY) {
// Stop the message pump.
PostQuitMessage(0);
return 0;
}
return DefWindowProc(m_hwnd, msg, wparam, lparam);
}
LRESULT CALLBACK eap::monitor_ui::winproc(
_In_ HWND hwnd,
_In_ UINT msg,
_In_ WPARAM wparam,
_In_ LPARAM lparam)
{
if (msg == WM_CREATE) {
// Set window's user data to "this" pointer.
const CREATESTRUCT *cs = (CREATESTRUCT*)lparam;
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)cs->lpCreateParams);
// Forward to our handler.
return ((eap::monitor_ui*)cs->lpCreateParams)->winproc(msg, wparam, lparam);
} else {
// Get "this" pointer from window's user data.
eap::monitor_ui *_this = (eap::monitor_ui*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (_this) {
// Forward to our handler.
return _this->winproc(msg, wparam, lparam);
} else
return DefWindowProc(hwnd, msg, wparam, lparam);
}
}
/// \endcond
const UINT eap::monitor_ui::s_msg_attach = RegisterWindowMessage(_T(PRODUCT_NAME_STR) _T("-Attach"));
const UINT eap::monitor_ui::s_msg_finish = RegisterWindowMessage(_T(PRODUCT_NAME_STR) _T("-Finish"));

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{B385EC2B-C3F4-48BB-9BAC-8B996DE7F754}</ProjectGuid> <ProjectGuid>{B385EC2B-C3F4-48BB-9BAC-8B996DE7F754}</ProjectGuid>
<RootNamespace>EapHost</RootNamespace> <RootNamespace>EapHost</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

View File

@@ -65,7 +65,7 @@ namespace eap
/// ///
/// \param[in] other Configuration to move from /// \param[in] other Configuration to move from
/// ///
config_method_eaphost(_Inout_ config_method_eaphost &&other) noexcept; config_method_eaphost(_Inout_ config_method_eaphost &&other);
/// ///
/// Copies configuration /// Copies configuration
@@ -83,7 +83,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
config_method_eaphost& operator=(_Inout_ config_method_eaphost &&other) noexcept; config_method_eaphost& operator=(_Inout_ config_method_eaphost &&other);
virtual config* clone() const; virtual config* clone() const;

View File

@@ -67,7 +67,7 @@ namespace eap
/// ///
/// \param[in] other Credentials to move from /// \param[in] other Credentials to move from
/// ///
credentials_eaphost(_Inout_ credentials_eaphost &&other) noexcept; credentials_eaphost(_Inout_ credentials_eaphost &&other);
/// ///
/// Copies credentials /// Copies credentials
@@ -85,7 +85,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
credentials_eaphost& operator=(_Inout_ credentials_eaphost &&other) noexcept; credentials_eaphost& operator=(_Inout_ credentials_eaphost &&other);
virtual config* clone() const; virtual config* clone() const;
virtual void clear(); virtual void clear();
@@ -136,7 +136,7 @@ namespace eap
/// ///
virtual source_t combine( virtual source_t combine(
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser, _In_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached, _In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg, _In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName); _In_opt_z_ LPCTSTR pszTargetName);

View File

@@ -61,7 +61,7 @@ namespace eap
/// ///
/// \param[in] other EAP method to move from /// \param[in] other EAP method to move from
/// ///
method_eaphost(_Inout_ method_eaphost &&other) noexcept; method_eaphost(_Inout_ method_eaphost &&other);
/// ///
/// Moves an EAP method /// Moves an EAP method
@@ -70,7 +70,7 @@ namespace eap
/// ///
/// \returns Reference to this object /// \returns Reference to this object
/// ///
method_eaphost& operator=(_Inout_ method_eaphost &&other) noexcept; method_eaphost& operator=(_Inout_ method_eaphost &&other);
/// \name Session management /// \name Session management
/// @{ /// @{
@@ -99,8 +99,8 @@ namespace eap
/// @} /// @}
virtual void get_result( virtual void get_result(
_In_ EapPeerMethodResultReason reason, _In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *pResult); _Out_ EapPeerMethodResult *pResult);
/// \name User Interaction /// \name User Interaction
/// @{ /// @{

View File

@@ -45,7 +45,7 @@ eap::config_method_eaphost::config_method_eaphost(_In_ const config_method_eapho
} }
eap::config_method_eaphost::config_method_eaphost(_Inout_ config_method_eaphost &&other) noexcept : eap::config_method_eaphost::config_method_eaphost(_Inout_ config_method_eaphost &&other) :
m_type (std::move(other.m_type )), m_type (std::move(other.m_type )),
m_type_str (std::move(other.m_type_str)), m_type_str (std::move(other.m_type_str)),
m_cfg_blob (std::move(other.m_cfg_blob)), m_cfg_blob (std::move(other.m_cfg_blob)),
@@ -67,7 +67,7 @@ eap::config_method_eaphost& eap::config_method_eaphost::operator=(_In_ const con
} }
eap::config_method_eaphost& eap::config_method_eaphost::operator=(_Inout_ config_method_eaphost &&other) noexcept eap::config_method_eaphost& eap::config_method_eaphost::operator=(_Inout_ config_method_eaphost &&other)
{ {
if (this != &other) { if (this != &other) {
(config_method&&)*this = std::move(other ); (config_method&&)*this = std::move(other );
@@ -130,7 +130,7 @@ void eap::config_method_eaphost::load(_In_ IXMLDOMNode *pConfigRoot)
DWORD dwResult = EapHostPeerConfigXml2Blob(0, pXmlElEapHostConfig, &cfg_data_size, get_ptr(cfg_data), &m_type, get_ptr(error)); DWORD dwResult = EapHostPeerConfigXml2Blob(0, pXmlElEapHostConfig, &cfg_data_size, get_ptr(cfg_data), &m_type, get_ptr(error));
if (dwResult == ERROR_SUCCESS) { if (dwResult == ERROR_SUCCESS) {
update_type(); update_type();
LPCBYTE _cfg_data = cfg_data.get(); const BYTE *_cfg_data = cfg_data.get();
m_cfg_blob.assign(_cfg_data, _cfg_data + cfg_data_size); m_cfg_blob.assign(_cfg_data, _cfg_data + cfg_data_size);
} else if (error) } else if (error)
throw eap_runtime_error(*error , __FUNCTION__ " EapHostPeerConfigXml2Blob failed."); throw eap_runtime_error(*error , __FUNCTION__ " EapHostPeerConfigXml2Blob failed.");

View File

@@ -42,7 +42,7 @@ eap::credentials_eaphost::credentials_eaphost(_In_ const credentials_eaphost &ot
} }
eap::credentials_eaphost::credentials_eaphost(_Inout_ credentials_eaphost &&other) noexcept : eap::credentials_eaphost::credentials_eaphost(_Inout_ credentials_eaphost &&other) :
m_cred_blob(std::move(other.m_cred_blob)), m_cred_blob(std::move(other.m_cred_blob)),
credentials(std::move(other )) credentials(std::move(other ))
{ {
@@ -60,7 +60,7 @@ eap::credentials_eaphost& eap::credentials_eaphost::operator=(_In_ const credent
} }
eap::credentials_eaphost& eap::credentials_eaphost::operator=(_Inout_ credentials_eaphost &&other) noexcept eap::credentials_eaphost& eap::credentials_eaphost::operator=(_Inout_ credentials_eaphost &&other)
{ {
if (this != &other) { if (this != &other) {
(credentials&)*this = std::move(other); (credentials&)*this = std::move(other);
@@ -220,7 +220,7 @@ LPCTSTR eap::credentials_eaphost::target_suffix() const
eap::credentials::source_t eap::credentials_eaphost::combine( eap::credentials::source_t eap::credentials_eaphost::combine(
_In_ DWORD dwFlags, _In_ DWORD dwFlags,
_In_opt_ HANDLE hTokenImpersonateUser, _In_ HANDLE hTokenImpersonateUser,
_In_opt_ const credentials *cred_cached, _In_opt_ const credentials *cred_cached,
_In_ const config_method &cfg, _In_ const config_method &cfg,
_In_opt_z_ LPCTSTR pszTargetName) _In_opt_z_ LPCTSTR pszTargetName)

View File

@@ -37,7 +37,7 @@ eap::method_eaphost::method_eaphost(_In_ module &mod, _In_ config_method_eaphost
} }
eap::method_eaphost::method_eaphost(_Inout_ method_eaphost &&other) noexcept : eap::method_eaphost::method_eaphost(_Inout_ method_eaphost &&other) :
m_cfg ( other.m_cfg ), m_cfg ( other.m_cfg ),
m_cred ( other.m_cred ), m_cred ( other.m_cred ),
m_session_id(std::move(other.m_session_id)), m_session_id(std::move(other.m_session_id)),
@@ -46,7 +46,7 @@ eap::method_eaphost::method_eaphost(_Inout_ method_eaphost &&other) noexcept :
} }
eap::method_eaphost& eap::method_eaphost::operator=(_Inout_ method_eaphost &&other) noexcept eap::method_eaphost& eap::method_eaphost::operator=(_Inout_ method_eaphost &&other)
{ {
if (this != std::addressof(other)) { if (this != std::addressof(other)) {
assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Move method within same configuration only! assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Move method within same configuration only!
@@ -151,7 +151,7 @@ void eap::method_eaphost::get_response_packet(
get_ptr(error)); get_ptr(error));
if (dwResult == ERROR_SUCCESS) { if (dwResult == ERROR_SUCCESS) {
// Packet successfuly prepared. // Packet successfuly prepared.
LPCBYTE __packet = _packet.get(); const BYTE *__packet = _packet.get();
packet.assign(__packet, __packet + size_max); packet.assign(__packet, __packet + size_max);
} else if (error) } else if (error)
throw eap_runtime_error(*error , __FUNCTION__ " EapHostPeerGetSendPacket failed."); throw eap_runtime_error(*error , __FUNCTION__ " EapHostPeerGetSendPacket failed.");
@@ -257,7 +257,7 @@ EapPeerMethodResponseAction eap::method_eaphost::set_ui_context(
} }
void eap::method_eaphost::get_response_attributes(_Out_ EapAttributes *pAttribs) void eap::method_eaphost::get_response_attributes(_Inout_ EapAttributes *pAttribs)
{ {
// Get response attributes from EapHost peer. // Get response attributes from EapHost peer.
eap_error_runtime error; eap_error_runtime error;

View File

@@ -29,26 +29,26 @@
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}</ProjectGuid> <ProjectGuid>{13D2D8B5-F6AA-459D-B5F7-29B95DD9D583}</ProjectGuid>
<RootNamespace>EapHost_UI</RootNamespace> <RootNamespace>EapHost_UI</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -56,21 +56,21 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

Some files were not shown because too many files have changed in this diff Show More