From b3dbf35d5164d1c874ac90cc4d98320df6e83efd Mon Sep 17 00:00:00 2001 From: Harald Wolff-Thobaben Date: Fri, 24 Sep 2021 22:49:31 +0200 Subject: [PATCH] Initial Commit from codeplex archive --- .gitignore | 2 + .idea/.idea.RDPAddins/.idea/.gitignore | 13 + .idea/.idea.RDPAddins/.idea/encodings.xml | 4 + .idea/.idea.RDPAddins/.idea/indexLayout.xml | 8 + .idea/.idea.RDPAddins/.idea/vcs.xml | 6 + .../DefaultTemplate.11.1.xaml | 543 ++++++++++++++++++ .../LabDefaultTemplate.11.xaml | 208 +++++++ BuildProcessTemplates/UpgradeTemplate.xaml | 76 +++ .../FileTransferAddin.Designer.cs | 163 ++++++ .../FileTransferAddin/FileTransferAddin.cs | 267 +++++++++ .../FileTransferAddin.csproj | 105 ++++ .../FileTransferAddin.csproj.vspscc | 10 + .../FileTransferAddin.pl-PL.resx | 153 +++++ .../FileTransferAddin/FileTransferAddin.resx | 339 +++++++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../Properties/Resources.Designer.cs | 84 +++ .../Properties/Resources.resx | 130 +++++ .../Properties/Settings.Designer.cs | 38 ++ .../Properties/Settings.settings | 9 + .../FileTransferAddin/Resources/AddinIcon.png | Bin 0 -> 975 bytes .../Resources/Downloaded.png | Bin 0 -> 598 bytes .../FileTransferAddin/Resources/Uploaded.png | Bin 0 -> 601 bytes FileTransfer/FileTransferAddin/app.config | 15 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...Transfer.FileTransferAddin.pl-PL.resources | Bin 0 -> 836 bytes .../FileTransfer.FileTransferAddin.resources | Bin 0 -> 7548 bytes ...eTransferAddin.csproj.FileListAbsolute.txt | 4 + ...ransferAddin.csproj.GenerateResource.cache | Bin 0 -> 1220 bytes ...ransferAddin.csprojAssemblyReference.cache | Bin 0 -> 15570 bytes .../FileTransferServer.csproj | 67 +++ .../FileTransferServer.csproj.vspscc | 10 + FileTransfer/FileTransferServer/Program.cs | 28 + .../Properties/AssemblyInfo.cs | 33 ++ FileTransfer/FileTransferServer/WtsApi32.cs | 33 ++ .../bin/Debug/FileTransfer.exe | Bin 0 -> 12288 bytes .../bin/Debug/FileTransfer.pdb | Bin 0 -> 2864 bytes .../FileTransferServer/frmMain.Designer.cs | 71 +++ FileTransfer/FileTransferServer/frmMain.cs | 165 ++++++ FileTransfer/FileTransferServer/frmMain.resx | 123 ++++ ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + .../obj/Debug/FileTransfer.exe | Bin 0 -> 12288 bytes .../obj/Debug/FileTransfer.frmMain.resources | Bin 0 -> 180 bytes .../obj/Debug/FileTransfer.pdb | Bin 0 -> 2864 bytes ...nsferServer.csproj.CoreCompileInputs.cache | 1 + ...TransferServer.csproj.FileListAbsolute.txt | 8 + ...ansferServer.csproj.GenerateResource.cache | Bin 0 -> 941 bytes ...ansferServer.csprojAssemblyReference.cache | Bin 0 -> 11468 bytes Installer/RDPAddins.iss | 85 +++ Installer/RDPAddinsC.iss | 85 +++ RDPAddins.Common/AddinMetadata.cs | 113 ++++ RDPAddins.Common/IAddin.cs | 20 + RDPAddins.Common/IChannel.cs | 104 ++++ RDPAddins.Common/IUI.cs | 98 ++++ RDPAddins.Common/Properties/AssemblyInfo.cs | 36 ++ RDPAddins.Common/RDPAddins.Common.csproj | 79 +++ .../RDPAddins.Common.csproj.vspscc | 10 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...dins.Common.csproj.CoreCompileInputs.cache | 1 + ...PAddins.Common.csproj.FileListAbsolute.txt | 7 + ...ddins.Common.csprojAssemblyReference.cache | Bin 0 -> 7679 bytes .../obj/Debug/RDPAddins.Common.dll | Bin 0 -> 9216 bytes .../obj/Debug/RDPAddins.Common.pdb | Bin 0 -> 1324 bytes RDPAddins.Core/EntryPoint.cs | 49 ++ RDPAddins.Core/Properties/AssemblyInfo.cs | 36 ++ RDPAddins.Core/RDPAddins.Core.csproj | 85 +++ RDPAddins.Core/RDPAddins.Core.csproj.vspscc | 10 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...PAddins.Core.csprojAssemblyReference.cache | Bin 0 -> 4320 bytes ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + .../Debug/RDPAddins.Core.csproj.CopyComplete | 0 ...Addins.Core.csproj.CoreCompileInputs.cache | 1 + ...RDPAddins.Core.csproj.FileListAbsolute.txt | 7 + ...PAddins.Core.csprojAssemblyReference.cache | Bin 0 -> 2905 bytes .../obj/x64/Debug/RDPAddins.Core.dll | Bin 0 -> 5632 bytes .../obj/x64/Debug/RDPAddins.Core.pdb | Bin 0 -> 1136 bytes RDPAddins.CoreC/RDPAddins.CoreC.cpp | 90 +++ RDPAddins.CoreC/RDPAddins.CoreC.def | 3 + RDPAddins.CoreC/RDPAddins.CoreC.rc | Bin 0 -> 4488 bytes RDPAddins.CoreC/RDPAddins.CoreC.vcxproj | 178 ++++++ .../RDPAddins.CoreC.vcxproj.filters | 37 ++ .../RDPAddins.CoreC.vcxproj.vspscc | 10 + RDPAddins.CoreC/resource.h | 14 + RDPAddins.sln | 174 ++++++ RDPAddins.sln.DotSettings.user | 3 + RDPAddins.snk | Bin 0 -> 596 bytes RDPAddins.vssscc | 10 + RDPAddins/About.Designer.cs | 86 +++ RDPAddins/About.cs | 22 + RDPAddins/About.pl-PL.resx | 129 +++++ RDPAddins/About.resx | 237 ++++++++ RDPAddins/Channel.cs | 318 ++++++++++ RDPAddins/ChannelStream.cs | 32 ++ RDPAddins/MasterMode.Designer.cs | 74 +++ RDPAddins/MasterMode.cs | 23 + RDPAddins/MasterMode.resx | 120 ++++ RDPAddins/Program.cs | 97 ++++ RDPAddins/Properties/AssemblyInfo.cs | 36 ++ RDPAddins/Properties/Resources.Designer.cs | 63 ++ RDPAddins/Properties/Resources.resx | 117 ++++ RDPAddins/RDPAddins.csproj | 122 ++++ RDPAddins/RDPAddins.csproj.vspscc | 10 + RDPAddins/RDPClient.cs | 120 ++++ RDPAddins/Resources/AddinIcon.png | Bin 0 -> 975 bytes RDPAddins/SlaveMode.Designer.cs | 166 ++++++ RDPAddins/SlaveMode.cs | 112 ++++ RDPAddins/SlaveMode.pl-PL.resx | 214 +++++++ RDPAddins/SlaveMode.resx | 351 +++++++++++ RDPAddins/WtsApi32.cs | 90 +++ RDPAddins/app.config | 3 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + .../obj/Debug/RDPAddins.MasterMode.resources | Bin 0 -> 180 bytes .../RDPAddins.Properties.Resources.resources | Bin 0 -> 180 bytes .../Debug/RDPAddins.SlaveMode.pl-PL.resources | Bin 0 -> 8086 bytes .../obj/Debug/RDPAddins.SlaveMode.resources | Bin 0 -> 13032 bytes .../obj/Debug/RDPAddins.csproj.CopyComplete | 0 .../RDPAddins.csproj.CoreCompileInputs.cache | 1 + .../RDPAddins.csproj.FileListAbsolute.txt | 17 + .../RDPAddins.csproj.GenerateResource.cache | Bin 0 -> 1224 bytes .../RDPAddins.csprojAssemblyReference.cache | Bin 0 -> 20363 bytes RDPAddins/obj/Debug/RDPAddins.exe | Bin 0 -> 50688 bytes .../Debug/RDPAddins.frmAbout.pl-PL.resources | Bin 0 -> 363 bytes .../obj/Debug/RDPAddins.frmAbout.resources | Bin 0 -> 4417 bytes RDPAddins/obj/Debug/RDPAddins.pdb | Bin 0 -> 9368 bytes .../obj/Debug/pl-PL/RDPAddins.resources.dll | Bin 0 -> 11776 bytes Tools/ExportDll.exe | Bin 0 -> 15360 bytes Tools/ExportDll.exe.config | 28 + Tools/ExportDllAttribute.dll | Bin 0 -> 4096 bytes Tools/README.txt | 2 + bin/Debug/RDPAddins.Common.dll | Bin 0 -> 9216 bytes bin/Debug/RDPAddins.Common.pdb | Bin 0 -> 1324 bytes bin/Debug/RDPAddins.Common.xml | 308 ++++++++++ bin/Debug/RDPAddins.exe | Bin 0 -> 50688 bytes bin/Debug/RDPAddins.exe.config | 3 + bin/Debug/RDPAddins.pdb | Bin 0 -> 9368 bytes bin/Debug/pl-PL/RDPAddins.resources.dll | Bin 0 -> 11776 bytes bin/x64/Debug/ExportDllAttribute.dll | Bin 0 -> 4096 bytes bin/x64/Debug/RDPAddins.Core.dll | Bin 0 -> 5632 bytes bin/x64/Debug/RDPAddins.Core.pdb | Bin 0 -> 1136 bytes 138 files changed, 7022 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.idea.RDPAddins/.idea/.gitignore create mode 100644 .idea/.idea.RDPAddins/.idea/encodings.xml create mode 100644 .idea/.idea.RDPAddins/.idea/indexLayout.xml create mode 100644 .idea/.idea.RDPAddins/.idea/vcs.xml create mode 100644 BuildProcessTemplates/DefaultTemplate.11.1.xaml create mode 100644 BuildProcessTemplates/LabDefaultTemplate.11.xaml create mode 100644 BuildProcessTemplates/UpgradeTemplate.xaml create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.Designer.cs create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.cs create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.csproj create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.csproj.vspscc create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.pl-PL.resx create mode 100644 FileTransfer/FileTransferAddin/FileTransferAddin.resx create mode 100644 FileTransfer/FileTransferAddin/Properties/AssemblyInfo.cs create mode 100644 FileTransfer/FileTransferAddin/Properties/Resources.Designer.cs create mode 100644 FileTransfer/FileTransferAddin/Properties/Resources.resx create mode 100644 FileTransfer/FileTransferAddin/Properties/Settings.Designer.cs create mode 100644 FileTransfer/FileTransferAddin/Properties/Settings.settings create mode 100644 FileTransfer/FileTransferAddin/Resources/AddinIcon.png create mode 100644 FileTransfer/FileTransferAddin/Resources/Downloaded.png create mode 100644 FileTransfer/FileTransferAddin/Resources/Uploaded.png create mode 100644 FileTransfer/FileTransferAddin/app.config create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.pl-PL.resources create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.resources create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.FileListAbsolute.txt create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.GenerateResource.cache create mode 100644 FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csprojAssemblyReference.cache create mode 100644 FileTransfer/FileTransferServer/FileTransferServer.csproj create mode 100644 FileTransfer/FileTransferServer/FileTransferServer.csproj.vspscc create mode 100644 FileTransfer/FileTransferServer/Program.cs create mode 100644 FileTransfer/FileTransferServer/Properties/AssemblyInfo.cs create mode 100644 FileTransfer/FileTransferServer/WtsApi32.cs create mode 100644 FileTransfer/FileTransferServer/bin/Debug/FileTransfer.exe create mode 100644 FileTransfer/FileTransferServer/bin/Debug/FileTransfer.pdb create mode 100644 FileTransfer/FileTransferServer/frmMain.Designer.cs create mode 100644 FileTransfer/FileTransferServer/frmMain.cs create mode 100644 FileTransfer/FileTransferServer/frmMain.resx create mode 100644 FileTransfer/FileTransferServer/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransfer.exe create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransfer.frmMain.resources create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransfer.pdb create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csproj.CoreCompileInputs.cache create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csproj.FileListAbsolute.txt create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csproj.GenerateResource.cache create mode 100644 FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csprojAssemblyReference.cache create mode 100644 Installer/RDPAddins.iss create mode 100644 Installer/RDPAddinsC.iss create mode 100644 RDPAddins.Common/AddinMetadata.cs create mode 100644 RDPAddins.Common/IAddin.cs create mode 100644 RDPAddins.Common/IChannel.cs create mode 100644 RDPAddins.Common/IUI.cs create mode 100644 RDPAddins.Common/Properties/AssemblyInfo.cs create mode 100644 RDPAddins.Common/RDPAddins.Common.csproj create mode 100644 RDPAddins.Common/RDPAddins.Common.csproj.vspscc create mode 100644 RDPAddins.Common/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.CoreCompileInputs.cache create mode 100644 RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.FileListAbsolute.txt create mode 100644 RDPAddins.Common/obj/Debug/RDPAddins.Common.csprojAssemblyReference.cache create mode 100644 RDPAddins.Common/obj/Debug/RDPAddins.Common.dll create mode 100644 RDPAddins.Common/obj/Debug/RDPAddins.Common.pdb create mode 100644 RDPAddins.Core/EntryPoint.cs create mode 100644 RDPAddins.Core/Properties/AssemblyInfo.cs create mode 100644 RDPAddins.Core/RDPAddins.Core.csproj create mode 100644 RDPAddins.Core/RDPAddins.Core.csproj.vspscc create mode 100644 RDPAddins.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 RDPAddins.Core/obj/Debug/RDPAddins.Core.csprojAssemblyReference.cache create mode 100644 RDPAddins.Core/obj/x64/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CopyComplete create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CoreCompileInputs.cache create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.FileListAbsolute.txt create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csprojAssemblyReference.cache create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.dll create mode 100644 RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.pdb create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.cpp create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.def create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.rc create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.vcxproj create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.filters create mode 100644 RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.vspscc create mode 100644 RDPAddins.CoreC/resource.h create mode 100644 RDPAddins.sln create mode 100644 RDPAddins.sln.DotSettings.user create mode 100644 RDPAddins.snk create mode 100644 RDPAddins.vssscc create mode 100644 RDPAddins/About.Designer.cs create mode 100644 RDPAddins/About.cs create mode 100644 RDPAddins/About.pl-PL.resx create mode 100644 RDPAddins/About.resx create mode 100644 RDPAddins/Channel.cs create mode 100644 RDPAddins/ChannelStream.cs create mode 100644 RDPAddins/MasterMode.Designer.cs create mode 100644 RDPAddins/MasterMode.cs create mode 100644 RDPAddins/MasterMode.resx create mode 100644 RDPAddins/Program.cs create mode 100644 RDPAddins/Properties/AssemblyInfo.cs create mode 100644 RDPAddins/Properties/Resources.Designer.cs create mode 100644 RDPAddins/Properties/Resources.resx create mode 100644 RDPAddins/RDPAddins.csproj create mode 100644 RDPAddins/RDPAddins.csproj.vspscc create mode 100644 RDPAddins/RDPClient.cs create mode 100644 RDPAddins/Resources/AddinIcon.png create mode 100644 RDPAddins/SlaveMode.Designer.cs create mode 100644 RDPAddins/SlaveMode.cs create mode 100644 RDPAddins/SlaveMode.pl-PL.resx create mode 100644 RDPAddins/SlaveMode.resx create mode 100644 RDPAddins/WtsApi32.cs create mode 100644 RDPAddins/app.config create mode 100644 RDPAddins/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 RDPAddins/obj/Debug/RDPAddins.MasterMode.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.Properties.Resources.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.SlaveMode.pl-PL.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.SlaveMode.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.csproj.CopyComplete create mode 100644 RDPAddins/obj/Debug/RDPAddins.csproj.CoreCompileInputs.cache create mode 100644 RDPAddins/obj/Debug/RDPAddins.csproj.FileListAbsolute.txt create mode 100644 RDPAddins/obj/Debug/RDPAddins.csproj.GenerateResource.cache create mode 100644 RDPAddins/obj/Debug/RDPAddins.csprojAssemblyReference.cache create mode 100644 RDPAddins/obj/Debug/RDPAddins.exe create mode 100644 RDPAddins/obj/Debug/RDPAddins.frmAbout.pl-PL.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.frmAbout.resources create mode 100644 RDPAddins/obj/Debug/RDPAddins.pdb create mode 100755 RDPAddins/obj/Debug/pl-PL/RDPAddins.resources.dll create mode 100644 Tools/ExportDll.exe create mode 100644 Tools/ExportDll.exe.config create mode 100644 Tools/ExportDllAttribute.dll create mode 100644 Tools/README.txt create mode 100644 bin/Debug/RDPAddins.Common.dll create mode 100644 bin/Debug/RDPAddins.Common.pdb create mode 100644 bin/Debug/RDPAddins.Common.xml create mode 100644 bin/Debug/RDPAddins.exe create mode 100644 bin/Debug/RDPAddins.exe.config create mode 100644 bin/Debug/RDPAddins.pdb create mode 100755 bin/Debug/pl-PL/RDPAddins.resources.dll create mode 100644 bin/x64/Debug/ExportDllAttribute.dll create mode 100644 bin/x64/Debug/RDPAddins.Core.dll create mode 100644 bin/x64/Debug/RDPAddins.Core.pdb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f05287e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.[oa] +*~ diff --git a/.idea/.idea.RDPAddins/.idea/.gitignore b/.idea/.idea.RDPAddins/.idea/.gitignore new file mode 100644 index 0000000..f9895ae --- /dev/null +++ b/.idea/.idea.RDPAddins/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/projectSettingsUpdater.xml +/modules.xml +/.idea.RDPAddins.iml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/.idea.RDPAddins/.idea/encodings.xml b/.idea/.idea.RDPAddins/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.RDPAddins/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.RDPAddins/.idea/indexLayout.xml b/.idea/.idea.RDPAddins/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.RDPAddins/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.RDPAddins/.idea/vcs.xml b/.idea/.idea.RDPAddins/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.RDPAddins/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BuildProcessTemplates/DefaultTemplate.11.1.xaml b/BuildProcessTemplates/DefaultTemplate.11.1.xaml new file mode 100644 index 0000000..bf54edf --- /dev/null +++ b/BuildProcessTemplates/DefaultTemplate.11.1.xaml @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + [New Microsoft.TeamFoundation.Build.Workflow.Activities.BuildSettings()] + [False] + [New Microsoft.TeamFoundation.Build.Workflow.Activities.TestSpecList(New Microsoft.TeamFoundation.Build.Workflow.Activities.AgileTestPlatformSpec("**\*test*.dll"))] + ["$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)"] + [False] + [True] + [True] + [Microsoft.TeamFoundation.Build.Workflow.Activities.CleanWorkspaceOption.All] + + + + [Microsoft.TeamFoundation.Build.Workflow.Activities.CodeAnalysisOption.AsConfigured] + [True] + [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto] + [True] + [New Microsoft.TeamFoundation.Build.Workflow.Activities.SourceAndSymbolServerSettings(True, Nothing)] + [True] + + + + [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }] + [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal] + + + + + + + All + 11.0 + Assembly references and imported namespaces serialized as XML namespaces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BuildProcessTemplates/LabDefaultTemplate.11.xaml b/BuildProcessTemplates/LabDefaultTemplate.11.xaml new file mode 100644 index 0000000..9e1fb0b --- /dev/null +++ b/BuildProcessTemplates/LabDefaultTemplate.11.xaml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + 11.0 + + + + + + 920,3702 + Assembly references and imported namespaces serialized as XML namespaces + + + + + + + + + + + + + + + + + + + + + True + + + + + + + [LabWorkflowParameters.BuildDetails.BuildUri] + + + [ChildBuildDetail.Uri] + + + + + + + + + + + + [BuildLocation] + + + [If(LabWorkflowParameters.BuildDetails.Configuration Is Nothing, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsEmpty Or (SelectedBuildDetail.Information.GetNodesByType(Microsoft.TeamFoundation.Build.Common.InformationTypes.ConfigurationSummary, True)).Count = 1, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsPlatformEmptyOrAnyCpu, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Platform + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration)))] + + + + + + + + + + + + [LabEnvironmentUri] + + + [LabWorkflowParameters.EnvironmentDetails.LabEnvironmentUri.ToString()] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [PostDeploymentSnapshotName] + + + [If(LabWorkflowParameters.BuildDetails.IsTeamSystemBuild = True,String.Format("{0}_{1}_{2}", LabWorkflowParameters.DeploymentDetails.PostDeploymentSnapshotName, BuildNumber,BuildDetail.BuildNumber),String.Format("{0}_{1}", LabWorkflowParameters.DeploymentDetails.PostDeploymentSnapshotName, BuildDetail.BuildNumber))] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [BuildStatus] + + + [Microsoft.TeamFoundation.Build.Client.BuildStatus.PartiallySucceeded] + + + + + + + [BuildStatus] + + + [Microsoft.TeamFoundation.Build.Client.BuildStatus.Failed] + + + + + + + + + + + + \ No newline at end of file diff --git a/BuildProcessTemplates/UpgradeTemplate.xaml b/BuildProcessTemplates/UpgradeTemplate.xaml new file mode 100644 index 0000000..b3ee07f --- /dev/null +++ b/BuildProcessTemplates/UpgradeTemplate.xaml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }] + + + + [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto] + [False] + [False] + + + + + + + + + + [Microsoft.TeamFoundation.VersionControl.Client.RecursionType.OneLevel] + [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal] + + + + All + Assembly references and imported namespaces serialized as XML namespaces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.Designer.cs b/FileTransfer/FileTransferAddin/FileTransferAddin.Designer.cs new file mode 100644 index 0000000..b289614 --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.Designer.cs @@ -0,0 +1,163 @@ +namespace FileTransfer +{ + partial class FileTransferAddin + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileTransferAddin)); + this.lvMain = new System.Windows.Forms.ListView(); + this.chTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chFile = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.mnuLVContext = new System.Windows.Forms.ContextMenu(); + this.mnuLVCOpen = new System.Windows.Forms.MenuItem(); + this.mnuLVCSaveAs = new System.Windows.Forms.MenuItem(); + this.ilMain = new System.Windows.Forms.ImageList(this.components); + this.mnuHolder = new System.Windows.Forms.ContextMenu(); + this.mnuHSend = new System.Windows.Forms.MenuItem(); + this.pbMain = new System.Windows.Forms.ProgressBar(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.btSend = new System.Windows.Forms.Button(); + this.mnuHAuto = new System.Windows.Forms.MenuItem(); + this.SuspendLayout(); + // + // lvMain + // + this.lvMain.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chTime, + this.chFile}); + this.lvMain.ContextMenu = this.mnuLVContext; + resources.ApplyResources(this.lvMain, "lvMain"); + this.lvMain.FullRowSelect = true; + this.lvMain.Name = "lvMain"; + this.lvMain.SmallImageList = this.ilMain; + this.lvMain.UseCompatibleStateImageBehavior = false; + this.lvMain.View = System.Windows.Forms.View.Details; + this.lvMain.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvMain_MouseDoubleClick); + // + // chTime + // + resources.ApplyResources(this.chTime, "chTime"); + // + // chFile + // + resources.ApplyResources(this.chFile, "chFile"); + // + // mnuLVContext + // + this.mnuLVContext.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuLVCOpen, + this.mnuLVCSaveAs}); + // + // mnuLVCOpen + // + this.mnuLVCOpen.Index = 0; + resources.ApplyResources(this.mnuLVCOpen, "mnuLVCOpen"); + this.mnuLVCOpen.Click += new System.EventHandler(this.mnuLVCOpen_Click); + // + // mnuLVCSaveAs + // + this.mnuLVCSaveAs.Index = 1; + resources.ApplyResources(this.mnuLVCSaveAs, "mnuLVCSaveAs"); + this.mnuLVCSaveAs.Click += new System.EventHandler(this.mnuLVCSaveAs_Click); + // + // ilMain + // + this.ilMain.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + resources.ApplyResources(this.ilMain, "ilMain"); + this.ilMain.TransparentColor = System.Drawing.Color.Transparent; + // + // mnuHolder + // + this.mnuHolder.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuHAuto, + this.mnuHSend}); + // + // mnuHSend + // + this.mnuHSend.Index = 1; + resources.ApplyResources(this.mnuHSend, "mnuHSend"); + this.mnuHSend.Click += new System.EventHandler(this.mnuHSend_Click); + // + // pbMain + // + resources.ApplyResources(this.pbMain, "pbMain"); + this.pbMain.Maximum = 10000; + this.pbMain.Name = "pbMain"; + // + // openFileDialog + // + resources.ApplyResources(this.openFileDialog, "openFileDialog"); + // + // saveFileDialog + // + resources.ApplyResources(this.saveFileDialog, "saveFileDialog"); + // + // btSend + // + resources.ApplyResources(this.btSend, "btSend"); + this.btSend.Name = "btSend"; + this.btSend.UseVisualStyleBackColor = true; + this.btSend.Click += new System.EventHandler(this.mnuHSend_Click); + // + // mnuHAuto + // + this.mnuHAuto.Index = 0; + resources.ApplyResources(this.mnuHAuto, "mnuHAuto"); + this.mnuHAuto.Click += new System.EventHandler(this.mnuHAuto_Click); + // + // FileTransferAddin + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.lvMain); + this.Controls.Add(this.btSend); + this.Controls.Add(this.pbMain); + this.Name = "FileTransferAddin"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView lvMain; + private System.Windows.Forms.ColumnHeader chTime; + private System.Windows.Forms.ColumnHeader chFile; + public System.Windows.Forms.ProgressBar pbMain; + private System.Windows.Forms.ContextMenu mnuLVContext; + private System.Windows.Forms.ContextMenu mnuHolder; + private System.Windows.Forms.MenuItem mnuLVCOpen; + private System.Windows.Forms.MenuItem mnuLVCSaveAs; + internal System.Windows.Forms.ImageList ilMain; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.MenuItem mnuHSend; + private System.Windows.Forms.Button btSend; + private System.Windows.Forms.MenuItem mnuHAuto; + } +} diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.cs b/FileTransfer/FileTransferAddin/FileTransferAddin.cs new file mode 100644 index 0000000..2c89561 --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using RDPAddins.Common; +using System.IO; +using System.IO.Compression; +using System.Threading.Tasks; +using System.ComponentModel.Composition; +using System.Diagnostics; +using System.Threading; + +namespace FileTransfer +{ + + [AddinMetadata("File transfer", "FTFTA1", + ChannelOptions.Compress | ChannelOptions.PriorityLow)] + public partial class FileTransferAddin : UserControl, IAddin + { + public void Initialize(IChannel Channel) + { + this.Channel = Channel; + Channel.Connected += new EventHandler(FileTransferAddin_Connected); + Channel.Disconnected += new EventHandler(Channel_Disconnected); + Channel.UI.BalloonTipClicked += new BalloonTipClickedHandler((ui, context) => StartFile((string)context)); + Channel.UI.MenuCreating += new MenuCreatingHandler(ui => mnuHolder); + Channel.UI.IconCreating += new IconCreatingHandler(ui => Properties.Resources.AddinIcon); + Channel.UI.ControlCreating += new ControlCreatingHandler(ui => this); + } + + void Channel_Disconnected(object sender, EventArgs e) + { + if (stopWaiting != null) + { + stopWaiting.Cancel(); + stopWaiting = null; + } + } + + + protected FileTransferAddin() + { + InitializeComponent(); + } + + IChannel Channel; + CancellationTokenSource stopWaiting; + + void FileTransferAddin_Connected(object sender, EventArgs e) + { + stopWaiting = new CancellationTokenSource(); + Task.Factory.StartNew(token => + { + while (true) + { + try + { + string file = WaitForFile((CancellationToken)token); + NewFile(file); + } + catch (OperationCanceledException) { break; } + catch { } + } + }, stopWaiting.Token, stopWaiting.Token); + } + + private void lvMain_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (lvMain.SelectedItems.Count > 0) + { + StartFile(lvMain.SelectedItems[0].SubItems[1].Text); + } + } + + void StartFile(string filename) + { + if (!string.IsNullOrWhiteSpace(filename)) + Task.Factory.StartNew(() => + { + try { System.Diagnostics.Process.Start(filename); } + catch { } + }); + } + + private void mnuLVCSaveAs_Click(object sender, EventArgs e) + { + if (lvMain.SelectedItems.Count > 0) + { + string fileSavePath = string.Empty; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + fileSavePath = saveFileDialog.FileName; + try + { + System.IO.File.Copy(lvMain.SelectedItems[0].SubItems[1].Text, fileSavePath, true); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void mnuLVCOpen_Click(object sender, EventArgs e) + { + lvMain_MouseDoubleClick(null, null); + } + + Dictionary icons = new Dictionary(); + + int GetIconIndex(string filename, bool upload) + { + string ext = (upload ? "u" : "d") + Path.GetExtension(filename); + int iconindex = 0; + if (icons.ContainsKey(ext)) + iconindex = icons[ext]; + else + { + using (var icon = System.Drawing.Icon.ExtractAssociatedIcon(filename)) + { + var bmp = icon.ToBitmap(); + using (var gr = Graphics.FromImage(bmp)) + { + using (var img = upload ? Properties.Resources.Uploaded : Properties.Resources.Downloaded) + { + gr.DrawImage(img, 0, 19, 12, 12); + } + } + ilMain.Images.Add(bmp); + iconindex = ilMain.Images.Count - 1; + if (!ext.Contains("exe")) + icons[ext] = iconindex; + } + } + return iconindex; + } + + + public void NewFile(string filename) + { + Channel.UI.DoOnUIThread(() => lvMain.Items.Add(new ListViewItem(new string[] { DateTime.Now.ToString(), filename }, GetIconIndex(filename, false)))); + System.Media.SystemSounds.Exclamation.Play(); + if (Properties.Settings.Default.AutoOpen) + StartFile(filename); + else + Channel.UI.ShowBalloonTip(2000, Channel.Metadata.AddinName, filename, ToolTipIcon.Info, filename); + } + + public string WaitForFile(CancellationToken token) + { + byte[] buffer = new byte[0x1000]; + int toreadhead = 12; + int readedonce = 0; + int readed = 0; + while (toreadhead > 0) + { + readedonce = Channel.Read(buffer, readed, toreadhead); + { + if (readedonce > 0) + { + readed += readedonce; + toreadhead -= readedonce; + } + } + token.ThrowIfCancellationRequested(); + Thread.Sleep(100); + } + long toread = BitConverter.ToInt64(buffer, 0); + int toreadname = BitConverter.ToInt32(buffer, 8); + readed = 0; + while (toreadname > 0) + { + + readedonce = Channel.Read(buffer, readed, toreadname); + if (readedonce > 0) + { + readed += readedonce; + toreadname -= readedonce; + } + token.ThrowIfCancellationRequested(); + } + long maxread = toread; + Channel.UI.DoOnUIThread(() => + { + pbMain.Value = 0; + pbMain.Visible = true; + }); + string filename = Path.Combine(Path.GetTempPath(), System.Text.Encoding.UTF8.GetString(buffer, 0, readed)); + using (FileStream fs = File.OpenWrite(filename)) + { + while (toread > 0) + { + readedonce = Channel.Read(buffer, 0, buffer.Length); + if (readedonce > 0) + { + fs.Write(buffer, 0, readedonce); + toread -= readedonce; + Channel.UI.DoOnUIThread(()=> pbMain.Value = (int)(pbMain.Maximum * (maxread - toread) / (double)maxread)); + } + token.ThrowIfCancellationRequested(); + } + } + Channel.UI.DoOnUIThread(() => pbMain.Visible = false); + return filename; + } + + private void mnuHSend_Click(object sender, EventArgs e) + { + btSend.Visible = false; + mnuHSend.Enabled = false; + string fileOpenPath = string.Empty; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + fileOpenPath = openFileDialog.FileName; + byte[] filename = System.Text.Encoding.UTF8.GetBytes(Path.GetFileName(fileOpenPath)); + Task.Factory.StartNew(() => + { + byte[] buffer = new byte[1600]; + int bytesRead = 0; + using (FileStream fs = File.OpenRead(fileOpenPath)) + { + long readed = 0, maxread = fs.Length; + Channel.Write(BitConverter.GetBytes(maxread), 0, 8); + Channel.Write(BitConverter.GetBytes(filename.Length), 0, 4); + Channel.Write(filename, 0, filename.Length); + Channel.UI.DoOnUIThread(() => + { + pbMain.Value = 0; + pbMain.Visible = true; + }); + while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0) + { + Channel.Write(buffer, 0, bytesRead); + readed += bytesRead; + Channel.UI.DoOnUIThread(() => pbMain.Value = (int)(pbMain.Maximum * readed / (double)maxread)); + } + Channel.UI.DoOnUIThread(() => pbMain.Visible = false); + } + Channel.UI.DoOnUIThread(() => + { + lvMain.Items.Add(new ListViewItem(new string[] { DateTime.Now.ToString(), fileOpenPath }, GetIconIndex(fileOpenPath, true))); + btSend.Visible = true; + mnuHSend.Enabled = true; + }); + }); + } + else + { + btSend.Visible = true; + mnuHSend.Enabled = true; + } + } + + private void mnuHAuto_Click(object sender, EventArgs e) + { + var menu = (MenuItem)sender; + menu.Checked = !menu.Checked; + Properties.Settings.Default.AutoOpen = mnuHAuto.Checked; + Properties.Settings.Default.Save(); + } + } +} diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.csproj b/FileTransfer/FileTransferAddin/FileTransferAddin.csproj new file mode 100644 index 0000000..216198f --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {68857642-A724-46A4-85B3-DAE2BD80498E} + Library + Properties + FileTransfer + FileTransfer + v4.0 + SAK + SAK + SAK + SAK + + + true + full + false + ..\..\bin\Debug\Plugins\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\bin\Release\Plugins\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + UserControl + + + FileTransferAddin.cs + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + FileTransferAddin.cs + Designer + + + FileTransferAddin.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + {EC8481C3-F82F-4F3C-84E2-6732750B6542} + RDPAddins.Common + + + + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.csproj.vspscc b/FileTransfer/FileTransferAddin/FileTransferAddin.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.pl-PL.resx b/FileTransfer/FileTransferAddin/FileTransferAddin.pl-PL.resx new file mode 100644 index 0000000..9ef24a0 --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.pl-PL.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Czas + + + Plik + + + Otwórz + + + Zapisz jako... + + + Autootwieranie + + + Wyślij plik... + + + Wszystkie pliki|*.* + + + Plik do wysłania... + + + Wszystkie pliki|*.* + + + Zapisz jako... + + + Wyślij plik... + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/FileTransferAddin.resx b/FileTransfer/FileTransferAddin/FileTransferAddin.resx new file mode 100644 index 0000000..39f910f --- /dev/null +++ b/FileTransfer/FileTransferAddin/FileTransferAddin.resx @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Time + + + + 130 + + + File + + + 320 + + + 215, 17 + + + + Fill + + + + 0, 0 + + + 474, 119 + + + 130, 17 + + + 32, 32 + + + 6 + + + lvMain + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Open + + + Save As... + + + 17, 17 + + + Send file... + + + Bottom + + + 0, 142 + + + 474, 23 + + + 7 + + + False + + + pbMain + + + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 347, 17 + + + All files|*.* + + + File to send... + + + 480, 17 + + + All files|*.* + + + Save As... + + + Bottom + + + 0, 119 + + + 474, 23 + + + 8 + + + Send file... + + + btSend + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Auto-open + + + pl-PL + + + True + + + 6, 13 + + + 474, 165 + + + chTime + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chFile + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuLVContext + + + System.Windows.Forms.ContextMenu, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuLVCOpen + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuLVCSaveAs + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ilMain + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuHolder + + + System.Windows.Forms.ContextMenu, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuHSend + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openFileDialog + + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + saveFileDialog + + + System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuHAuto + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + FileTransferControl + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/Properties/AssemblyInfo.cs b/FileTransfer/FileTransferAddin/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..498bda3 --- /dev/null +++ b/FileTransfer/FileTransferAddin/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FileTransferAddin")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RDPAddin")] +[assembly: AssemblyCopyright("© Selvin 2011. All rights reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b9af866a-cc59-46bd-8842-404c08e00a96")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/FileTransfer/FileTransferAddin/Properties/Resources.Designer.cs b/FileTransfer/FileTransferAddin/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6ae9263 --- /dev/null +++ b/FileTransfer/FileTransferAddin/Properties/Resources.Designer.cs @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FileTransfer.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FileTransfer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap AddinIcon { + get { + object obj = ResourceManager.GetObject("AddinIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Downloaded { + get { + object obj = ResourceManager.GetObject("Downloaded", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Uploaded { + get { + object obj = ResourceManager.GetObject("Uploaded", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/FileTransfer/FileTransferAddin/Properties/Resources.resx b/FileTransfer/FileTransferAddin/Properties/Resources.resx new file mode 100644 index 0000000..d1c5383 --- /dev/null +++ b/FileTransfer/FileTransferAddin/Properties/Resources.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\addinicon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\downloaded.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\uploaded.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/Properties/Settings.Designer.cs b/FileTransfer/FileTransferAddin/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6bb4581 --- /dev/null +++ b/FileTransfer/FileTransferAddin/Properties/Settings.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FileTransfer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool AutoOpen { + get { + return ((bool)(this["AutoOpen"])); + } + set { + this["AutoOpen"] = value; + } + } + } +} diff --git a/FileTransfer/FileTransferAddin/Properties/Settings.settings b/FileTransfer/FileTransferAddin/Properties/Settings.settings new file mode 100644 index 0000000..c4eafc1 --- /dev/null +++ b/FileTransfer/FileTransferAddin/Properties/Settings.settings @@ -0,0 +1,9 @@ + + + + + + False + + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/Resources/AddinIcon.png b/FileTransfer/FileTransferAddin/Resources/AddinIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0be81b38387f718a7936be8317dfebb842ed8e1c GIT binary patch literal 975 zcmV;=12FuFP)z^Q>-8KIssI20AY({UO#lFHCjbC*uK)n{Hvj;Dr2qhM zBLD#10ssIoJ^%m~vd&$13IG5DMM*?KRCwBAVZZ^BlBO2?`}eOOh#7#maLJOw3E0#D z1P~L9k(M@70f-A=e4r-(oE%SvkPu6TzkmPQgT#V^+XRAwS_=XKniXK`00M{+rWr_` zmyr=Afc1p>X5olMny@|2N#cx#0mo z05O9MFgEs00BR1XtqoyNSCR882OW2(p!dmzRU#&!2w`bLZqT1O!++0QJ@b1Q5so zh95tEGJrIH|NfJKi;E5HY>>?`@Z-mCkc|wCj1cz5P3IXdTzCW)0|+1%P$HQ>f3H6% zic(WO7<6^zzTb^75i!#Sb68Vfgap2g9B{M?XNL`XE36F~V#K32C2i zY^<7~sVN5x17!vtZg#M0Mt4GAb`ML0H$pL zpbPd33-cKOH9r8wGmsz9)14@A?fOfG>C@MPT(|&aGdnxG!q=}~!Abe-*;x+&0tlQE zZ`|1bLrKYI<(DttUjn(AJ9oCNR8X+8;NjuYxNzYi&?~PF0R0^JO$B$2Gz@`o$zyP|3y=`}nV;=wj002ovPDHLkV1hnzn^FJ( literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferAddin/Resources/Downloaded.png b/FileTransfer/FileTransferAddin/Resources/Downloaded.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac360abe02e41e11156373043a27046895ef478 GIT binary patch literal 598 zcmV-c0;&CpP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc2 z4g(dI!aI5Z00GuXL_t(I%Z<}NXp=!0$MJ98KZ#R*ntu7DUaB{}T5 z4w*8;6%eCoWIBg87oGO*>~K4X6P?2)-=UdlM7RE504pRdlf$0tV8jkrz>1-f=^WnV zyQE5x0X^^l4qS@LoqM)oXl5pdOTI&#YOK-ho48rFqOsO;ZG2DN0~kNDS1o)m`lk<$ z(##CnNDjMBftD63JNKivRjIG8Ft*i|?h$TZIhh_EZL0Z&&j9S+K9a*F-{tI~9aw9+ z_{r?8My>~UCQqfuszyD1wans|HEN0K;vcn?dyf`b`?{3F>za5sm`IP071YbOOFVwF z%Acm%5O07*qoM6N<$g7Rq#_W%F@ literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferAddin/Resources/Uploaded.png b/FileTransfer/FileTransferAddin/Resources/Uploaded.png new file mode 100644 index 0000000000000000000000000000000000000000..a701c1f3d14a5437fadbfe7d8c054bf80503e72e GIT binary patch literal 601 zcmV-f0;c_mP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc2 z4LUKV1MElu00G%aL_t(I%Z-!IN*hrWhrisJduLK;T(?LT(kJjC1hdP^mE9EFBrnkD zA`2fOp^xC+LX<)kH6s35Sh8prRwPZKr4%K}OeQmP@9m}yOdZs_z32PRk8?N$fL5zD zBx4^7A)aUd|F75UCAZaT4QsX9J@~lU^i{Da@jM3S=g+EJTR~2bp~&le z+-&-)-}K0O`%i}Y@B@%cg&W#EF8U@hN*fHxNxv)XpMeSZtuTJ(6F zfrV0}VTiW&@iiJC4T22pcpfH-h>dw%pshtuCK*^Lg^6S0rzFtUl7?Xh7D}OmfaEC& z3}Cg+z`}LW( + + + +
+ + + + + + False + + + + \ No newline at end of file diff --git a/FileTransfer/FileTransferAddin/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/FileTransfer/FileTransferAddin/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/FileTransfer/FileTransferAddin/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.pl-PL.resources b/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.pl-PL.resources new file mode 100644 index 0000000000000000000000000000000000000000..b75137e877708479c00d826b4c1063b780aa406a GIT binary patch literal 836 zcmah{L2DC16n-l$7Q{+WDpZt35hScj#HO`}6k>u33W-fkWM?nUU!K9tmHBg{VM%Owg#GjinnQG`BLut3`J#QF@4&;a=ck{peN1hH zcfA+g)X~qyALBnCmv+V{9(~Jn)yBOiU$$`j>bvD8wcYMD1B5i>1R+a!MYUPNC&Dwr zDZ)$2nyQ0=3LwM~f)7>NJ)nwRQvuwEYrsKJaX_W|RF$ac59%aQ(-B!Ea0Bx6H6VvN zPY=_hnHPyZv)6qKmY@J7X!Z^^$X+1H*g4|*u*I?2*y{k&eq~775EF z-K!dERZt`Og@fgGR@3_t!g}ld*#CR4TknJA1Mf`|JI8A6-EF~F+@|0S-}jxdGHsl( zLWgN*GM^YJO^c&qF~?Ey;gV^+eXTmq-Jy5p{}hO{onYq~>My}_|(%-7O>+BspZ T-B7x%w%%PQNA^$YUw*#;R5Z|A literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.resources b/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.resources new file mode 100644 index 0000000000000000000000000000000000000000..0eaa0f2dc5406fc228778b23d7083772a4aef915 GIT binary patch literal 7548 zcmdT|Yitx%6utv(*>+125D-G@f+*6KwH0fvTGN+JTMHDnw1|jKcczGhEez zs)>r6ca1xf{$;p|f|4Fog*;gZ>MAc~xGICSlIXofXsuEj1UauZCx_4WW?!3?JMS7H z^Sa#2VuJ-`T?_~;x<}AQfm8t`4pJY+7pr`;DA&6^Vw+Hs;j-Qx46n?2b=h?}by-=y z>`Z4XSRR1_ROYL<9mZ(C>irgdhUc*(?8nRbJg}EZ(QYg=t$<2n(et=Z+)8kTG7$Mt{tZfH+-@$~u6TaxtzBy8?fD5G-??>bg74A& z&j{-aKdo-IZ)=19^8KywcZB#B!Q4MkZ$N-!u2q&@4&|#tO*~m4?>;+ZV#jb{<|Sw z;PyfU;11$<60o1)T820?Asz7X1!NcQ{{u+}_6qnp1bij#2OtXWS3quo-|3JNVAjL7 z5t0I5b0LoapMv|NVOxmr$HBW9(hK}tT)0sE0C;i&0jQR?-ON3Mi*h z%UZtwIJ2NvLvy@zFFAw2ltLnSMa5rcyl`6$7V==e*ECDAn{25uPyj*j@f~R5JSKUWnL!(nnt-Q;nA`cK|2EN4GO7`@Z5E7aOV9*z>R`##EOrt z_e;^djAF8?BP(_`AT}OY0Jpt|$cpU-#2BF#o`Hc!xcS`RjKI5qPqucmV&u$A8p!pD z7@bvBVW@aaR;bDT3P_YSYqIwx#aLHi0JWqHQ%;M#h0JosSXYH>VGdPU8yr*RKy`^# zRRcOckn)o}W@olGW>?7UOqFR@3Z={1waTz8c@&R;Mjv`^%%{$+&57meC{(FdRdlY_ zC&ySb$2oYwMOjDZY7ZdOSf60eKR026`#Dl=HY27!Oap|hqk98`oC0KKB*ePl8SE@z zX#=mdP<`r1oJyQ2gj_i=oKA;sJjA8}JlVRGSbo!?O0}w@^ZQ+_HOueHaWU4>`JHqT z_A1r@)gY!pYD44zNE>(wMh<*B;8zX|HwT^$a6ZAKpPa>qUg;+p4_mUxdXzX1yXtuA z|6;4#&`F5Ki*FWvxIAh&k#$v(xK`V<(h{u?(RY41-=`%mp;q?@vX6_OrTayV(`}g)26bJL zhmHi7#U*(CG&5YAErB9M3I^oT@FCp}GML(nIyq7fRXCpyF9%VY&x2qC6UQF0&=jlAgC*xJ&E~(94y1@oS`FOFff+K za4|@vIZ!0Lo9d@Y&=w-J=rk8Ymxm;K`% zcrY%|qvE_E$`&t-Mr_%F+K4Y(V`(|?=8JHNbe}bsK2xGA*m&qC(QfG~&}dDMEs!Lm tz_s=?cN#a2mbgn-Tp9`=`U|3RMsmY@>;kBqP{YIfM>2{;7eqv@{0lrn@-qMc literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.FileListAbsolute.txt b/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..3b9fb86 --- /dev/null +++ b/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.FileListAbsolute.txt @@ -0,0 +1,4 @@ +/home/haraldwolff/src/dotnet/RDPAddins/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csprojAssemblyReference.cache +/home/haraldwolff/src/dotnet/RDPAddins/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.resources +/home/haraldwolff/src/dotnet/RDPAddins/FileTransfer/FileTransferAddin/obj/Debug/FileTransfer.FileTransferAddin.pl-PL.resources +/home/haraldwolff/src/dotnet/RDPAddins/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.GenerateResource.cache diff --git a/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.GenerateResource.cache b/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..6a1bf1006a3ad6ceca28de72a95828d9906301bc GIT binary patch literal 1220 zcma)4QEw7K5WXwil{=^&F^Y|SAf_4<@PIT#Ur1wVs*N;3OB$av3p=M9mRquWr^P29 zee=ioTl^RP2c5ZAAe5T!!`v|Q?aq83pJiK?^#>1q>6A7wygv~mt&ED2@E{eEhXZED zChRH=_39aDBUIdJwZm4}44d_8H@EraVS@9fpwa;XY99<}!KC;K{E|UFZ(9%7Z?Qa|1i2w>gRowX0&VR(4&^tv zOoEj766xH|>C7ZBLCvK^J}9^eUorD3 zH_!Jot$f;9Hn@wSsId`wA%&j-0jcO5wm`&ipN?kIOoG30L0sQVt56*>2jEkn)vNNlc zafnAUecK=Z{4x0T-L{EIM(GaqNTWrM2rhc0&b(Kqr!v(mm^@liJq#Nt*oE*7MiPsW lLYd=_?tO$lz7EROmsp}BfoIrl#O_{)O{WWFnHHy0{0rZZRp|f# literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csprojAssemblyReference.cache b/FileTransfer/FileTransferAddin/obj/Debug/FileTransferAddin.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..4770e0ed437b72cfb804bcd1043e10486ee2afa4 GIT binary patch literal 15570 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 literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferServer/FileTransferServer.csproj b/FileTransfer/FileTransferServer/FileTransferServer.csproj new file mode 100644 index 0000000..3021dbd --- /dev/null +++ b/FileTransfer/FileTransferServer/FileTransferServer.csproj @@ -0,0 +1,67 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {DB1D00FA-A8A4-4F01-931E-52686F51265E} + WinExe + Properties + FileTransfer + FileTransfer + v4.0 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + Form + + + frmMain.cs + + + + + Designer + frmMain.cs + + + + + + + + + + + \ No newline at end of file diff --git a/FileTransfer/FileTransferServer/FileTransferServer.csproj.vspscc b/FileTransfer/FileTransferServer/FileTransferServer.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/FileTransfer/FileTransferServer/FileTransferServer.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/FileTransfer/FileTransferServer/Program.cs b/FileTransfer/FileTransferServer/Program.cs new file mode 100644 index 0000000..a7cbaed --- /dev/null +++ b/FileTransfer/FileTransferServer/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Threading; + +namespace FileTransfer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + Application.Run(new frmMain()); + //Thread.Sleep(10000); + } + + static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + MessageBox.Show(e.ExceptionObject.ToString()); + } + } +} \ No newline at end of file diff --git a/FileTransfer/FileTransferServer/Properties/AssemblyInfo.cs b/FileTransfer/FileTransferServer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d32901f --- /dev/null +++ b/FileTransfer/FileTransferServer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FileTransferServer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FileTransferServer")] +[assembly: AssemblyCopyright("© Selvin 2011. All rights reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("043fcaf1-e05c-4364-b530-5693f273b6fa")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/FileTransfer/FileTransferServer/WtsApi32.cs b/FileTransfer/FileTransferServer/WtsApi32.cs new file mode 100644 index 0000000..bd09de9 --- /dev/null +++ b/FileTransfer/FileTransferServer/WtsApi32.cs @@ -0,0 +1,33 @@ +using System; +using System.Runtime.InteropServices; + +namespace FileTransfer +{ + class WtsApi32 + { + + [DllImport("Wtsapi32.dll", SetLastError = true)] + public static extern bool WTSVirtualChannelWrite(IntPtr channelHandle, byte[] data, int length, ref int bytesWritten); + + [DllImport("Wtsapi32.dll", SetLastError = true)] + public static extern bool WTSVirtualChannelRead(IntPtr channelHandle, uint TimeOut, byte[] data, int length, ref int bytesReaded); + + [DllImport("Wtsapi32.dll")] + public static extern IntPtr WTSVirtualChannelOpen(IntPtr server, int sessionId, [MarshalAs(UnmanagedType.LPStr)] string virtualName); + + [DllImport("Wtsapi32.dll")] + public static extern bool WTSVirtualChannelClose(IntPtr channelHandle); + + public enum VirtualClass + { + ClientData, + FileHandle + }; + + [DllImport("Wtsapi32.dll", SetLastError = true)] + public static extern bool WTSVirtualChannelQuery(IntPtr channelHandle, VirtualClass virtualClass, out IntPtr buffer, ref uint bytesReturned); + + [DllImport("Wtsapi32.dll", SetLastError = true)] + public static extern void WTSFreeMemory(IntPtr memory); + } +} diff --git a/FileTransfer/FileTransferServer/bin/Debug/FileTransfer.exe b/FileTransfer/FileTransferServer/bin/Debug/FileTransfer.exe new file mode 100644 index 0000000000000000000000000000000000000000..fbf79add7e543d0fe8d6e0b9fdbd1334d860ee75 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferServer/bin/Debug/FileTransfer.pdb b/FileTransfer/FileTransferServer/bin/Debug/FileTransfer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..938f575f0145f07c7fd17a882f6e6d022b46942b GIT binary patch literal 2864 zcmZuzeQZ}bAA#Z~g??Fvn$@)ec@x@MSst% z|JGQK=cea57mK354gc&i!1SV_=*E;U7X~h~JrX zM+dES?9&5rLmZG?$YLRAwU87+{{;GLilFxtN&n3eIv=FX`b)203akJt8GrS_IdgCYupKxjWB23nvUomh4`;9g_I1ETnfWU4 zX>8F0?7(VgX8i-e>KwcUbDZ#>wHLykI|m=hU>DXegswqc@K~7f_YiR29LzaTiuGCh zW?;`8d?JJ0SkL@C3n_=aDC3XEI5n6ZX|b10lwH>N7p-xAN}FX>X#hGA?<43zv^Hu+ zt615YLpHS%%jKC}vLlqs}B@;FBJ z%UQHf+TKTd$<`)pbX=L0HhSL559$ciuHUeBa4@P52cu>K8Co!;g(w_}YL5ovp{Qo5 z@nB4&F+CDbXvQ`zPLZI&Go$|W5GAzOSXK|46xa6YCMG0E`>GW_6~49n@cE(=-^@4m z6-?bkP+J70Zt??=5Cw^7H*HmP@=I?(Wk z?ylsY$R0?V*u|Odyj|U;8Er=-9@6)j-c7m@Gs`|Vdpq>ln4y_wM2}ZwMmzLqR2xoU z#Pn{~;+hc|_GC}?4hCj1Z2%(B%Q72l&PN9obN~B&=M)jEH8Vwr3XlS1v4To)}F>DX% ziMW<<_ICQ)LkPyq+k|82GlFq5tQo~~0dK4sxnU#rSTGXz4x7dGlzJ<5J@rBAqtxxx zok`oIr}}TZm(=teyf)bQ!kgdR{^sasJ>U7bDfZWiv9BNd)R_I*&p$26F7MRL$O!nj zub=+v4^QSja`M8Ld;{%U^?{q?&3`_(D)8?6w^tO@{8l~ugX7K1IV~5II9;?5IVv60 z96_c!$X$S&h60GPCso#x0ZbGgr=Uiu;_BMdR>~)#sDd7lY7tdQ%6Cn=B{h;LPui%I z*IP~&N;RM25;Yv2P|{?Q4M~S|FG`AoJ98Bwl9Lb10~e`;uL_(tI)%e7)p;b`Nx4Ya zb8r;vWEqU26+v`J)#FA1hJ8uWj%u8GhRSR(4!~F@)jWiWYJokZSeyC`_fG7EWtCKm zKaahRrxi+EPQf*?hGVqC^H_0{SI`1d;DjErkz1DG(q=d*lB&uVANG2?yO@?sSWq7q z6GFyhDXPH7@_d?#T=Y90#+Tg z2-MPgiNaz@)$ znN25NeC6Dw&eN}5Uv}e1*R%@@ef@j>zKFwTj;(0da2zJ5Ee;efy3FI1!|vr91hQ+f zpdy^_;AC;pJZ1ss?w~q}FBK~nkU$%di=wJbP(SVgE?)tsx+!R#RI8{}QYF<(5Ds#S zIf*RCIBb04SXp5glRL%a+x$f#)_}?E6}B!6z5vqsp9cfsvqi{=O&|J7PNz0BKGNXb zzOio;_`rL@*z@3kW^kEqnON;@@V1+#78{Bt+Y|UI92!q(CP?$#TivFAGktaXch%jY zx5GEC{_B%n7rtLnaAw1mQ!7LND9Znf_trZzpZKqzT+h6ZX+|QVnT1)$UGcCEm! + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btLoadAndSend = new System.Windows.Forms.Button(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.SuspendLayout(); + // + // btLoadAndSend + // + this.btLoadAndSend.Location = new System.Drawing.Point(12, 12); + this.btLoadAndSend.Name = "btLoadAndSend"; + this.btLoadAndSend.Size = new System.Drawing.Size(147, 37); + this.btLoadAndSend.TabIndex = 0; + this.btLoadAndSend.Text = "Load && Send"; + this.btLoadAndSend.UseVisualStyleBackColor = true; + this.btLoadAndSend.Click += new System.EventHandler(this.btLoadAndSend_Click); + // + // openFileDialog + // + this.openFileDialog.Filter = "All files|*.*"; + // + // frmMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(174, 60); + this.Controls.Add(this.btLoadAndSend); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "frmMain"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "FileTransfer"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmMain_FormClosed); + this.Load += new System.EventHandler(this.frmMain_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btLoadAndSend; + private System.Windows.Forms.OpenFileDialog openFileDialog; + } +} + diff --git a/FileTransfer/FileTransferServer/frmMain.cs b/FileTransfer/FileTransferServer/frmMain.cs new file mode 100644 index 0000000..0e943a4 --- /dev/null +++ b/FileTransfer/FileTransferServer/frmMain.cs @@ -0,0 +1,165 @@ +using System; +using System.IO; +using System.Windows.Forms; +using System.IO.Compression; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Threading; +using System.Runtime.InteropServices; +using Microsoft.Win32.SafeHandles; + +namespace FileTransfer +{ + public partial class frmMain : Form + { + public frmMain() + { + InitializeComponent(); + } + IntPtr handle = IntPtr.Zero; + FileStream fileStream = null; + private void btLoadAndSend_Click(object sender, EventArgs e) + { + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + try + { + var fileOpenPath = openFileDialog.FileName; + btLoadAndSend.Enabled = false; + Task.Factory.StartNew(() => + { + byte[] filename = System.Text.Encoding.UTF8.GetBytes(Path.GetFileName(fileOpenPath)); + using (FileStream fs = File.OpenRead(fileOpenPath)) + { + fileStream.Write(BitConverter.GetBytes(fs.Length), 0, 8); + fileStream.Write(BitConverter.GetBytes(filename.Length), 0, 4); + fileStream.Write(filename, 0, filename.Length); + fs.CopyTo(fileStream); + fileStream.Flush(); + } + }).ContinueWith(task => { btLoadAndSend.Enabled = true; }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.Current); + } + catch (Exception ex) + { + btLoadAndSend.Enabled = true; + MessageBox.Show("Somethings gone wrong:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + static void StartFile(string filename) + { + Task.Factory.StartNew(() => + { + try + { + System.Diagnostics.Process.Start(filename); + } + catch { } + }); + } + + private void frmMain_Load(object sender, EventArgs e) + { + handle = WtsApi32.WTSVirtualChannelOpen(IntPtr.Zero, -1, "FTFTA1"); + Task.Factory.StartNew(() => + { + IntPtr tempPointer = IntPtr.Zero; + uint pointerLen = 0; + if (WtsApi32.WTSVirtualChannelQuery(handle, WtsApi32.VirtualClass.FileHandle, out tempPointer, ref pointerLen)) + { + IntPtr realPointer = Marshal.ReadIntPtr(tempPointer); + WtsApi32.WTSFreeMemory(tempPointer); + var fileHandle = new SafeFileHandle(realPointer, false); + fileStream = new FileStream(fileHandle, FileAccess.ReadWrite, 0x640, true); + var os = new ObjectState(); + os.RDPStream = fileStream; + var iar = fileStream.BeginRead(os.Buffer, 0, 8, CallBack, os); + } + else + Close(); + }); + } + + + private void frmMain_FormClosed(object sender, FormClosedEventArgs e) + { + fileStream.Dispose(); + bool ret = WtsApi32.WTSVirtualChannelClose(handle); + } + + + enum FileDownloadStatus + { + Length, + NameLength, + Name, + Body, + } + + class ObjectState + { + public int NameLength = 0; + public string Name = string.Empty; + public long Length = 0; + public FileDownloadStatus State = FileDownloadStatus.Length; + public byte[] Buffer = new byte[0x640]; + public FileStream File = null; + public FileStream RDPStream = null; + } + + + static void CallBack(IAsyncResult iar) + { + if (iar.IsCompleted || iar.CompletedSynchronously) + { + var os = iar.AsyncState as ObjectState; + int readed = 0; + try + { + readed = os.RDPStream.EndRead(iar); + } + catch (IOException ex) { MessageBox.Show(ex.Message); } + if (readed != 0) + { + switch (os.State) + { + case FileDownloadStatus.Length: + os.Length = BitConverter.ToInt64(os.Buffer, 0); + os.State = FileDownloadStatus.NameLength; + os.RDPStream.BeginRead(os.Buffer, 0, 4, CallBack, os); + break; + case FileDownloadStatus.NameLength: + os.NameLength = BitConverter.ToInt32(os.Buffer, 0); + os.State = FileDownloadStatus.Name; + os.RDPStream.BeginRead(os.Buffer, 0, os.NameLength, CallBack, os); + break; + case FileDownloadStatus.Name: + os.Name = Path.Combine(Path.GetTempPath(), System.Text.Encoding.UTF8.GetString(os.Buffer, 0, readed)); + os.File = File.OpenWrite(os.Name); + os.State = FileDownloadStatus.Body; + os.RDPStream.BeginRead(os.Buffer, 0, Math.Min(os.Buffer.Length, (int)os.Length), CallBack, os); + break; + case FileDownloadStatus.Body: + os.Length -= readed; + os.File.Write(os.Buffer, 0, readed); + if (os.Length == 0) + { + os.File.Dispose(); + StartFile(os.Name); + var newos = new ObjectState(); + newos.RDPStream = os.RDPStream; + os.RDPStream.BeginRead(newos.Buffer, 0, 8, CallBack, newos); + } + else + { + if (!os.RDPStream.SafeFileHandle.IsInvalid) + os.RDPStream.BeginRead(os.Buffer, 0, Math.Min(os.Buffer.Length, (int)os.Length), CallBack, os); + } + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/FileTransfer/FileTransferServer/frmMain.resx b/FileTransfer/FileTransferServer/frmMain.resx new file mode 100644 index 0000000..f003e42 --- /dev/null +++ b/FileTransfer/FileTransferServer/frmMain.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/FileTransfer/FileTransferServer/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/FileTransfer/FileTransferServer/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/FileTransfer/FileTransferServer/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.exe b/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.exe new file mode 100644 index 0000000000000000000000000000000000000000..fbf79add7e543d0fe8d6e0b9fdbd1334d860ee75 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.frmMain.resources b/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.frmMain.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.pdb b/FileTransfer/FileTransferServer/obj/Debug/FileTransfer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..938f575f0145f07c7fd17a882f6e6d022b46942b GIT binary patch literal 2864 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 YUv-a2B3AVMX!Yyo;`a}KpGzFwe@jsa;{X5v literal 0 HcmV?d00001 diff --git a/FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csprojAssemblyReference.cache b/FileTransfer/FileTransferServer/obj/Debug/FileTransferServer.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..c3df0602c523c6c4a5aa9245e7313f54966342ce GIT binary patch literal 11468 zcmeHNZHyG<9iN%q+1+OjSbRZ2!Q7!B>alkxcf5MSv2d00BCr;$a9n41pSv4wc4wWL z^&k@Q=eXi8g?nyAr;4N2=qHAMfvnb~FLW$+Vxd4HAHZBx}d+jrKBx>nlCCm%A#d9}aTy<((q zWYtJdPr0vKU7^Z&SV#0T3X_)2D+OD%Ii%Q#rgP^kvCzFmz0h@DvZ)JJ?g7;rv(=)` z(QB3UAj)ZM&Msi`J6GtgVm4)Y{kv{HLiz0NH`NC>jr zmbuC6$Ae~BtEzgl&4pd7*F!f;5~Oh;18^ycOP6VfQML_hqg9&RylQbl6z8HL_7v3Q zy6TqMrEA5micvMXdUM^&)tc7j^vdn8%$^wHd*|ZOFQyQt_Wk{01GM&>k7slw-mvaM_#VbX9 za)(;sn;)}z6=Vm!a;-GjH-si4K$v&uydVAR-x-I_*U>qZg2c_Pgp7B3O^bp zvor>o{1&OCrRiX7Kp$l!;y5KcQ!>iDNIoS!&L?ZCX3DBnu+6k)6~JxM$GgzC#pK4jn+*Sp1EN~8n+sU zlMlGvGfd4MtK9cZTX|1%2c#7>U9%@eQT&tGRB$O8{D4=vsg<0lP~i4YdiL#W#b!I( zr%PYmus1XWVmW>xbqgKc=nWy@!r85Khb;swBEZCB6Q>B0A5fs4*?dD!`VivS@UVag zAtc`?W#8^K1a#sFijr!luf0(NyOcQ0*oa6q>mW$OHk_$J07feH0?Io#Qo(*`qX42tl zSu-hReFSNQT&Fjf-WjleB{gHKpab#Q9sX)MO1WKTYjA%pU>!kl*k}F2els}i`$>9> zt79g^ofa|i{PhHBvW8L12ty@fQRsVnD5PiL4qKMUh{M4FF_7%A?d4}dXYvYi>QhO6y0?;tjMrs5o!?-r9U6uzh^=3 zd%s8`?lxS3H)=?yhPSH+4U@h!TC1goos}^g-pvnbSR#;wkfE)i80XmJ4ubDzx&ni1 zERQqIb#7j*sU^z7grtxO2gI?S&9Bq?Jl8nY{Am&>jpVnZXf@D`E^J3trNFhP)BFZt>9>oC2F)Ivs) zBc@kOFPB~=Vnd?{nKyjpTZNVB7UKj#lAZFC>|~f^W7Hyx3QzP}3uT|cT1!L?23nx#pa)Gv`lR3beDB#a@BIHaxhG%Fp1C;tlk*o3 zUU>fJUnCCc$F`k3e%q_-K0fu%x&OTJ?y0v|-q0bv&}QEE+0hrL&b~h}_xZo3Cmy`( z{JnFI|5v{7;rWi&Pyg@yr{(?IW}SHBm6OYcik&a>&PAX9v)>*vmVfl=kpsWap8Zw- z(uL1lpXc-2E3cpE-TuhiC$cCIIfMGc`r)bT&M9j}REwepC8B)OK|8ifD8fTw>LT4b2tMqjbVdf*`G)^V90t zFs;`_aL^3Q%JUD?mjhr~u`aNCm}61?7+eES)12j72IymLHr0r2LTzklBZa zfP5~f0LfjX0_1RE1qiM|1&Fkf3J_4k3g9>$1 + /// Provides addin's metadata + /// + public interface IAddinMetadata + { + /// + /// Gets addin name + /// + string AddinName { get; } + + /// + /// Get addin channel name + /// + string ChannelName { get; } + + /// + /// Gets channel options + /// + ChannelOptions ChannelOptions { get; } + } + + /// + /// Inherited from System.ComponentModel.Composition.ExportAttribute. + /// Every addins should have one as an addin description. + /// + [MetadataAttribute] + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public class AddinMetadataAttribute : ExportAttribute + { + /// + /// Initializes a new instance of the AddinMetadataAttribute class, exporting the type or member marked with this attribute with the specified name, channel name and channel options. + /// + /// Name of the addin. + /// !!! should be less than 7 chars !!! Channel name. + /// Specified channel's options + public AddinMetadataAttribute(string AddinName, string ChannelName, ChannelOptions ChannelOptions) + : base(typeof(IAddin)) + { + this.AddinName = AddinName; + this.ChannelName = ChannelName; + this.ChannelOptions = ChannelOptions; + } + + /// + /// Gets addin name + /// + public string AddinName { get; private set; } + + /// + /// Get addin channel name + /// + public string ChannelName { get; private set; } + + /// + /// Gets channel options + /// + public ChannelOptions ChannelOptions { get; private set; } + } + + /// + /// Specifies the options for this virtual channel. + /// + [Flags] + public enum ChannelOptions : uint + { + /// + /// The channel is initialized. + /// + Initialized = 0x80000000, + /// + /// Encrypt client-to-server data. + /// + EncryptRDP = 0x40000000, + /// + /// Encrypt server-to-client data. + /// + EncryptSC = 0x20000000, + /// + /// Encrypt client-to-server data. + /// + EncryptCS = 0x10000000, + /// + /// Channel data should be sent with high Multipoint Communications Services (MCS) priority. + /// + PriorityHigh = 0x08000000, + /// + /// Channel data should be sent with medium MCS priority. + /// + PriorityMedium = 0x04000000, + /// + /// Channel data should be sent with low MCS priority. + /// + PriorityLow = 0x02000000, + /// + /// Virtual channel data should be compressed if RDP data is being compressed. + /// + CompressRDP = 0x00800000, + /// + /// Virtual channel data should be compressed, regardless of Remote Desktop Protocol (RDP) compression. + /// + Compress = 0x00400000, + /// + /// Affects how data sent by the IChannel.Write function is received at the server end. If this value is set, each data block is preceded by a CHANNEL_PDU_HEADER structure. If this value is not set, the data block includes only the data specified to IChannel.Write. + /// + ShowProtocol = 0x00200000 + } +} diff --git a/RDPAddins.Common/IAddin.cs b/RDPAddins.Common/IAddin.cs new file mode 100644 index 0000000..4eddf9f --- /dev/null +++ b/RDPAddins.Common/IAddin.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace RDPAddins.Common +{ + /// + /// Defines an addin interface. + /// + public interface IAddin + { + /// + /// Initializing addin with specific channel + /// + /// Channel created for this addin. + void Initialize(IChannel Channel); + } +} diff --git a/RDPAddins.Common/IChannel.cs b/RDPAddins.Common/IChannel.cs new file mode 100644 index 0000000..e4f9fe6 --- /dev/null +++ b/RDPAddins.Common/IChannel.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace RDPAddins.Common +{ + /// + /// Represents RDS Channel + /// + public interface IChannel + { + /// + /// Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Initialized(CHANNEL_EVENT_INITIALIZED in RDS API) + /// + event EventHandler Initialized; + + /// + /// Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Connected(CHANNEL_EVENT_CONNECTED in RDS API) + /// + event EventHandler Connected; + + /// + /// Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Disconnected(CHANNEL_EVENT_DISCONNECTED in RDS API) + /// + event EventHandler Disconnected; + + /// + /// Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Terminated(CHANNEL_EVENT_TERMINATED in RDS API) + /// + event EventHandler Terminated; + + /// + /// Occurs when VirtualChannelOpenEvent(VirtualChannelOpenEvent in RDS API) was called with ChannelEvents.DataRecived(CHANNEL_EVENT_DATA_RECEIVED in RDS API) + /// + event DataArrivedHandler DataArrived; + + /// + /// Works similar to System.IO.Stream.Read + /// + /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the channel. + /// The zero-based byte offset in buffer at which to begin storing the data read from the channel. + /// The maximum number of bytes to be read from the channel. + /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available(including 0). + int Read(byte[] buffer, int offset, int count); + + /// + /// Works similar to System.IO.Stream.Write + /// + /// An array of bytes. This method sends bytes from buffer through channel. + /// The zero-based byte offset in buffer at which to begin sending bytes through channel. + /// The number of bytes to be sent through channel. + void Write(byte[] data, int offset, int count); + + /// + /// Creataes and returns stream. Stream is disposed when Disconnect event occurs. + /// + /// Retuns stream + Stream GetStream(); + + /// + /// Gets Addin metadata + /// + IAddinMetadata Metadata { get; } + + /// + /// Get IUI interface + /// + IUI UI { get; } + } + /// + /// Represents the method that will handle the DataArrived event of a IChannel. + /// + /// Specifies the size, in bytes, of the data. Use Read method of IChannel to read the data. + /// Specifies the total size, in bytes, of the data written by a single write operation to the server end of the virtual channel. + /// Provides information about the chunk of data being received. + public delegate void DataArrivedHandler(uint dataLength, uint totalLength, DataParts dataFlags); + + /// + /// Specifies constants that define which part of data chunk was sent. + /// + public enum DataParts + { + /// + /// The chunk is the beginning of the data written by a single write operation. + /// + First = 0x01, + /// + /// The chunk is the end of the data written by a single write operation. + /// + Last = 0x02, + /// + /// The chunk is in the middle of a block of data written by a single write operation. + /// + Middle = 0, + /// + /// Combines the DataParts.First and DataParts.Last values. The chunk contains all the data from a single write operation. + /// + Only = First | Last, + + } +} diff --git a/RDPAddins.Common/IUI.cs b/RDPAddins.Common/IUI.cs new file mode 100644 index 0000000..d001977 --- /dev/null +++ b/RDPAddins.Common/IUI.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing; + +namespace RDPAddins.Common +{ + /// + /// Represents UI parts of the IChannel + /// + public interface IUI + { + /// + /// Occurs when the balloon tip is clicked. + /// + event BalloonTipClickedHandler BalloonTipClicked; + + /// + /// Occurs when the hannel is trying create addin's control. If not hooked addin will not have control. + /// + event ControlCreatingHandler ControlCreating; + + /// + /// Occurs when Channel is trying create addin's menu. If not hooked addin will not have menu. + /// + event MenuCreatingHandler MenuCreating; + + /// + /// Occurs when Channel is trying create addin's tray menu. If not hooked addin will not have tray menu. + /// + event MenuCreatingHandler TrayMenuCreating; + + /// + /// Occurs when Channel is trying to get addin's icon. Only appears when addin has control. If not hooked addin and addin has control then addin will have default icon. + /// + event IconCreatingHandler IconCreating; + + /// + /// Get UI's channel + /// + IChannel Parent { get; } + + /// + /// Displays the balloon tip in the taskbar. + /// + /// The time period, in milliseconds, the balloon tip should display. + /// The title to display on the balloon tip. + /// The text to display on the balloon tip. + /// One of the System.Windows.Forms.ToolTipIcon values. + /// This object will sent to BalloonTipClicked event. + void ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon, object context); + + /// + /// Shows main form and selct tab with addin's control(if exists). + /// + void ShowControl(); + + /// + /// Executes a action on the UI thread. (It calls System.Windows.Forms.Form.Invoke). + /// + /// The action delegate. + void DoOnUIThread(Action action); + + /// + /// Gets or sets visibility of addin's control(if exists). + /// + bool Visible { get; set; } + } + /// + /// Represents the method that will handle the BalloonTipClicked event of a IUI. + /// + /// The source of the event. + /// Parameter sent by IUI.ShowBalloonTip method. + public delegate void BalloonTipClickedHandler(IUI sender, object context); + + /// + /// Represents the method that will handle the ControlCreating event of a IUI. + /// + /// The source of the event. + /// Should returns addin's control if needed. + public delegate Control ControlCreatingHandler(IUI sender); + + /// + /// Represents the method that will handle the MenuCreating and TrayMenuCreating event of a IUI. + /// + /// The source of the event. + /// Should returns addin's menu or tray menu if needed. + public delegate Menu MenuCreatingHandler(IUI sender); + + /// + /// Represents the method that will handle the IconCreating event of a IUI. + /// + /// The source of the event. + /// Should returns addin's icon if needed. + public delegate Image IconCreatingHandler(IUI sender); +} diff --git a/RDPAddins.Common/Properties/AssemblyInfo.cs b/RDPAddins.Common/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9e6c373 --- /dev/null +++ b/RDPAddins.Common/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RDPAddins.Common")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RDPAddins")] +[assembly: AssemblyCopyright("© Selvin 2011. All rights reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("275b6dd3-a087-4b86-a815-18c884480564")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.2.1.0")] +[assembly: AssemblyFileVersion("0.2.1.0")] diff --git a/RDPAddins.Common/RDPAddins.Common.csproj b/RDPAddins.Common/RDPAddins.Common.csproj new file mode 100644 index 0000000..da75a84 --- /dev/null +++ b/RDPAddins.Common/RDPAddins.Common.csproj @@ -0,0 +1,79 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {EC8481C3-F82F-4F3C-84E2-6732750B6542} + Library + Properties + RDPAddins.Common + RDPAddins.Common + v4.0 + SAK + SAK + SAK + SAK + + + true + full + false + ..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + ..\bin\Debug\RDPAddins.Common.xml + + + pdbonly + true + ..\bin\Release\ + TRACE + prompt + 4 + ..\bin\Release\RDPAddins.Common.xml + + + true + + + ..\RDPAddins.snk + + + OnOutputUpdated + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RDPAddins.Common/RDPAddins.Common.csproj.vspscc b/RDPAddins.Common/RDPAddins.Common.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/RDPAddins.Common/RDPAddins.Common.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/RDPAddins.Common/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/RDPAddins.Common/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/RDPAddins.Common/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.CoreCompileInputs.cache b/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..1f6abd5 --- /dev/null +++ b/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +1d31ddd67b4711a4859baa021df55aa8e9aadba8 diff --git a/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.FileListAbsolute.txt b/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..fed55db --- /dev/null +++ b/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.Common.xml +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.Common.dll +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.Common.pdb +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Common/obj/Debug/RDPAddins.Common.csprojAssemblyReference.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Common/obj/Debug/RDPAddins.Common.csproj.CoreCompileInputs.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Common/obj/Debug/RDPAddins.Common.dll +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Common/obj/Debug/RDPAddins.Common.pdb diff --git a/RDPAddins.Common/obj/Debug/RDPAddins.Common.csprojAssemblyReference.cache b/RDPAddins.Common/obj/Debug/RDPAddins.Common.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..418d558f1a163dbf831f7fb44d5132f6d0f599bb GIT binary patch literal 7679 zcmeHMU2GIp6rP!#*`3)fZ21)wOk4RgEYmLS^50-tEJbMfS%gF=>)qYE?a=wz%*?iy z2O-hK=nDqa1fEQcFBs7%iHW{|Ax5865*t#Yq=}q?A znVoaboO{l>=jSfNG7R$%4E)AX#{nGeR??SH?Yv3bb(*(LqDC6_=2NPY-bIHG7z0#qPqnmWW7+lDXfzXRA+1Ef zmo-*?M`GBrsg|&bO_55HavM@(vp$Ty)Jr#$><`418`Pc4S=F@g{h7rJunF*Axz)Y6h_6YpXkpeugUdX-0;J&j3esK0|Ys-$FmM1k)a*CYROGq#VacVq`4m zL_auCM((gIs-@K79-`4_U$Uu=TLzs}u4cmFUYx=rFbh^Lc>cx@qO&RH!M!veAQ)r> zT>1a8KyGRa953wxM^KOy%`>efU09S9eP~)s`dCp?bo6O0>7t^fxErUnq>Eii>mG-T zo>F`*&v_7hA2Q{wUr%D`*t+P();8L*VWWUswyI#^1h0N#b@cE$1Q9Mb;L8ozK8Qa; zRwaE_Af3w-GunH_xW3V6+<8L3L^>X{RbkQ2WK` z;ltHL+epJ$>e`k)y}jsIPDJ-V0auNsB}|mUr6oWnEk$?|0Ih(7JpsVqhN^99%11td zK`d&LNd_wfhQ9^O{+mraJn;>|puZ8mG7ntkXh}Kc?FH|Vnot5vijJO8&3siG4rfSD zAuIzBFl$vcf7)$WZaQt)g4-_#r50m|TX;$_Q48QViHsZFph*ggVE4V8j{Nu@RLgCrv~19%PpUAf`E z^%{OHP}ev;1IM6%HPwvOYi#vaQ0jcw>Yk2JYJ(?I3}GFB*ZkjsozwEXBGeEto$fZ{H#=3vT z-Zi#&2PoBF*rn1oxR&Aw+X1}R{-WI4pL?yn1E_Zvc+|+&VJxVzxyO{`3_O{`5ymPT zYhmuQ<3|oIZoBn5k0p1pSaI7Br1mGf$uYx(F9pu*{7L78R7&org9;w<00kq$C^E)- z96}SoquI7#8(2Ih6-(!xagrlx=*AeH5y$oQ6^_A*6H)adc0xF$uEIAXVCDUY?Luy} zLB>TvgFMDvX8Pl5{uU_jk9UGTOX(sgJqNeaE&y-vxabBC{v^pt%7Uf;Sw< z_1w*CKVJUn+|_mS8o4(^=9a%szJ21#?VHtJUy~@_UYe+J3o&!UV8tJk-M2A zyX($e{^0DY-c;l~jV!%)z1{9L*8Fn!<)a^kue{T~V#ynG<8)DjcIix8_X}6ggt5VP z(%Z*dlPBg}3vObu+r|_J5_(1$`?AV85}P$oj%2ZOtH=ba`^rqPQTlhzZ m4P#XEz8^zerA4q9$(rDUqm(nl=(=78=*JZqpu3J^5c(G?MdI%O literal 0 HcmV?d00001 diff --git a/RDPAddins.Common/obj/Debug/RDPAddins.Common.dll b/RDPAddins.Common/obj/Debug/RDPAddins.Common.dll new file mode 100644 index 0000000000000000000000000000000000000000..7d673f55d40d868c8039df123db730a59410ecc7 GIT binary patch literal 9216 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 literal 0 HcmV?d00001 diff --git a/RDPAddins.Common/obj/Debug/RDPAddins.Common.pdb b/RDPAddins.Common/obj/Debug/RDPAddins.Common.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d7261ed627434f7c13ac5b3282ab560024dbaa9c GIT binary patch literal 1324 zcmds%`%4s26vyu!ZFN^&wX#49r#9)aHEHP&O8MAUYlCua+a6$#-DcL^+?|n`(akVP z(Tsu!Argx)rN<9Jffd#k8I?&9WZP>idRi2L`a@{h!_FO>w11%spE>7y&b{Z(J$D$B zZKVk#jL3)vtY#Bkk;bGd0i;1y;A{m9R@O;kFMx+I-B69tISQe0lC#O8hcA&x{=6Eq z+fWDiG|4ZwTg+gef?f+4OkTkW8jsY~>n!UETAl<#(#!P+jx}8$gfLn^{XEu^Jdgs! z0F!`hpa@6+^gtQ_<&X{_??LQLfUF~$49F7+WA>GdFnusZs z19l}?5$rCoA+R68&Z00%qsWe91EY3W9R!{MZ-9?LKcF0CY~p|5g+sU0Z^a1bnEkprq z^3_?C(-jenKWIapg>BSvq_I^>GUwBe8pbR-{P2y=_#>AIzA}O5czKn;a$ZJ}l1KIk zyar<&iKm9U1s@mXc8Cry>leH(SC}Mj)3AcfbFy}g*_y|)9$t$3>yZ*Zfsa$-t2o)g zI%Eg4P0}tzx%ox*Vwayj!L;AId;Har3j?;(Yp%pSmjX>Y4`m8BK5Z!(Y70Hsmkh_7 zY>bUZm@3C8iHeLw$rLm#g*-4-N!lBpVIU?tV~(P-QWTXnPfuMI$WsmoK z$}O7DB@87c-VSCl>9?L1jI?|!HXD0N>u%yIjm2*HXGtj?=;?nw?OMh~xw<)_p?}WN zEdyUnh7A?H*-WONO)wI@}rVH5zu2A=nzT(SA67^@ZyG|`&hvQ>DFz + { + + app = AppDomain.CreateDomain(AssemblyName, null, + new AppDomainSetup() + { + ApplicationBase = AssemblyName, + ApplicationName = AssemblyPath, + ConfigurationFile = ConfigFileFullPath + }); + app.SetData("entry", entry); + app.SetData("event", wait); + app.ExecuteAssembly(AssemblyFullPath); + }); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + wait.WaitOne(); + return (bool)app.GetData("ret"); + } + catch (Exception ex) + { + return false; + } + } + } +} \ No newline at end of file diff --git a/RDPAddins.Core/Properties/AssemblyInfo.cs b/RDPAddins.Core/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f47cc5e --- /dev/null +++ b/RDPAddins.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RDPAddins.Core")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RDPAddins")] +[assembly: AssemblyCopyright("© Selvin 2011. All rights reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c5571e1f-2df8-490c-9ed0-6a3d9ca518bc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.2.1.0")] +[assembly: AssemblyFileVersion("0.2.1.0")] diff --git a/RDPAddins.Core/RDPAddins.Core.csproj b/RDPAddins.Core/RDPAddins.Core.csproj new file mode 100644 index 0000000..58b2e20 --- /dev/null +++ b/RDPAddins.Core/RDPAddins.Core.csproj @@ -0,0 +1,85 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {7017A40B-F535-4E3F-972D-BB89F3A44640} + Library + Properties + RDPAddins.Core + RDPAddins.Core + v4.0 + SAK + SAK + SAK + SAK + + + true + full + false + ..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\ + TRACE + prompt + 4 + + + true + ..\bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + + + ..\bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + false + false + false + + + OnBuildSuccess + + + true + + + ..\RDPAddins.snk + + + + ..\Tools\ExportDllAttribute.dll + + + + + + + + + "$(SolutionDir)Tools\ExportDll.exe" "$(TargetPath)" /$(ConfigurationName) /$(PlatformName) +"$(FrameworkSDKDir)Bin\sn.exe" -R "$(TargetPath)" "$(ProjectDir)..\RDPAddins.snk" + + + \ No newline at end of file diff --git a/RDPAddins.Core/RDPAddins.Core.csproj.vspscc b/RDPAddins.Core/RDPAddins.Core.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/RDPAddins.Core/RDPAddins.Core.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/RDPAddins.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/RDPAddins.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/RDPAddins.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/RDPAddins.Core/obj/Debug/RDPAddins.Core.csprojAssemblyReference.cache b/RDPAddins.Core/obj/Debug/RDPAddins.Core.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..3e830885a7a4057acbbcbd8125b48eceea760756 GIT binary patch literal 4320 zcmeHJU5pb|6rP!OrkyEJKo%r|>?%JJmYFWQ-Q5yaQWw@;krlTK4~o>=&YkVh=}fsZ z1N(SP+3r@MN+dCy zP0#(=bI(1$-yM$UIPMQ19FgV;!1nDlv&?ZF!&4t9nU=1O6F2XwgASve?RzM5O~)SS zimP2}OpSH650)&i#OQ!cOCBRuXZx;F#xk=zXnEYpQ+ps2>o(#>pV8H&$77_Mhc97R`EKf~yV_H|LRzMbT$~J z^{BCpq-bgdH|sFi_2p!cThm-_I{eI6xey&gBV`3y1lc@bA}%*vH@O>z>WM}9K*7<2 z@XHIt4(hb%N-iee6`6OCGQqG#!-hNs4SPhFjKVJF7#LMS-~v1^hdXCqmx5?fT}`?! zEo7|nC@IkGhdpXz;bN(%tsHp#2|U6ts0E-_FSy6qTgRRs|0?WP>U>zs3xFvKFGpdN z76O~Ej&2_xVqm}_hvlV3u*HcOtX4vVWpLdP)dKP#MZGOGLg6`kA+M(g$1tQ$zmx9N@TN8DEYV;X0$+x zMXGarD1_b01pVIfMNGsx30aU@QB{nLz?KLv0j=@^d-oq-b6oOAg6>7a{Qp+ zb-|X362mU9#AAq8v#J5#EGfN{>~|OpCcIBl+W#7m(_{3YiBJj>To?#Nk?=zTiN|Wk z7U8A4frsl)jJyg~ayzmPU}!LspGp1#9K>w;JLh47*{FqZHEiyvYq=IUc*1ThaGAb7 z63@nayAs_!G}fO0bxH`qYTAa@1IHsERGnM{v&eJ{Fegif)#x2wT1xnDN$Kl{?{>yb)Lwd+{~+2^{1kc#Pvtz(PW`upUb#yErHY9{$8L zKc9SQV(8v<`^fLhKH9RSBT+eeeErI2-nr1bwDRPG=l2fp`}D4{;^ebe`d2-4`spvv zo;)#s$)l-W`-}udZ?Cm#;miq4SFO}26 zr5~fu373b~e{Q{a>esi%rcUkup!3@_J2&)Q$NN`aeL0GNfo(0ka?zeFziuAq5k0Wb zXOoC6&{E^vdNdcVp*aR0(0o?=-fA#c!K&%TS7Z&Aatv6Vs!jhztr>#HplYTXngPEH zl_(+xen+8`K0$f;6m5sW&+mIj_U>8UbMXZpF$MEm7lElyQEbQNO0Y*8m0-g*QzBvy z+%6Jp;%2`1-5CBlt}Aj6Eaf<`I#rA0vzbLQIk!keM5f!Rxw)z7hnPy$r$~|U!IU@G svjSr^F(1!N%(=OViDK6`wiiM`v-XN&?i)q15SogjHI1TZS~JnepI7DM1poj5 literal 0 HcmV?d00001 diff --git a/RDPAddins.Core/obj/x64/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/RDPAddins.Core/obj/x64/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/RDPAddins.Core/obj/x64/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CopyComplete b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CoreCompileInputs.cache b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..7924fe2 --- /dev/null +++ b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +1f0e69ff174c1a04a91442210a793ab6eeb80766 diff --git a/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.FileListAbsolute.txt b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..a6679a8 --- /dev/null +++ b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +/home/haraldwolff/src/dotnet/RDPAddins/bin/x64/Debug/RDPAddins.Core.dll +/home/haraldwolff/src/dotnet/RDPAddins/bin/x64/Debug/RDPAddins.Core.pdb +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csprojAssemblyReference.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CoreCompileInputs.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csproj.CopyComplete +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.dll +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.pdb diff --git a/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csprojAssemblyReference.cache b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f26df13cdc2c477bb10714eb5e6fa06664bfc6e0 GIT binary patch literal 2905 zcmdTGOKcleaCg0H?>cFdRwZpjD^gJ*RgLVp`5HA;#;uzG4Z%)xAWhxp-M8_p*Sp)d z&u!g9DMEnY(gQ_YI3UD2naH>C% zO7tXpy1TM9N7OhSc4ouid(aHv+XYvuwmWJ??dmx9Y&2X^q=+mVdiV0<3Sbbm z5}6>N)sj;mBUQTpl%Ou=7Dh9%7KW*5WRce|gk~Y6xF@-L^G{EFs)xoKur|<`cw9DG zV2ri`T9+8xKau00z)6o+qU&Hw(vWmbI&Va-G6^zcstckNzY_5)A_BhAY=_JQG1IRR zZkCZIJF1v029t8enK6JQOd_G1o<&QL1F;IN`-E|g1O>rkEGVFR;>hXOG9biY)oLwF ze4W!O@qKDZax8{fCq*KPg4QasqAYWWuFHD=;x%$@HdEsSZ&EW1j0VkVeWanD$C)Ts z_pFv{!SxM;Scy4I)MZ%?!xLQ(YHeJZp++0*8|{cT07B&v;&H3 zVo}1Bm(=e-*xxhdH!|^rcs#lZhC?gOS}K)LC0AD|(}T2UfST#SG}%3n9)cSr#bcPT zp;PcUbxlc$Za3~gHq7>A*?>hUT0BUOc^n1?1t?k!%e_&|(-RCYB2Y*=0Fol$OM%da z5qk+fMcM(v&q~sHSVZwSSmz6wlmsj?{IpBgFFZGsySvym`qSq3_w3o8oSE{^)_v504!A=+3-<<;j~vcRg_N@lP&aIKOVwnfcBeb1lc;8y0i--MT!w#zDw;;oVI=PxSPzG-_(xsluXvGeTg53l9tW{xi;cM=+qO{NE`fZ^(<`S!x0fP?vIMhRr~MileEiskOWv-CfJ6 z|JiP5dK&YpQ2;l?Os@u}#~oIR8(Uy$bOLHZSn}kr;f7(^Q_sR3`U)mkwi>ktYk{#9 zP#f}wdHwe3!;_tTSD%ql5axCBvcfb34e9@%p2G*N*`Vo*omQ6k#DsSREY(-EF}LX} tnv56&9fN^jY-@~?hLg33!ANW|q5WhQ<#{Ryp8*6-Xb#?asqxgc`~q;=ecJ#4 literal 0 HcmV?d00001 diff --git a/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.dll b/RDPAddins.Core/obj/x64/Debug/RDPAddins.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..15fec74de508984510e4cfe85c2ed5e8778707a8 GIT binary patch literal 5632 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 p6V3?(ZwNe&?8(hO)4ulBz@yUu?*QaU2oV4P literal 0 HcmV?d00001 diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.cpp b/RDPAddins.CoreC/RDPAddins.CoreC.cpp new file mode 100644 index 0000000..c8d218b --- /dev/null +++ b/RDPAddins.CoreC/RDPAddins.CoreC.cpp @@ -0,0 +1,90 @@ +#define _WIN32_WINNT 0x501 +#include +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include + +static HINSTANCE hDynImageBase = NULL; +WCHAR clrversion[] = L"v4.0.30319"; +WCHAR dllname[] = L"RDPAddins.exe"; +WCHAR classname[] = L"RDPAddins.Program"; +WCHAR functionname[] = L"MainC"; +TCHAR path[MAX_PATH]; +ICLRRuntimeHost* runtimeHost = NULL; +ICLRRuntimeInfo* runtimeInfo = NULL; +ICLRMetaHost* metaHost = NULL; + +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +{ + + HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&metaHost); + if(SUCCEEDED(hr)) + { + hr = metaHost->GetRuntime(clrversion, IID_ICLRRuntimeInfo,(LPVOID*)&runtimeInfo); + if (SUCCEEDED(hr)) + { + + hr = runtimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*) &runtimeHost); + if (SUCCEEDED(hr)) + { + hr = runtimeHost->Start(); + if (SUCCEEDED(hr)) + { + DWORD retCode = 0; + WCHAR entry[255]; + unsigned int r = (unsigned int)pEntryPoints; + int c = -1; + do + { + entry[++c] = r % 10 + 48; + r = r / 10; + } + while(r > 0); + entry[++c] = L'\0'; + GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCWSTR)&hDynImageBase, &hDynImageBase); + DWORD ret = GetModuleFileName(hDynImageBase, path, MAX_PATH); + while(path[ret] != L'\\') + ret--; + c = -1; + do + { + path[++ret] = dllname[++c]; + } + while(dllname[c]); + path[++ret] = L'\0'; + hr = runtimeHost->ExecuteInDefaultAppDomain(path, classname, functionname, entry, &retCode); + if(SUCCEEDED(hr)) + return retCode; + } + } + } + } + return FALSE; +} + +extern "C" BOOL WINAPI _DllMainCRTStartup(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +{ + switch (dwReason) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + case DLL_PROCESS_DETACH: + if(runtimeHost != NULL) + { + runtimeHost->Stop(); + runtimeHost->Release(); + } + if(runtimeInfo!= NULL) + runtimeInfo->Release(); + if(metaHost!=NULL) + metaHost->Release(); + break; + } + return TRUE; +} + + diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.def b/RDPAddins.CoreC/RDPAddins.CoreC.def new file mode 100644 index 0000000..db9fccd --- /dev/null +++ b/RDPAddins.CoreC/RDPAddins.CoreC.def @@ -0,0 +1,3 @@ +LIBRARY +EXPORTS + VirtualChannelEntry diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.rc b/RDPAddins.CoreC/RDPAddins.CoreC.rc new file mode 100644 index 0000000000000000000000000000000000000000..5c69673a252d903399cd9234aafa43f5ee777b48 GIT binary patch literal 4488 zcmd6r?M@m|5QgV>litG?|FkJVP;Wp4DRC7eNZQ1NSP>*aFnpLc=?(QJ+dl7E4(!50 zmG%eO9L~qi%$a%TU zXbO2G_Xkg~ma~D3D`K{VKB1k#A&o;;FIc^%ueiAME22|gR>{mymPK+Ms^XkOJD1Vw znAMQ@mNYe0j?M;8D-W7TK7+gDICjgAac#U$eZMZ7{d@Il1<+cT_j+H%_KK?rngz2b zy~5sDepY46AQvGfF4d21_DHMj8BU4ix{|RQ>dXyM8`b!Qmg_V++)|_0?z89WZrjC~ z*GgVXt1GL~ChXMWe%`II*UtAk<8_jcv3Q6-{JMIzCYjmdw@iN5-C29VT$Z1bXX1{( z@$2FYps13)hIHJ8oevJscrt&mi#Nnl%x~fq@yL0MAo!r+B-|Ud6 z3!U_2)re|Kk)0~Dy;mhg5(;zvdur|&oRW4ec8=)tF?yXxs#Qsj8u~@FN9d^MXvVWZ ztHHhH64WBPgO&GDrA$)!ozrt)b+rbrLMDR-6a1|kSQiiVuA%c?jQ>Z;r_eaNl0`_A#?Ke?5AuE6I#&g4<}0;x-wa%(Dj4bdMZ^ zuDokpPBWvR=I(0UEm#p3&;_`ND qEX$;k@Bj4+Rrk5gU#K3--NGTRjWk>z-vern{zF;)9$odjB>e%iQ4tvc literal 0 HcmV?d00001 diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj new file mode 100644 index 0000000..c568da9 --- /dev/null +++ b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {EE62637C-C9C7-42ED-A13D-92076B41B494} + SAK + SAK + SAK + SAK + Win32Proj + RDPAddinsCoreC + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + false + $(SolutionDir)bin\$(Configuration)\ + false + + + false + $(SolutionDir)bin\$(Configuration)\ + false + + + false + false + $(SolutionDir)bin\$(Configuration)\ + + + false + false + $(SolutionDir)bin\x64\$(Configuration)\ + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;RDPADDINSCOREC_EXPORTS;%(PreprocessorDefinitions) + false + Default + + + Windows + true + RDPAddins.CoreC.def + mscoree.lib;%(AdditionalDependencies) + true + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;RDPADDINSCOREC_EXPORTS;%(PreprocessorDefinitions) + false + Default + + + Windows + true + RDPAddins.CoreC.def + mscoree.lib;%(AdditionalDependencies) + true + + + + + Level3 + NotUsing + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;RDPADDINSCOREC_EXPORTS;%(PreprocessorDefinitions) + false + + + Windows + false + true + true + RDPAddins.CoreC.def + mscoree.lib;%(AdditionalDependencies) + true + + + + + Level3 + NotUsing + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;RDPADDINSCOREC_EXPORTS;%(PreprocessorDefinitions) + false + + + Windows + false + true + true + RDPAddins.CoreC.def + mscoree.lib;%(AdditionalDependencies) + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.filters b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.filters new file mode 100644 index 0000000..799a82d --- /dev/null +++ b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.filters @@ -0,0 +1,37 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Source Files + + + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.vspscc b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/RDPAddins.CoreC/RDPAddins.CoreC.vcxproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/RDPAddins.CoreC/resource.h b/RDPAddins.CoreC/resource.h new file mode 100644 index 0000000..bed3151 --- /dev/null +++ b/RDPAddins.CoreC/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by RDPAddins.CoreC.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/RDPAddins.sln b/RDPAddins.sln new file mode 100644 index 0000000..02776e0 --- /dev/null +++ b/RDPAddins.sln @@ -0,0 +1,174 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RDPAddins.Core", "RDPAddins.Core\RDPAddins.Core.csproj", "{7017A40B-F535-4E3F-972D-BB89F3A44640}" + ProjectSection(ProjectDependencies) = postProject + {EC8481C3-F82F-4F3C-84E2-6732750B6542} = {EC8481C3-F82F-4F3C-84E2-6732750B6542} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RDPAddins.Common", "RDPAddins.Common\RDPAddins.Common.csproj", "{EC8481C3-F82F-4F3C-84E2-6732750B6542}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RDPAddins", "RDPAddins\RDPAddins.csproj", "{4345A357-B6D6-49A8-98CD-7D0D6708AC17}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FileTransfer", "FileTransfer", "{BDBFE621-A03E-4887-8E5A-516C35595AAB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{73B5FCE1-65EB-4B1E-BC5B-43FDCE94DECC}" + ProjectSection(SolutionItems) = preProject + Tools\ExportDll.exe = Tools\ExportDll.exe + Tools\ExportDll.exe.config = Tools\ExportDll.exe.config + Tools\ExportDllAttribute.dll = Tools\ExportDllAttribute.dll + Tools\README.txt = Tools\README.txt + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileTransferAddin", "FileTransfer\FileTransferAddin\FileTransferAddin.csproj", "{68857642-A724-46A4-85B3-DAE2BD80498E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileTransferServer", "FileTransfer\FileTransferServer\FileTransferServer.csproj", "{DB1D00FA-A8A4-4F01-931E-52686F51265E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installer", "Installer", "{FDCEC69D-3E1B-4EA1-BADE-30228114087D}" + ProjectSection(SolutionItems) = preProject + Installer\RDPAddins.iss = Installer\RDPAddins.iss + Installer\RDPAddinsC.iss = Installer\RDPAddinsC.iss + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{63EFA535-ACBB-4265-9241-7BECB3989B1E}" + ProjectSection(SolutionItems) = preProject + RDPAddins.snk = RDPAddins.snk + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RDPAddins.CoreC", "RDPAddins.CoreC\RDPAddins.CoreC.vcxproj", "{EE62637C-C9C7-42ED-A13D-92076B41B494}" +EndProject +Global + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 7 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs21 + SccLocalPath0 = . + SccProjectUniqueName1 = FileTransfer\\FileTransferAddin\\FileTransferAddin.csproj + SccProjectTopLevelParentUniqueName1 = RDPAddins.sln + SccProjectName1 = FileTransfer/FileTransferAddin + SccLocalPath1 = FileTransfer\\FileTransferAddin + SccProjectUniqueName2 = FileTransfer\\FileTransferServer\\FileTransferServer.csproj + SccProjectTopLevelParentUniqueName2 = RDPAddins.sln + SccProjectName2 = FileTransfer/FileTransferServer + SccLocalPath2 = FileTransfer\\FileTransferServer + SccProjectUniqueName3 = RDPAddins.Common\\RDPAddins.Common.csproj + SccProjectName3 = RDPAddins.Common + SccLocalPath3 = RDPAddins.Common + SccProjectUniqueName4 = RDPAddins.Core\\RDPAddins.Core.csproj + SccProjectName4 = RDPAddins.Core + SccLocalPath4 = RDPAddins.Core + SccProjectUniqueName5 = RDPAddins\\RDPAddins.csproj + SccProjectName5 = RDPAddins + SccLocalPath5 = RDPAddins + SccProjectUniqueName6 = RDPAddins.CoreC\\RDPAddins.CoreC.vcxproj + SccProjectName6 = RDPAddins.CoreC + SccLocalPath6 = RDPAddins.CoreC + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Win32.ActiveCfg = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|Win32.Build.0 = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|x64.ActiveCfg = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Debug|x64.Build.0 = Debug|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|Any CPU.Build.0 = Release|Any CPU + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|Mixed Platforms.Build.0 = Release|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|Win32.ActiveCfg = Release|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|x64.ActiveCfg = Release|x64 + {7017A40B-F535-4E3F-972D-BB89F3A44640}.Release|x64.Build.0 = Release|x64 + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Win32.ActiveCfg = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|Win32.Build.0 = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Debug|x64.Build.0 = Debug|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|Any CPU.Build.0 = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|Win32.ActiveCfg = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|x64.ActiveCfg = Release|Any CPU + {EC8481C3-F82F-4F3C-84E2-6732750B6542}.Release|x64.Build.0 = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|Win32.Build.0 = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|x64.ActiveCfg = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Debug|x64.Build.0 = Debug|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|Any CPU.Build.0 = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|Win32.ActiveCfg = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|x64.ActiveCfg = Release|Any CPU + {4345A357-B6D6-49A8-98CD-7D0D6708AC17}.Release|x64.Build.0 = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|Win32.Build.0 = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|x64.ActiveCfg = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Debug|x64.Build.0 = Debug|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|Any CPU.Build.0 = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|Win32.ActiveCfg = Release|Any CPU + {68857642-A724-46A4-85B3-DAE2BD80498E}.Release|x64.ActiveCfg = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|Win32.Build.0 = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|x64.ActiveCfg = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Debug|x64.Build.0 = Debug|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|Any CPU.Build.0 = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|Win32.ActiveCfg = Release|Any CPU + {DB1D00FA-A8A4-4F01-931E-52686F51265E}.Release|x64.ActiveCfg = Release|Any CPU + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Any CPU.Build.0 = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Win32.ActiveCfg = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|Win32.Build.0 = Debug|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|x64.ActiveCfg = Debug|x64 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Debug|x64.Build.0 = Debug|x64 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Any CPU.ActiveCfg = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Any CPU.Build.0 = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Mixed Platforms.Build.0 = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Win32.ActiveCfg = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|Win32.Build.0 = Release|Win32 + {EE62637C-C9C7-42ED-A13D-92076B41B494}.Release|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {68857642-A724-46A4-85B3-DAE2BD80498E} = {BDBFE621-A03E-4887-8E5A-516C35595AAB} + {DB1D00FA-A8A4-4F01-931E-52686F51265E} = {BDBFE621-A03E-4887-8E5A-516C35595AAB} + EndGlobalSection +EndGlobal diff --git a/RDPAddins.sln.DotSettings.user b/RDPAddins.sln.DotSettings.user new file mode 100644 index 0000000..d68f017 --- /dev/null +++ b/RDPAddins.sln.DotSettings.user @@ -0,0 +1,3 @@ + + True + True \ No newline at end of file diff --git a/RDPAddins.snk b/RDPAddins.snk new file mode 100644 index 0000000000000000000000000000000000000000..889b72456a52c00da6e14273a9306a6635049557 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50096|LgJEK0K;e)25weUR{@E<*_l|Ejr*YP zwqk#mD#io$x4;k3z@v`#=5k>GmBivOJAV^$?;GE@1_eIq0%B8HWN;-g%~~TLhqZnq ziftu#;z``mEp@TUc3wLwoVRsKQZfS690OBx&bx=_N}hP-uw=Zx!y&K`!v~oee*U$K z_VXfydi`gH@$TW9({6Rd*f<^(t)kFGMJwZIPt`JJ$>D~hJ-G>$r2=S@H;`9rzmaVl z2mDj!4;`2#^0xaEqN!!~B}2@6c9@DN2suyC{*)i?RD*XLEJEQWtpPkWoSKs72}E*V z@42>Lw}3DC@-EDy#VE$_?o#8Jt{1s=d}Ig0f4~sMpxyJXz!SO(zB7BP2GQGF$kwCX zCkteC@B6nMbqxWpFI4G@gAs!caH_D|MO|Wjjg9woRc^?L%`pvb)$s2yDy^yb}mB0 z;-W|Cw@!8e;KAfpxt6b%e@1SaY{InC=X5!APHcQq2>O@@mQ8ISTg5eVyp0=$A1ono zRwz_T0`DGL5K*Omz)Bp549?9!((gqC0j&B6+yqQ_1xe`m# i>IwEk>)GvZizN4Qfd+e*#Bc;_JI>I>7Yu~Zt`2OXsUWrh literal 0 HcmV?d00001 diff --git a/RDPAddins.vssscc b/RDPAddins.vssscc new file mode 100644 index 0000000..6cb031b --- /dev/null +++ b/RDPAddins.vssscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/RDPAddins/About.Designer.cs b/RDPAddins/About.Designer.cs new file mode 100644 index 0000000..8a0e69e --- /dev/null +++ b/RDPAddins/About.Designer.cs @@ -0,0 +1,86 @@ +namespace RDPAddins +{ + partial class frmAbout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAbout)); + this.btOK = new System.Windows.Forms.Button(); + this.lblName = new System.Windows.Forms.Label(); + this.lblRights = new System.Windows.Forms.Label(); + this.lblWer = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // btOK + // + this.btOK.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btOK, "btOK"); + this.btOK.Name = "btOK"; + // + // lblName + // + resources.ApplyResources(this.lblName, "lblName"); + this.lblName.Name = "lblName"; + // + // lblRights + // + resources.ApplyResources(this.lblRights, "lblRights"); + this.lblRights.Name = "lblRights"; + // + // lblWer + // + resources.ApplyResources(this.lblWer, "lblWer"); + this.lblWer.Name = "lblWer"; + // + // frmAbout + // + this.CancelButton = this.btOK; + resources.ApplyResources(this, "$this"); + this.Controls.Add(this.btOK); + this.Controls.Add(this.lblWer); + this.Controls.Add(this.lblRights); + this.Controls.Add(this.lblName); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "frmAbout"; + this.ShowInTaskbar = false; + this.TopMost = true; + this.Load += new System.EventHandler(this.frmAbout_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.Label lblRights; + private System.Windows.Forms.Label lblWer; + private System.Windows.Forms.Button btOK; + } +} \ No newline at end of file diff --git a/RDPAddins/About.cs b/RDPAddins/About.cs new file mode 100644 index 0000000..ef43011 --- /dev/null +++ b/RDPAddins/About.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace RDPAddins +{ + partial class frmAbout : Form + { + public frmAbout() + { + InitializeComponent(); + } + + private void frmAbout_Load(object sender, System.EventArgs e) + { + this.lblWer.Text += System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } +} \ No newline at end of file diff --git a/RDPAddins/About.pl-PL.resx b/RDPAddins/About.pl-PL.resx new file mode 100644 index 0000000..39afd27 --- /dev/null +++ b/RDPAddins/About.pl-PL.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + © 2010 Selvin. Wszelkie prawa zastrzeżone. + + + Wersja: + + + O programie..... + + \ No newline at end of file diff --git a/RDPAddins/About.resx b/RDPAddins/About.resx new file mode 100644 index 0000000..27201d3 --- /dev/null +++ b/RDPAddins/About.resx @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 208, 9 + + + 75, 23 + + + + 0 + + + OK + + + btOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 12, 9 + + + 120, 16 + + + 3 + + + RDPAddins Framework + + + lblName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 12, 41 + + + 283, 16 + + + 2 + + + © 2010 Selvin. All right reserved. + + + lblRights + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 12, 25 + + + 128, 16 + + + 1 + + + Version: + + + lblWer + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 303, 70 + + + + CenterParent + + + About... + + + frmAbout + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/RDPAddins/Channel.cs b/RDPAddins/Channel.cs new file mode 100644 index 0000000..4e29981 --- /dev/null +++ b/RDPAddins/Channel.cs @@ -0,0 +1,318 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Drawing; +using Win32.WtsApi32; +using System.Threading; +using System.ComponentModel; +using RDPAddins.Common; + +namespace RDPAddins +{ + internal class Channel: IChannel, IUI + { + uint openChannel = 0; + ChannelOpenEventDelegate channelOpenEventDelegate; + ManualResetEvent write = new ManualResetEvent(true); + internal object tooltipconext = null; + Queue buffers = new Queue(); + object readlock = new object(); + + public event EventHandler Connected; + public event EventHandler Disconnected; + public event EventHandler Terminated; + public event DataArrivedHandler DataArrived; + public event BalloonTipClickedHandler BalloonTipClicked; + public Lazy Addin; + + public Channel(RDPClient client, Lazy addin) + { + Client = client; + Addin = addin; + Addin.Value.Initialize(this); + ChannelDef = new ChannelDef(){name = Metadata.ChannelName, options = Metadata.ChannelOptions }; + channelOpenEventDelegate = new ChannelOpenEventDelegate(VirtualChannelOpenEvent); + } + + internal ChannelDef ChannelDef; + + public IChannel Parent { get { return this; } } + + public bool Visible + { + get + { + if (Page != null) + return TabCtrl.TabPages.Contains(Page); + return false; + } + set + { + if (Page != null) + { + if (value) + { + if (!TabCtrl.TabPages.Contains(Page)) + TabCtrl.TabPages.Add(Page); + + } + else + { + if (TabCtrl.TabPages.Contains(Page)) + TabCtrl.TabPages.Remove(Page); + } + } + } + } + + private void VirtualChannelOpenEvent(uint openHandle, ChannelEvents openEvent, byte[] data, uint dataLength, uint totalLength, ChannelFlags dataFlags) + { + switch (openEvent) + { + case ChannelEvents.DataRecived: + int flag = (int)(dataFlags & ChannelFlags.Only); + WriteCore(data, dataLength); + OnDataArrived(dataLength, totalLength, (DataParts)flag); + break; + case ChannelEvents.WriteComplete: + write.Set(); + break; + } + } + + void WriteCore(byte[] data, uint count) + { + var mem = AllocateMemoryChunk(count); + Buffer.BlockCopy(data, 0, mem.Buffer, 0, (int)count); + lock (readlock) + { + buffers.Enqueue(mem); + AvailableDataLength += count; + } + } + + + + public void Write(byte[] data, int offset, int count) + { + byte[] buff = data; + if (offset != 0) + { + buff = new byte[count]; + Buffer.BlockCopy(data, offset, buff, 0, count); + } + write.Reset(); + ChannelReturnCodes ret = Client.EntryPoint.VirtualChannelWrite(openChannel, buff, (uint)count, IntPtr.Zero); + write.WaitOne(); + } + + + public int Read(byte[] buffer, int offset, int count) + { + if (AvailableDataLength > 0) + { + int toread = 0; + lock (readlock) + { + + if (buffers.Count != 0) + { + var buf = buffers.Peek(); + toread = buf.Buffer.Length - buf.Offset; + int off = buf.Offset; + if (count >= toread) + buffers.Dequeue(); + else + { + toread = count; + buf.Offset += toread; + } + Buffer.BlockCopy(buf.Buffer, off, buffer, offset, toread); + AvailableDataLength -= (uint)toread; + } + return toread; + } + } + return 0; + } + + + TabPage Page = null; + TabControl TabCtrl = null; + RDPClient Client = null; + + + public uint AvailableDataLength { get; private set; } + + + internal ChannelReturnCodes ConnectedInternal(IntPtr Handle) + { + ChannelReturnCodes ret = Client.EntryPoint.VirtualChannelOpen(Handle, ref openChannel, Addin.Metadata.ChannelName, channelOpenEventDelegate); + if (ret == ChannelReturnCodes.Ok) + OnConnected(this, new EventArgs()); + return ret; + } + + internal void DisconnectedInternal() + { + openChannel = 0; + OnDisconnected(this, new EventArgs()); + if (Stream != null) + { + Stream.Dispose(); + Stream = null; + } + } + + protected virtual void OnConnected(object sender, EventArgs e) + { + if (Connected != null) + DoOnUIThread(() => Connected(sender, e)); + } + + protected virtual void OnDisconnected(object sender, EventArgs e) + { + if (Disconnected != null) + DoOnUIThread(() => Disconnected(sender, e)); + } + + protected virtual void OnTerminated(object sender, EventArgs e) + { + if (Terminated != null) + DoOnUIThread(() => Terminated(sender, e)); + } + + internal void TerminatedInternal() + { + OnTerminated(this, new EventArgs()); + } + + protected virtual void OnInitialized(object sender, EventArgs e) + { + if (Initialized != null) + DoOnUIThread(() => Initialized(sender, e)); + } + + internal void InitializedInternal() + { + OnInitialized(this, new EventArgs()); + } + + public void ShowControl() + { + if (Page != null) + { + Client.MainForm.Visible = true; + Client.MainForm.Tab.SelectTab(Page); + } + } + + public void DoOnUIThread(Action action) + { + if (Client.MainForm.InvokeRequired) + Client.MainForm.Invoke(action); + else + action(); + } + + public void ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon, object context) + { + tooltipconext = context; + Client.MainForm.ShowToolTip(timeout, tipTitle, tipText, tipIcon, this); + } + + protected virtual void OnDataArrived(uint dataLength, uint totalLength, DataParts dataFlags) + { + if (DataArrived != null) + DoOnUIThread(() => DataArrived(dataLength, totalLength, dataFlags)); + } + + internal protected virtual void OnBalloonTipClicked(object sender, EventArgs e) + { + if (BalloonTipClicked != null) + DoOnUIThread(() => BalloonTipClicked(this, tooltipconext)); + } + + private MemoryChunk AllocateMemoryChunk(uint newSize) + { + MemoryChunk chunk = new MemoryChunk(newSize); + return chunk; + } + + ChannelStream Stream = null; + + private class MemoryChunk + { + internal byte[] Buffer; + internal int Offset = 0; + internal MemoryChunk(uint bufferSize) + { + Buffer = new byte[bufferSize]; + Offset = 0; + } + } + + + public event EventHandler Initialized; + + public Stream GetStream() + { + Stream = Stream ?? new ChannelStream(this); + return Stream; + } + + public IAddinMetadata Metadata { get { return Addin.Metadata; } } + + public IUI UI { get { return this; } } + + + public event ControlCreatingHandler ControlCreating; + public event MenuCreatingHandler MenuCreating; + public event MenuCreatingHandler TrayMenuCreating; + public event IconCreatingHandler IconCreating; + + internal void CreateUI() + { + if (ControlCreating != null) + { + var control = ControlCreating(this); + if (control != null) + { + Page = new TabPage(Metadata.AddinName); + TabCtrl = Page.Parent as TabControl; + control.Dock = DockStyle.Fill; + Page.Controls.Add(control); + Client.MainForm.Tab.TabPages.Add(Page); + Image icon = null; + if (IconCreating != null) + icon = IconCreating(this); + Page.ImageIndex = Client.MainForm.AddImage(icon); + } + } + if (MenuCreating != null) + { + var menu = MenuCreating(this); + if (menu != null) + { + var parentmenu = new MenuItem(Metadata.AddinName); + parentmenu.MenuItems.AddRange(menu.MenuItems.Cast().ToArray()); + Client.MainForm.MenuAddins.MenuItems.Add(parentmenu); + } + } + if (TrayMenuCreating != null) + { + var menu = TrayMenuCreating(this); + if (menu != null) + { + var parentmenu = new MenuItem(Metadata.AddinName); + parentmenu.MenuItems.AddRange(menu.MenuItems.Cast().ToArray()); + Client.MainForm.mnuAddinsContext.MenuItems.Add(parentmenu); + } + } + } + } +} + diff --git a/RDPAddins/ChannelStream.cs b/RDPAddins/ChannelStream.cs new file mode 100644 index 0000000..1b8c7b8 --- /dev/null +++ b/RDPAddins/ChannelStream.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using RDPAddins.Common; +using System.Runtime; + +namespace RDPAddins +{ + internal class ChannelStream: Stream + { + public ChannelStream(IChannel channel) : base() { Channel = channel; } + IChannel Channel; + public override bool CanRead { get { return true; } } + public override bool CanSeek { get { return false; } } + public override bool CanWrite { get { return true; } } + public override void Flush() { } + public override long Length { get { throw new NotImplementedException(); } } + public override long Seek(long offset, SeekOrigin origin) { throw new NotImplementedException(); } + public override void SetLength(long value) { throw new NotImplementedException(); } + [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] + public override int Read(byte[] buffer, int offset, int count) { return Channel.Read(buffer, offset, count); } + [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] + public override void Write(byte[] buffer, int offset, int count) { Channel.Write(buffer, offset, count); } + public override long Position + { + get { throw new NotImplementedException(); } + set { throw new NotImplementedException(); } + } + } +} diff --git a/RDPAddins/MasterMode.Designer.cs b/RDPAddins/MasterMode.Designer.cs new file mode 100644 index 0000000..b8aba80 --- /dev/null +++ b/RDPAddins/MasterMode.Designer.cs @@ -0,0 +1,74 @@ +namespace RDPAddins +{ + partial class MasterMode + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(114, 66); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(139, 13); + this.label1.TabIndex = 0; + this.label1.Text = "some day it will be a setup..."; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(267, 141); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(545, 358); + this.Controls.Add(this.button1); + this.Controls.Add(this.label1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + } +} + diff --git a/RDPAddins/MasterMode.cs b/RDPAddins/MasterMode.cs new file mode 100644 index 0000000..b9819cc --- /dev/null +++ b/RDPAddins/MasterMode.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace RDPAddins +{ + internal partial class MasterMode : Form + { + public MasterMode() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/RDPAddins/MasterMode.resx b/RDPAddins/MasterMode.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/RDPAddins/MasterMode.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/RDPAddins/Program.cs b/RDPAddins/Program.cs new file mode 100644 index 0000000..6c10867 --- /dev/null +++ b/RDPAddins/Program.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using System.Security.Principal; +using System.Diagnostics; +using System.ComponentModel; +using Win32.WtsApi32; +using System.Reflection; +using System.Threading; +using System.IO; + +namespace RDPAddins +{ + public class Program + { + static System.Configuration.Configuration Configuration = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); + /// + /// The main entry point for the application. + /// + [STAThread] + public static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + var entry = AppDomain.CurrentDomain.GetData("entry"); + if (entry != null) + { + var Client = new RDPClient(); + Client.MainForm = new SlaveMode(Client); + Client.MainForm.Load += new EventHandler((sender, e) => + { + ChannelReturnCodes ret = Client.Initialize(Assembly.GetExecutingAssembly().Location, (IntPtr)entry); + AppDomain.CurrentDomain.SetData("ret", ret == ChannelReturnCodes.Ok); + ((ManualResetEvent)AppDomain.CurrentDomain.GetData("event")).Set(); + if (ret != ChannelReturnCodes.Ok) + { + MessageBox.Show("VirtualChannelInit error.\n" + ret.ToString(), "RDPAddins", MessageBoxButtons.OK, MessageBoxIcon.Error); + Application.Exit(); + } + }); + Application.Run(Client.MainForm); + } + else + { + //WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); + //if (!pricipal.IsInRole(WindowsBuiltInRole.Administrator)) + //{ + // ProcessStartInfo processInfo = new ProcessStartInfo(); + // processInfo.Verb = "runas"; + // processInfo.Arguments = string.Join(" ", args); + // processInfo.FileName = Application.ExecutablePath; + // try + // { + // Process.Start(processInfo); + // } + // catch (Win32Exception) + // { + // } + //} + //else + Application.Run(new MasterMode()); + } + } + [STAThread] + public static int MainC(string args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + var entry = new IntPtr(long.Parse(new string(args.Reverse().ToArray()))); + ManualResetEvent wait = new ManualResetEvent(false); + int mainret = 1; + var thread = new Thread(() => + { + var Client = new RDPClient(); + Client.MainForm = new SlaveMode(Client); + Client.MainForm.Load += new EventHandler((sender, e) => + { + + ChannelReturnCodes ret = Client.Initialize(Assembly.GetExecutingAssembly().Location, entry); + wait.Set(); + if (ret != ChannelReturnCodes.Ok) + { + mainret = 0; + MessageBox.Show("VirtualChannelInit error.\n" + ret.ToString(), "RDPAddins", MessageBoxButtons.OK, MessageBoxIcon.Error); + Application.Exit(); + } + }); + Application.Run(Client.MainForm); + }); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + wait.WaitOne(); + return mainret; + } + } +} diff --git a/RDPAddins/Properties/AssemblyInfo.cs b/RDPAddins/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..79b9aa6 --- /dev/null +++ b/RDPAddins/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RDPAddins")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RDPAddins")] +[assembly: AssemblyCopyright("© Selvin 2011. All rights reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4a49ae38-0071-4836-b31d-a6009d719495")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.2.1.0")] +[assembly: AssemblyFileVersion("0.2.1.0")] diff --git a/RDPAddins/Properties/Resources.Designer.cs b/RDPAddins/Properties/Resources.Designer.cs new file mode 100644 index 0000000..19be017 --- /dev/null +++ b/RDPAddins/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RDPAddins.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RDPAddins.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/RDPAddins/Properties/Resources.resx b/RDPAddins/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/RDPAddins/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/RDPAddins/RDPAddins.csproj b/RDPAddins/RDPAddins.csproj new file mode 100644 index 0000000..d71a7f1 --- /dev/null +++ b/RDPAddins/RDPAddins.csproj @@ -0,0 +1,122 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {4345A357-B6D6-49A8-98CD-7D0D6708AC17} + WinExe + Properties + RDPAddins + RDPAddins + v4.0 + + + 512 + SAK + SAK + SAK + SAK + + + AnyCPU + ..\bin\Debug\ + + + AnyCPU + ..\bin\Release\ + + + true + + + ..\RDPAddins.snk + + + + + + + + + + + + + + + + + + Form + + + MasterMode.cs + + + Form + + + About.cs + + + Form + + + SlaveMode.cs + + + + + + + MasterMode.cs + Designer + + + About.cs + Designer + + + About.cs + Designer + + + SlaveMode.cs + Designer + + + SlaveMode.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + + {EC8481C3-F82F-4F3C-84E2-6732750B6542} + RDPAddins.Common + + + + + + + + \ No newline at end of file diff --git a/RDPAddins/RDPAddins.csproj.vspscc b/RDPAddins/RDPAddins.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/RDPAddins/RDPAddins.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/RDPAddins/RDPClient.cs b/RDPAddins/RDPClient.cs new file mode 100644 index 0000000..0692b45 --- /dev/null +++ b/RDPAddins/RDPClient.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Win32.WtsApi32; +using System.Windows.Forms; +using System.ComponentModel.Composition.Hosting; +using System.ComponentModel.Composition; +using System.IO; +using System.Runtime.InteropServices; +using System.Drawing; +using RDPAddins.Common; + +namespace RDPAddins +{ + class RDPClient + { + IntPtr initHandle = IntPtr.Zero; + ChannelInitEventDelegate channelInitEventDelegate; + + [ImportMany(typeof(IAddin))] + IEnumerable> Addins { get; set; } + + List Channels; + public ChannelEntryPoints EntryPoint { get; private set; } + + internal SlaveMode MainForm { get; set; } + + RDPClient Client; + + public ChannelReturnCodes Initialize(string Path, IntPtr entry) + { + Client = this; + var pluginspath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Path), "Plugins"); + try + { + if (Directory.Exists(pluginspath)) + { + EntryPoint = (ChannelEntryPoints)Marshal.PtrToStructure(entry, typeof(ChannelEntryPoints)); + channelInitEventDelegate = new ChannelInitEventDelegate(VirtualChannelInitEventProc); + var batch = new CompositionBatch(); + batch.AddPart(this); + var catalog = new DirectoryCatalog(pluginspath); + var container = new CompositionContainer(catalog); + container.Compose(batch); + Channels = Addins.Select(addin => + { + return new Channel(this, addin); + }).ToList(); + Channels.ForEach(channel => + { + MainForm.Invoke(new Action(() => + { + channel.CreateUI(); + })); + }); + var cds = Channels.Select(channel => channel.ChannelDef).ToArray(); + return EntryPoint.VirtualChannelInit(ref initHandle, cds, cds.Length, 1, channelInitEventDelegate); + } + } + catch (Exception ex) { MessageBox.Show(ex.Message, "RDPAddins", MessageBoxButtons.OK, MessageBoxIcon.Error); } + return ChannelReturnCodes.NullData; + } + + void ChannelsInitialized() + { + MainForm.Invoke(new Action(() => + { + if (MainForm.Opacity == 0) + { + MainForm.Hide(); + MainForm.Opacity = 100; + } + })); + } + + void VirtualChannelInitEventProc(IntPtr initHandle, ChannelEvents initEvent, byte[] data, uint dataLength) + { + switch (initEvent) + { + case ChannelEvents.Initialized: + ChannelsInitialized(); + Client.Channels.ForEach(channel => channel.InitializedInternal()); + break; + case ChannelEvents.Connected: + string server = System.Text.Encoding.Unicode.GetString(data); + server = server.Substring(0, server.IndexOf('\0')); + Client.Channels.ForEach(channel => + { + ChannelReturnCodes ret = channel.ConnectedInternal(initHandle); + if (ret != ChannelReturnCodes.Ok) + { + MessageBox.Show(string.Format("{0}: VirtualChannelOpen error: {1}", channel.Metadata.ChannelName, ret), "RDPAddins", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + }); + MainForm.Invoke(new Action(() => + { + MainForm.Text = "RDPAddnins: " + server; + })); + + break; + case ChannelEvents.V1Connected: + MessageBox.Show("Bad RDP server version.", "RDPAddins", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + case ChannelEvents.Disconnected: + MainForm.Invoke(new Action(() => MainForm.Text = "RDPAddnins")); + Channels.ForEach(channel => channel.DisconnectedInternal()); + GC.Collect(); + GC.WaitForPendingFinalizers(); + break; + case ChannelEvents.Terminated: + Channels.ForEach(channel => channel.TerminatedInternal()); + MainForm.RealClosing = true; + MainForm.Invoke(new Action(() => MainForm.Close())); + break; + } + } + + + } +} \ No newline at end of file diff --git a/RDPAddins/Resources/AddinIcon.png b/RDPAddins/Resources/AddinIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0be81b38387f718a7936be8317dfebb842ed8e1c GIT binary patch literal 975 zcmV;=12FuFP)z^Q>-8KIssI20AY({UO#lFHCjbC*uK)n{Hvj;Dr2qhM zBLD#10ssIoJ^%m~vd&$13IG5DMM*?KRCwBAVZZ^BlBO2?`}eOOh#7#maLJOw3E0#D z1P~L9k(M@70f-A=e4r-(oE%SvkPu6TzkmPQgT#V^+XRAwS_=XKniXK`00M{+rWr_` zmyr=Afc1p>X5olMny@|2N#cx#0mo z05O9MFgEs00BR1XtqoyNSCR882OW2(p!dmzRU#&!2w`bLZqT1O!++0QJ@b1Q5so zh95tEGJrIH|NfJKi;E5HY>>?`@Z-mCkc|wCj1cz5P3IXdTzCW)0|+1%P$HQ>f3H6% zic(WO7<6^zzTb^75i!#Sb68Vfgap2g9B{M?XNL`XE36F~V#K32C2i zY^<7~sVN5x17!vtZg#M0Mt4GAb`ML0H$pL zpbPd33-cKOH9r8wGmsz9)14@A?fOfG>C@MPT(|&aGdnxG!q=}~!Abe-*;x+&0tlQE zZ`|1bLrKYI<(DttUjn(AJ9oCNR8X+8;NjuYxNzYi&?~PF0R0^JO$B$2Gz@`o$zyP|3y=`}nV;=wj002ovPDHLkV1hnzn^FJ( literal 0 HcmV?d00001 diff --git a/RDPAddins/SlaveMode.Designer.cs b/RDPAddins/SlaveMode.Designer.cs new file mode 100644 index 0000000..0c32dc6 --- /dev/null +++ b/RDPAddins/SlaveMode.Designer.cs @@ -0,0 +1,166 @@ +namespace RDPAddins +{ + partial class SlaveMode + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SlaveMode)); + this.ilMain = new System.Windows.Forms.ImageList(this.components); + this.mnuNIContext = new System.Windows.Forms.ContextMenu(); + this.mnuNICShow = new System.Windows.Forms.MenuItem(); + this.mnuNICHide = new System.Windows.Forms.MenuItem(); + this.mnuAddinsContext = new System.Windows.Forms.MenuItem(); + this.mnuNICSeparator = new System.Windows.Forms.MenuItem(); + this.mnuNICAbout = new System.Windows.Forms.MenuItem(); + this.niMain = new System.Windows.Forms.NotifyIcon(this.components); + this.mnuMain = new System.Windows.Forms.MainMenu(this.components); + this.mnuAddins = new System.Windows.Forms.MenuItem(); + this.mnuHelp = new System.Windows.Forms.MenuItem(); + this.mnuAbout = new System.Windows.Forms.MenuItem(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.SuspendLayout(); + // + // ilMain + // + this.ilMain.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilMain.ImageStream"))); + this.ilMain.TransparentColor = System.Drawing.Color.Transparent; + this.ilMain.Images.SetKeyName(0, "niMain.Icon.ico"); + // + // mnuNIContext + // + this.mnuNIContext.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuNICShow, + this.mnuNICHide, + this.mnuAddinsContext, + this.mnuNICSeparator, + this.mnuNICAbout}); + resources.ApplyResources(this.mnuNIContext, "mnuNIContext"); + // + // mnuNICShow + // + this.mnuNICShow.DefaultItem = true; + resources.ApplyResources(this.mnuNICShow, "mnuNICShow"); + this.mnuNICShow.Index = 0; + this.mnuNICShow.Click += new System.EventHandler(this.ShowMe); + // + // mnuNICHide + // + this.mnuNICHide.DefaultItem = true; + resources.ApplyResources(this.mnuNICHide, "mnuNICHide"); + this.mnuNICHide.Index = 1; + this.mnuNICHide.Click += new System.EventHandler(this.ShowMe); + // + // mnuAddinsContext + // + resources.ApplyResources(this.mnuAddinsContext, "mnuAddinsContext"); + this.mnuAddinsContext.Index = 2; + // + // mnuNICSeparator + // + resources.ApplyResources(this.mnuNICSeparator, "mnuNICSeparator"); + this.mnuNICSeparator.Index = 3; + // + // mnuNICAbout + // + resources.ApplyResources(this.mnuNICAbout, "mnuNICAbout"); + this.mnuNICAbout.Index = 4; + this.mnuNICAbout.Click += new System.EventHandler(this.mnuAbout_Click); + // + // niMain + // + resources.ApplyResources(this.niMain, "niMain"); + this.niMain.ContextMenu = this.mnuNIContext; + this.niMain.BalloonTipClicked += new System.EventHandler(this.niMain_BalloonTipClicked); + this.niMain.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.niMain_MouseDoubleClick); + // + // mnuMain + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuAddins, + this.mnuHelp}); + resources.ApplyResources(this.mnuMain, "mnuMain"); + // + // mnuAddins + // + resources.ApplyResources(this.mnuAddins, "mnuAddins"); + this.mnuAddins.Index = 0; + // + // mnuHelp + // + resources.ApplyResources(this.mnuHelp, "mnuHelp"); + this.mnuHelp.Index = 1; + this.mnuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuAbout}); + // + // mnuAbout + // + resources.ApplyResources(this.mnuAbout, "mnuAbout"); + this.mnuAbout.Index = 0; + this.mnuAbout.Click += new System.EventHandler(this.mnuAbout_Click); + // + // tabControl + // + resources.ApplyResources(this.tabControl, "tabControl"); + this.tabControl.ImageList = this.ilMain; + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + // + // frmMain + // + resources.ApplyResources(this, "$this"); + this.Controls.Add(this.tabControl); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Menu = this.mnuMain; + this.Name = "frmMain"; + this.Opacity = 0D; + this.ShowInTaskbar = false; + this.TopMost = true; + this.Activated += new System.EventHandler(this.frmMain_Activated); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmMain_FormClosing); + this.VisibleChanged += new System.EventHandler(this.frmMain_VisibleChanged); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ImageList ilMain; + private System.Windows.Forms.ContextMenu mnuNIContext; + private System.Windows.Forms.MenuItem mnuNICShow; + private System.Windows.Forms.MenuItem mnuNICSeparator; + private System.Windows.Forms.MenuItem mnuNICAbout; + private System.Windows.Forms.NotifyIcon niMain; + private System.Windows.Forms.MainMenu mnuMain; + private System.Windows.Forms.MenuItem mnuHelp; + private System.Windows.Forms.MenuItem mnuAbout; + internal System.Windows.Forms.TabControl tabControl; + internal System.Windows.Forms.MenuItem mnuAddinsContext; + internal System.Windows.Forms.MenuItem mnuAddins; + private System.Windows.Forms.MenuItem mnuNICHide; + } +} \ No newline at end of file diff --git a/RDPAddins/SlaveMode.cs b/RDPAddins/SlaveMode.cs new file mode 100644 index 0000000..5442a03 --- /dev/null +++ b/RDPAddins/SlaveMode.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using RDPAddins.Common; + +namespace RDPAddins +{ + internal partial class SlaveMode : Form + { + public RDPClient Client; + + public SlaveMode() + { + InitializeComponent(); + } + + public SlaveMode(RDPClient Client) + { + this.Client = Client; + InitializeComponent(); + } + + private void frmMain_FormClosing(object sender, FormClosingEventArgs e) + { + if (!RealClosing) + { + e.Cancel = true; + Visible = false; + } + } + + public bool RealClosing { get; internal set; } + + public void ShowMe(object sender, EventArgs e) + { + Visible = !Visible; + } + + public delegate void Void(); + + + private void frmMain_VisibleChanged(object sender, EventArgs e) + { + mnuNICHide.Visible = Visible; + mnuNICShow.Visible = !Visible; + } + + Channel lastaddin = null; + + public int AddImage(Image image) + { + if (image == null) + return 0; + ilMain.Images.Add(image); + return ilMain.Images.Count - 1; + } + + public void ShowToolTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon, Channel addin) + { + lastaddin = addin; + niMain.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon); + } + + private void mnuAbout_Click(object sender, EventArgs e) + { + (new frmAbout()).ShowDialog(this); + } + + private void niMain_MouseDoubleClick(object sender, MouseEventArgs e) + { + ShowMe(null, null); + } + + public override string Text + { + get + { + return base.Text; + } + set + { + base.Text = value; + niMain.Text = value; + } + } + + + private void frmMain_Activated(object sender, EventArgs e) + { + Bounds = new System.Drawing.Rectangle(Screen.PrimaryScreen.WorkingArea.Right - Width, Screen.PrimaryScreen.WorkingArea.Bottom - Height, Width, Height); + } + + private void niMain_BalloonTipClicked(object sender, EventArgs e) + { + if (lastaddin != null) + lastaddin.OnBalloonTipClicked(sender, e); + } + + public TabControl Tab + { + get { return tabControl; } + } + + public Menu MenuAddins + { + get { return mnuAddins; } + } + } +} \ No newline at end of file diff --git a/RDPAddins/SlaveMode.pl-PL.resx b/RDPAddins/SlaveMode.pl-PL.resx new file mode 100644 index 0000000..77c75ed --- /dev/null +++ b/RDPAddins/SlaveMode.pl-PL.resx @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAo + BAAAAk1TRnQBSQFMAwEBAAE8AQABPAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA + ARADAAEBAQABIAYAARAiAAMEAQYDDgETAw4BEwMSARkDEgEZAxABFgMLAQ8DBAEG2AADBAEGAx0BKQMj + ATMDIwEzAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAx0BKQMEAQbMAAMWAR8DIwEzA0EBcgNVAbIDWQHM + A14B5QMtAf8DLQH/A1kB8gNXAb8DVQGyA0EBcgMjATMDFgEfxAADEAEWAzYBWQNVAbIDMgH/A1oB/wNf + Af8DNwH/A5AB/wOQAf8DPAH/A1oB/wNaAf8DMgH/A1UBsgM2AVkDEAEWwAADNgRZAfIDUAH/A1AB/wOQ + Af8DkAH/A4wB/wOQAf8DkAH/A4wB/wOQAf8DkAH/A1AB/wNLAf8DWQHyAzYBWcAAA1kBzANQAf8DkAH/ + A5AB/wOQAf8DkAH/A5AB/wOiAf8DogH/A5AB/wOQAf8DkAH/A5AB/wOQAf8DUAH/A1kBzMAAAy0B/wNn + Af8DkAH/A5oB/wPDAf8DywH/A6cB/wPYAf8D2AH/A6wB/wPLAf8DywH/A5oB/wOQAf8DZwH/Ay0B/8AA + Ay0B/wOVAf8DwgH/A7QB/wPZAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D2QH/A7gB/wPCAf8DlQH/ + Ay0B/8AAAy0B/wOlAf8D2AH/A+MB/wPjAf8D0wH/A4sB/wNiAf8DYgH/A4EB/wPOAf8D4wH/A+MB/wPd + Af8DqgH/Ay0B/8AAA1oB/wPTAf8D2AH/A+gB/wPdAf8DlgH/A5AB/wOBAf8DgQH/A5AB/wOQAf8D3QH/ + A+gB/wPYAf8D0wH/A1cB/8AAA50B/wPHAf8D3wH/A+4B/wPjAf8DkAH/A5AB/wOQAf8DkAH/A5AB/wOQ + Af8D3QH/A+4B/wPfAf8DxwH/A50B/8AAA2IB7wPBAf8D8wH/A/MB/wPzAf8D1QH/A6QB/wOQAf8DkAH/ + A6QB/wPVAf8D8wH/A/MB/wPzAf8DwQH/A2IB78AAAyABLwNiAe8D1AH/A8sB/wPwAf8D+AH/A/QB/wP4 + Af8D+AH/A/QB/wP4Af8D8wH/A8sB/wPQAf8DYgHvAyABL8QAAyABLwNcAc8DxwH/A+UB/wPoAf8DywH/ + A/0B/wP9Af8DzgH/A+QB/wPlAf8DxwH/A2IB7wMgAS/QAAMgAS8DTAGPA1kBvwNcBM8B/wPPAf8DzwH/ + A1QBrwNRAZ8DMQFP5AADFgEfAykBPwMpAT8DIAEv2AABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEA + AQEFAAGAFwAD/wEAAfABDwYAAcABAwYAAYABAVYAAYABAQYAAeABBwYAAfwBPwYACw== + + + + Pokaż + + + Ukryj + + + Dodatki + + + O programie... + + + + + AAABAAIAEBAAAAEACABoBQAAJgAAABAQAAABACAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALGwEAGJr/wBQV/8AKy//AAcI/wB0f/8AGRv/AD1D/wCFk/8A3vHeAJHQ + kQA3iAAAndadAOr26gDX19cANoYAAC1wBACq26oAyt7CANHr0QCv0qcAKmcFAPDw8ABJUOAAcHBwAMLC + wgAvdAMA3d3dAFxcXADR0dEAAACqAAAArwAAAJEAvb29AAAAwQD3/PcAAACLAAAAvgD29vYAhMuEAAAA + tAAAAJ8AAACVAMXFxQAjVQgAxsbGAGu3XQAhTwkA5OTkAFKhMABvu2MAt7e3AGRkZACcnJwAQJARAMvL + ywA7jAcANoUAAMTExAA1hAAAk5OTAN7u2wDS0tIAjo6OAChjBgCpqakAhYWFAERERAAeSAoA8vLyAP39 + /QDDw8MA4ODgALi4uAAlWgcA2dnZAGZmZgB8fHwAMXkCAJWVlQA0ggAAioqKAM3NzQAnXgcAYmJiAOrq + 6gC2trYAIlQIACFRCQBFfyIALGsEAKenpwDe7dgANHoIAEV+NgA0gQEAbLVcACNUCAA/exwA7e3tAExM + TAAjUQ0AQYQjACBOCQBEkBoAHkkKAElQ1ABJUMUASVDZAJeXlwA5ggsA39/fAElQyAB2vmwAerNqAIjE + fwAuXRYA8fHxAD6AFwCOvnMArceoAER/MwA/ixIAnp6eAK7PmQCLy4gAgb51AEqBLABknz0ArcmhAHp6 + egDMzMwASVDKAElQzwBdp0QAR4UlAJbQkwAyfAEAxuPEAHG5ZABJUNcAaGhoAEGLDwCew5IASEhIAIaG + hgDU69EA1tbWADSCAQB6vG4AmZmZADN9AQAnYAYAJFcHAElQ3gBPgzoAx8fHAFSeMwBYWFgAIE0JAKys + rADBwcEAtMerAH/GfACDv3cAAADCAEBAQACAgIAAAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqampqampqampqampqampqampqampqampqampqampqampqaam + pqampqamqampqamppkM0jZCnp2Q0NEOmqampphwcp6dNp6dNp6ccnqapphynp6enpzw8p6enp6ccpqYY + p1FJGZYdHXsZGVGnGKamQjNbPg4ODg4ODj6gM0Kmpm0dGxs3gkxMGCsbGw41plQ3HTAOkacYGKenDjAd + N1Q/IUtVG6enp6enp5NVSyE/NVYWFhZST6enT1IWFhZWNalBgxljJkUmJkUmdRmcQampqTMhSDChRkYr + b0ghSampqampqUc6Ky0tLTpHqampqampqampqampqampqampqan//wAA//8AAPAPAADAAwAAgAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAwAMAAPAPAAD//wAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEwAAABMAAAAZAAAAGQAA + ABYAAAAPAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAApAAAAMwAAADMAAAAzAAAAMwAA + ADMAAAAzAAAAMwAAADMAAAApAAAABgAAAAAAAAAAAAAAAAAAAB8AAAAzMTExcj09PbI/Pz/MQUFB5UND + Q/9DQ0P/QkJC8j4+Pr89PT2yMTExcgAAADMAAAAfAAAAAAAAABYoKChZPT09skhISP9wcHD/dXV1/01N + Tf+QkJD/kJCQ/1JSUv9wcHD/cHBw/0hISP89PT2yKCgoWQAAABYoKChZQkJC8mZmZv9mZmb/kJCQ/5CQ + kP+MjIz/kJCQ/5CQkP+MjIz/kJCQ/5CQkP9mZmb/YWFh/0JCQvIoKChZPz8/zGZmZv+QkJD/kJCQ/5CQ + kP+QkJD/kJCQ/6Kiov+ioqL/kJCQ/5CQkP+QkJD/kJCQ/5CQkP9mZmb/Pz8/zENDQ/99fX3/kJCQ/5qa + mv/Dw8P/y8vL/6enp//Y2Nj/2NjY/6ysrP/Ly8v/y8vL/5qamv+QkJD/fX19/0NDQ/9DQ0P/lZWV/8LC + wv+0tLT/2dnZ/93d3f/d3d3/3d3d/93d3f/d3d3/3d3d/9nZ2f+4uLj/wsLC/5WVlf9DQ0P/Q0ND/6Wl + pf/Y2Nj/4+Pj/+Pj4//T09P/i4uL/3h4eP94eHj/gYGB/87Ozv/j4+P/4+Pj/93d3f+qqqr/Q0ND/3Bw + cP/T09P/2NjY/+jo6P/d3d3/lpaW/5CQkP+BgYH/gYGB/5CQkP+QkJD/3d3d/+jo6P/Y2Nj/09PT/21t + bf+dnZ3/x8fH/9/f3//u7u7/4+Pj/5CQkP+QkJD/kJCQ/5CQkP+QkJD/kJCQ/93d3f/u7u7/39/f/8fH + x/+dnZ3/qqqq78HBwf/z8/P/8/Pz//Pz8//V1dX/pKSk/5CQkP+QkJD/pKSk/9XV1f/z8/P/8/Pz//Pz + 8//BwcH/qqqq77Ozsy+2trbv1NTU/8vLy//w8PD/+Pj4//T09P/4+Pj/+Pj4//T09P/4+Pj/8/Pz/8vL + y//Q0ND/tra277Ozsy8AAAAAv7+/L8LCws/Hx8f/5eXl/+jo6P/Ly8v//f39//39/f/Ozs7/5OTk/+Xl + 5f/Hx8f/w8PD77+/vy8AAAAAAAAAAAAAAAAAAAAAy8vLL8zMzI/Nzc2/zs7Oz8/Pz//Pz8//z8/P/83N + za/MzMyfy8vLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTU1B/U1NQ/1NTUP9TU + 1C8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwD6mpwAOpqYABqakAAKmpAACpqQAAqakAAKmpAACpqQAA + qakAAKamAACmpgAAqakAAKZDgAGQp+AHNDT8P6mp + + + + Dodatki + + + O programie... + + + Pomoc + + \ No newline at end of file diff --git a/RDPAddins/SlaveMode.resx b/RDPAddins/SlaveMode.resx new file mode 100644 index 0000000..81847c5 --- /dev/null +++ b/RDPAddins/SlaveMode.resx @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + True + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + About... + + + + 0, 0 + + + mnuNICShow + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + About... + + + Hide + + + tabControl + + + mnuAbout + + + 474, 165 + + + ilMain + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mnuNICSeparator + + + System.Windows.Forms.ContextMenu, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 474, 165 + + + 0 + + + mnuNICAbout + + + mnuNICHide + + + - + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAq + BAAAAk1TRnQBSQFMAwEBAAEEAQABIAEAARABAAEQAQAE/wEhARAI/wFCAU0BNgcAATYDAAEoAwABQAMA + ARADAAEBAQABIAYAARAiAAMEAQYDDgETAw4BEwMSARkDEgEZAxABFgMLAQ8DBAEG2AADBAEGAx0BKQMj + ATMDIwEzAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAx0BKQMEAQbMAAMWAR8DIwEzA0EBcgNVAbIDWQHM + A14B5QM2Af8DNgH/A1UB8gNXAb8DVQGyA0EBcgMjATMDFgEfxAADEAEWAzYBWQNVAbIDOwH/A2MB/wNo + Af8DQAH/A5AB/wOQAf8DRQH/A2MB/wNjAf8DOwH/A1UBsgM2AVkDEAEWwAADNgFZA1UB8gNZAf8DWQH/ + A5AB/wOQAf8DjAH/A5AB/wOQAf8DjAH/A5AB/wOQAf8DWQH/A1QB/wNVAfIDNgFZwAADWQHMA1kB/wOQ + Af8DkAH/A5AB/wOQAf8DkAH/A6IB/wOiAf8DkAH/A5AB/wOQAf8DkAH/A5AB/wNZAf8DWQHMwAADNgH/ + A3AB/wOQAf8DmgH/A8MB/wPLAf8DpwH/A9gB/wPYAf8DrAH/A8sB/wPLAf8DmgH/A5AB/wNwAf8DNgH/ + wAADNgH/A5UB/wPCAf8DtAH/A9kB/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPZAf8DuAH/A8IB/wOV + Af8DNgH/wAADNgH/A6UB/wPYAf8D4wH/A+MB/wPTAf8DiwH/A2sB/wNrAf8DgQH/A84B/wPjAf8D4wH/ + A90B/wOqAf8DNgH/wAADYwH/A9MB/wPYAf8D6AH/A90B/wOWAf8DkAH/A4EB/wOBAf8DkAH/A5AB/wPd + Af8D6AH/A9gB/wPTAf8DYAH/wAADnQH/A8cB/wPfAf8D7gH/A+MB/wOQAf8DkAH/A5AB/wOQAf8DkAH/ + A5AB/wPdAf8D7gH/A98B/wPHAf8DnQH/wAADawHvA8EB/wPzAf8D8wH/A/MB/wPVAf8DpAH/A5AB/wOQ + Af8DpAH/A9UB/wPzAf8D8wH/A/MB/wPBAf8DawHvwAADIAEvA24B7wPUAf8DywH/A/AB/wP4Af8D9AH/ + A/gB/wP4Af8D9AH/A/gB/wPzAf8DywH/A9AB/wNuAe8DIAEvxAADIAEvA1wBzwPHAf8D5QH/A+gB/wPL + Af8D/QH/A/0B/wPOAf8D5AH/A+UB/wPHAf8DcAHvAyABL9AAAyABLwNMAY8DWQG/A1wEzwH/A88B/wPP + Af8DVAGvA1EBnwMxAU/kAAMWAR8DKQE/AykBPwMgAS/YAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB + AQABAQUAAYAXAAP/AQAB8AEPBgABwAEDBgABgAEBVgABgAEBBgAB4AEHBgAB/AE/HAAL + + + + Addins + + + System.Windows.Forms.MainMenu, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Addins + + + mnuAddinsContext + + + mnuAddins + + + + Fill + + + Show + + + niMain + + + mnuNIContext + + + System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + Manual + + + Help + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAIAEBAAAAEACABoBQAAJgAAABAQAAABACAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALGwEAGJr/wBQV/8AKy//AAcI/wB0f/8AGRv/AD1D/wCFk/8A3vHeAJHQ + kQA3iAAAndadAOr26gDX19cANoYAAC1wBACq26oAyt7CANHr0QCv0qcAKmcFAPDw8ABJUOAAcHBwAMLC + wgAvdAMA3d3dAFxcXADR0dEAAACqAAAArwAAAJEAvb29AAAAwQD3/PcAAACLAAAAvgD29vYAhMuEAAAA + tAAAAJ8AAACVAMXFxQAjVQgAxsbGAGu3XQAhTwkA5OTkAFKhMABvu2MAt7e3AGRkZACcnJwAQJARAMvL + ywA7jAcANoUAAMTExAA1hAAAk5OTAN7u2wDS0tIAjo6OAChjBgCpqakAhYWFAERERAAeSAoA8vLyAP39 + /QDDw8MA4ODgALi4uAAlWgcA2dnZAGZmZgB8fHwAMXkCAJWVlQA0ggAAioqKAM3NzQAnXgcAYmJiAOrq + 6gC2trYAIlQIACFRCQBFfyIALGsEAKenpwDe7dgANHoIAEV+NgA0gQEAbLVcACNUCAA/exwA7e3tAExM + TAAjUQ0AQYQjACBOCQBEkBoAHkkKAElQ1ABJUMUASVDZAJeXlwA5ggsA39/fAElQyAB2vmwAerNqAIjE + fwAuXRYA8fHxAD6AFwCOvnMArceoAER/MwA/ixIAnp6eAK7PmQCLy4gAgb51AEqBLABknz0ArcmhAHp6 + egDMzMwASVDKAElQzwBdp0QAR4UlAJbQkwAyfAEAxuPEAHG5ZABJUNcAaGhoAEGLDwCew5IASEhIAIaG + hgDU69EA1tbWADSCAQB6vG4AmZmZADN9AQAnYAYAJFcHAElQ3gBPgzoAx8fHAFSeMwBYWFgAIE0JAKys + rADBwcEAtMerAH/GfACDv3cAAADCAEBAQACAgIAAAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqampqampqampqampqampqampqampqampqampqampqampqaam + pqampqamqampqamppkM0jZCnp2Q0NEOmqampphwcp6dNp6dNp6ccnqapphynp6enpzw8p6enp6ccpqYY + p1FJGZYdHXsZGVGnGKamQjNbPg4ODg4ODj6gM0Kmpm0dGxs3gkxMGCsbGw41plQ3HTAOkacYGKenDjAd + N1Q/IUtVG6enp6enp5NVSyE/NVYWFhZST6enT1IWFhZWNalBgxljJkUmJkUmdRmcQampqTMhSDChRkYr + b0ghSampqampqUc6Ky0tLTpHqampqampqampqampqampqampqan//wAA//8AAPAPAADAAwAAgAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAwAMAAPAPAAD//wAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEwAAABMAAAAZAAAAGQAA + ABYAAAAPAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAApAAAAMwAAADMAAAAzAAAAMwAA + ADMAAAAzAAAAMwAAADMAAAApAAAABgAAAAAAAAAAAAAAAAAAAB8AAAAzMTExcj09PbI/Pz/MQUFB5UND + Q/9DQ0P/QkJC8j4+Pr89PT2yMTExcgAAADMAAAAfAAAAAAAAABYoKChZPT09skhISP9wcHD/dXV1/01N + Tf+QkJD/kJCQ/1JSUv9wcHD/cHBw/0hISP89PT2yKCgoWQAAABYoKChZQkJC8mZmZv9mZmb/kJCQ/5CQ + kP+MjIz/kJCQ/5CQkP+MjIz/kJCQ/5CQkP9mZmb/YWFh/0JCQvIoKChZPz8/zGZmZv+QkJD/kJCQ/5CQ + kP+QkJD/kJCQ/6Kiov+ioqL/kJCQ/5CQkP+QkJD/kJCQ/5CQkP9mZmb/Pz8/zENDQ/99fX3/kJCQ/5qa + mv/Dw8P/y8vL/6enp//Y2Nj/2NjY/6ysrP/Ly8v/y8vL/5qamv+QkJD/fX19/0NDQ/9DQ0P/lZWV/8LC + wv+0tLT/2dnZ/93d3f/d3d3/3d3d/93d3f/d3d3/3d3d/9nZ2f+4uLj/wsLC/5WVlf9DQ0P/Q0ND/6Wl + pf/Y2Nj/4+Pj/+Pj4//T09P/i4uL/3h4eP94eHj/gYGB/87Ozv/j4+P/4+Pj/93d3f+qqqr/Q0ND/3Bw + cP/T09P/2NjY/+jo6P/d3d3/lpaW/5CQkP+BgYH/gYGB/5CQkP+QkJD/3d3d/+jo6P/Y2Nj/09PT/21t + bf+dnZ3/x8fH/9/f3//u7u7/4+Pj/5CQkP+QkJD/kJCQ/5CQkP+QkJD/kJCQ/93d3f/u7u7/39/f/8fH + x/+dnZ3/qqqq78HBwf/z8/P/8/Pz//Pz8//V1dX/pKSk/5CQkP+QkJD/pKSk/9XV1f/z8/P/8/Pz//Pz + 8//BwcH/qqqq77Ozsy+2trbv1NTU/8vLy//w8PD/+Pj4//T09P/4+Pj/+Pj4//T09P/4+Pj/8/Pz/8vL + y//Q0ND/tra277Ozsy8AAAAAv7+/L8LCws/Hx8f/5eXl/+jo6P/Ly8v//f39//39/f/Ozs7/5OTk/+Xl + 5f/Hx8f/w8PD77+/vy8AAAAAAAAAAAAAAAAAAAAAy8vLL8zMzI/Nzc2/zs7Oz8/Pz//Pz8//z8/P/83N + za/MzMyfy8vLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTU1B/U1NQ/1NTUP9TU + 1C8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwD6mpwAOpqYABqakAAKmpAACpqQAAqakAAKmpAACpqQAA + qakAAKamAACmpgAAqakAAKZDgAGQp+AHNDT8P6mp + + + + mnuHelp + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SlaveMode + + + mnuMain + + + 5 + + + RDPAddins + + + System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + pl-PL + + + 237, 17 + + + True + + + 148, 17 + + + 17, 17 + + + 341, 17 + + \ No newline at end of file diff --git a/RDPAddins/WtsApi32.cs b/RDPAddins/WtsApi32.cs new file mode 100644 index 0000000..31bd8a3 --- /dev/null +++ b/RDPAddins/WtsApi32.cs @@ -0,0 +1,90 @@ +using System; +using System.Runtime.InteropServices; +using RDPAddins.Common; + +namespace Win32 +{ + namespace WtsApi32 + { + internal delegate ChannelReturnCodes VirtualChannelInitDelegate(ref IntPtr initHandle, [MarshalAs(UnmanagedType.LPArray)] ChannelDef[] channels, int channelCount, uint versionRequested, [MarshalAs(UnmanagedType.FunctionPtr)] ChannelInitEventDelegate channelInitEventProc); + internal delegate ChannelReturnCodes VirtualChannelOpenDelegate(IntPtr initHandle, ref uint openHandle, [MarshalAs(UnmanagedType.LPStr)] string channelName, [MarshalAs(UnmanagedType.FunctionPtr)] ChannelOpenEventDelegate channelOpenEventProc); + internal delegate ChannelReturnCodes VirtualChannelCloseDelegate(uint openHandle); + internal delegate ChannelReturnCodes VirtualChannelWriteDelegate(uint openHandle, byte[] data, uint dataLength, IntPtr userData); + + internal delegate void ChannelInitEventDelegate(IntPtr initHandle, ChannelEvents initEvent, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] data, uint dataLength); + internal delegate void ChannelOpenEventDelegate(uint openHandle, ChannelEvents openEvent, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] byte [] data, uint dataLength, uint totalLength, ChannelFlags dataFlags); + + [StructLayout(LayoutKind.Sequential)] + internal struct ChannelEntryPoints + { + public int Size; + public int ProtocolVersion; + [MarshalAs(UnmanagedType.FunctionPtr)] + public VirtualChannelInitDelegate VirtualChannelInit; + [MarshalAs(UnmanagedType.FunctionPtr)] + public VirtualChannelOpenDelegate VirtualChannelOpen; + [MarshalAs(UnmanagedType.FunctionPtr)] + public VirtualChannelCloseDelegate VirtualChannelClose; + [MarshalAs(UnmanagedType.FunctionPtr)] + public VirtualChannelWriteDelegate VirtualChannelWrite; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + internal struct ChannelDef + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] + public string name; + public ChannelOptions options; + void asda() + { + } + } + + internal enum ChannelEvents: uint + { + Initialized = 0, + Connected = 1, + V1Connected = 2, + Disconnected = 3, + Terminated = 4, + DataRecived = 10, + WriteComplete = 11, + WriteCanceled = 12 + } + + [Flags] + internal enum ChannelFlags + { + First = 0x01, + Last = 0x02, + Only = First | Last, + Middle = 0, + Fail = 0x100, + ShowProtocol = 0x10, + Suspend = 0x20, + Resume = 0x40 + } + + internal enum ChannelReturnCodes + { + Ok = 0, + AlreadyInitialized = 1, + NotInitialized = 2, + AlreadyConnected = 3, + NotConnected = 4, + TooManyChanels = 5, + BadChannel = 6, + BadChannelHandle = 7, + NoBuffer = 8, + BadInitHandle = 9, + NotOpen = 10, + BadProc = 11, + NoMemory = 12, + UnknownChannelName = 13, + AlreadyOpen = 14, + NotInVirtualchannelEntry = 15, + NullData = 16, + ZeroLength = 17 + } + } +} \ No newline at end of file diff --git a/RDPAddins/app.config b/RDPAddins/app.config new file mode 100644 index 0000000..a4ae2ed --- /dev/null +++ b/RDPAddins/app.config @@ -0,0 +1,3 @@ + + + diff --git a/RDPAddins/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/RDPAddins/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/RDPAddins/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/RDPAddins/obj/Debug/RDPAddins.MasterMode.resources b/RDPAddins/obj/Debug/RDPAddins.MasterMode.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.Properties.Resources.resources b/RDPAddins/obj/Debug/RDPAddins.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.SlaveMode.pl-PL.resources b/RDPAddins/obj/Debug/RDPAddins.SlaveMode.pl-PL.resources new file mode 100644 index 0000000000000000000000000000000000000000..895fe1de7a132163502601aff6fb3b58273108d5 GIT binary patch literal 8086 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 literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.csproj.CopyComplete b/RDPAddins/obj/Debug/RDPAddins.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/RDPAddins/obj/Debug/RDPAddins.csproj.CoreCompileInputs.cache b/RDPAddins/obj/Debug/RDPAddins.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3bf538d --- /dev/null +++ b/RDPAddins/obj/Debug/RDPAddins.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +edbbaf50fdba761d24d1abfc53db8176d04b3573 diff --git a/RDPAddins/obj/Debug/RDPAddins.csproj.FileListAbsolute.txt b/RDPAddins/obj/Debug/RDPAddins.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..5a37b19 --- /dev/null +++ b/RDPAddins/obj/Debug/RDPAddins.csproj.FileListAbsolute.txt @@ -0,0 +1,17 @@ +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.exe.config +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.exe +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/RDPAddins.pdb +/home/haraldwolff/src/dotnet/RDPAddins/bin/Debug/pl-PL/RDPAddins.resources.dll +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.csprojAssemblyReference.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.MasterMode.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.frmAbout.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.SlaveMode.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.Properties.Resources.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.frmAbout.pl-PL.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.SlaveMode.pl-PL.resources +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.csproj.GenerateResource.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.csproj.CoreCompileInputs.cache +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/pl-PL/RDPAddins.resources.dll +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.csproj.CopyComplete +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.exe +/home/haraldwolff/src/dotnet/RDPAddins/RDPAddins/obj/Debug/RDPAddins.pdb diff --git a/RDPAddins/obj/Debug/RDPAddins.csproj.GenerateResource.cache b/RDPAddins/obj/Debug/RDPAddins.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..fb34e76e44c28ea50d7642d531c8b1a26b81938e GIT binary patch literal 1224 zcma)5+iuf95Ve~)jgwwdXo(O!M2H8Z1e2($;3YydRiUDl0;wvVK*%u96p}NvC&q?X|SJ36$Pil zp4(uc4Ru;)WUSOlzqc3kf^N|5v<8_YaiWXnwU4cQNeQjy)7Xp@Ri(XkATFpM`tVfmDt zQv}9=G&D}NnYKo$NC~NZCbU0UGEyk{g`#T(<+AHMTHeKceHd~}+6uUS2?1T#JP-R@ zT!tZQ(VXbg!_m~Hbitl0#d_Fq8@v(rbFMuv_BH&=(V7$TU!5pd%U@eJLX{RU}4iTA9D5t(*y!k>!#l$MfpdWwnm}zU%Q41xNq9 z|JS=0FRSRPw#Cs$gFenK1VIl7{9r<^)90;UF{`#UFYoPiC~Y-3G1CDH#k|FQS+;teBK@@aY;F6?s|ifjRFC? zfws|*pDVe8-CcxjgdK!?92!u7)qn~t5B%QpL1ZlpzeAf-`LBRaUspGCZ<{wmJH^nq zV-AV9pa%duv}q|!QBFb i-U5Ti1qK@m3|1Ey+$k{FUSKe-z+n6hwuKh3>VE)+LqL82 literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.csprojAssemblyReference.cache b/RDPAddins/obj/Debug/RDPAddins.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..e3cefd669523b465da1e416b875396972d546220 GIT binary patch literal 20363 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 literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.exe b/RDPAddins/obj/Debug/RDPAddins.exe new file mode 100644 index 0000000000000000000000000000000000000000..93a1bfe8dbf37967b119aa16710252cb81ac7449 GIT binary patch literal 50688 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 literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.frmAbout.resources b/RDPAddins/obj/Debug/RDPAddins.frmAbout.resources new file mode 100644 index 0000000000000000000000000000000000000000..abcb66fe45eb67aa1329bb004df971651479ae4f GIT binary patch literal 4417 zcmd5=Yitx%6utv3-MaXQB~UBDiPR>Tb=XpBf!Jyvw%|7HvfH$zL1CtQ+YX(bk(t>( zNUT;uO+*dlN0aia1Y&$71OtAO^9z$h!I1GF(?uAyR*IBo$0`jri7j5 z?A*EMobP=1+;bo4sV^^|5C|b-5G_7r*)%D|sAZ(gE^5uRVpL90GbARhF2mGRB_y^} z(^3t+daV>@e<86xrP(QyR_iono3a)XqbWsGyCQU`&FG_gwNh0jS9VoCUcSC!Ee)?* zzjAi4ly0j@%A?1ry#S;hfh>e{Pun+`@_?%MNO5%+4Th?^u>A}w>j%S>s zuMLm9QETnqdC$mhK{>p?=EryUe^v6%fs(wl2lq9M9{Ku%OGjg0C{wE$=eMTb+qC`o`@?-L zuTJ!TjzWAAb3Ow39#eh@5`_$-{~uNhc-Eo44Du}GZ+xGCjH5obNhGZ*SfRcp4 zc0Xks86wX^xdY0j%u@kOD~W(4_xk~=61OVq5KHs_Wws{={e8A)C%{dTKtz+sNX>Ev ztRbp46E71v0Rz#`AUl5YW+jb_wg7m9#a zBwG>pXVko=C$IpryxQQQkWHvyRse&fI^X5RtGEu`qPHfz5gTDt>^0(X&-o#EqmM4~ zLEs$rLRp%IcTcmI$0Q7w`x$aBPhj!;B6<1z1VdjW&goYetVoCAlk8=4R{+b{ZNhoH z36;m&%ix*9S>8N$D^yPrtY`8c9`Vw5o1>^^Pg;atgQ_(g75=d5Po@(0v}-Mgrl zsy)3nA%OtvTn&##yo0s=96S6@WrgB;=%<^9Srvo|p%6S`ti-H4%VdqP2uwPtd1q;q*ZD83+qC$XOwTO8 zs5>`Uw$Oz^VTdpK)A+`=M1ncIF-5>{8RLlE7wi|bMshHbi$N{d6FCTu_d$XITs4SL z6l;jqCK9S{iH#<sNJ2tkpEp kWILf~Qj41XG$G|^rXR@hOuqzv=}fb`fKWL7|Bnsg|5T5UKmY&$ literal 0 HcmV?d00001 diff --git a/RDPAddins/obj/Debug/RDPAddins.pdb b/RDPAddins/obj/Debug/RDPAddins.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d1bc3b60a127db4b7312908d28af90f3b2824db7 GIT binary patch literal 9368 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 SdHiPd-;>e*-`4+A9{Ar=I!yln literal 0 HcmV?d00001 diff --git a/Tools/ExportDll.exe.config b/Tools/ExportDll.exe.config new file mode 100644 index 0000000..4d94931 --- /dev/null +++ b/Tools/ExportDll.exe.config @@ -0,0 +1,28 @@ + + + + +
+ + + + + + C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe + + + C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe + + + + + + diff --git a/Tools/ExportDllAttribute.dll b/Tools/ExportDllAttribute.dll new file mode 100644 index 0000000000000000000000000000000000000000..f848bacc6ac5a1f3ec31e88671606dcbe30c7f8c GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/RDPAddins.Common.pdb b/bin/Debug/RDPAddins.Common.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d7261ed627434f7c13ac5b3282ab560024dbaa9c GIT binary patch literal 1324 zcmds%`%4s26vyu!ZFN^&wX#49r#9)aHEHP&O8MAUYlCua+a6$#-DcL^+?|n`(akVP z(Tsu!Argx)rN<9Jffd#k8I?&9WZP>idRi2L`a@{h!_FO>w11%spE>7y&b{Z(J$D$B zZKVk#jL3)vtY#Bkk;bGd0i;1y;A{m9R@O;kFMx+I-B69tISQe0lC#O8hcA&x{=6Eq z+fWDiG|4ZwTg+gef?f+4OkTkW8jsY~>n!UETAl<#(#!P+jx}8$gfLn^{XEu^Jdgs! z0F!`hpa@6+^gtQ_<&X{_??LQLfUF~$49F7+WA>GdFnusZs z19l}?5$rCoA+R68&Z00%qsWe91EY3W9R!{MZ-9?LKcF0CY~p|5g+sU0Z^a1bnEkprq z^3_?C(-jenKWIapg>BSvq_I^>GUwBe8pbR-{P2y=_#>AIzA}O5czKn;a$ZJ}l1KIk zyar<&iKm9U1s@mXc8Cry>leH(SC}Mj)3AcfbFy}g*_y|)9$t$3>yZ*Zfsa$-t2o)g zI%Eg4P0}tzx%ox*Vwayj!L;AId;Har3j?;(Yp%pSmjX>Y4`m8BK5Z!(Y70Hsmkh_7 zY>bUZm@3C8iHeLw$rLm#g*-4-N!lBpVIU?tV~(P-QWTXnPfuMI$WsmoK z$}O7DB@87c-VSCl>9?L1jI?|!HXD0N>u%yIjm2*HXGtj?=;?nw?OMh~xw<)_p?}WN zEdyUnh7A?H*-WONO)wI@}rVH5zu2A=nzT(SA67^@ZyG|`&hvQ>DFz + + + RDPAddins.Common + + + + + Provides addin's metadata + + + + + Gets addin name + + + + + Get addin channel name + + + + + Gets channel options + + + + + Inherited from System.ComponentModel.Composition.ExportAttribute. + Every addins should have one as an addin description. + + + + + Initializes a new instance of the AddinMetadataAttribute class, exporting the type or member marked with this attribute with the specified name, channel name and channel options. + + Name of the addin. + !!! should be less than 7 chars !!! Channel name. + Specified channel's options + + + + Gets addin name + + + + + Get addin channel name + + + + + Gets channel options + + + + + Specifies the options for this virtual channel. + + + + + The channel is initialized. + + + + + Encrypt client-to-server data. + + + + + Encrypt server-to-client data. + + + + + Encrypt client-to-server data. + + + + + Channel data should be sent with high Multipoint Communications Services (MCS) priority. + + + + + Channel data should be sent with medium MCS priority. + + + + + Channel data should be sent with low MCS priority. + + + + + Virtual channel data should be compressed if RDP data is being compressed. + + + + + Virtual channel data should be compressed, regardless of Remote Desktop Protocol (RDP) compression. + + + + + Affects how data sent by the IChannel.Write function is received at the server end. If this value is set, each data block is preceded by a CHANNEL_PDU_HEADER structure. If this value is not set, the data block includes only the data specified to IChannel.Write. + + + + + Defines an addin interface. + + + + + Initializing addin with specific channel + + Channel created for this addin. + + + + Represents RDS Channel + + + + + Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Initialized(CHANNEL_EVENT_INITIALIZED in RDS API) + + + + + Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Connected(CHANNEL_EVENT_CONNECTED in RDS API) + + + + + Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Disconnected(CHANNEL_EVENT_DISCONNECTED in RDS API) + + + + + Occurs when VirtualChannelInitEventProc(VirtualChannelInitEvent in RDS API) was called with ChannelEvents.Terminated(CHANNEL_EVENT_TERMINATED in RDS API) + + + + + Occurs when VirtualChannelOpenEvent(VirtualChannelOpenEvent in RDS API) was called with ChannelEvents.DataRecived(CHANNEL_EVENT_DATA_RECEIVED in RDS API) + + + + + Works similar to System.IO.Stream.Read + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the channel. + The zero-based byte offset in buffer at which to begin storing the data read from the channel. + The maximum number of bytes to be read from the channel. + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available(including 0). + + + + Works similar to System.IO.Stream.Write + + An array of bytes. This method sends bytes from buffer through channel. + The zero-based byte offset in buffer at which to begin sending bytes through channel. + The number of bytes to be sent through channel. + + + + Creataes and returns stream. Stream is disposed when Disconnect event occurs. + + Retuns stream + + + + Gets Addin metadata + + + + + Get IUI interface + + + + + Represents the method that will handle the DataArrived event of a IChannel. + + Specifies the size, in bytes, of the data. Use Read method of IChannel to read the data. + Specifies the total size, in bytes, of the data written by a single write operation to the server end of the virtual channel. + Provides information about the chunk of data being received. + + + + Specifies constants that define which part of data chunk was sent. + + + + + The chunk is the beginning of the data written by a single write operation. + + + + + The chunk is the end of the data written by a single write operation. + + + + + The chunk is in the middle of a block of data written by a single write operation. + + + + + Combines the DataParts.First and DataParts.Last values. The chunk contains all the data from a single write operation. + + + + + Represents UI parts of the IChannel + + + + + Occurs when the balloon tip is clicked. + + + + + Occurs when the hannel is trying create addin's control. If not hooked addin will not have control. + + + + + Occurs when Channel is trying create addin's menu. If not hooked addin will not have menu. + + + + + Occurs when Channel is trying create addin's tray menu. If not hooked addin will not have tray menu. + + + + + Occurs when Channel is trying to get addin's icon. Only appears when addin has control. If not hooked addin and addin has control then addin will have default icon. + + + + + Get UI's channel + + + + + Displays the balloon tip in the taskbar. + + The time period, in milliseconds, the balloon tip should display. + The title to display on the balloon tip. + The text to display on the balloon tip. + One of the System.Windows.Forms.ToolTipIcon values. + This object will sent to BalloonTipClicked event. + + + + Shows main form and selct tab with addin's control(if exists). + + + + + Executes a action on the UI thread. (It calls System.Windows.Forms.Form.Invoke). + + The action delegate. + + + + Gets or sets visibility of addin's control(if exists). + + + + + Represents the method that will handle the BalloonTipClicked event of a IUI. + + The source of the event. + Parameter sent by IUI.ShowBalloonTip method. + + + + Represents the method that will handle the ControlCreating event of a IUI. + + The source of the event. + Should returns addin's control if needed. + + + + Represents the method that will handle the MenuCreating and TrayMenuCreating event of a IUI. + + The source of the event. + Should returns addin's menu or tray menu if needed. + + + + Represents the method that will handle the IconCreating event of a IUI. + + The source of the event. + Should returns addin's icon if needed. + + + diff --git a/bin/Debug/RDPAddins.exe b/bin/Debug/RDPAddins.exe new file mode 100644 index 0000000000000000000000000000000000000000..93a1bfe8dbf37967b119aa16710252cb81ac7449 GIT binary patch literal 50688 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 + + diff --git a/bin/Debug/RDPAddins.pdb b/bin/Debug/RDPAddins.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d1bc3b60a127db4b7312908d28af90f3b2824db7 GIT binary patch literal 9368 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 p6V3?(ZwNe&?8(hO)4ulBz@yUu?*QaU2oV4P literal 0 HcmV?d00001