Compare commits

..

91 Commits

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 59c5fc9d6498a4aa15cd4e75a3a9d04ccb0316b1 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 daea1bba62ba514ed13d716ca5b5b1c89763c8f9 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
394 changed files with 28153 additions and 20056 deletions

3
.gitmodules vendored
View File

@ -7,6 +7,3 @@
[submodule "lib/wxExtend"]
path = lib/wxExtend
url = https://github.com/Amebis/wxExtend.git
[submodule "lib/stdex"]
path = lib/stdex
url = https://github.com/Amebis/stdex.git

14
CredWrite/CredWrite.props Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
@ -28,46 +28,116 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{2D3CE079-7EB1-4F47-B79E-F0310671ECCB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CredWrite</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="CredWrite.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemGroup>
<ClInclude Include="PCH.h" />
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main.cpp" />
<ClCompile Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
<ClCompile Include="StdAfx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
@ -86,10 +156,14 @@
<ProjectReference Include="..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="README.md" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
@ -15,12 +15,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PCH.h">
<ClInclude Include="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH.cpp">
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main.cpp">

View File

@ -1,18 +1,29 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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 "PCH.h"
#include "StdAfx.h"
using namespace std;
using namespace stdex;
using namespace winstd;
class module_dummy : public eap::module {
virtual eap::config_method* make_config() { return nullptr; }
} g_module;
eap::module g_module;
static int CredWrite()
@ -105,16 +116,15 @@ static int CredWrite()
}
_Use_decl_annotations_
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
UNREFERENCED_PARAMETER(nCmdShow);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
g_module.m_instance = hInstance;
int res = CredWrite();
assert(!_CrtDumpMemoryLeaks());
return res;
}

View File

@ -1,7 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

View File

@ -1,22 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#include "../lib/EAPBase/include/Config.h"
#include "../lib/EAPBase/include/Credentials.h"
#include "../lib/EAPBase/include/Module.h"
#include <WinStd/Common.h>
#include <WinStd/Win.h>
#include <stdex/base64.hpp>
#include <Windows.h>
#include <eaptypes.h> // Must include after <Windows.h>
#include <shellapi.h>
#include <tchar.h>
#include <memory>

View File

