mirror of
https://gitlab.com/Syroot/Worms.git
synced 2025-04-18 07:02:29 +03:00
Add FrontendKitWS and fkNetcode.
This commit is contained in:
parent
db3a49539f
commit
71c8f33ea7
@ -49,80 +49,240 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = " Solution Items", " Solut
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syroot.Worms.Worms2.GameServer", "tool\Syroot.Worms.Worms2.GameServer\Syroot.Worms.Worms2.GameServer.csproj", "{13ABF717-5809-441D-A5D8-66E1EE75A390}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syroot.Worms.Worms2.GameServer", "tool\Syroot.Worms.Worms2.GameServer\Syroot.Worms.Worms2.GameServer.csproj", "{13ABF717-5809-441D-A5D8-66E1EE75A390}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fkNetcode", "tool\fkNetcode\fkNetcode.vcxproj", "{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FrontendKitWS", "tool\FrontendKitWS\FrontendKitWS.vcxproj", "{E391EA12-B929-466C-932F-DEF72B8CEB5D}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.Build.0 = Release|Any CPU
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.Build.0 = Release|Any CPU
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.Build.0 = Release|Any CPU
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.Build.0 = Release|Any CPU
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.Build.0 = Release|Any CPU
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.Build.0 = Release|Any CPU
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.Build.0 = Release|Any CPU
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.Build.0 = Release|Any CPU
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.Build.0 = Release|Any CPU
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.Build.0 = Release|Any CPU
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x64.ActiveCfg = Debug|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x64.ActiveCfg = Release|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x64.ActiveCfg = Debug|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x64.ActiveCfg = Release|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -145,6 +305,8 @@ Global
|
|||||||
{212F8090-9775-4098-BD44-9ABC01FBE553} = {99E56312-A064-4AD3-8443-0B56A5F76E6B}
|
{212F8090-9775-4098-BD44-9ABC01FBE553} = {99E56312-A064-4AD3-8443-0B56A5F76E6B}
|
||||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
{1FAB6B9F-2585-46DC-81C0-579DC808C389} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||||
{13ABF717-5809-441D-A5D8-66E1EE75A390} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
{13ABF717-5809-441D-A5D8-66E1EE75A390} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||||
|
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||||
|
{E391EA12-B929-466C-932F-DEF72B8CEB5D} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {1CD4EDE2-A5FB-4A58-A850-3506AB7E7B69}
|
SolutionGuid = {1CD4EDE2-A5FB-4A58-A850-3506AB7E7B69}
|
||||||
|
103
src/tool/FrontendKitWS/FrontendKitWS.vcxproj
Normal file
103
src/tool/FrontendKitWS/FrontendKitWS.vcxproj
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="main.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="main.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="fk.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<ProjectGuid>{e391ea12-b929-466c-932f-def72b8ceb5d}</ProjectGuid>
|
||||||
|
<RootNamespace>FrontendKitWS</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
<ProjectName>FrontendKitWS</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<OutDir>bin\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>obj\$(Configuration)\</IntDir>
|
||||||
|
<TargetName>wsock32</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>bin\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>obj\$(Configuration)\</IntDir>
|
||||||
|
<TargetName>wsock32</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;FRONTENDKITWS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<ModuleDefinitionFile>main.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;FRONTENDKITWS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<ModuleDefinitionFile>main.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
44
src/tool/FrontendKitWS/fk.h
Normal file
44
src/tool/FrontendKitWS/fk.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <vector>
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
std::vector<HMODULE> modules;
|
||||||
|
|
||||||
|
void fkAttach()
|
||||||
|
{
|
||||||
|
// Get executable directory.
|
||||||
|
CHAR buffer[MAX_PATH];
|
||||||
|
GetModuleFileName(NULL, buffer, MAX_PATH);
|
||||||
|
*(strrchr(buffer, '\\') + 1) = '\0';
|
||||||
|
|
||||||
|
// Attempt to load all library files matching the fk*.dll search pattern.
|
||||||
|
lstrcat(buffer, "fk*.dll");
|
||||||
|
WIN32_FIND_DATA findFileData;
|
||||||
|
HANDLE hFindFile = FindFirstFile(buffer, &findFileData);
|
||||||
|
if (hFindFile == INVALID_HANDLE_VALUE)
|
||||||
|
return;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||||
|
continue;
|
||||||
|
HMODULE hLibrary = LoadLibrary(findFileData.cFileName);
|
||||||
|
if (hLibrary)
|
||||||
|
{
|
||||||
|
modules.push_back(hLibrary);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf_s<MAX_PATH>(buffer, "Could not load module %s.", findFileData.cFileName);
|
||||||
|
MessageBox(NULL, buffer, "FrontendKit", MB_ICONWARNING);
|
||||||
|
}
|
||||||
|
} while (FindNextFile(hFindFile, &findFileData));
|
||||||
|
FindClose(hFindFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fkDetach()
|
||||||
|
{
|
||||||
|
// Release all loaded modules.
|
||||||
|
for (HMODULE hModule : modules)
|
||||||
|
FreeLibrary(hModule);
|
||||||
|
modules.clear();
|
||||||
|
}
|
272
src/tool/FrontendKitWS/main.cpp
Normal file
272
src/tool/FrontendKitWS/main.cpp
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include "fk.h"
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
struct wsock32_dll
|
||||||
|
{
|
||||||
|
HMODULE dll;
|
||||||
|
FARPROC AcceptEx;
|
||||||
|
FARPROC Arecv;
|
||||||
|
FARPROC Asend;
|
||||||
|
FARPROC EnumProtocolsA;
|
||||||
|
FARPROC EnumProtocolsW;
|
||||||
|
FARPROC GetAcceptExSockaddrs;
|
||||||
|
FARPROC GetAddressByNameA;
|
||||||
|
FARPROC GetAddressByNameW;
|
||||||
|
FARPROC GetNameByTypeA;
|
||||||
|
FARPROC GetNameByTypeW;
|
||||||
|
FARPROC GetServiceA;
|
||||||
|
FARPROC GetServiceW;
|
||||||
|
FARPROC GetTypeByNameA;
|
||||||
|
FARPROC GetTypeByNameW;
|
||||||
|
FARPROC MigrateWinsockConfiguration;
|
||||||
|
FARPROC NPLoadNameSpaces;
|
||||||
|
FARPROC NSPStartup;
|
||||||
|
FARPROC SetServiceA;
|
||||||
|
FARPROC SetServiceW;
|
||||||
|
FARPROC TransmitFile;
|
||||||
|
FARPROC WEP;
|
||||||
|
FARPROC WSAAsyncGetHostByAddr;
|
||||||
|
FARPROC WSAAsyncGetHostByName;
|
||||||
|
FARPROC WSAAsyncGetProtoByName;
|
||||||
|
FARPROC WSAAsyncGetProtoByNumber;
|
||||||
|
FARPROC WSAAsyncGetServByName;
|
||||||
|
FARPROC WSAAsyncGetServByPort;
|
||||||
|
FARPROC WSAAsyncSelect;
|
||||||
|
FARPROC WSACancelAsyncRequest;
|
||||||
|
FARPROC WSACancelBlockingCall;
|
||||||
|
FARPROC WSACleanup;
|
||||||
|
FARPROC WSAGetLastError;
|
||||||
|
FARPROC WSAIsBlocking;
|
||||||
|
FARPROC WSARecvEx;
|
||||||
|
FARPROC WSASetBlockingHook;
|
||||||
|
FARPROC WSASetLastError;
|
||||||
|
FARPROC WSAStartup;
|
||||||
|
FARPROC WSAUnhookBlockingHook;
|
||||||
|
FARPROC WSApSetPostRoutine;
|
||||||
|
FARPROC WSHEnumProtocols;
|
||||||
|
FARPROC WsControl;
|
||||||
|
FARPROC __WSAFDIsSet;
|
||||||
|
FARPROC accept;
|
||||||
|
FARPROC bind;
|
||||||
|
FARPROC closesocket;
|
||||||
|
FARPROC closesockinfo;
|
||||||
|
FARPROC connect;
|
||||||
|
FARPROC dn_expand;
|
||||||
|
FARPROC gethostbyaddr;
|
||||||
|
FARPROC gethostbyname;
|
||||||
|
FARPROC gethostname;
|
||||||
|
FARPROC getnetbyname;
|
||||||
|
FARPROC getpeername;
|
||||||
|
FARPROC getprotobyname;
|
||||||
|
FARPROC getprotobynumber;
|
||||||
|
FARPROC getservbyname;
|
||||||
|
FARPROC getservbyport;
|
||||||
|
FARPROC getsockname;
|
||||||
|
FARPROC getsockopt;
|
||||||
|
FARPROC htonl;
|
||||||
|
FARPROC htons;
|
||||||
|
FARPROC inet_addr;
|
||||||
|
FARPROC inet_network;
|
||||||
|
FARPROC inet_ntoa;
|
||||||
|
FARPROC ioctlsocket;
|
||||||
|
FARPROC listen;
|
||||||
|
FARPROC ntohl;
|
||||||
|
FARPROC ntohs;
|
||||||
|
FARPROC rcmd;
|
||||||
|
FARPROC recv;
|
||||||
|
FARPROC recvfrom;
|
||||||
|
FARPROC rexec;
|
||||||
|
FARPROC rresvport;
|
||||||
|
FARPROC s_perror;
|
||||||
|
FARPROC select;
|
||||||
|
FARPROC send;
|
||||||
|
FARPROC sendto;
|
||||||
|
FARPROC sethostname;
|
||||||
|
FARPROC setsockopt;
|
||||||
|
FARPROC shutdown;
|
||||||
|
FARPROC socket;
|
||||||
|
} wsock32;
|
||||||
|
|
||||||
|
__declspec(naked) void AcceptEx() { _asm { jmp[wsock32.AcceptEx] } }
|
||||||
|
__declspec(naked) void Arecv() { _asm { jmp[wsock32.Arecv] } }
|
||||||
|
__declspec(naked) void Asend() { _asm { jmp[wsock32.Asend] } }
|
||||||
|
__declspec(naked) void EnumProtocolsA() { _asm { jmp[wsock32.EnumProtocolsA] } }
|
||||||
|
__declspec(naked) void EnumProtocolsW() { _asm { jmp[wsock32.EnumProtocolsW] } }
|
||||||
|
__declspec(naked) void GetAcceptExSockaddrs() { _asm { jmp[wsock32.GetAcceptExSockaddrs] } }
|
||||||
|
__declspec(naked) void GetAddressByNameA() { _asm { jmp[wsock32.GetAddressByNameA] } }
|
||||||
|
__declspec(naked) void GetAddressByNameW() { _asm { jmp[wsock32.GetAddressByNameW] } }
|
||||||
|
__declspec(naked) void GetNameByTypeA() { _asm { jmp[wsock32.GetNameByTypeA] } }
|
||||||
|
__declspec(naked) void GetNameByTypeW() { _asm { jmp[wsock32.GetNameByTypeW] } }
|
||||||
|
__declspec(naked) void GetServiceA() { _asm { jmp[wsock32.GetServiceA] } }
|
||||||
|
__declspec(naked) void GetServiceW() { _asm { jmp[wsock32.GetServiceW] } }
|
||||||
|
__declspec(naked) void GetTypeByNameA() { _asm { jmp[wsock32.GetTypeByNameA] } }
|
||||||
|
__declspec(naked) void GetTypeByNameW() { _asm { jmp[wsock32.GetTypeByNameW] } }
|
||||||
|
__declspec(naked) void MigrateWinsockConfiguration() { _asm { jmp[wsock32.MigrateWinsockConfiguration] } }
|
||||||
|
__declspec(naked) void NPLoadNameSpaces() { _asm { jmp[wsock32.NPLoadNameSpaces] } }
|
||||||
|
__declspec(naked) void NSPStartup() { _asm { jmp[wsock32.NSPStartup] } }
|
||||||
|
__declspec(naked) void SetServiceA() { _asm { jmp[wsock32.SetServiceA] } }
|
||||||
|
__declspec(naked) void SetServiceW() { _asm { jmp[wsock32.SetServiceW] } }
|
||||||
|
__declspec(naked) void TransmitFile() { _asm { jmp[wsock32.TransmitFile] } }
|
||||||
|
__declspec(naked) void WEP() { _asm { jmp[wsock32.WEP] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetHostByAddr() { _asm { jmp[wsock32.WSAAsyncGetHostByAddr] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetHostByName() { _asm { jmp[wsock32.WSAAsyncGetHostByName] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetProtoByName() { _asm { jmp[wsock32.WSAAsyncGetProtoByName] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetProtoByNumber() { _asm { jmp[wsock32.WSAAsyncGetProtoByNumber] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetServByName() { _asm { jmp[wsock32.WSAAsyncGetServByName] } }
|
||||||
|
__declspec(naked) void WSAAsyncGetServByPort() { _asm { jmp[wsock32.WSAAsyncGetServByPort] } }
|
||||||
|
__declspec(naked) void WSAAsyncSelect() { _asm { jmp[wsock32.WSAAsyncSelect] } }
|
||||||
|
__declspec(naked) void WSACancelAsyncRequest() { _asm { jmp[wsock32.WSACancelAsyncRequest] } }
|
||||||
|
__declspec(naked) void WSACancelBlockingCall() { _asm { jmp[wsock32.WSACancelBlockingCall] } }
|
||||||
|
__declspec(naked) void WSACleanup() { _asm { jmp[wsock32.WSACleanup] } }
|
||||||
|
__declspec(naked) void WSAGetLastError() { _asm { jmp[wsock32.WSAGetLastError] } }
|
||||||
|
__declspec(naked) void WSAIsBlocking() { _asm { jmp[wsock32.WSAIsBlocking] } }
|
||||||
|
__declspec(naked) void WSARecvEx() { _asm { jmp[wsock32.WSARecvEx] } }
|
||||||
|
__declspec(naked) void WSASetBlockingHook() { _asm { jmp[wsock32.WSASetBlockingHook] } }
|
||||||
|
__declspec(naked) void WSASetLastError() { _asm { jmp[wsock32.WSASetLastError] } }
|
||||||
|
__declspec(naked) void WSAStartup() { _asm { jmp[wsock32.WSAStartup] } }
|
||||||
|
__declspec(naked) void WSAUnhookBlockingHook() { _asm { jmp[wsock32.WSAUnhookBlockingHook] } }
|
||||||
|
__declspec(naked) void WSApSetPostRoutine() { _asm { jmp[wsock32.WSApSetPostRoutine] } }
|
||||||
|
__declspec(naked) void WSHEnumProtocols() { _asm { jmp[wsock32.WSHEnumProtocols] } }
|
||||||
|
__declspec(naked) void WsControl() { _asm { jmp[wsock32.WsControl] } }
|
||||||
|
__declspec(naked) void __WSAFDIsSet() { _asm { jmp[wsock32.__WSAFDIsSet] } }
|
||||||
|
__declspec(naked) void accept() { _asm { jmp[wsock32.accept] } }
|
||||||
|
__declspec(naked) void bind() { _asm { jmp[wsock32.bind] } }
|
||||||
|
__declspec(naked) void closesocket() { _asm { jmp[wsock32.closesocket] } }
|
||||||
|
__declspec(naked) void closesockinfo() { _asm { jmp[wsock32.closesockinfo] } }
|
||||||
|
__declspec(naked) void connect() { _asm { jmp[wsock32.connect] } }
|
||||||
|
__declspec(naked) void dn_expand() { _asm { jmp[wsock32.dn_expand] } }
|
||||||
|
__declspec(naked) void gethostbyaddr() { _asm { jmp[wsock32.gethostbyaddr] } }
|
||||||
|
__declspec(naked) void gethostbyname() { _asm { jmp[wsock32.gethostbyname] } }
|
||||||
|
__declspec(naked) void gethostname() { _asm { jmp[wsock32.gethostname] } }
|
||||||
|
__declspec(naked) void getnetbyname() { _asm { jmp[wsock32.getnetbyname] } }
|
||||||
|
__declspec(naked) void getpeername() { _asm { jmp[wsock32.getpeername] } }
|
||||||
|
__declspec(naked) void getprotobyname() { _asm { jmp[wsock32.getprotobyname] } }
|
||||||
|
__declspec(naked) void getprotobynumber() { _asm { jmp[wsock32.getprotobynumber] } }
|
||||||
|
__declspec(naked) void getservbyname() { _asm { jmp[wsock32.getservbyname] } }
|
||||||
|
__declspec(naked) void getservbyport() { _asm { jmp[wsock32.getservbyport] } }
|
||||||
|
__declspec(naked) void getsockname() { _asm { jmp[wsock32.getsockname] } }
|
||||||
|
__declspec(naked) void getsockopt() { _asm { jmp[wsock32.getsockopt] } }
|
||||||
|
__declspec(naked) void htonl() { _asm { jmp[wsock32.htonl] } }
|
||||||
|
__declspec(naked) void htons() { _asm { jmp[wsock32.htons] } }
|
||||||
|
__declspec(naked) void inet_addr() { _asm { jmp[wsock32.inet_addr] } }
|
||||||
|
__declspec(naked) void inet_network() { _asm { jmp[wsock32.inet_network] } }
|
||||||
|
__declspec(naked) void inet_ntoa() { _asm { jmp[wsock32.inet_ntoa] } }
|
||||||
|
__declspec(naked) void ioctlsocket() { _asm { jmp[wsock32.ioctlsocket] } }
|
||||||
|
__declspec(naked) void listen() { _asm { jmp[wsock32.listen] } }
|
||||||
|
__declspec(naked) void ntohl() { _asm { jmp[wsock32.ntohl] } }
|
||||||
|
__declspec(naked) void ntohs() { _asm { jmp[wsock32.ntohs] } }
|
||||||
|
__declspec(naked) void rcmd() { _asm { jmp[wsock32.rcmd] } }
|
||||||
|
__declspec(naked) void recv() { _asm { jmp[wsock32.recv] } }
|
||||||
|
__declspec(naked) void recvfrom() { _asm { jmp[wsock32.recvfrom] } }
|
||||||
|
__declspec(naked) void rexec() { _asm { jmp[wsock32.rexec] } }
|
||||||
|
__declspec(naked) void rresvport() { _asm { jmp[wsock32.rresvport] } }
|
||||||
|
__declspec(naked) void s_perror() { _asm { jmp[wsock32.s_perror] } }
|
||||||
|
__declspec(naked) void select() { _asm { jmp[wsock32.select] } }
|
||||||
|
__declspec(naked) void send() { _asm { jmp[wsock32.send] } }
|
||||||
|
__declspec(naked) void sendto() { _asm { jmp[wsock32.sendto] } }
|
||||||
|
__declspec(naked) void sethostname() { _asm { jmp[wsock32.sethostname] } }
|
||||||
|
__declspec(naked) void setsockopt() { _asm { jmp[wsock32.setsockopt] } }
|
||||||
|
__declspec(naked) void shutdown() { _asm { jmp[wsock32.shutdown] } }
|
||||||
|
__declspec(naked) void socket() { _asm { jmp[wsock32.socket] } }
|
||||||
|
|
||||||
|
char path[MAX_PATH + 16];
|
||||||
|
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
|
{
|
||||||
|
switch (ul_reason_for_call)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
GetSystemDirectoryA(path, MAX_PATH);
|
||||||
|
lstrcatA(path, "\\WSOCK32.dll");
|
||||||
|
wsock32.dll = LoadLibraryA(path);
|
||||||
|
wsock32.AcceptEx = GetProcAddress(wsock32.dll, "AcceptEx");
|
||||||
|
wsock32.Arecv = GetProcAddress(wsock32.dll, "Arecv");
|
||||||
|
wsock32.Asend = GetProcAddress(wsock32.dll, "Asend");
|
||||||
|
wsock32.EnumProtocolsA = GetProcAddress(wsock32.dll, "EnumProtocolsA");
|
||||||
|
wsock32.EnumProtocolsW = GetProcAddress(wsock32.dll, "EnumProtocolsW");
|
||||||
|
wsock32.GetAcceptExSockaddrs = GetProcAddress(wsock32.dll, "GetAcceptExSockaddrs");
|
||||||
|
wsock32.GetAddressByNameA = GetProcAddress(wsock32.dll, "GetAddressByNameA");
|
||||||
|
wsock32.GetAddressByNameW = GetProcAddress(wsock32.dll, "GetAddressByNameW");
|
||||||
|
wsock32.GetNameByTypeA = GetProcAddress(wsock32.dll, "GetNameByTypeA");
|
||||||
|
wsock32.GetNameByTypeW = GetProcAddress(wsock32.dll, "GetNameByTypeW");
|
||||||
|
wsock32.GetServiceA = GetProcAddress(wsock32.dll, "GetServiceA");
|
||||||
|
wsock32.GetServiceW = GetProcAddress(wsock32.dll, "GetServiceW");
|
||||||
|
wsock32.GetTypeByNameA = GetProcAddress(wsock32.dll, "GetTypeByNameA");
|
||||||
|
wsock32.GetTypeByNameW = GetProcAddress(wsock32.dll, "GetTypeByNameW");
|
||||||
|
wsock32.MigrateWinsockConfiguration = GetProcAddress(wsock32.dll, "MigrateWinsockConfiguration");
|
||||||
|
wsock32.NPLoadNameSpaces = GetProcAddress(wsock32.dll, "NPLoadNameSpaces");
|
||||||
|
wsock32.NSPStartup = GetProcAddress(wsock32.dll, "NSPStartup");
|
||||||
|
wsock32.SetServiceA = GetProcAddress(wsock32.dll, "SetServiceA");
|
||||||
|
wsock32.SetServiceW = GetProcAddress(wsock32.dll, "SetServiceW");
|
||||||
|
wsock32.TransmitFile = GetProcAddress(wsock32.dll, "TransmitFile");
|
||||||
|
wsock32.WEP = GetProcAddress(wsock32.dll, "WEP");
|
||||||
|
wsock32.WSAAsyncGetHostByAddr = GetProcAddress(wsock32.dll, "WSAAsyncGetHostByAddr");
|
||||||
|
wsock32.WSAAsyncGetHostByName = GetProcAddress(wsock32.dll, "WSAAsyncGetHostByName");
|
||||||
|
wsock32.WSAAsyncGetProtoByName = GetProcAddress(wsock32.dll, "WSAAsyncGetProtoByName");
|
||||||
|
wsock32.WSAAsyncGetProtoByNumber = GetProcAddress(wsock32.dll, "WSAAsyncGetProtoByNumber");
|
||||||
|
wsock32.WSAAsyncGetServByName = GetProcAddress(wsock32.dll, "WSAAsyncGetServByName");
|
||||||
|
wsock32.WSAAsyncGetServByPort = GetProcAddress(wsock32.dll, "WSAAsyncGetServByPort");
|
||||||
|
wsock32.WSAAsyncSelect = GetProcAddress(wsock32.dll, "WSAAsyncSelect");
|
||||||
|
wsock32.WSACancelAsyncRequest = GetProcAddress(wsock32.dll, "WSACancelAsyncRequest");
|
||||||
|
wsock32.WSACancelBlockingCall = GetProcAddress(wsock32.dll, "WSACancelBlockingCall");
|
||||||
|
wsock32.WSACleanup = GetProcAddress(wsock32.dll, "WSACleanup");
|
||||||
|
wsock32.WSAGetLastError = GetProcAddress(wsock32.dll, "WSAGetLastError");
|
||||||
|
wsock32.WSAIsBlocking = GetProcAddress(wsock32.dll, "WSAIsBlocking");
|
||||||
|
wsock32.WSARecvEx = GetProcAddress(wsock32.dll, "WSARecvEx");
|
||||||
|
wsock32.WSASetBlockingHook = GetProcAddress(wsock32.dll, "WSASetBlockingHook");
|
||||||
|
wsock32.WSASetLastError = GetProcAddress(wsock32.dll, "WSASetLastError");
|
||||||
|
wsock32.WSAStartup = GetProcAddress(wsock32.dll, "WSAStartup");
|
||||||
|
wsock32.WSAUnhookBlockingHook = GetProcAddress(wsock32.dll, "WSAUnhookBlockingHook");
|
||||||
|
wsock32.WSApSetPostRoutine = GetProcAddress(wsock32.dll, "WSApSetPostRoutine");
|
||||||
|
wsock32.WSHEnumProtocols = GetProcAddress(wsock32.dll, "WSHEnumProtocols");
|
||||||
|
wsock32.WsControl = GetProcAddress(wsock32.dll, "WsControl");
|
||||||
|
wsock32.__WSAFDIsSet = GetProcAddress(wsock32.dll, "__WSAFDIsSet");
|
||||||
|
wsock32.accept = GetProcAddress(wsock32.dll, "accept");
|
||||||
|
wsock32.bind = GetProcAddress(wsock32.dll, "bind");
|
||||||
|
wsock32.closesocket = GetProcAddress(wsock32.dll, "closesocket");
|
||||||
|
wsock32.closesockinfo = GetProcAddress(wsock32.dll, "closesockinfo");
|
||||||
|
wsock32.connect = GetProcAddress(wsock32.dll, "connect");
|
||||||
|
wsock32.dn_expand = GetProcAddress(wsock32.dll, "dn_expand");
|
||||||
|
wsock32.gethostbyaddr = GetProcAddress(wsock32.dll, "gethostbyaddr");
|
||||||
|
wsock32.gethostbyname = GetProcAddress(wsock32.dll, "gethostbyname");
|
||||||
|
wsock32.gethostname = GetProcAddress(wsock32.dll, "gethostname");
|
||||||
|
wsock32.getnetbyname = GetProcAddress(wsock32.dll, "getnetbyname");
|
||||||
|
wsock32.getpeername = GetProcAddress(wsock32.dll, "getpeername");
|
||||||
|
wsock32.getprotobyname = GetProcAddress(wsock32.dll, "getprotobyname");
|
||||||
|
wsock32.getprotobynumber = GetProcAddress(wsock32.dll, "getprotobynumber");
|
||||||
|
wsock32.getservbyname = GetProcAddress(wsock32.dll, "getservbyname");
|
||||||
|
wsock32.getservbyport = GetProcAddress(wsock32.dll, "getservbyport");
|
||||||
|
wsock32.getsockname = GetProcAddress(wsock32.dll, "getsockname");
|
||||||
|
wsock32.getsockopt = GetProcAddress(wsock32.dll, "getsockopt");
|
||||||
|
wsock32.htonl = GetProcAddress(wsock32.dll, "htonl");
|
||||||
|
wsock32.htons = GetProcAddress(wsock32.dll, "htons");
|
||||||
|
wsock32.inet_addr = GetProcAddress(wsock32.dll, "inet_addr");
|
||||||
|
wsock32.inet_network = GetProcAddress(wsock32.dll, "inet_network");
|
||||||
|
wsock32.inet_ntoa = GetProcAddress(wsock32.dll, "inet_ntoa");
|
||||||
|
wsock32.ioctlsocket = GetProcAddress(wsock32.dll, "ioctlsocket");
|
||||||
|
wsock32.listen = GetProcAddress(wsock32.dll, "listen");
|
||||||
|
wsock32.ntohl = GetProcAddress(wsock32.dll, "ntohl");
|
||||||
|
wsock32.ntohs = GetProcAddress(wsock32.dll, "ntohs");
|
||||||
|
wsock32.rcmd = GetProcAddress(wsock32.dll, "rcmd");
|
||||||
|
wsock32.recv = GetProcAddress(wsock32.dll, "recv");
|
||||||
|
wsock32.recvfrom = GetProcAddress(wsock32.dll, "recvfrom");
|
||||||
|
wsock32.rexec = GetProcAddress(wsock32.dll, "rexec");
|
||||||
|
wsock32.rresvport = GetProcAddress(wsock32.dll, "rresvport");
|
||||||
|
wsock32.s_perror = GetProcAddress(wsock32.dll, "s_perror");
|
||||||
|
wsock32.select = GetProcAddress(wsock32.dll, "select");
|
||||||
|
wsock32.send = GetProcAddress(wsock32.dll, "send");
|
||||||
|
wsock32.sendto = GetProcAddress(wsock32.dll, "sendto");
|
||||||
|
wsock32.sethostname = GetProcAddress(wsock32.dll, "sethostname");
|
||||||
|
wsock32.setsockopt = GetProcAddress(wsock32.dll, "setsockopt");
|
||||||
|
wsock32.shutdown = GetProcAddress(wsock32.dll, "shutdown");
|
||||||
|
wsock32.socket = GetProcAddress(wsock32.dll, "socket");
|
||||||
|
fkAttach();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
FreeLibrary(wsock32.dll);
|
||||||
|
fkDetach();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
83
src/tool/FrontendKitWS/main.def
Normal file
83
src/tool/FrontendKitWS/main.def
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
LIBRARY "wsock32"
|
||||||
|
EXPORTS
|
||||||
|
AcceptEx @1141
|
||||||
|
Arecv @1003
|
||||||
|
Asend @1004
|
||||||
|
EnumProtocolsA @1111
|
||||||
|
EnumProtocolsW @1112
|
||||||
|
GetAcceptExSockaddrs @1142
|
||||||
|
GetAddressByNameA @1109
|
||||||
|
GetAddressByNameW @1110
|
||||||
|
GetNameByTypeA @1115
|
||||||
|
GetNameByTypeW @1116
|
||||||
|
GetServiceA @1119
|
||||||
|
GetServiceW @1120
|
||||||
|
GetTypeByNameA @1113
|
||||||
|
GetTypeByNameW @1114
|
||||||
|
MigrateWinsockConfiguration @24
|
||||||
|
NPLoadNameSpaces @1130
|
||||||
|
NSPStartup @1131
|
||||||
|
SetServiceA @1117
|
||||||
|
SetServiceW @1118
|
||||||
|
TransmitFile @1140
|
||||||
|
WEP @500
|
||||||
|
WSAAsyncGetHostByAddr @102
|
||||||
|
WSAAsyncGetHostByName @103
|
||||||
|
WSAAsyncGetProtoByName @105
|
||||||
|
WSAAsyncGetProtoByNumber @104
|
||||||
|
WSAAsyncGetServByName @107
|
||||||
|
WSAAsyncGetServByPort @106
|
||||||
|
WSAAsyncSelect @101
|
||||||
|
WSACancelAsyncRequest @108
|
||||||
|
WSACancelBlockingCall @113
|
||||||
|
WSACleanup @116
|
||||||
|
WSAGetLastError @111
|
||||||
|
WSAIsBlocking @114
|
||||||
|
WSARecvEx @1107
|
||||||
|
WSASetBlockingHook @109
|
||||||
|
WSASetLastError @112
|
||||||
|
WSAStartup @115
|
||||||
|
WSAUnhookBlockingHook @110
|
||||||
|
WSApSetPostRoutine @1000
|
||||||
|
WSHEnumProtocols @1005
|
||||||
|
WsControl @1001
|
||||||
|
__WSAFDIsSet @151
|
||||||
|
accept @1
|
||||||
|
bind @2
|
||||||
|
closesocket @3
|
||||||
|
closesockinfo @1002
|
||||||
|
connect @4
|
||||||
|
dn_expand @1106
|
||||||
|
gethostbyaddr @51
|
||||||
|
gethostbyname @52
|
||||||
|
gethostname @57
|
||||||
|
getnetbyname @1101
|
||||||
|
getpeername @5
|
||||||
|
getprotobyname @53
|
||||||
|
getprotobynumber @54
|
||||||
|
getservbyname @55
|
||||||
|
getservbyport @56
|
||||||
|
getsockname @6
|
||||||
|
getsockopt @7
|
||||||
|
htonl @8
|
||||||
|
htons @9
|
||||||
|
inet_addr @10
|
||||||
|
inet_network @1100
|
||||||
|
inet_ntoa @11
|
||||||
|
ioctlsocket @12
|
||||||
|
listen @13
|
||||||
|
ntohl @14
|
||||||
|
ntohs @15
|
||||||
|
rcmd @1102
|
||||||
|
recv @16
|
||||||
|
recvfrom @17
|
||||||
|
rexec @1103
|
||||||
|
rresvport @1104
|
||||||
|
s_perror @1108
|
||||||
|
select @18
|
||||||
|
send @19
|
||||||
|
sendto @20
|
||||||
|
sethostname @1105
|
||||||
|
setsockopt @21
|
||||||
|
shutdown @22
|
||||||
|
socket @23
|
@ -12,20 +12,22 @@ namespace Syroot.Worms.Worms2.GameServer
|
|||||||
|
|
||||||
private static void Main(string[] args)
|
private static void Main(string[] args)
|
||||||
{
|
{
|
||||||
//Proxy.Run(); return;
|
string? argEndPoint = args.Length > 0 ? args[0] : null;
|
||||||
|
|
||||||
Server server = new Server();
|
Server server = new Server();
|
||||||
server.Run(ParseEndPoint(args.Length > 0 ? args[0] : null));
|
server.Run(ParseEndPoint(argEndPoint, new IPEndPoint(IPAddress.Any, 17000)));
|
||||||
|
|
||||||
|
//Proxy.Run(ParseEndPoint(argEndPoint, new IPEndPoint(IPAddress.Any, 17001)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IPEndPoint ParseEndPoint(string? s)
|
private static IPEndPoint ParseEndPoint(string? s, IPEndPoint fallback)
|
||||||
{
|
{
|
||||||
if (UInt16.TryParse(s, out ushort port))
|
if (UInt16.TryParse(s, out ushort port))
|
||||||
return new IPEndPoint(IPAddress.Any, port);
|
return new IPEndPoint(fallback.Address, port);
|
||||||
else if (IPEndPoint.TryParse(s, out IPEndPoint endPoint))
|
else if (IPEndPoint.TryParse(s, out IPEndPoint endPoint))
|
||||||
return endPoint;
|
return endPoint;
|
||||||
else
|
else
|
||||||
return new IPEndPoint(IPAddress.Any, 17000);
|
return fallback;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,9 @@ namespace Syroot.Worms.Worms2.GameServer
|
|||||||
{
|
{
|
||||||
// ---- METHODS (INTERNAL) -------------------------------------------------------------------------------------
|
// ---- METHODS (INTERNAL) -------------------------------------------------------------------------------------
|
||||||
|
|
||||||
internal static void Run()
|
internal static void Run(IPEndPoint localEndPoint)
|
||||||
{
|
{
|
||||||
// Start listening for clients to intercept.
|
// Start listening for clients to intercept.
|
||||||
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 17000);
|
|
||||||
TcpListener listener = new TcpListener(localEndPoint);
|
TcpListener listener = new TcpListener(localEndPoint);
|
||||||
listener.Start();
|
listener.Start();
|
||||||
ColorConsole.WriteLine(Color.Orange, $"Proxy listening under {localEndPoint}...");
|
ColorConsole.WriteLine(Color.Orange, $"Proxy listening under {localEndPoint}...");
|
||||||
|
32
src/tool/fkNetcode/PEInfo.cpp
Normal file
32
src/tool/fkNetcode/PEInfo.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include "PEInfo.h"
|
||||||
|
|
||||||
|
PEInfo::PEInfo(HMODULE hModule)
|
||||||
|
{
|
||||||
|
Reset(hModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PEInfo::Reset(HMODULE hModule)
|
||||||
|
{
|
||||||
|
Handle = hModule == 0 ? GetModuleHandleA(0) : hModule;
|
||||||
|
DOS = (IMAGE_DOS_HEADER*)Handle;
|
||||||
|
NT = (IMAGE_NT_HEADERS*)((DWORD)DOS + DOS->e_lfanew);
|
||||||
|
FH = (IMAGE_FILE_HEADER*)&NT->FileHeader;
|
||||||
|
OPT = (IMAGE_OPTIONAL_HEADER*)&NT->OptionalHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD PEInfo::Offset(DWORD off)
|
||||||
|
{
|
||||||
|
return (DWORD)Handle + off;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL PEInfo::PtrInCode(PVOID ptr)
|
||||||
|
{
|
||||||
|
return DWORD(ptr) >= Offset(OPT->BaseOfCode)
|
||||||
|
&& DWORD(ptr) < Offset(OPT->BaseOfCode) + OPT->SizeOfCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL PEInfo::PtrInData(PVOID ptr)
|
||||||
|
{
|
||||||
|
return DWORD(ptr) >= Offset(OPT->BaseOfData)
|
||||||
|
&& DWORD(ptr) < Offset(OPT->BaseOfData) + OPT->SizeOfInitializedData + OPT->SizeOfUninitializedData;
|
||||||
|
}
|
19
src/tool/fkNetcode/PEInfo.h
Normal file
19
src/tool/fkNetcode/PEInfo.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
typedef struct PEInfo
|
||||||
|
{
|
||||||
|
PEInfo(HMODULE hModule = 0);
|
||||||
|
|
||||||
|
void Reset(HMODULE hModule);
|
||||||
|
DWORD Offset(DWORD off);
|
||||||
|
BOOL PtrInCode(PVOID ptr);
|
||||||
|
BOOL PtrInData(PVOID ptr);
|
||||||
|
|
||||||
|
HANDLE Handle;
|
||||||
|
IMAGE_DOS_HEADER* DOS;
|
||||||
|
IMAGE_NT_HEADERS* NT;
|
||||||
|
IMAGE_FILE_HEADER* FH;
|
||||||
|
IMAGE_OPTIONAL_HEADER* OPT;
|
||||||
|
} *PPEInfo;
|
101
src/tool/fkNetcode/fkNetcode.vcxproj
Normal file
101
src/tool/fkNetcode/fkNetcode.vcxproj
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<ProjectGuid>{c4138811-7cfa-4826-a3dd-af2b618eafc1}</ProjectGuid>
|
||||||
|
<RootNamespace>wkWorms2NetFix</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
<ProjectName>fkNetcode</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<OutDir>bin\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>obj\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>bin\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>obj\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;FKNETCODE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<AdditionalDependencies>wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;FKNETCODE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<AdditionalDependencies>wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="main.cpp" />
|
||||||
|
<ClCompile Include="misc_tools.cpp" />
|
||||||
|
<ClCompile Include="PEInfo.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="misc_tools.h" />
|
||||||
|
<ClInclude Include="PEInfo.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
98
src/tool/fkNetcode/main.cpp
Normal file
98
src/tool/fkNetcode/main.cpp
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <WinInet.h>
|
||||||
|
#include "PEInfo.h"
|
||||||
|
#include "misc_tools.h"
|
||||||
|
|
||||||
|
PEInfo pe;
|
||||||
|
CHAR szFoundIP[16] = {};
|
||||||
|
|
||||||
|
enum GameRegion
|
||||||
|
{
|
||||||
|
GAME_REGION_NONE = -1,
|
||||||
|
GAME_REGION_BR,
|
||||||
|
GAME_REGION_EN, // Du, En, Fr, It, Po, Sp, Sw have the same executable
|
||||||
|
GAME_REGION_GE,
|
||||||
|
GAME_REGION_NA,
|
||||||
|
GAME_REGION_SA
|
||||||
|
};
|
||||||
|
|
||||||
|
int getRegion()
|
||||||
|
{
|
||||||
|
switch (pe.FH->TimeDateStamp)
|
||||||
|
{
|
||||||
|
case 0x3528DAFA: return GAME_REGION_BR;
|
||||||
|
case 0x3528DCB1: return GAME_REGION_EN;
|
||||||
|
case 0x3528DB52: return GAME_REGION_GE;
|
||||||
|
case 0x3528DA98: return GAME_REGION_NA;
|
||||||
|
case 0x3528DBDA: return GAME_REGION_SA;
|
||||||
|
}
|
||||||
|
return GAME_REGION_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool __stdcall getLabelIP(LPSTR buffer, int bufferLength)
|
||||||
|
{
|
||||||
|
if (!szFoundIP[0])
|
||||||
|
{
|
||||||
|
// Initially resolve the external IP through a web service.
|
||||||
|
HINTERNET hInternet = 0, hFile = 0;
|
||||||
|
DWORD bytesRead = 0;
|
||||||
|
CHAR buffer[16];
|
||||||
|
|
||||||
|
if ((hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0))
|
||||||
|
&& (hFile = InternetOpenUrl(hInternet, "http://ip.syroot.com", NULL, 0,
|
||||||
|
INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD, NULL))
|
||||||
|
&& InternetReadFile(hFile, buffer, 16, &bytesRead) && bytesRead >= 8)
|
||||||
|
{
|
||||||
|
buffer[bytesRead] = '\0';
|
||||||
|
uint8_t temp;
|
||||||
|
if (sscanf_s(buffer, "%hhu.%hhu.%hhu.%hhu", &temp, &temp, &temp, &temp) == 4)
|
||||||
|
lstrcpy(szFoundIP, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hFile) InternetCloseHandle(hFile);
|
||||||
|
if (hInternet) InternetCloseHandle(hInternet);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the detected IP.
|
||||||
|
lstrcpy(buffer, szFoundIP);
|
||||||
|
return buffer[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void applyPatches()
|
||||||
|
{
|
||||||
|
// Replace NAT IP detection with web service.
|
||||||
|
InsertJump((PVOID)pe.Offset(0x00001799), 5, &getLabelIP, IJ_JUMP);
|
||||||
|
|
||||||
|
// Prevent overriding the resolved IP when connecting to server.
|
||||||
|
PatchMemNop(pe.Offset(0x00053E96), 5); // writes user name
|
||||||
|
PatchMemNop(pe.Offset(0x00054993), 5); // writes NAT IP
|
||||||
|
|
||||||
|
// Remove useless sleeps.
|
||||||
|
PatchMemNop(pe.Offset(0x00054935), 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI DllMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
|
{
|
||||||
|
switch (fdwReason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
if (getRegion() == GAME_REGION_NONE)
|
||||||
|
{
|
||||||
|
MessageBox(NULL, "fkNetcode is incompatible with your game version or region and will not be able to "
|
||||||
|
"resolve your external IP address. Please install the Worms 2 1.05 patch or delete this module to "
|
||||||
|
"remove this warning.", "fkNetcode", MB_ICONWARNING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
applyPatches();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
92
src/tool/fkNetcode/misc_tools.cpp
Normal file
92
src/tool/fkNetcode/misc_tools.cpp
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#include <Windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "misc_tools.h"
|
||||||
|
|
||||||
|
BOOL WritePrivateProfileIntA(LPCSTR lpAppName, LPCSTR lpKeyName, int nInteger, LPCSTR lpFileName)
|
||||||
|
{
|
||||||
|
CHAR lpString[32];
|
||||||
|
sprintf_s(lpString, "%d", nInteger);
|
||||||
|
return WritePrivateProfileStringA(lpAppName, lpKeyName, lpString, lpFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
LPSTR GetPathUnderModuleA(HMODULE hModule, LPSTR OutBuf, LPCSTR FileName)
|
||||||
|
{
|
||||||
|
GetModuleFileNameA(hModule, OutBuf, MAX_PATH);
|
||||||
|
CHAR* dirend = strrchr(OutBuf, '\\') + 1;
|
||||||
|
strcpy_s(dirend, MAX_PATH, FileName);
|
||||||
|
return OutBuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL __stdcall PatchMemData(ULONG dwAddr, ULONG dwBufLen, PVOID pNewData, ULONG dwDataLen)
|
||||||
|
{
|
||||||
|
if (!dwDataLen || !pNewData || !dwAddr)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DWORD dwLastProtection;
|
||||||
|
if (!VirtualProtect((void*)dwAddr, dwDataLen, PAGE_EXECUTE_READWRITE, &dwLastProtection))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
memcpy_s((PVOID)dwAddr, dwBufLen, pNewData, dwDataLen);
|
||||||
|
|
||||||
|
return VirtualProtect((void*)dwAddr, dwDataLen, dwLastProtection, &dwLastProtection);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL __stdcall PatchMemQword(ULONG dwAddr, QWORD qNewValue) { return PatchMemData(dwAddr, 8, &qNewValue, 8); }
|
||||||
|
BOOL __stdcall PatchMemDword(ULONG dwAddr, DWORD dwNewValue) { return PatchMemData(dwAddr, 4, &dwNewValue, 4); }
|
||||||
|
BOOL __stdcall PatchMemWord(ULONG dwAddr, WORD wNewValue) { return PatchMemData(dwAddr, 2, &wNewValue, 2); }
|
||||||
|
BOOL __stdcall PatchMemByte(ULONG dwAddr, BYTE bNewValue) { return PatchMemData(dwAddr, 1, &bNewValue, 1); }
|
||||||
|
BOOL __stdcall PatchMemFloat(ULONG dwAddr, FLOAT fNewValue)
|
||||||
|
{
|
||||||
|
DWORD dwLastProtection;
|
||||||
|
if (!VirtualProtect((void*)dwAddr, sizeof(FLOAT), PAGE_EXECUTE_READWRITE, &dwLastProtection))
|
||||||
|
return 0;
|
||||||
|
*(FLOAT*)dwAddr = fNewValue;
|
||||||
|
return VirtualProtect((void*)dwAddr, sizeof(FLOAT), dwLastProtection, &dwLastProtection);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL __stdcall PatchMemNop(ULONG dwAddr, DWORD dwPatchSize)
|
||||||
|
{
|
||||||
|
while (dwPatchSize-- && PatchMemByte(dwAddr++, 0x90));
|
||||||
|
return dwPatchSize == 0;
|
||||||
|
}
|
||||||
|
BOOL __stdcall InsertJump(PVOID pDest, DWORD dwPatchSize, PVOID pCallee, DWORD dwJumpType)
|
||||||
|
{
|
||||||
|
if (dwPatchSize >= 5 && pDest)
|
||||||
|
{
|
||||||
|
DWORD OpSize, OpCode;
|
||||||
|
switch (dwJumpType)
|
||||||
|
{
|
||||||
|
case IJ_PUSHRET: OpSize = 6; OpCode = 0x68; break;
|
||||||
|
case IJ_FARJUMP: OpSize = 7; OpCode = 0xEA; break;
|
||||||
|
case IJ_FARCALL: OpSize = 7; OpCode = 0x9A; break;
|
||||||
|
case IJ_CALL: OpSize = 5; OpCode = 0xE8; break;
|
||||||
|
default: OpSize = 5; OpCode = 0xE9; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwPatchSize < OpSize)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
PatchMemByte((ULONG)pDest, (BYTE)OpCode);
|
||||||
|
|
||||||
|
switch (OpSize)
|
||||||
|
{
|
||||||
|
case 7:
|
||||||
|
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee);
|
||||||
|
PatchMemWord((ULONG)pDest + 5, 0x23);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee);
|
||||||
|
PatchMemByte((ULONG)pDest + 5, 0xC3);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee - (ULONG)pDest - 5);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ULONG i = OpSize; i < dwPatchSize; i++)
|
||||||
|
PatchMemByte((ULONG)pDest + i, 0x90);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
27
src/tool/fkNetcode/misc_tools.h
Normal file
27
src/tool/fkNetcode/misc_tools.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef unsigned long long QWORD;
|
||||||
|
typedef QWORD *PQWORD, *LPQWORD;
|
||||||
|
|
||||||
|
extern "C" IMAGE_DOS_HEADER __ImageBase;
|
||||||
|
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
|
||||||
|
|
||||||
|
#define IJ_JUMP 0 //Insert a jump (0xE9) with InsertJump
|
||||||
|
#define IJ_CALL 1 //Insert a call (0xE8) with InsertJump
|
||||||
|
#define IJ_FARJUMP 2 //Insert a farjump (0xEA) with InsertJump
|
||||||
|
#define IJ_FARCALL 3 //Insert a farcall (0x9A) with InsertJump
|
||||||
|
#define IJ_PUSHRET 4 //Insert a pushret with InsertJump
|
||||||
|
|
||||||
|
BOOL WritePrivateProfileIntA(LPCSTR lpAppName, LPCSTR lpKeyName, int nInteger, LPCSTR lpFileName);
|
||||||
|
LPSTR GetPathUnderModuleA(HMODULE hModule, LPSTR OutBuf, LPCSTR FileName);
|
||||||
|
|
||||||
|
BOOL __stdcall PatchMemData(ULONG dwAddr, ULONG dwBufLen, PVOID pNewData, ULONG dwDataLen);
|
||||||
|
BOOL __stdcall PatchMemQword(ULONG dwAddr, QWORD qNewValue);
|
||||||
|
BOOL __stdcall PatchMemDword(ULONG dwAddr, DWORD dwNewValue);
|
||||||
|
BOOL __stdcall PatchMemWord(ULONG dwAddr, WORD wNewValue);
|
||||||
|
BOOL __stdcall PatchMemByte(ULONG dwAddr, BYTE bNewValue);
|
||||||
|
BOOL __stdcall PatchMemFloat(ULONG dwAddr, FLOAT fNewValue);
|
||||||
|
|
||||||
|
BOOL __stdcall PatchMemNop(ULONG dwAddr, DWORD dwPatchSize);
|
||||||
|
|
||||||
|
BOOL __stdcall InsertJump(PVOID pDest, DWORD dwPatchSize, PVOID pCallee, DWORD dwJumpType = IJ_JUMP);
|
Loading…
x
Reference in New Issue
Block a user