@ -1,9 +1,7 @@
# CredWrite
Imports given credentials to Windows Credential Manager for GÉANTLink use
## Usage
```
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.
### Return codes
Return codes:
- -1 = Invalid parameters
- 0 = Success
- 1 = Error parsing command line
- 2 = Error encrypting password or writing credentials
### Example
```
CredWrite dXNlckBjb250b3NvLmNvbQ== cGFzc3dvcmQxMjM= urn:RFC4282:realm:contoso.com 1
```

21
CredWrite/StdAfx.cpp Normal file
View File

@ -0,0 +1,21 @@
/*
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"

34
CredWrite/StdAfx.h Normal file
View File

@ -0,0 +1,34 @@
/*
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/>.
*/
#pragma once
#include "../lib/EAPBase/include/Credentials.h"
#include "../lib/EAPBase/include/Module.h"
#include <WinStd/Common.h>
#include <WinStd/Base64.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <eaptypes.h> // Must include after <Windows.h>
#include <tchar.h>
#include <memory>

View File

@ -1,4 +1,4 @@
# Doxyfile 1.8.7
# Doxyfile 1.8.7
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
@ -44,7 +44,7 @@ PROJECT_NUMBER =
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF = "Suite of EAP supplicants for Microsoft Windows - IEEE 802.1X clients for enterprise network authentication"
PROJECT_BRIEF = "EAP Supplicant for Windows"
# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
# the documentation. The maximum height of the logo should not exceed 55 pixels
@ -794,7 +794,6 @@ EXCLUDE = \
EventMonitor\res \
lib\EAPBase_UI\res \
lib\EapHost_UI\res \
lib\GTC_UI\res \
lib\TLS_UI\res \
lib\TTLS_UI\res \
lib\WinStd \

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
</ImportGroup>
<PropertyGroup>
<_PropertySheetDisplayName>EAP Method Common</_PropertySheetDisplayName>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir);..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EAPBase\build\EAPBase.vcxproj">
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
</ItemGroup>
</Project>

View File

@ -1,85 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid>
<RootNamespace>EAP-TTLS</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="EAPMethod.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\GTC\build\GTC.vcxproj">
<Project>{114a70bb-8698-4a0c-8c90-58f22edd8129}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\PAP\build\PAP.vcxproj">
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TTLS\build\TTLS.vcxproj">
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -1,105 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid>
<RootNamespace>EAP-TTLS_UI</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="EAPMethod_UI.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\EapHost_UI\build\EapHost_UI.vcxproj">
<Project>{13d2d8b5-f6aa-459d-b5f7-29b95dd9d583}</Project>
</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">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\MSCHAPv2_UI\build\MSCHAPv2_UI.vcxproj">
<Project>{7af5b922-7c17-428a-97e0-09e3b41a684d}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\PAP\build\PAP.vcxproj">
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\PAP_UI\build\PAP_UI.vcxproj">
<Project>{3d309c2e-64ab-4bc4-a16d-468571a2bc1a}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TLS_UI\build\TLS_UI.vcxproj">
<Project>{9a25c261-8ade-4938-8393-e857ef0e37e9}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TTLS\build\TTLS.vcxproj">
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\TTLS_UI\build\TTLS_UI.vcxproj">
<Project>{42f0f0f4-c928-4860-a4e4-94991c2c3d90}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\include\xgettext.targets" />
</ImportGroup>
</Project>

Binary file not shown.

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<ItemDefinitionGroup>
<Link>
<ModuleDefinitionFile>EAPMethod.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PCH.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main.cpp" />
<ClCompile Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Register.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod.def" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod.rc" />
</ItemGroup>
</Project>

Binary file not shown.

View File

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeaderFile>PCH_UI.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<ModuleDefinitionFile>EAPMethod_UI.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PCH_UI.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Main_UI.cpp" />
<ClCompile Include="PCH_UI.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Register_UI.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod_UI.def" />
<None Include="locale\EAPMethods.pot" />
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\bg_BG.po" />
<POCompile Include="locale\ca_ES.po" />
<POCompile Include="locale\cs_CZ.po" />
<POCompile Include="locale\cy_UK.po" />
<POCompile Include="locale\de_DE.po" />
<POCompile Include="locale\el_GR.po" />
<POCompile Include="locale\es_ES.po" />
<POCompile Include="locale\et_EE.po" />
<POCompile Include="locale\eu_ES.po" />
<POCompile Include="locale\fi_FI.po" />
<POCompile Include="locale\fr_CA.po" />
<POCompile Include="locale\fr_FR.po" />
<POCompile Include="locale\gl_ES.po" />
<POCompile Include="locale\hr_HR.po" />
<POCompile Include="locale\hu_HU.po" />
<POCompile Include="locale\is_IS.po" />
<POCompile Include="locale\it_IT.po" />
<POCompile Include="locale\ko_KR.po" />
<POCompile Include="locale\lt_LT.po" />
<POCompile Include="locale\nb_NO.po" />
<POCompile Include="locale\nl_NL.po" />
<POCompile Include="locale\pl_PL.po" />
<POCompile Include="locale\pt_PT.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sk_SK.po" />
<POCompile Include="locale\ro_RO.po" />
<POCompile Include="locale\sl_SI.po" />
<POCompile Include="locale\sr_RS.po" />
<POCompile Include="locale\sv_SE.po" />
<POCompile Include="locale\tr_TR.po" />
<POCompile Include="locale\vi_VN.po" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod_UI.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\EAPBase_UI\build\EAPBase_UI.vcxproj">
<Project>{d4b54856-be1f-4937-a8f7-495125be76be}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
</ItemGroup>
</Project>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="..\build\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<ModuleDefinitionFile>..\build\EAPMethod.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{331B6077-E3E2-4867-B93E-9D3F57280DE7}</ProjectGuid>
<RootNamespace>EAPTTLS</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLS.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemGroup>
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\Main.cpp" />
<ClCompile Include="StdAfx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLS.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\EAPBase\build\EAPBase.vcxproj">
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\PAP\build\PAP.vcxproj">
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj">
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethod.def" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,43 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PCH.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Register.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\Main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLS.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethod.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,21 @@
/*
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"

View File

@ -0,0 +1,24 @@
/*
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/>.
*/
#pragma once
#include "../../lib/TTLS/include/Method.h"
#include "../../lib/TTLS/include/Module.h"

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="..\build\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>EAPMETHOD_TYPE=21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<ModuleDefinitionFile>..\build\EAPMethodUI.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -0,0 +1,227 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{DD7A97CA-F18E-43B7-95C4-D06E6A291624}</ProjectGuid>
<RootNamespace>EAPTTLSUI</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\include\$(Platform).props" />
<Import Project="..\..\include\$(Configuration).props" />
<Import Project="EAPTTLSUI.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemGroup>
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\Main_UI.cpp" />
<ClCompile Include="StdAfx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLSUI.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\EAPBase\build\EAPBase.vcxproj">
<Project>{ad6816a0-9600-4e01-8c49-39d03d1e791f}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EAPBase_UI\build\EAPBase_UI.vcxproj">
<Project>{d4b54856-be1f-4937-a8f7-495125be76be}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EapHost\build\EapHost.vcxproj">
<Project>{b385ec2b-c3f4-48bb-9bac-8b996de7f754}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\EapHost_UI\build\EapHost_UI.vcxproj">
<Project>{13d2d8b5-f6aa-459d-b5f7-29b95dd9d583}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2\build\MSCHAPv2.vcxproj">
<Project>{86a6d6a0-4b7d-4134-be81-a5755c77584d}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\MSCHAPv2_UI\build\MSCHAPv2_UI.vcxproj">
<Project>{7af5b922-7c17-428a-97e0-09e3b41a684d}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\PAP\build\PAP.vcxproj">
<Project>{36b0cf8a-7794-46c3-8099-825ba962b4c7}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\PAP_UI\build\PAP_UI.vcxproj">
<Project>{3d309c2e-64ab-4bc4-a16d-468571a2bc1a}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TLS\build\TLS.vcxproj">
<Project>{4d40cb8a-812e-4f12-b23a-31af743878e8}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TLS_UI\build\TLS_UI.vcxproj">
<Project>{9a25c261-8ade-4938-8393-e857ef0e37e9}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TTLS\build\TTLS.vcxproj">
<Project>{ee0ef0d9-a475-4038-8637-5754724f65b0}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\TTLS_UI\build\TTLS_UI.vcxproj">
<Project>{42f0f0f4-c928-4860-a4e4-94991c2c3d90}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
<ProjectReference Include="..\..\lib\wxExtend\build\wxExtendLib-15.0.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethodUI.def" />
<None Include="..\locale\EAPMethods.pot" />
</ItemGroup>
<ItemGroup>
<POCompile Include="..\locale\bg_BG.po" />
<POCompile Include="..\locale\ca_ES.po" />
<POCompile Include="..\locale\cs_CZ.po" />
<POCompile Include="..\locale\cy_UK.po" />
<POCompile Include="..\locale\de_DE.po" />
<POCompile Include="..\locale\el_GR.po" />
<POCompile Include="..\locale\es_ES.po" />
<POCompile Include="..\locale\et_EE.po" />
<POCompile Include="..\locale\eu_ES.po" />
<POCompile Include="..\locale\fi_FI.po" />
<POCompile Include="..\locale\fr_CA.po" />
<POCompile Include="..\locale\fr_FR.po" />
<POCompile Include="..\locale\gl_ES.po" />
<POCompile Include="..\locale\hr_HR.po" />
<POCompile Include="..\locale\hu_HU.po" />
<POCompile Include="..\locale\is_IS.po" />
<POCompile Include="..\locale\it_IT.po" />
<POCompile Include="..\locale\ko_KR.po" />
<POCompile Include="..\locale\lt_LT.po" />
<POCompile Include="..\locale\nb_NO.po" />
<POCompile Include="..\locale\nl_NL.po" />
<POCompile Include="..\locale\pl_PL.po" />
<POCompile Include="..\locale\pt_PT.po" />
<POCompile Include="..\locale\ru_RU.po" />
<POCompile Include="..\locale\sk_SK.po" />
<POCompile Include="..\locale\sl_SI.po" />
<POCompile Include="..\locale\sr_RS.po" />
<POCompile Include="..\locale\sv_SE.po" />
<POCompile Include="..\locale\tr_TR.po" />
<POCompile Include="..\locale\vi_VN.po" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\..\include\xgettext.targets" />
</ImportGroup>
</Project>

View File

@ -1,145 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Resource Files\Localization">
<UniqueIdentifier>{e43059ae-37ac-4b28-84fb-18d1b3972b30}</UniqueIdentifier>
<Extensions>po;pot</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PCH_UI.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Register_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\EAPMethod_UI.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="EAPMethod_UI.def">
<Filter>Source Files</Filter>
</None>
<None Include="locale\EAPMethods.pot">
<Filter>Resource Files\Localization</Filter>
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\ro_RO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\bg_BG.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ca_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\cs_CZ.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\cy_UK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\el_GR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\es_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\eu_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fi_FI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fr_CA.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\fr_FR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\gl_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\hr_HR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\hu_HU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\is_IS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\it_IT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\lt_LT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\nb_NO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\nl_NL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\pl_PL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\pt_PT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sk_SK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sr_RS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sv_SE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\tr_TR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\vi_VN.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ko_KR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\et_EE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Resource Files\Localization">
<UniqueIdentifier>{e43059ae-37ac-4b28-84fb-18d1b3972b30}</UniqueIdentifier>
<Extensions>po;pot</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\Main_UI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EAPTTLSUI.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\build\EAPMethodUI.def">
<Filter>Source Files</Filter>
</None>
<None Include="..\locale\EAPMethods.pot">
<Filter>Resource Files\Localization</Filter>
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="..\locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\bg_BG.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ca_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\cs_CZ.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\cy_UK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\el_GR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\es_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\eu_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fi_FI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fr_CA.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\fr_FR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\gl_ES.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\hr_HR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\hu_HU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\is_IS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\it_IT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\lt_LT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\nb_NO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\nl_NL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\pl_PL.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\pt_PT.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sk_SK.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sr_RS.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\sv_SE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\tr_TR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\vi_VN.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ko_KR.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\et_EE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,21 @@
/*
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"

View File

@ -0,0 +1,23 @@
/*
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/>.
*/
#pragma once
#include "../../lib/TTLS_UI/include/Module.h"

View File

@ -1,9 +0,0 @@
/*-1.idt
/*-2.idt
/*-2.idtx
/*.Binary-1
/*.Binary-2
/*.Icon-1
/*.Icon-2
/*.lst
/*.msm

Binary file not shown.

View File

@ -1,895 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
using namespace winstd;
EAPMETHOD_PEER g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
g_peer.m_instance = hinstDLL;
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Obtains a set of function pointers for an implementation of the EAP peer method currently loaded on the EapHost service.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363608.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerGetInfo(EAP_TYPE* pEapType, EAP_PEER_METHOD_ROUTINES* pEapPeerMethodRoutines, EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapPeerMethodRoutines)
memset(pEapPeerMethodRoutines, 0, sizeof(*pEapPeerMethodRoutines));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pEapPeerMethodRoutines)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->type != EAPMETHOD_TYPE)
return dwResult = ERROR_NOT_SUPPORTED;
pEapPeerMethodRoutines->dwVersion =
((PRODUCT_VERSION_MAJ & 0xff) << 24) |
((PRODUCT_VERSION_MIN & 0xff) << 16) |
((PRODUCT_VERSION_REV & 0xff) << 8) |
(PRODUCT_VERSION_BUILD & 0xff);
pEapPeerMethodRoutines->pEapType = NULL;
pEapPeerMethodRoutines->EapPeerInitialize = EapPeerInitialize;
pEapPeerMethodRoutines->EapPeerShutdown = EapPeerShutdown;
pEapPeerMethodRoutines->EapPeerBeginSession = EapPeerBeginSession;
pEapPeerMethodRoutines->EapPeerEndSession = EapPeerEndSession;
pEapPeerMethodRoutines->EapPeerSetCredentials = NULL; // Always NULL unless we want to use generic credential UI
pEapPeerMethodRoutines->EapPeerGetIdentity = EapPeerGetIdentity;
pEapPeerMethodRoutines->EapPeerProcessRequestPacket = EapPeerProcessRequestPacket;
pEapPeerMethodRoutines->EapPeerGetResponsePacket = EapPeerGetResponsePacket;
pEapPeerMethodRoutines->EapPeerGetResult = EapPeerGetResult;
pEapPeerMethodRoutines->EapPeerGetUIContext = EapPeerGetUIContext;
pEapPeerMethodRoutines->EapPeerSetUIContext = EapPeerSetUIContext;
pEapPeerMethodRoutines->EapPeerGetResponseAttributes = EapPeerGetResponseAttributes;
pEapPeerMethodRoutines->EapPeerSetResponseAttributes = EapPeerSetResponseAttributes;
return dwResult;
}
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the initialize() method is empty => never throws an exception.
///
/// Initializes an EAP peer method for EapHost.
///
/// \sa [EapPeerInitialize function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerInitialize(EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
try {
g_peer.initialize();
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the shutdown() method is empty => never throws an exception.
///
/// Shuts down the EAP method and prepares to unload its corresponding DLL.
///
/// \sa [EapPeerShutdown function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363627.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerShutdown(EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
try {
g_peer.shutdown();
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
///
/// Returns the user data and user identity after being called by EapHost.
///
/// \sa [EapPeerGetIdentity function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363607.aspx)
///
_Use_decl_annotations_
DWORD APIENTRY EapPeerGetIdentity(
DWORD dwFlags,
DWORD dwConnectionDataSize,
const BYTE *pConnectionData,
DWORD dwUserDataSize,
const BYTE *pUserData,
HANDLE hTokenImpersonateUser,
BOOL *pfInvokeUI,
DWORD *pdwUserDataOutSize,
BYTE **ppUserDataOut,
WCHAR **ppwszIdentity,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pfInvokeUI)
*pfInvokeUI = FALSE;
if (pdwUserDataOutSize)
*pdwUserDataOutSize = 0;
if (ppUserDataOut)
*ppUserDataOut = NULL;
if (ppwszIdentity)
*ppwszIdentity = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pfInvokeUI || !pdwUserDataOutSize || !ppUserDataOut || !ppwszIdentity)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_identity(dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, hTokenImpersonateUser, pfInvokeUI, ppwszIdentity);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Starts an EAP authentication session on the peer EapHost using the EAP method.
///
/// \sa [EapPeerBeginSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363600.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerBeginSession(
DWORD dwFlags,
const EapAttributes *pAttributeArray,
HANDLE hTokenImpersonateUser,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
DWORD dwUserDataSize,
/*const*/ BYTE *pUserData,
DWORD dwMaxSendPacketSize,
EAP_SESSION_HANDLE *phSession,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (phSession)
*phSession = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !phSession)
return dwResult = ERROR_INVALID_PARAMETER;
try {
*phSession = g_peer.begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, dwMaxSendPacketSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Ends an EAP authentication session for the EAP method.
///
/// \sa [EapPeerEndSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363604.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerEndSession(
EAP_SESSION_HANDLE hSession,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.end_session(hSession);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Processes a packet received by EapHost from a supplicant.
///
/// \sa [EapPeerProcessRequestPacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363621.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerProcessRequestPacket(
EAP_SESSION_HANDLE hSession,
DWORD dwReceivedPacketSize,
/*const*/ EapPacket *pReceivedPacket,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pReceivedPacket || dwReceivedPacketSize < sizeof(EapPacket) || pReceivedPacket->Data[0] != EAPMETHOD_TYPE || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.process_request_packet(hSession, pReceivedPacket, dwReceivedPacketSize, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Obtains a response packet from the EAP method.
///
/// \sa [EapPeerGetResponsePacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363610.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResponsePacket(
EAP_SESSION_HANDLE hSession,
DWORD *pdwSendPacketSize,
EapPacket *pSendPacket,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pdwSendPacketSize || !pSendPacket && *pdwSendPacketSize)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_response_packet(hSession, pSendPacket, pdwSendPacketSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Obtains the result of an authentication session from the EAP method.
///
/// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResult(
EAP_SESSION_HANDLE hSession,
EapPeerMethodResultReason reason,
EapPeerMethodResult *pResult,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pResult)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_result(hSession, reason, pResult);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Obtains the user interface context from the EAP method.
///
/// \note This function is always followed by the `EapPeerInvokeInteractiveUI()` function, which is followed by the `EapPeerSetUIContext()` function.
///
/// \sa [EapPeerGetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363612.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetUIContext(
EAP_SESSION_HANDLE hSession,
DWORD *pdwUIContextDataSize,
BYTE **ppUIContextData,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwUIContextDataSize)
*pdwUIContextDataSize = 0;
if (ppUIContextData)
*ppUIContextData = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pdwUIContextDataSize || !ppUIContextData)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_ui_context(hSession, ppUIContextData, pdwUIContextDataSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Provides a user interface context to the EAP method.
///
/// \note This function is called after the UI has been raised through the `EapPeerGetUIContext()` function.
///
/// \sa [EapPeerSetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363626.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerSetUIContext(
EAP_SESSION_HANDLE hSession,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pUIContextData && dwUIContextDataSize || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.set_ui_context(hSession, pUIContextData, dwUIContextDataSize, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Obtains an array of EAP response attributes from the EAP method.
///
/// \sa [EapPeerGetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363609.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerGetResponseAttributes(
EAP_SESSION_HANDLE hSession,
EapAttributes *pAttribs,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pAttribs)
memset(pAttribs, 0, sizeof(*pAttribs));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pAttribs)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_response_attributes(hSession, pAttribs);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Provides an updated array of EAP response attributes to the EAP method.
///
/// \sa [EapPeerSetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363625.aspx)
///
//_Use_decl_annotations_
DWORD APIENTRY EapPeerSetResponseAttributes(
EAP_SESSION_HANDLE hSession,
/*const*/ EapAttributes *pAttribs,
EapPeerMethodOutput *pEapOutput,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapOutput)
memset(pEapOutput, 0, sizeof(*pEapOutput));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!hSession || !pEapOutput)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.set_response_attributes(hSession, pAttribs, pEapOutput);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
///
/// \sa [EapPeerGetMethodProperties function](https://msdn.microsoft.com/en-us/library/windows/desktop/hh706636.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerGetMethodProperties(
DWORD dwVersion,
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
HANDLE hUserImpersonationToken,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
DWORD dwUserDataSize,
/*const*/ BYTE *pUserData,
EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pMethodPropertyArray)
memset(pMethodPropertyArray, 0, sizeof(*pMethodPropertyArray));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pMethodPropertyArray)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.get_method_properties(dwVersion, dwFlags, hUserImpersonationToken, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, pMethodPropertyArray);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Converts XML into the configuration BLOB. The XML based credentials can come from group policy or from a system administrator.
///
/// \sa [EapPeerCredentialsXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363603.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerCredentialsXml2Blob(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
IXMLDOMDocument2 *pCredentialsDoc,
const BYTE *pConnectionData,
DWORD dwConnectionDataSize,
BYTE **ppCredentialsOut,
DWORD *pdwCredentialsOutSize,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppCredentialsOut)
*ppCredentialsOut = NULL;
if (pdwCredentialsOutSize)
*pdwCredentialsOutSize = 0;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pCredentialsDoc || !pConnectionData && dwConnectionDataSize || !ppCredentialsOut || !pdwCredentialsOutSize)
return dwResult = ERROR_INVALID_PARAMETER;
// <Credentials>
com_obj<IXMLDOMNode> pXmlElCredentials;
if (FAILED(eapxml::select_node(pCredentialsDoc, bstr(L"//EapHostUserCredentials/Credentials"), pXmlElCredentials)))
return dwResult = g_peer.log_error(ppEapError, ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <EapHostUserCredentials><Credentials> element."));
// Load credentials.
pCredentialsDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.credentials_xml2blob(dwFlags, pXmlElCredentials, pConnectionData, dwConnectionDataSize, ppCredentialsOut, pdwCredentialsOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Defines the implementation of an EAP method-specific function that obtains the EAP Single-Sign-On (SSO) credential input fields for an EAP method.
///
/// \sa [EapPeerQueryCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363622.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryCredentialInputFields(
HANDLE hUserImpersonationToken,
EAP_METHOD_TYPE eapMethodType,
DWORD dwFlags,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapConfigInputFieldsArray)
memset(pEapConfigInputFieldsArray, 0, sizeof(*pEapConfigInputFieldsArray));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pEapConfigInputFieldsArray)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldsArray);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Defines the implementation of an EAP method function that obtains the user BLOB data provided in an interactive Single-Sign-On (SSO) UI raised on the supplicant.
///
/// \sa [EapPeerQueryUserBlobFromCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204697.aspx)
///
#pragma warning(suppress: 6101) // Function is incorrectly annotated and code analysis gets confused
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryUserBlobFromCredentialInputFields(
HANDLE hUserImpersonationToken,
EAP_METHOD_TYPE eapMethodType,
DWORD dwFlags,
DWORD dwConnectionDataSize,
/*const*/ BYTE *pConnectionData,
const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
DWORD *pdwUsersBlobSize,
BYTE **ppUserBlob,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !pEapConfigInputFieldArray || !pdwUsersBlobSize || !ppUserBlob)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_user_blob_from_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldArray, pdwUsersBlobSize, ppUserBlob);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Defines the implementation of an EAP method API that provides the input fields for interactive UI components to be raised on the supplicant.
///
/// \sa [EapPeerQueryInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204695.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryInteractiveUIInputFields(
DWORD dwVersion,
DWORD dwFlags,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
EAP_ERROR **ppEapError,
LPVOID *ppvReserved)
{
UNREFERENCED_PARAMETER(ppvReserved);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pEapInteractiveUIData)
memset(pEapInteractiveUIData, 0, sizeof(*pEapInteractiveUIData));
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pUIContextData && dwUIContextDataSize || !pEapInteractiveUIData)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Converts user information into a user BLOB that can be consumed by EapHost run-time functions.
///
/// \sa [EapPeerQueryUIBlobFromInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204696.aspx)
///
#pragma warning(suppress: 6387) // Function is incorrectly annotated and code analysis gets confused
#pragma warning(suppress: 28196)
_Use_decl_annotations_
DWORD WINAPI EapPeerQueryUIBlobFromInteractiveUIInputFields(
DWORD dwVersion,
DWORD dwFlags,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
DWORD *pdwDataFromInteractiveUISize,
BYTE **ppDataFromInteractiveUI,
EAP_ERROR **ppEapError,
LPVOID *ppvReserved)
{
UNREFERENCED_PARAMETER(ppvReserved);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwDataFromInteractiveUISize)
*pdwDataFromInteractiveUISize = 0;
if (ppDataFromInteractiveUI)
*ppDataFromInteractiveUI = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pUIContextData && dwUIContextDataSize || !pEapInteractiveUIData || !pdwDataFromInteractiveUISize || !ppDataFromInteractiveUI)
return dwResult = ERROR_INVALID_PARAMETER;
try {
g_peer.query_ui_blob_from_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData, pdwDataFromInteractiveUISize, ppDataFromInteractiveUI);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}

View File

@ -1,359 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"
#pragma comment(lib, "msxml6.lib")
using namespace std;
using namespace winstd;
HANDLE g_act_ctx = NULL;
EAPMETHOD_PEER_UI g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
_CrtSetDbgFlag(_crtDbgFlag | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
g_peer.m_instance = hinstDLL;
#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
// Declare our DllHost process as DPI-aware.
SetProcessDPIAware();
#endif
// Save current activation context, as proper activation context is set at this time only (LoadLibrary() call).
GetCurrentActCtx(&g_act_ctx);
} else if (fdwReason == DLL_PROCESS_DETACH) {
if (g_act_ctx)
ReleaseActCtx(g_act_ctx);
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeMemory(void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
_Use_decl_annotations_
VOID WINAPI EapPeerFreeErrorMemory(EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Converts XML into the configuration BLOB.
///
/// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigXml2Blob(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
IXMLDOMDocument2 *pConfigDoc,
BYTE **pConnectionDataOut,
DWORD *pdwConnectionDataOutSize,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pConnectionDataOut)
*pConnectionDataOut = NULL;
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConfigDoc || !pConnectionDataOut || !pdwConnectionDataOutSize)
return dwResult = ERROR_INVALID_PARAMETER;
// 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\""));
// <Config>
com_obj<IXMLDOMElement> pXmlElConfig;
if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig)))
return dwResult = g_peer.log_error(ppEapError, ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element."));
// Load configuration.
try {
g_peer.config_xml2blob(dwFlags, pXmlElConfig, pConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Converts the configuration BLOB to XML.
///
/// The configuration BLOB is returned in the ppConnectionDataOut parameter of the EapPeerInvokeConfigUI function.
///
/// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx)
///
_Use_decl_annotations_
DWORD WINAPI EapPeerConfigBlob2Xml(
DWORD dwFlags,
EAP_METHOD_TYPE eapMethodType,
const BYTE *pConnectionData,
DWORD dwConnectionDataSize,
IXMLDOMDocument2 **ppConfigDoc,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (ppConfigDoc)
*ppConfigDoc = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (eapMethodType.eapType.type != EAPMETHOD_TYPE || eapMethodType.dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
if (!pConnectionData && dwConnectionDataSize || !ppConfigDoc)
return dwResult = ERROR_INVALID_PARAMETER;
HRESULT hr;
// Create configuration XML document.
com_obj<IXMLDOMDocument2> pConfigDoc;
if (FAILED(hr = CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, pConfigDoc)))
return dwResult = g_peer.log_error(ppEapError, HRESULT_CODE(hr), _T(__FUNCTION__) _T(" Error creating XML document."));
pConfigDoc->put_async(VARIANT_FALSE);
// Load empty XML configuration.
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.
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\""));
// Select <Config> node.
com_obj<IXMLDOMNode> pXmlElConfig;
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.
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) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
return dwResult = ERROR_INVALID_DATA;
}
*ppConfigDoc = pConfigDoc.detach();
return dwResult;
}
///
/// Raises the EAP method's specific connection configuration user interface dialog on the client.
///
/// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeConfigUI(
const EAP_METHOD_TYPE *pEapType,
HWND hwndParent,
DWORD dwFlags,
DWORD dwConnectionDataInSize,
const BYTE *pConnectionDataIn,
DWORD *pdwConnectionDataOutSize,
BYTE **ppConnectionDataOut,
EAP_ERROR **ppEapError)
{
UNREFERENCED_PARAMETER(dwFlags);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwConnectionDataOutSize)
*pdwConnectionDataOutSize = 0;
if (ppConnectionDataOut)
*ppConnectionDataOut = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pConnectionDataIn && dwConnectionDataInSize || !pdwConnectionDataOutSize || !ppConnectionDataOut)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_config_ui(hwndParent, pConnectionDataIn, dwConnectionDataInSize, ppConnectionDataOut, pdwConnectionDataOutSize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Raises a custom interactive user interface dialog to obtain user identity information for the EAP method on the client.
///
/// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeIdentityUI(
const EAP_METHOD_TYPE *pEapType,
DWORD dwFlags,
HWND hwndParent,
DWORD dwConnectionDataSize,
const BYTE *pConnectionData,
DWORD dwUserDataSize,
const BYTE *pUserData,
DWORD *pdwUserDataOutSize,
BYTE **ppUserDataOut,
LPWSTR *ppwszIdentity,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwUserDataOutSize)
*pdwUserDataOutSize = 0;
if (ppUserDataOut)
*ppUserDataOut = NULL;
if (ppwszIdentity)
*ppwszIdentity = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pConnectionData && dwConnectionDataSize || !pUserData && dwUserDataSize || !pdwUserDataOutSize || !ppUserDataOut || !ppwszIdentity)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_identity_ui(hwndParent, dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, ppwszIdentity);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
///
/// Raises a custom interactive user interface dialog for the EAP method on the client.
///
/// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx)
///
//_Use_decl_annotations_
DWORD WINAPI EapPeerInvokeInteractiveUI(
const EAP_METHOD_TYPE *pEapType,
HWND hwndParent,
DWORD dwUIContextDataSize,
const BYTE *pUIContextData,
DWORD *pdwDataFromInteractiveUISize,
BYTE **ppDataFromInteractiveUI,
EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Initialize output parameters.
if (pdwDataFromInteractiveUISize)
*pdwDataFromInteractiveUISize = 0;
if (ppDataFromInteractiveUI)
*ppDataFromInteractiveUI = NULL;
if (ppEapError)
*ppEapError = NULL;
// Parameter check
if (!pEapType || !pUIContextData && dwUIContextDataSize || !pdwDataFromInteractiveUISize || !ppDataFromInteractiveUI)
return dwResult = ERROR_INVALID_PARAMETER;
if (pEapType->eapType.type != EAPMETHOD_TYPE || pEapType->dwAuthorId != EAPMETHOD_AUTHOR_ID)
return dwResult = ERROR_NOT_SUPPORTED;
try {
g_peer.invoke_interactive_ui(hwndParent, pUIContextData, dwUIContextDataSize, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
} catch (std::exception &err) {
dwResult = g_peer.log_error(ppEapError, err);
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}

View File

@ -1,7 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

View File

@ -1,17 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#if EAPMETHOD_TYPE == 21
#include "../lib/TTLS/include/Method.h"
#include "../lib/TTLS/include/Module.h"
#define EAPMETHOD_PEER eap::peer_ttls
#else
#error Unknown EAP Method type.
#endif
extern EAPMETHOD_PEER g_peer;

View File

@ -1,7 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"

View File

@ -1,19 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
// Prevent warnings from wxWidgets headers
#define _CRT_SECURE_NO_WARNINGS
#if EAPMETHOD_TYPE == 21
#include "../lib/TTLS_UI/include/Module.h"
#define EAPMETHOD_PEER_UI eap::peer_ttls_ui
#else
#error Unknown EAP Method type.
#endif
extern EAPMETHOD_PEER_UI g_peer;

View File

@ -1,89 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2020-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"
using namespace std;
using namespace winstd;
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ LPCTSTR sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue), (DWORD)((_tcslen(sValue) + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ const tstring &sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue.c_str()), (DWORD)((sValue.length() + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ DWORD dwValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_DWORD, reinterpret_cast<LPCBYTE>(&dwValue), sizeof(dwValue));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
///
/// Registers method in EapHost registry
///
/// \returns S_OK if successful; E_FAIL otherwise
///
STDAPI DllRegisterServer()
{
try {
tstring sz, sz2;
reg_key key_methods, key_author, key_method;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_CREATE_SUB_KEY, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u"), EAPMETHOD_AUTHOR_ID);
s = RegCreateKeyEx(key_methods, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_author, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
set_value(key_author, NULL, _T(PRODUCT_NAME_STR));
sprintf(sz, _T("%u"), EAPMETHOD_TYPE);
s = RegCreateKeyEx(key_author, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_method, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
if (!GetModuleFileName(g_peer.m_instance, sz)) throw win_runtime_error("GetModuleFileName failed.");
sprintf(sz2, _T("@%s,-1"), sz.c_str());
set_value(key_method, _T("PeerDllPath") , sz);
set_value(key_method, _T("PeerFriendlyName"), sz2);
set_value(key_method, _T("Properties") , (DWORD)389871807);
return S_OK;
} catch(win_runtime_error &err) {
OutputDebugStr(_T("%hs (error %u)\n"), err.what(), err.number());
return E_FAIL;
} catch(...) {
OutputDebugStr(_T("Registering DLL failed.\n"));
return E_FAIL;
}
}
///
/// Unregisters method from EapHost registry
///
/// \returns Always S_OK
///
STDAPI DllUnregisterServer()
{
try {
tstring sz;
reg_key key_methods;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_READ, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u\\%u"), EAPMETHOD_AUTHOR_ID, EAPMETHOD_TYPE);
if (!key_methods.delete_subkey(sz.c_str())) throw win_runtime_error();
} catch(...) {}
return S_OK;
}

View File

@ -1,90 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2020-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH_UI.h"
using namespace std;
using namespace winstd;
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ LPCTSTR sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue), (DWORD)((_tcslen(sValue) + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ const tstring &sValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_SZ, reinterpret_cast<LPCBYTE>(sValue.c_str()), (DWORD)((sValue.length() + 1) * sizeof(tstring::value_type)));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
static void set_value(_In_ HKEY hKey, _In_opt_z_ LPCTSTR lpValueName, _In_ DWORD dwValue)
{
LSTATUS s = RegSetValueEx(hKey, lpValueName, 0, REG_DWORD, reinterpret_cast<LPCBYTE>(&dwValue), sizeof(dwValue));
if (s != ERROR_SUCCESS)
throw win_runtime_error(s, "RegSetValueEx failed.");
}
///
/// Registers method UI in EapHost registry
///
/// \returns S_OK if successful; E_FAIL otherwise
///
STDAPI DllRegisterServer()
{
try {
tstring sz;
reg_key key_methods, key_author, key_method;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_CREATE_SUB_KEY, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u"), EAPMETHOD_AUTHOR_ID);
s = RegCreateKeyEx(key_methods, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_author, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
set_value(key_author, NULL, _T(PRODUCT_NAME_STR));
sprintf(sz, _T("%u"), EAPMETHOD_TYPE);
s = RegCreateKeyEx(key_author, sz.c_str(), NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, key_method, NULL);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
if (!GetModuleFileName(g_peer.m_instance, sz)) throw win_runtime_error("GetModuleFileName failed.");
set_value(key_method, _T("PeerConfigUIPath") , sz);
set_value(key_method, _T("PeerIdentityPath") , sz);
set_value(key_method, _T("PeerInteractiveUIPath") , sz);
set_value(key_method, _T("PeerInvokePasswordDialog"), (DWORD)0);
set_value(key_method, _T("PeerInvokeUsernameDialog"), (DWORD)0);
return S_OK;
} catch(win_runtime_error &err) {
OutputDebugStr(_T("%hs (error %u)\n"), err.what(), err.number());
return E_FAIL;
} catch(...) {
OutputDebugStr(_T("Registering DLL failed.\n"));
return E_FAIL;
}
}
///
/// Unregisters method UI from EapHost registry
///
/// \returns Always S_OK
///
STDAPI DllUnregisterServer()
{
try {
tstring sz;
reg_key key_methods;
LSTATUS s = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\services\\EapHost\\Methods"), 0, KEY_READ, key_methods);
if (s != ERROR_SUCCESS) throw win_runtime_error(s);
sprintf(sz, _T("%u\\%u"), EAPMETHOD_AUTHOR_ID, EAPMETHOD_TYPE);
key_methods.delete_subkey(sz.c_str());
} catch(...) {}
return S_OK;
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_PropertySheetDisplayName>EAP Method Common</_PropertySheetDisplayName>
<OutDir>..\..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir);..\..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\include;..\..\lib\WinStd\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

Binary file not shown.

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
#: ver1.0/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"
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -846,7 +846,7 @@ msgstr ""
#: master/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
msgid "Omit my user name and use @mydomain.org only"
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -846,7 +846,7 @@ msgstr ""
#: master/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
msgid "Omit my user name and use @mydomain.org only"
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,729 +0,0 @@
#
# Translators:
# Simon Rozman <simon@rozman.si>, 2020
# Raul Opruta <raul.opruta@roedu.net>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: EAPMethods\n"
"POT-Creation-Date: 2020-04-17 14:55+0200\n"
"PO-Revision-Date: 2016-08-25 06:18+0000\n"
"Last-Translator: Raul Opruta <raul.opruta@roedu.net>, 2020\n"
"Language-Team: Romanian (Romania) (https://www.transifex.com/eduroam_devel/teams/11799/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
"X-Generator: Poedit 2.3\n"
"X-Poedit-Basepath: ../..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: lib/EAPBase_UI\n"
"X-Poedit-SearchPath-1: lib/EapHost_UI\n"
"X-Poedit-SearchPath-2: lib/GTC_UI\n"
"X-Poedit-SearchPath-3: lib/MSCHAPv2_UI\n"
"X-Poedit-SearchPath-4: lib/PAP_UI\n"
"X-Poedit-SearchPath-5: lib/TLS_UI\n"
"X-Poedit-SearchPath-6: lib/TTLS_UI\n"
"X-Poedit-SearchPath-7: EAPMethods\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: lib/EAPBase_UI/include/EAP_UI.h:295
#, c-format
msgid ""
"Are you sure you want to permanently remove %s provider from configuration?"
msgstr ""
"Sunteți sigur că doriți să eliminați definitiv furnizorul %s din "
"configurație?"
#: lib/EAPBase_UI/include/EAP_UI.h:295
msgid "Warning"
msgstr "Avertizare"
#: lib/EAPBase_UI/include/EAP_UI.h:381 lib/EAPBase_UI/res/wxEAP_UI.h:116
msgid "EAP Credentials"
msgstr "Credenţiale EAP"
#: lib/EAPBase_UI/include/EAP_UI.h:725
msgid "Provider Settings"
msgstr "Setări de provider"
#: lib/EAPBase_UI/include/EAP_UI.h:758 lib/EAPBase_UI/res/wxEAP_UI.cpp:229
#, c-format
msgid "%s User Credentials"
msgstr "%s Credenţiale utilizator"
#: lib/EAPBase_UI/include/EAP_UI.h:866 lib/TTLS_UI/src/Module.cpp:196
#: lib/TTLS_UI/src/Module.cpp:305
#, c-format
msgid "Error writing credentials to Credential Manager: %hs (error %u)"
msgstr ""
"Eroare la scriere a credențialelor în Managerul de credențiale: % hs "
"(eroare%u)"
#: lib/EAPBase_UI/include/EAP_UI.h:869 lib/TTLS_UI/src/Module.cpp:198
#: lib/TTLS_UI/src/Module.cpp:307
msgid "Writing credentials failed."
msgstr " Scrierea credențialele nu au reușit."
#: lib/EAPBase_UI/include/EAP_UI.h:897
#, c-format
msgid "Deleting credentials failed (error %u)."
msgstr "Ştergerea credenţialelor eşuată (eroare %u)."
#: lib/EAPBase_UI/include/EAP_UI.h:924 lib/EAPBase_UI/include/EAP_UI.h:943
#: lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(none)"
msgstr "(nici unul)"
#: lib/EAPBase_UI/include/EAP_UI.h:928
#, c-format
msgid "(error %u)"
msgstr "(eroare %u )"
#: lib/EAPBase_UI/include/EAP_UI.h:932
msgid "(error)"
msgstr "(eroare)"
#: lib/EAPBase_UI/include/EAP_UI.h:943 lib/EAPBase_UI/include/EAP_UI.h:952
msgid "(blank ID)"
msgstr "(ID gol)"
#: lib/EAPBase_UI/include/EAP_UI.h:992
msgid "&Remember"
msgstr "&Ţine minte"
#: lib/EAPBase_UI/include/EAP_UI.h:993
msgid "Check if you would like to save credentials"
msgstr " Verificați dacă doriți să salvați datele de acreditare"
#: lib/EAPBase_UI/include/EAP_UI.h:1214
msgid "(Your Organization)"
msgstr "(Organizaţia ta)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:37
msgid "+"
msgstr "+"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:38
msgid "Adds new provider"
msgstr "Adaugă un nou furnizor"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:42
msgid "-"
msgstr "-"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:43
msgid "Removes selected provider"
msgstr "Înlătură furnizorul selectat"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:47
msgid "Advanced..."
msgstr "Avansat..."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:48
msgid "Opens dialog with provider settings"
msgstr "Deschide dialogul cu setările furnizorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:240
msgid "Select the source where your credentials used to connect are stored."
msgstr ""
"Selectați sursa în care sunt stocate datele de acreditare folosite pentru a "
"vă conecta."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:250
msgid "Use from Credential &Manager:"
msgstr "Utilizați de la Credențiale & Management:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:251
msgid ""
"Select this option if you would like to use credentials stored in Windows "
"Credential Manager"
msgstr ""
"Selectați această opțiune dacă doriți să utilizați credețialele stocate în "
"Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:258
msgid "Your present credentials stored in Windows Credential Manager"
msgstr "Credențiele dvs. actuale sunt stocate în Windows Credential Manager"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:268
msgid "Use from &profile configuration:"
msgstr "Utilizați din configurarea profilului:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:269
msgid ""
"Select this option if you would like to store credentials as a part of "
"profile configuration"
msgstr ""
"Selectați această opțiune dacă doriți să stocați credențialele ca parte a "
"configurației profilului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:276
msgid "Profile configuration credentials"
msgstr " Credențialele de configurare a profilului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:289
msgid "&Clear Credentials"
msgstr "%Ştergere Credenţiale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:290
msgid ""
"Click to clear your credentials from Credential Manager.\n"
"Note: You will be prompted to enter credentials when connecting."
msgstr ""
"Faceți clic pentru a șterge credențialele din Managerul de credenţiale.\n"
"Notă: Vi se va solicita să introduceți credențialele atunci când vă conectați."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:294
msgid "&Set Credentials..."
msgstr "&Setare credenţiale"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:295
msgid "Click here to set or modify your credentials"
msgstr "Apasă aici pentru a modifica credenţialele"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:332
msgid "User ID and Password"
msgstr "ID de utilizator și parolă"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:342
msgid "Please provide your user ID and password."
msgstr "Vă rugăm să furnizați ID-ul de utilizator și parola."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:352 lib/EAPBase_UI/res/wxEAP_UI.cpp:416
msgid "User ID:"
msgstr "ID utilizator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:357 lib/EAPBase_UI/res/wxEAP_UI.cpp:421
msgid "Enter your user name here (user@domain.org, DOMAIN\\User, etc.)"
msgstr ""
"Introduceți numele de utilizator aici (user@domain.org, DOMENIU \\ User "
"etc.)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:361
msgid "Password:"
msgstr "Parolă:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:366
msgid "Enter your password here"
msgstr "Introduceţi parola aici:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:396
msgid "User ID"
msgstr "ID Utilizator"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:406
msgid "Please provide your user ID."
msgstr "Vă rugăm să furnizați ID-ul de utilizator."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:446
msgid "Your Organization"
msgstr "Organizaţia dumneavostră"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:457
msgid ""
"Describe your organization to customize user prompts. When organization is "
"introduced, end-users find program messages easier to understand and act."
msgstr ""
"Descrieți organizația dumneavoastră pentru a personaliza solicitările "
"utilizatorilor. Când este introdusă organizația, utilizatorii finali găsesc "
"mesajele de program mai ușor de înțeles și de acționat."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:464
msgid "Your organization &name:"
msgstr "Numele organizaţiei dumneavoastră &:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:469
msgid ""
"Your organization name as it will appear on helpdesk contact notifications"
msgstr ""
"Numele organizației dumneavoastră, așa cum va apărea în notificările de "
"contact ale helpdesk"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:473
msgid "(Keep it short, please)"
msgstr "(Păstrați-l scurt, vă rog)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:483
msgid "Helpdesk contact &information:"
msgstr "Contact și informații despre asistență:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:500
msgid "Your helpdesk website address"
msgstr "Adresa web de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:511
msgid "Your helpdesk e-mail address"
msgstr "Adresa de e-mail de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:522
msgid "Your helpdesk phone number"
msgstr "Numărul de telefon de asistență"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:550
msgid "Provider Unique Identifier"
msgstr "Identificator unic al furnizorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:561
msgid ""
"Assign your organization a unique ID to allow sharing the same credential "
"set across different network profiles."
msgstr ""
"Alocați organizației dumneavostră un ID unic care să permită partajarea "
"aceluiași set de credințiale pe diferite profiluri de rețea."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:568
msgid "&Namespace:"
msgstr "&Spaţiu de nume:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:RFC4282:realm"
msgstr "urn:RFC4282:realm"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:572
msgid "urn:uuid"
msgstr "urn:uuid"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:584
msgid "Provider unique &identifier:"
msgstr "Identificator unic și identificator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:589
msgid "Your organization ID to assign same credentials from other profiles"
msgstr ""
"ID-ul organizației dumneavoastră pentru a atribui aceleași date de "
"acreditare de la alte profiluri"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:614
msgid "Configuration Lock"
msgstr "Configurare Blocată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:625
msgid ""
"Your configuration can be locked to prevent accidental modification by end-"
"users. Users will only be allowed to enter credentials."
msgstr ""
"Configurația dumneavoastră poate fi blocată pentru a preveni modificarea "
"accidentală de către utilizatorii finali. Utilizatorii vor avea voie să "
"introducă numai datele de acreditare."
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:632
msgid ""
"&Lock this configuration and prevent any further modification via user "
"interface."
msgstr ""
"& Blocați această configurație și preveniți alte modificări prin interfața "
"utilizatorului"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:635
msgid "(Warning: Once locked, you can not revert using this dialog!)"
msgstr "(Avertisment: odată blocat, nu puteți reveni folosind acest dialog!)"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:700
msgid "Identity"
msgstr "Identitate"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:711
msgid "Select the user ID supplicant introduces itself as to authenticator:"
msgstr ""
"Selectați ID-ul utilizatorului implicit care se introduce ca autentificator:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:718
msgid "&True identity"
msgstr "&Identitate adevărată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:719
msgid "Use my true user name"
msgstr "Utilizați numele meu de utilizator adevărat"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:723
msgid "Use &empty identity"
msgstr "Utilizați & identitate goală"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:724
msgid "Omit my user name and use @mydomain.org only"
msgstr "Omiteți numele meu de utilizator si folositi doar @ mydomain.org"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:731
msgid "&Custom identity:"
msgstr "& Identitate personalizată:"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:732
msgid "Specify custom identity"
msgstr "Precizați identitatea personalizată"
#: lib/EAPBase_UI/res/wxEAP_UI.cpp:737
msgid "Custom identity to use"
msgstr "Identitate personalizată de utilizat"
#: lib/EAPBase_UI/res/wxEAP_UI.h:66
msgid "EAP Connection Configuration"
msgstr "Configurare conexiune EAP"
#: lib/EAPBase_UI/res/wxEAP_UI.h:329
msgid "EAP Identity Provider"
msgstr "Furnizor de identitate EAP"
#: lib/EAPBase_UI/src/EAP_UI.cpp:103
#, c-format
msgid "%s Credentials"
msgstr "%s Credenţiale"
#: lib/EAPBase_UI/src/EAP_UI.cpp:139
#, c-format
msgid "For additional help and instructions, please contact %s at:"
msgstr ""
"Pentru ajutor și instrucțiuni suplimentare, vă rugăm să contactați %s la : "
#: lib/EAPBase_UI/src/EAP_UI.cpp:140
msgid "your provider"
msgstr "providerul dumneavoastră"
#: lib/EAPBase_UI/src/EAP_UI.cpp:159
msgid "Open the default web browser"
msgstr "Deschideți browserul web implicit"
#: lib/EAPBase_UI/src/EAP_UI.cpp:170
msgid "Open your e-mail program"
msgstr "Deschideți programul de e-mail"
#: lib/EAPBase_UI/src/EAP_UI.cpp:181
msgid "Dial the phone number"
msgstr "Apelează numărul de telefon"
#: lib/EAPBase_UI/src/EAP_UI.cpp:203
#, c-format
msgid ""
"%s has pre-set parts of this configuration. Those parts are locked to "
"prevent accidental modification."
msgstr ""
"%s are părți prestabilite ale acestei configurații. Aceste piese sunt "
"blocate pentru a preveni modificarea accidentală."
#: lib/EAPBase_UI/src/EAP_UI.cpp:204
msgid "Your provider"
msgstr "Furnizorul dumneavostră"
#: lib/EAPBase_UI/src/EAP_UI.cpp:225
msgid "Previous attempt to connect reported invalid credentials."
msgstr "Încercarea anterioară de conectare a raportat credențiale nevalide ."
#: lib/EAPBase_UI/src/EAP_UI.cpp:226
msgid "Previous attempt to connect reported your credentials expired."
msgstr ""
"Încercarea anterioară de conectare a raportat datele de acreditare expirate."
#: lib/EAPBase_UI/src/EAP_UI.cpp:227
msgid ""
"Previous attempt to connect reported your credentials are being changed."
msgstr ""
"Încercarea anterioară de conectare a raportat că datele de acreditare au "
"fost modificate."
#: lib/EAPBase_UI/src/EAP_UI.cpp:228
msgid "Previous attempt to connect failed."
msgstr "Încercarea anterioară de conectare a eșuat."
#: lib/EAPBase_UI/src/EAP_UI.cpp:229
msgid "Please, make sure your credentials are correct, or try again later."
msgstr ""
"Vă rugăm, asigurați-vă că datele de acreditare sunt corecte sau încercați "
"din nou mai târziu."
#: lib/EAPBase_UI/src/EAP_UI.cpp:250
#, c-format
msgid ""
"The %s version installed on this computer logs credentials in visible and "
"easy to read way."
msgstr ""
"Versiunea instalată %s pe acest computer înregistrează datele de acreditare "
"în mod vizibil și ușor de citit."
#: lib/EAPBase_UI/src/EAP_UI.cpp:251
msgid "Please, reconsider necessity to enter your credentials."
msgstr ""
"Vă rugăm să reconsiderați necesitatea de a introduce datele de acreditare."
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:17
msgid "Inner EAP Method"
msgstr "Metoda EAP interioară"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:28
msgid "Select and configure inner EAP method"
msgstr "Selectați și configurați metoda EAP interioară"
#: lib/EapHost_UI/res/wxEapHost_UI.cpp:40
msgid "&Settings"
msgstr "&Setări"
#: lib/EapHost_UI/src/EapHost_UI.cpp:59
#, c-format
msgid "Enumerating EAP methods failed (error %u, %s, %s)."
msgstr "Enumerarea metodelor EAP a eșuat (eroare %u , %s , %s )."
#: lib/EapHost_UI/src/EapHost_UI.cpp:61
#, c-format
msgid "Enumerating EAP methods failed (error %u)."
msgstr "Enumerarea metodelor EAP a eșuat (eroare %u )."
#: lib/EapHost_UI/src/EapHost_UI.cpp:136
#, c-format
msgid "Configuring EAP method failed (error %u, %s, %s)."
msgstr "Configurarea metodei EAP a eșuat (eroare %u,%s,%s)."
#: lib/EapHost_UI/src/EapHost_UI.cpp:138
#, c-format
msgid "Configuring EAP method failed (error %u)."
msgstr "Configurarea metodei EAP a eșuat (eroare %u )."
#: lib/GTC_UI/include/GTC_UI.h:114 lib/GTC_UI/res/wxGTC_UI.cpp:16
msgid "GTC Challenge"
msgstr "Provocarea GTC"
#: lib/GTC_UI/res/wxGTC_UI.cpp:26
msgid "Please provide your response."
msgstr "Vă rugăm să ne oferiți răspunsul."
#: lib/GTC_UI/res/wxGTC_UI.cpp:38
msgid "Server challenge"
msgstr "Provocarea serverului"
#: lib/GTC_UI/res/wxGTC_UI.cpp:43
msgid "Enter your response here"
msgstr "Introduceți răspunsul aici"
#: lib/GTC_UI/res/wxGTC_UI.cpp:70
msgid "EAP-GTC authentication &mode:"
msgstr "Autentificare și &mod EAP-GTC:"
#: lib/GTC_UI/res/wxGTC_UI.cpp:75
msgid "Select EAP-GTC authentication mode from the list"
msgstr "Selectați modul de autentificare EAP-GTC din listă"
#: lib/GTC_UI/src/GTC_UI.cpp:39
msgid "Challenge/Response"
msgstr "Provocare/Răspuns"
#: lib/GTC_UI/src/GTC_UI.cpp:41
msgid "Password"
msgstr "Parolă"
#: lib/GTC_UI/src/GTC_UI.cpp:119
#, c-format
msgid "%s Challenge"
msgstr "%s Provocare"
#: lib/MSCHAPv2_UI/src/MSCHAPv2_UI.cpp:33
msgid "MSCHAPv2 User ID and Password"
msgstr "MSCHAPv2 Utilizator şi Parolă"
#: lib/PAP_UI/src/PAP_UI.cpp:33
msgid "PAP User ID and Password"
msgstr "PAP Utilizator şi Parolă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:17
msgid "Server Trust"
msgstr "Server de încredere"
#: lib/TLS_UI/res/wxTLS_UI.cpp:28
msgid "Describe the servers you trust to prevent man-in-the-middle attacks."
msgstr ""
"Descrieți serverele de încredere pentru a preveni atacurile de tipul man-in-"
"the-middle."
#: lib/TLS_UI/res/wxTLS_UI.cpp:35
msgid "Acceptable Certificate Authorities:"
msgstr "Autorități de certificare acceptate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:40
msgid ""
"Server's certificate must be issued by one of certificate authorities listed"
" here"
msgstr ""
"Certificatul de server trebuie eliberat de una dintre autoritățile de "
"certificare enumerate aici"
#: lib/TLS_UI/res/wxTLS_UI.cpp:47
msgid "Add CA from Store..."
msgstr "Adăugare CA din magazin..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:48
msgid ""
"Adds a new certificate authority from the certificate store to the list"
msgstr ""
"Adaugă o nouă autoritate de certificare din magazinul de certificate în "
"listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:52
msgid "Add CA from File..."
msgstr "Adăugare CA din fişier..."
#: lib/TLS_UI/res/wxTLS_UI.cpp:53
msgid "Adds a new certificate authority from the file to the list"
msgstr "Adaugă o nouă autoritate de certificare din fișier în listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:57
msgid "&Remove CA"
msgstr "&Ştergere CA"
#: lib/TLS_UI/res/wxTLS_UI.cpp:58
msgid "Removes selected certificate authorities from the list"
msgstr "Îndepărtează autoritățile de certificare selectate din listă"
#: lib/TLS_UI/res/wxTLS_UI.cpp:71
msgid "Acceptable server &names:"
msgstr "Server și nume acceptate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:76
msgid ""
"A semicolon delimited list of acceptable server FQDN names; blank to skip "
"name check; Unicode characters allowed"
msgstr ""
"Punct și virgulă delimitează lista de nume de servere FQDN ; lăsați spațiu "
"gol pentru a omite verificarea numelui; Caractere Unicode permise"
#: lib/TLS_UI/res/wxTLS_UI.cpp:80
msgid "(Example: foo.bar.com;server2.bar.com)"
msgstr "(Exemplu: foo.bar.com;server2.bar.com)"
#: lib/TLS_UI/res/wxTLS_UI.cpp:118 lib/TLS_UI/src/TLS_UI.cpp:400
msgid "User Certificate"
msgstr "Certificatul de utilizator"
#: lib/TLS_UI/res/wxTLS_UI.cpp:128
msgid "Please select your &certificate to use for authentication."
msgstr ""
"Vă rugăm să selectați certificatul dumneavoastră de utilizat pentru "
"autentificare."
#: lib/TLS_UI/res/wxTLS_UI.cpp:135
msgid "Client certificate to use for authentication"
msgstr "Certificat de client de folosit pentru autentificare"
#: lib/TLS_UI/res/wxTLS_UI.cpp:142
msgid "Custom &identity:"
msgstr "Personalizare și identitate:"
#: lib/TLS_UI/res/wxTLS_UI.cpp:147
msgid ""
"Your identity (username@domain) to override one from certificate; or blank "
"to use one provided in certificate"
msgstr ""
"Identitatea dumneavoastră (nume de utilizator @ domeniu) pentru a trece "
"peste un certificat; sau necompletat pentru a utiliza unul prevăzut în "
"certificat"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "No certificate selected"
msgstr "Niciun certificat selectat"
#: lib/TLS_UI/src/TLS_UI.cpp:118
msgid "Validation conflict"
msgstr "Conflict la validare"
#: lib/TLS_UI/src/TLS_UI.cpp:327
msgid "Add Certificate"
msgstr "Adaugă certificat"
#: lib/TLS_UI/src/TLS_UI.cpp:328
msgid "Certificate Files (*.cer;*.crt;*.der;*.p7b;*.pem)"
msgstr "Fişierele Certificat (*.cer;*.crt;*.der;*.p7b;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:329
msgid "X.509 Certificate Files (*.cer;*.crt;*.der;*.pem)"
msgstr "X.509 Fişierele Certificat (*.cer;*.crt;*.der;*.pem)"
#: lib/TLS_UI/src/TLS_UI.cpp:330
msgid "PKCS #7 Certificate Files (*.p7b)"
msgstr "PKCS #7 Fişierele Certificat (*.p7b)"
#: lib/TLS_UI/src/TLS_UI.cpp:331
msgid "All Files (*.*)"
msgstr "Toate filele (*.*)"
#: lib/TLS_UI/src/TLS_UI.cpp:345
#, c-format
msgid "Invalid or unsupported certificate file %s"
msgstr "Fișier de certificat %s nevalid sau neacceptat "
#: lib/TLS_UI/src/TLS_UI.cpp:345
msgid "Error"
msgstr "Eroare"
#: lib/TTLS_UI/src/Module.cpp:249
#, c-format
msgid "Invoking EAP identity UI failed (error %u, %s, %s)."
msgstr " Invocarea interfaței de identitate EAP a eșuat (eroare%u,%s,%s)."
#: lib/TTLS_UI/src/Module.cpp:252
#, c-format
msgid "Invoking EAP identity UI failed (error %u)."
msgstr "Invocarea interfaței de identitate EAP a eșuat (eroare%u)."
#: lib/TTLS_UI/src/Module.cpp:376
#, c-format
msgid "Invoking EAP interactive UI failed (error %u, %s, %s)."
msgstr "Invocarea EAP EI interactivă a eșuat (eroare %u,%s,%s)."
#: lib/TTLS_UI/src/Module.cpp:379
#, c-format
msgid "Invoking EAP interactive UI failed (error %u)."
msgstr "Invocarea EAP EI interactivă a eșuat (eroare %u)."
#: lib/TTLS_UI/src/TTLS_UI.cpp:37
msgid "Outer Authentication"
msgstr "Autentificare exterioară"
#: lib/TTLS_UI/src/TTLS_UI.cpp:50
msgid "Inner Authentication"
msgstr "Autentificare interioară"
#: lib/TTLS_UI/src/TTLS_UI.cpp:56
msgid "Select inner authentication method from the list"
msgstr "Selectați metoda de autentificare interioară din listă"
#: lib/TTLS_UI/src/TTLS_UI.cpp:127
msgid "PAP"
msgstr "PAP"
#: lib/TTLS_UI/src/TTLS_UI.cpp:129
msgid "MSCHAPv2"
msgstr "MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:131
msgid "EAP-MSCHAPv2"
msgstr "EAP-MSCHAPv2"
#: lib/TTLS_UI/src/TTLS_UI.cpp:133
msgid "EAP-GTC"
msgstr "EAP-GTC"
#: lib/TTLS_UI/src/TTLS_UI.cpp:136
msgid "Other EAP methods..."
msgstr "Alte metode EAP..."
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS"
msgstr "EAP-TTLS"
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild.EAP-TTLS/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP-TTLS Method"
msgstr "Metoda EAP-TTLS"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "EAP Methods"
msgstr "Metodele EAP"
#: EAPMethods/MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: EAPMethods/MSIBuild/en_US.x64.Release.Feature-2.idtx:4
msgid "Modules to support individual EAP methods"
msgstr "Module pentru a sprijini metodele individuale EAP"

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -846,7 +846,7 @@ msgstr ""
#: master/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
msgid "Omit my user name and use @mydomain.org only"
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

File diff suppressed because it is too large Load Diff

View File

@ -846,7 +846,7 @@ msgstr ""
#: master/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
msgid "Omit my user name and use @mydomain.org only"
msgid "Ommit my user name and use @mydomain.org only"
msgstr ""
#: master/lib/TTLS_UI/res/wxTTLS_UI.cpp:48

982
EAPMethods/src/Main.cpp Normal file
View File

@ -0,0 +1,982 @@
/*
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;
#pragma comment(lib, "Ws2_32.lib")
#if EAPMETHOD_TYPE==21
#define _EAPMETHOD_PEER eap::peer_ttls
#else
#error Unknown EAP Method type.
#endif
_EAPMETHOD_PEER g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
#endif
g_peer.m_instance = hinstDLL;
} else if (fdwReason == DLL_PROCESS_DETACH)
assert(!_CrtDumpMemoryLeaks());
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
VOID WINAPI EapPeerFreeMemory(_In_ void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
VOID WINAPI EapPeerFreeErrorMemory(_In_ EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Obtains a set of function pointers for an implementation of the EAP peer method currently loaded on the EapHost service.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363608.aspx)
///
DWORD WINAPI EapPeerGetInfo(_In_ EAP_TYPE* pEapType, _Out_ EAP_PEER_METHOD_ROUTINES* pEapPeerMethodRoutines, _Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->type != EAPMETHOD_TYPE)
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->type, (int)EAPMETHOD_TYPE).c_str()));
else if (!pEapPeerMethodRoutines)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapPeerMethodRoutines is NULL.")));
else {
pEapPeerMethodRoutines->dwVersion = PRODUCT_VERSION;
pEapPeerMethodRoutines->pEapType = NULL;
pEapPeerMethodRoutines->EapPeerInitialize = EapPeerInitialize;
pEapPeerMethodRoutines->EapPeerShutdown = EapPeerShutdown;
pEapPeerMethodRoutines->EapPeerBeginSession = EapPeerBeginSession;
pEapPeerMethodRoutines->EapPeerEndSession = EapPeerEndSession;
pEapPeerMethodRoutines->EapPeerSetCredentials = NULL; // Always NULL unless we want to use generic credential UI
pEapPeerMethodRoutines->EapPeerGetIdentity = EapPeerGetIdentity;
pEapPeerMethodRoutines->EapPeerProcessRequestPacket = EapPeerProcessRequestPacket;
pEapPeerMethodRoutines->EapPeerGetResponsePacket = EapPeerGetResponsePacket;
pEapPeerMethodRoutines->EapPeerGetResult = EapPeerGetResult;
pEapPeerMethodRoutines->EapPeerGetUIContext = EapPeerGetUIContext;
pEapPeerMethodRoutines->EapPeerSetUIContext = EapPeerSetUIContext;
pEapPeerMethodRoutines->EapPeerGetResponseAttributes = EapPeerGetResponseAttributes;
pEapPeerMethodRoutines->EapPeerSetResponseAttributes = EapPeerSetResponseAttributes;
}
return dwResult;
}
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the initialize() method is empty => never throws an exception.
///
/// Initializes an EAP peer method for EapHost.
///
/// \sa [EapPeerGetInfo function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363613.aspx)
///
DWORD APIENTRY EapPeerInitialize(_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
try {
g_peer.initialize();
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable: 4702) // Compiler is smart enough to find out the shutdown() method is empty => never throws an exception.
///
/// Shuts down the EAP method and prepares to unload its corresponding DLL.
///
/// \sa [EapPeerShutdown function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363627.aspx)
///
DWORD APIENTRY EapPeerShutdown(_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
try {
g_peer.shutdown();
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
return dwResult;
}
#pragma warning(pop)
///
/// Returns the user data and user identity after being called by EapHost.
///
/// \sa [EapPeerGetIdentity function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363607.aspx)
///
DWORD APIENTRY EapPeerGetIdentity(
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) const BYTE *pUserData,
_In_ HANDLE hTokenImpersonateUser,
_Out_ BOOL *pfInvokeUI,
_Out_ DWORD *pdwUserDataOutSize,
_Out_ BYTE **ppUserDataOut,
_Out_ WCHAR **ppwszIdentity,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
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 (!pfInvokeUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pfInvokeUI 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.get_identity(dwFlags, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, ppUserDataOut, pdwUserDataOutSize, hTokenImpersonateUser, pfInvokeUI, 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;
}
///
/// Starts an EAP authentication session on the peer EapHost using the EAP method.
///
/// \sa [EapPeerBeginSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363600.aspx)
///
DWORD APIENTRY EapPeerBeginSession(
_In_ DWORD dwFlags,
_In_ const EapAttributes *pAttributeArray,
_In_ HANDLE hTokenImpersonateUser,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) /*const*/ BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) /*const*/ BYTE *pUserData,
_In_ DWORD dwMaxSendPacketSize,
_Out_ EAP_SESSION_HANDLE *phSession,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
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 (!phSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" phSession is NULL.")));
else {
try {
*phSession = g_peer.begin_session(dwFlags, pAttributeArray, hTokenImpersonateUser, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, dwMaxSendPacketSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Ends an EAP authentication session for the EAP method.
///
/// \sa [EapPeerEndSession function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363604.aspx)
///
DWORD APIENTRY EapPeerEndSession(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else {
try {
g_peer.end_session(hSession);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Processes a packet received by EapHost from a supplicant.
///
/// \sa [EapPeerProcessRequestPacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363621.aspx)
///
DWORD APIENTRY EapPeerProcessRequestPacket(
_In_ EAP_SESSION_HANDLE hSession,
_In_ DWORD dwReceivedPacketSize,
_In_bytecount_(dwReceivedPacketSize) /*const*/ EapPacket *pReceivedPacket,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pReceivedPacket || dwReceivedPacketSize < 6)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pReceivedPacket is NULL or too short.")));
else if (pReceivedPacket->Data[0] != EAPMETHOD_TYPE)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, wstring_printf(_T(__FUNCTION__) _T(" Packet EAP type (%d) does not match the supported EAP type (%d)."), (int)pReceivedPacket->Data[0], (int)EAPMETHOD_TYPE).c_str()));
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.process_request_packet(hSession, pReceivedPacket, dwReceivedPacketSize, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Obtains a response packet from the EAP method.
///
/// \sa [EapPeerGetResponsePacket function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363610.aspx)
///
DWORD APIENTRY EapPeerGetResponsePacket(
_In_ EAP_SESSION_HANDLE hSession,
_Inout_ DWORD *pdwSendPacketSize,
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pdwSendPacketSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwSendPacketSize is NULL.")));
else if (!pSendPacket && *pdwSendPacketSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pSendPacket is NULL.")));
else {
try {
g_peer.get_response_packet(hSession, pSendPacket, pdwSendPacketSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Obtains the result of an authentication session from the EAP method.
///
/// \sa [EapPeerGetResult function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363611.aspx)
///
DWORD APIENTRY EapPeerGetResult(
_In_ EAP_SESSION_HANDLE hSession,
_In_ EapPeerMethodResultReason reason,
_Out_ EapPeerMethodResult *pResult,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pResult)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pResult is NULL.")));
else {
try {
g_peer.get_result(hSession, reason, pResult);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Obtains the user interface context from the EAP method.
///
/// \note This function is always followed by the `EapPeerInvokeInteractiveUI()` function, which is followed by the `EapPeerSetUIContext()` function.
///
/// \sa [EapPeerGetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363612.aspx)
///
DWORD APIENTRY EapPeerGetUIContext(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ DWORD *pdwUIContextDataSize,
_Out_ BYTE **ppUIContextData,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pdwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUIContextDataSize is NULL.")));
else if (!ppUIContextData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUIContextData is NULL.")));
else {
try {
g_peer.get_ui_context(hSession, ppUIContextData, pdwUIContextDataSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Provides a user interface context to the EAP method.
///
/// \note This function is called after the UI has been raised through the `EapPeerGetUIContext()` function.
///
/// \sa [EapPeerSetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363626.aspx)
///
DWORD APIENTRY EapPeerSetUIContext(
_In_ EAP_SESSION_HANDLE hSession,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
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 (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.set_ui_context(hSession, pUIContextData, dwUIContextDataSize, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Obtains an array of EAP response attributes from the EAP method.
///
/// \sa [EapPeerGetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363609.aspx)
///
DWORD APIENTRY EapPeerGetResponseAttributes(
_In_ EAP_SESSION_HANDLE hSession,
_Out_ EapAttributes *pAttribs,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pAttribs)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pAttribs is NULL.")));
else {
try {
g_peer.get_response_attributes(hSession, pAttribs);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Provides an updated array of EAP response attributes to the EAP method.
///
/// \sa [EapPeerSetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363625.aspx)
///
DWORD APIENTRY EapPeerSetResponseAttributes(
_In_ EAP_SESSION_HANDLE hSession,
_In_ /*const*/ EapAttributes *pAttribs,
_Out_ EapPeerMethodOutput *pEapOutput,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!hSession)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" hSession is NULL.")));
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
try {
g_peer.set_response_attributes(hSession, pAttribs, pEapOutput);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
///
/// \sa [EapPeerGetMethodProperties function](https://msdn.microsoft.com/en-us/library/windows/desktop/hh706636.aspx)
///
DWORD WINAPI EapPeerGetMethodProperties(
_In_ DWORD dwVersion,
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ HANDLE hUserImpersonationToken,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) const BYTE *pUserData,
_Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)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 (!pUserData && dwUserDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUserData is NULL.")));
else if (!pMethodPropertyArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pMethodPropertyArray is NULL.")));
else {
try {
g_peer.get_method_properties(dwVersion, dwFlags, hUserImpersonationToken, pConnectionData, dwConnectionDataSize, pUserData, dwUserDataSize, pMethodPropertyArray);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Converts XML into the configuration BLOB. The XML based credentials can come from group policy or from a system administrator.
///
/// \sa [EapPeerCredentialsXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363603.aspx)
///
DWORD WINAPI EapPeerCredentialsXml2Blob(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ IXMLDOMDocument2 *pCredentialsDoc,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwConnectionDataSize,
_Out_ BYTE **ppCredentialsOut,
_Out_ DWORD *pdwCredentialsOutSize,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)eapMethodType.dwAuthorId, (int)67532).c_str()));
else if (!pCredentialsDoc)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pCredentialsDoc is NULL.")));
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 (!ppCredentialsOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppCredentialsOut is NULL.")));
else if (!pdwCredentialsOutSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwCredentialsOutSize is NULL.")));
else {
// <Credentials>
com_obj<IXMLDOMNode> pXmlElCredentials;
if (FAILED(eapxml::select_node(pCredentialsDoc, bstr(L"//EapHostUserCredentials/Credentials"), pXmlElCredentials))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <EapHostUserCredentials><Credentials> element.")));
return dwResult;
}
// Load credentials.
pCredentialsDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
try {
g_peer.credentials_xml2blob(dwFlags, pXmlElCredentials, pConnectionData, dwConnectionDataSize, ppCredentialsOut, pdwCredentialsOutSize);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Defines the implementation of an EAP method-specific function that obtains the EAP Single-Sign-On (SSO) credential input fields for an EAP method.
///
/// \sa [EapPeerQueryCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363622.aspx)
///
DWORD WINAPI EapPeerQueryCredentialInputFields(
_In_ HANDLE hUserImpersonationToken,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_Out_ EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldsArray,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)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 (!pEapConfigInputFieldsArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldsArray is NULL.")));
else {
try {
g_peer.query_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldsArray);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Defines the implementation of an EAP method function that obtains the user BLOB data provided in an interactive Single-Sign-On (SSO) UI raised on the supplicant.
///
/// \sa [EapPeerQueryUserBlobFromCredentialInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204697.aspx)
///
DWORD WINAPI EapPeerQueryUserBlobFromCredentialInputFields(
_In_ HANDLE hUserImpersonationToken,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ const EAP_CONFIG_INPUT_FIELD_ARRAY *pEapConfigInputFieldArray,
_Inout_ DWORD *pdwUsersBlobSize,
_Inout_ BYTE **ppUserBlob,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)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 (!pEapConfigInputFieldArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldArray is NULL.")));
else if (!pdwUsersBlobSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pdwUsersBlobSize is NULL.")));
else if (!ppUserBlob)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUserBlob is NULL.")));
else {
try {
g_peer.query_user_blob_from_credential_input_fields(hUserImpersonationToken, dwFlags, dwConnectionDataSize, pConnectionData, pEapConfigInputFieldArray, pdwUsersBlobSize, ppUserBlob);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Defines the implementation of an EAP method API that provides the input fields for interactive UI components to be raised on the supplicant.
///
/// \sa [EapPeerQueryInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204695.aspx)
///
DWORD WINAPI EapPeerQueryInteractiveUIInputFields(
_In_ DWORD dwVersion,
_In_ DWORD dwFlags,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_Out_ EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
_Out_ EAP_ERROR **ppEapError,
_Inout_ LPVOID *ppvReserved)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pUIContextData is NULL.")));
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 (!pEapInteractiveUIData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapInteractiveUIData is NULL.")));
else {
UNREFERENCED_PARAMETER(ppvReserved);
try {
g_peer.query_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}
///
/// Converts user information into a user BLOB that can be consumed by EapHost run-time functions.
///
/// \sa [EapPeerQueryUIBlobFromInteractiveUIInputFields function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb204696.aspx)
///
DWORD WINAPI EapPeerQueryUIBlobFromInteractiveUIInputFields(
_In_ DWORD dwVersion,
_In_ DWORD dwFlags,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ const EAP_INTERACTIVE_UI_DATA *pEapInteractiveUIData,
_Out_ DWORD *pdwDataFromInteractiveUISize,
_Out_ BYTE **ppDataFromInteractiveUI,
_Out_ EAP_ERROR **ppEapError,
_Inout_ LPVOID *ppvReserved)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pUIContextData && dwUIContextDataSize)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapConfigInputFieldArray is NULL.")));
else if (!pEapInteractiveUIData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapInteractiveUIData 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 {
UNREFERENCED_PARAMETER(ppvReserved);
try {
g_peer.query_ui_blob_from_interactive_ui_input_fields(dwVersion, dwFlags, dwUIContextDataSize, pUIContextData, pEapInteractiveUIData, pdwDataFromInteractiveUISize, ppDataFromInteractiveUI);
} catch (std::exception &err) {
g_peer.log_error(*ppEapError = g_peer.make_error(err));
dwResult = (*ppEapError)->dwWinError;
} catch (...) {
dwResult = ERROR_INVALID_DATA;
}
}
return dwResult;
}

418
EAPMethods/src/Main_UI.cpp Normal file
View File

@ -0,0 +1,418 @@
/*
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>
#pragma comment(lib, "msxml6.lib")
using namespace std;
using namespace winstd;
#if EAPMETHOD_TYPE==21
#define _EAPMETHOD_PEER_UI eap::peer_ttls_ui
#else
#error Unknown EAP Method type.
#endif
HANDLE g_act_ctx = NULL;
_EAPMETHOD_PEER_UI g_peer;
///
/// DLL main entry point
///
/// \sa [DllMain entry point](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx)
///
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
#ifdef _DEBUG
//Sleep(10000);
#endif
g_peer.m_instance = hinstDLL;
#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
// Declare our DllHost process as DPI-aware.
SetProcessDPIAware();
#endif
// Save current activation context, as proper activation context is set at this time only (LoadLibrary() call).
GetCurrentActCtx(&g_act_ctx);
} else if (fdwReason == DLL_PROCESS_DETACH) {
if (g_act_ctx)
ReleaseActCtx(g_act_ctx);
// wxWidgets library has some global objects allocating data on heap in constructors,
// causing false-positive memory leak reports.
//assert(!_CrtDumpMemoryLeaks());
}
return TRUE;
}
///
/// Releases all memory associated with an opaque user interface context data buffer.
///
/// \sa [EapPeerFreeMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363606.aspx)
///
VOID WINAPI EapPeerFreeMemory(_In_ void *pUIContextData)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (pUIContextData)
g_peer.free_memory((BYTE*)pUIContextData);
}
///
/// Releases error-specific memory allocated by the EAP peer method.
///
/// \sa [EapPeerFreeErrorMemory function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363605.aspx)
///
VOID WINAPI EapPeerFreeErrorMemory(_In_ EAP_ERROR *ppEapError)
{
event_fn_auto event_auto(g_peer.get_event_fn_auto(__FUNCTION__));
if (ppEapError)
g_peer.free_error_memory(ppEapError);
}
///
/// Converts XML into the configuration BLOB.
///
/// \sa [EapPeerConfigXml2Blob function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363602.aspx)
///
DWORD WINAPI EapPeerConfigXml2Blob(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_ IXMLDOMDocument2 *pConfigDoc,
_Out_ BYTE **pConnectionDataOut,
_Out_ DWORD *pdwConnectionDataOutSize,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)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\""));
// <Config>
com_obj<IXMLDOMElement> pXmlElConfig;
if (FAILED(eapxml::select_element(pConfigDoc, bstr(L"//eaphostconfig:Config"), pXmlElConfig))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" Error reading <Config> element.")));
return dwResult;
}
// 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;
}
///
/// Converts the configuration BLOB to XML.
///
/// The configuration BLOB is returned in the ppConnectionDataOut parameter of the EapPeerInvokeConfigUI function.
///
/// \sa [EapPeerConfigBlob2Xml function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363601.aspx)
///
DWORD WINAPI EapPeerConfigBlob2Xml(
_In_ DWORD dwFlags,
_In_ EAP_METHOD_TYPE eapMethodType,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwConnectionDataSize,
_Out_ IXMLDOMDocument2 **ppConfigDoc,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (eapMethodType.eapType.type != EAPMETHOD_TYPE)
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()));
else if (eapMethodType.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)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;
// 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;
}
pConfigDoc->put_async(VARIANT_FALSE);
// Load empty XML configuration.
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;
}
// 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\""));
// Select <Config> node.
com_obj<IXMLDOMNode> pXmlElConfig;
if (FAILED(eapxml::select_node(pConfigDoc, bstr(L"eaphostconfig:Config"), pXmlElConfig))) {
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_NOT_FOUND, _T(__FUNCTION__) _T(" Error selecting <Config> element.")));
return dwResult;
}
// 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();
}
return dwResult;
}
///
/// Raises the EAP method's specific connection configuration user interface dialog on the client.
///
/// \sa [EapPeerInvokeConfigUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363614.aspx)
///
DWORD WINAPI EapPeerInvokeConfigUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ HWND hwndParent,
_In_ DWORD dwFlags,
_In_ DWORD dwConnectionDataInSize,
_In_count_(dwConnectionDataInSize) const BYTE *pConnectionDataIn,
_Out_ DWORD *pdwConnectionDataOutSize,
_Out_ BYTE **ppConnectionDataOut,
_Out_ EAP_ERROR **ppEapError)
{
UNREFERENCED_PARAMETER(dwFlags);
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
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;
}
///
/// Raises a custom interactive user interface dialog to obtain user identity information for the EAP method on the client.
///
/// \sa [EapPeerInvokeIdentityUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363615.aspx)
///
DWORD WINAPI EapPeerInvokeIdentityUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ DWORD dwFlags,
_In_ HWND hwndParent,
_In_ DWORD dwConnectionDataSize,
_In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
_In_ DWORD dwUserDataSize,
_In_count_(dwUserDataSize) const BYTE *pUserData,
_Out_ DWORD *pdwUserDataOutSize,
_Out_ BYTE **ppUserDataOut,
_Out_ LPWSTR *ppwszIdentity,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
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;
}
///
/// Raises a custom interactive user interface dialog for the EAP method on the client.
///
/// \sa [EapPeerInvokeInteractiveUI function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363616.aspx)
///
DWORD WINAPI EapPeerInvokeInteractiveUI(
_In_ const EAP_METHOD_TYPE *pEapType,
_In_ HWND hwndParent,
_In_ DWORD dwUIContextDataSize,
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_Out_ DWORD *pdwDataFromInteractiveUISize,
_Out_ BYTE **ppDataFromInteractiveUI,
_Out_ EAP_ERROR **ppEapError)
{
DWORD dwResult = ERROR_SUCCESS;
event_fn_auto_ret<DWORD> event_auto(g_peer.get_event_fn_auto(__FUNCTION__, dwResult));
actctx_activator actctx(g_act_ctx);
#ifdef _DEBUG
//Sleep(10000);
#endif
// Parameter check
if (!ppEapError)
return dwResult = ERROR_INVALID_PARAMETER;
assert(!*ppEapError);
if (!pEapType)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapType is NULL.")));
else if (pEapType->eapType.type != EAPMETHOD_TYPE)
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;
}

View File

@ -1,10 +1,24 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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 "PCH.h"
#include "StdAfx.h"
#if defined(__WXMSW__)
#pragma comment(lib, "msi.lib")
#endif
@ -14,7 +28,6 @@
// wxEventMonitorApp
//////////////////////////////////////////////////////////////////////////
#pragma warning(suppress: 28251)
wxIMPLEMENT_APP(wxEventMonitorApp);

View File

@ -1,7 +1,21 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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/>.
*/
///

View File

@ -1,10 +1,24 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
Copyright 2015-2018 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 "PCH.h"
#include "StdAfx.h"
#pragma comment(lib, "tdh.lib")
#pragma comment(lib, "Ws2_32.lib")
@ -64,8 +78,8 @@ wxEventTraceProcessorThread::wxEventTraceProcessorThread(wxEvtHandler *parent, c
for (size_t i = 0, i_end = sessions.GetCount(); i < i_end; i++) {
// Open trace.
tlf.LoggerName = const_cast<LPTSTR>((LPCTSTR)(sessions[i]));
event_trace trace(OpenTrace(&tlf));
if (!trace) {
event_trace trace;
if (!trace.create(&tlf)) {
wxLogError(_("Error opening event trace (error %u)."), GetLastError());
continue;
}
@ -118,8 +132,11 @@ VOID WINAPI wxEventTraceProcessorThread::EventRecordCallback(_In_ PEVENT_RECORD
wxASSERT_MSG(pEvent->UserContext, wxT("thread is NULL"));
wxEventTraceProcessorThread *_this = ((wxEventTraceProcessorThread*)pEvent->UserContext);
if (!_this || _this->TestDestroy())
if (_this->TestDestroy()) {
// Event processing is pending destruction.
return;
}
_this->m_parent->QueueEvent(new wxETWEvent(wxEVT_ETW_EVENT, *pEvent));
}
@ -161,7 +178,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
m_col_format_width[0] = 26;
m_col_format_width[1] = 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;
// Prepare all possible item attributes.
@ -202,11 +219,7 @@ wxETWListCtrl::wxETWListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos
properties->Wnode.BufferSize = ulSize;
properties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
properties->Wnode.ClientContext = 1; //QPC clock resolution
HRESULT hr = CoCreateGuid(&(properties->Wnode.Guid));
if (FAILED(hr)) {
wxLogError(winstd::tstring_printf(wxT("error 0x%08x generating GUID"), hr).c_str());
continue;
}
CoCreateGuid(&(properties->Wnode.Guid));
properties->LogFileMode = /*EVENT_TRACE_FILE_MODE_SEQUENTIAL |*/ EVENT_TRACE_REAL_TIME_MODE;
properties->MaximumFileSize = 1; // 1 MB
properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
@ -594,34 +607,33 @@ wxString wxETWListCtrl::OnGetItemText(const winstd::event_rec &rec, long column)
// Get event meta-info.
unique_ptr<TRACE_EVENT_INFO> info;
ULONG ulResult;
if ((ulResult = TdhGetEventInformation((PEVENT_RECORD)&rec, 0, NULL, info)) != ERROR_SUCCESS)
return tstring_printf(_T("(Error getting event information (error %u))"), ulResult).c_str();
if ((ulResult = TdhGetEventInformation((PEVENT_RECORD)&rec, 0, NULL, info)) == ERROR_SUCCESS) {
if (info->DecodingSource != DecodingSourceWPP) {
if (rec.EventHeader.Flags & EVENT_HEADER_FLAG_STRING_ONLY) {
// This is a string-only event. Print it.
return reinterpret_cast<LPCWSTR>(rec.UserData);
} else {
// This is not a string-only event. Prepare parameters.
if (info->DecodingSource != DecodingSourceWPP) {
if (rec.EventHeader.Flags & EVENT_HEADER_FLAG_STRING_ONLY) {
// This is a string-only event. Print it.
return reinterpret_cast<LPCWSTR>(rec.UserData);
} else {
// This is not a string-only event. Prepare parameters.
BYTE nPtrSize = (rec.EventHeader.Flags & EVENT_HEADER_FLAG_32_BIT_HEADER) ? 4 : 8;
vector<tstring> props;
vector<DWORD_PTR> props_msg;
props.reserve(info->TopLevelPropertyCount);
props_msg.reserve(info->TopLevelPropertyCount);
for (ULONG i = 0; i < info->TopLevelPropertyCount; i++) {
props.push_back(std::move(PropertyToString((PEVENT_RECORD)&rec, info.get(), i, NULL, 0, nPtrSize)));
props_msg.push_back((DWORD_PTR)props[i].c_str());
}
BYTE nPtrSize = (rec.EventHeader.Flags & EVENT_HEADER_FLAG_32_BIT_HEADER) ? 4 : 8;
vector<tstring> props;
vector<DWORD_PTR> props_msg;
props.reserve(info->TopLevelPropertyCount);
props_msg.reserve(info->TopLevelPropertyCount);
for (ULONG i = 0; i < info->TopLevelPropertyCount; i++) {
props.push_back(std::move(PropertyToString((PEVENT_RECORD)&rec, info.get(), i, NULL, 0, nPtrSize)));
props_msg.push_back((DWORD_PTR)props[i].c_str());
}
if (info->EventMessageOffset) {
// Format the message.
return wstring_msg(0, reinterpret_cast<LPCTSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset), props_msg.data()).c_str();
if (info->EventMessageOffset) {
// Format the message.
return wstring_msg(0, reinterpret_cast<LPCTSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset), props_msg.data()).c_str();
}
}
} else if (info->EventMessageOffset) {
// This is a WPP event.
return reinterpret_cast<LPCWSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset);
}
} else if (info->EventMessageOffset) {
// This is a WPP event.
return reinterpret_cast<LPCWSTR>(reinterpret_cast<LPCBYTE>(info.get()) + info->EventMessageOffset);
}
}
}
@ -764,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))
{
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 {
for (ULONG i = 0; ; i++) {
if (i >= pMapInfo->EntryCount)
return tstring_printf(_T("%lu"), 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 (
@ -805,7 +817,7 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_UNICODESTRING:
case TDH_INTYPE_NONNULLTERMINATEDSTRING:
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_NONNULLTERMINATEDANSISTRING:
@ -906,7 +918,6 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_BINARY:
switch (OutType) {
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")),
#ifdef _UNICODE
"RtlIpv6AddressToStringW"
@ -934,12 +945,8 @@ static tstring DataToString(_In_ USHORT InType, _In_ USHORT OutType, _In_count_(
case TDH_INTYPE_GUID: {
assert(nDataSize >= sizeof(GUID));
WCHAR szGuid[39];
if (StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid)))
return tstring_printf(_T("%ls"), szGuid);
else {
assert(0);
return _T("(GUID)");
}
StringFromGUID2(*(GUID*)pData, szGuid, _countof(szGuid));
return tstring_printf(_T("%ls"), szGuid);
}
case TDH_INTYPE_POINTER:
@ -988,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.
// Doubling the pointer size handles both cases.
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: {
assert(nDataSize >= sizeof(SID));
@ -1020,7 +1027,7 @@ static ULONG GetArraySize(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, ULONG i
ULONG ulResult;
// 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;
if ((ulResult = TdhGetProperty(pEvent, 0, NULL, 1, &data_desc, count)) != ERROR_SUCCESS)
return ulResult;
@ -1046,7 +1053,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
// Get the size of the array if the property is an array.
ULONG ulArraySize = 0;
if ((ulResult = GetArraySize(pEvent, pInfo, ulPropIndex, &ulArraySize)) != ERROR_SUCCESS)
return tstring_printf(_T("(Error getting array size (error %u))"), ulResult);
return tstring_printf(_T("(Error getting array size (error %u))"), ulResult);;
tstring out;
bool out_nonfirst = false;
@ -1060,7 +1067,7 @@ static tstring PropertyToString(PEVENT_RECORD pEvent, PTRACE_EVENT_INFO pInfo, U
if (out_nonfirst) out += _T(", "); else out_nonfirst = true;
out += _T('(');
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 += _T(')');
@ -1079,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
// descriptor defines the member of the structure whose data you want to retrieve.
PROPERTY_DATA_DESCRIPTOR data_desc[2] = {
{ (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)pInfo + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset, k }
{ (ULONGLONG)pStructureName , ulStructIndex },
{ (ULONGLONG)(reinterpret_cast<LPBYTE>(pInfo) + pInfo->EventPropertyInfoArray[ulPropIndex].NameOffset), k }
};
ulResult = TdhGetProperty(pEvent, 0, NULL, _countof(data_desc), data_desc, data);
} 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);
}
if (ulResult == ERROR_EVT_INVALID_EVENT_DATA) {

View File

@ -1,7 +1,21 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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 <wx/event.h>
@ -31,7 +45,6 @@ class wxPersistentETWListCtrl;
#include <wx/persist/window.h>
#include <wx/thread.h>
#include <stdex/vector_queue.hpp>
#include <WinStd/ETW.h>
#include <memory>
@ -137,7 +150,7 @@ protected:
private:
/// \cond internal
static VOID WINAPI EventRecordCallback(_In_ PEVENT_RECORD pEvent);
static VOID WINAPI EventRecordCallback(PEVENT_RECORD pEvent);
/// \endcond
protected:
@ -155,7 +168,7 @@ protected:
///
/// Functor for GUID comparison
///
struct less_guid
struct less_guid : public std::binary_function<GUID, GUID, bool>
{
///
/// Compares two GUIDs
@ -308,8 +321,8 @@ protected:
guidset m_sources; ///< Set of enabled sources
wxListItemAttr m_item_attr[2][4]; ///< Current item attributes
stdex::vector_queue<winstd::event_rec> m_rec_db; ///< Event record database
stdex::vector_queue<size_t> m_rec_idx; ///< Event record database indices of shown records
winstd::vector_queue<winstd::event_rec> m_rec_db; ///< Event record database
winstd::vector_queue<size_t> m_rec_idx; ///< Event record database indices of shown records
size_t m_col_format_width[5]; ///< Column widths for pre-formatted row display (0 = unlimited)
};

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
@ -28,42 +28,104 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E0D0725B-B2FC-4225-9481-CA9B1B6306F2}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EventMonitor</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets">
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="EventMonitor.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\Events\build\temp\Events.$(Platform).$(Configuration).$(PlatformToolset);..\lib\WinStd\include;..\lib\stdex\include;..\lib\wxExtend\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ItemGroup>
<ResourceCompile Include="EventMonitor.rc" />
</ItemGroup>
@ -72,7 +134,7 @@
<ClInclude Include="ETWLog.h" />
<ClInclude Include="Frame.h" />
<ClInclude Include="LogPanel.h" />
<ClInclude Include="PCH.h" />
<ClInclude Include="StdAfx.h" />
<ClInclude Include="res\wxEventMonitor_UI.h" />
</ItemGroup>
<ItemGroup>
@ -80,8 +142,13 @@
<ClCompile Include="ETWLog.cpp" />
<ClCompile Include="Frame.cpp" />
<ClCompile Include="LogPanel.cpp" />
<ClCompile Include="PCH.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
<ClCompile Include="StdAfx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="res\wxEventMonitor_UI.cpp" />
</ItemGroup>
@ -89,7 +156,10 @@
<ProjectReference Include="..\lib\Events\build\Events.vcxproj">
<Project>{d63f24bd-92a0-4d6b-8b69-ed947e4d2b1b}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
<ProjectReference Include="..\lib\WinStd\build\WinStd-15.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib-15.0.vcxproj">
<Project>{d3e29951-d9f5-486d-a167-20ae8e90b1fa}</Project>
</ProjectReference>
</ItemGroup>
@ -124,7 +194,6 @@
<POCompile Include="locale\pt_PT.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sk_SK.po" />
<POCompile Include="locale\ro_RO.po" />
<POCompile Include="locale\sl_SI.po" />
<POCompile Include="locale\sr_RS.po" />
<POCompile Include="locale\sv_SE.po" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
@ -24,7 +24,7 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PCH.h">
<ClInclude Include="StdAfx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="App.h">
@ -44,7 +44,7 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="PCH.cpp">
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="App.cpp">
@ -75,9 +75,6 @@
</None>
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\ro_RO.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>

View File

@ -1,10 +1,24 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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 "PCH.h"
#include "StdAfx.h"
//////////////////////////////////////////////////////////////////////////
@ -33,9 +47,14 @@ wxEventMonitorFrame::wxEventMonitorFrame(wxWindow* parent, wxWindowID id, const
wxString prod_status_bar;
prod_status_bar.Printf(_("Toggles display of %s records"), wxT(PRODUCT_NAME_STR));
winstd::library lib_comres(LoadLibraryEx(_T("comres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
winstd::library lib_ieframe(LoadLibraryEx(_T("ieframe.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
winstd::library lib_shell32(LoadLibraryEx(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
winstd::library lib_comres;
lib_comres.load(_T("comres.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
winstd::library lib_ieframe;
lib_ieframe.load(_T("ieframe.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
winstd::library lib_shell32;
lib_shell32.load(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
wxSize size_menu(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON));
wxSize size_tool(size_menu);

View File

@ -1,13 +1,27 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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/>.
*/
class wxEventMonitorFrame;
class wxPersistentEventMonitorFrame;
#pragma once
#pragma once;
#include "LogPanel.h"
@ -20,9 +34,6 @@ class wxPersistentEventMonitorFrame;
#include <WinStd/Win.h>
#pragma warning(push)
#pragma warning(disable: 26444)
/// \addtogroup EventMonitor
/// @{
@ -162,5 +173,3 @@ inline wxPersistentObject *wxCreatePersistentObject(wxEventMonitorFrame *wnd)
}
/// @}
#pragma warning(pop)

View File

@ -1,10 +1,24 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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 "PCH.h"
#include "StdAfx.h"
//////////////////////////////////////////////////////////////////////////

View File

@ -1,7 +1,21 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
/*
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/>.
*/
class wxEventMonitorLogPanel;

Binary file not shown.

View File

@ -1,7 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#include "PCH.h"

View File

@ -1,39 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
Copyright © 2016 GÉANT
*/
#pragma once
#include "App.h"
#include "ETWLog.h"
#include "Frame.h"
#include "LogPanel.h"
#include "../lib/EAPBase_UI/include/EAP_UI.h"
#include "../include/Version.h"
#include <wxex/common.h>
#include <wxex/object.h>
#include <wxex/persist/auimanager.h>
#include <WinStd/COM.h>
#include <WinStd/ETW.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <Msi.h>
#include <tchar.h>
#include <in6addr.h>
#include <MSTcpIP.h>
#include <Sddl.h>
#include <tchar.h>
#include <utility>
#include <vector>
#include <set>
#include <EventsETW.h> // Must include after <Windows.h>

21
EventMonitor/StdAfx.cpp Normal file
View File

@ -0,0 +1,21 @@
/*
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"

53
EventMonitor/StdAfx.h Normal file
View File

@ -0,0 +1,53 @@
/*
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/>.
*/
#pragma once
#include "App.h"
#include "ETWLog.h"
#include "Frame.h"
#include "LogPanel.h"
#include "../lib/EAPBase_UI/include/EAP_UI.h"
#include "../include/Version.h"
#include <wxex/common.h>
#include <wxex/object.h>
#include <wxex/persist/auimanager.h>
#include <WinStd/COM.h>
#include <WinStd/ETW.h>
#include <WinStd/Win.h>
#include <Windows.h>
#include <Msi.h>
#include <tchar.h>
#include <in6addr.h>
#include <MSTcpIP.h>
#include <Sddl.h>
#include <tchar.h>
#include <utility>
#include <vector>
#include <set>
#include <EventsETW.h> // Must include after <Windows.h>

View File

@ -2,219 +2,269 @@
msgid ""
msgstr ""
"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"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"
"X-Poedit-Basepath: ..\n"
"X-Generator: Poedit 1.8.11\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-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
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: master/EventMonitor/App.cpp:61 ver1.0/EventMonitor/App.cpp:61
#: master/EventMonitor/Frame.h:75 ver1.0/EventMonitor/Frame.h:75
#: 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"
msgstr ""
#: ETWLog.cpp:83
#: master/EventMonitor/ETWLog.cpp:83 ver1.0/EventMonitor/ETWLog.cpp:83
#, c-format
msgid "Error opening event trace (error %u)."
msgstr ""
#: ETWLog.cpp:171
#: master/EventMonitor/ETWLog.cpp:171 ver1.0/EventMonitor/ETWLog.cpp:171
msgid "Time"
msgstr ""
#: ETWLog.cpp:172
#: master/EventMonitor/ETWLog.cpp:172 ver1.0/EventMonitor/ETWLog.cpp:172
msgid "PID"
msgstr ""
#: ETWLog.cpp:173
#: master/EventMonitor/ETWLog.cpp:173 ver1.0/EventMonitor/ETWLog.cpp:173
msgid "TID"
msgstr ""
#: ETWLog.cpp:174
#: master/EventMonitor/ETWLog.cpp:174 ver1.0/EventMonitor/ETWLog.cpp:174
msgid "Source"
msgstr ""
#: ETWLog.cpp:175
#: master/EventMonitor/ETWLog.cpp:175 ver1.0/EventMonitor/ETWLog.cpp:175
msgid "Event"
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."
msgstr ""
#: ETWLog.cpp:235
#: master/EventMonitor/ETWLog.cpp:235 ver1.0/EventMonitor/ETWLog.cpp:235
#, c-format
msgid "The %s event session already exists."
msgstr ""
#: ETWLog.cpp:239
#: master/EventMonitor/ETWLog.cpp:239 ver1.0/EventMonitor/ETWLog.cpp:239
#, c-format
msgid "Error creating event session (error %u)."
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
msgid "Error enabling %s event provider (error %u)."
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
msgid "Toggles display of %s records"
msgstr ""
#: Frame.cpp:65
#: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
msgid "E&xit"
msgstr ""
#: Frame.cpp:65
#: master/EventMonitor/Frame.cpp:65 ver1.0/EventMonitor/Frame.cpp:65
msgid "Quits this program"
msgstr ""
#: Frame.cpp:69
#: master/EventMonitor/Frame.cpp:69 ver1.0/EventMonitor/Frame.cpp:69
msgid "&Program"
msgstr ""
#: Frame.cpp:73
#: master/EventMonitor/Frame.cpp:73 ver1.0/EventMonitor/Frame.cpp:73
msgid "&Copy"
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"
msgstr ""
#: Frame.cpp:78
#: master/EventMonitor/Frame.cpp:78 ver1.0/EventMonitor/Frame.cpp:78
msgid "Copy A&ll"
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)"
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"
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"
msgstr ""
#: Frame.cpp:90
#: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
msgid "Select &All"
msgstr ""
#: Frame.cpp:90
#: master/EventMonitor/Frame.cpp:90 ver1.0/EventMonitor/Frame.cpp:90
msgid "Selects all visible records"
msgstr ""
#: Frame.cpp:94
#: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
msgid "Select &None"
msgstr ""
#: Frame.cpp:94
#: master/EventMonitor/Frame.cpp:94 ver1.0/EventMonitor/Frame.cpp:94
msgid "Clears record selection"
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"
msgstr ""
#: Frame.cpp:101
#: master/EventMonitor/Frame.cpp:101 ver1.0/EventMonitor/Frame.cpp:101
msgid "Auto &Scroll"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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
msgid "%s toolbar"
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
msgid "Toggles display of %s toolbar"
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"
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"
msgstr ""
#: Frame.cpp:154
#: master/EventMonitor/Frame.cpp:154 ver1.0/EventMonitor/Frame.cpp:154
msgid "Copy"
msgstr ""
#: Frame.cpp:156
#: master/EventMonitor/Frame.cpp:156 ver1.0/EventMonitor/Frame.cpp:156
msgid "Copy All"
msgstr ""
#: Frame.cpp:161
#: master/EventMonitor/Frame.cpp:161 ver1.0/EventMonitor/Frame.cpp:161
msgid "Edit"
msgstr ""
#: Frame.cpp:164
#: master/EventMonitor/Frame.cpp:164 ver1.0/EventMonitor/Frame.cpp:164
msgid "Auto Scroll"
msgstr ""
#: Frame.cpp:189
#: master/EventMonitor/Frame.cpp:189 ver1.0/EventMonitor/Frame.cpp:189
msgid "Trace Log"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.x64.Debug.Feature-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"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: master/EventMonitor/MSIBuild/en_US.Win32.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"
msgstr ""

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