aboutsummaryrefslogtreecommitdiff
path: root/Src/wbm
diff options
context:
space:
mode:
Diffstat (limited to 'Src/wbm')
-rw-r--r--Src/wbm/WbmSvcMgr.cpp20
-rw-r--r--Src/wbm/WbmSvcMgr.h17
-rw-r--r--Src/wbm/main.cpp168
-rw-r--r--Src/wbm/wbm.sln30
-rw-r--r--Src/wbm/wbm.vcxproj257
-rw-r--r--Src/wbm/wbm.vcxproj.filters27
6 files changed, 519 insertions, 0 deletions
diff --git a/Src/wbm/WbmSvcMgr.cpp b/Src/wbm/WbmSvcMgr.cpp
new file mode 100644
index 00000000..4496d0f9
--- /dev/null
+++ b/Src/wbm/WbmSvcMgr.cpp
@@ -0,0 +1,20 @@
+#include "WbmSvcMgr.h"
+#include <api/service/waServiceFactory.h>
+int Add(HANDLE manifest, GUID service_guid, uint32_t service_type, const char *service_name, const char *service_test_string);
+int WbmSvcMgr::service_register(waServiceFactory *svc)
+{
+ GUID service_guid = svc->getGuid();
+ uint32_t service_type = svc->getServiceType();
+ const char *service_name = svc->getServiceName();
+ const char *service_test_string = (const char *)svc->getTestString();
+ printf("Found service: %s\n", service_name);
+ Add(manifest, service_guid, service_type, service_name, service_test_string);
+
+ return 1;
+}
+
+#define CBCLASS WbmSvcMgr
+START_DISPATCH;
+CB(API_SERVICE_SERVICE_REGISTER, service_register);
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file
diff --git a/Src/wbm/WbmSvcMgr.h b/Src/wbm/WbmSvcMgr.h
new file mode 100644
index 00000000..5fd523c2
--- /dev/null
+++ b/Src/wbm/WbmSvcMgr.h
@@ -0,0 +1,17 @@
+#pragma once
+#include <windows.h>
+#include <api/service/api_service.h>
+
+class WbmSvcMgr : public api_service
+{
+public:
+ WbmSvcMgr(HANDLE _manifest)
+ {
+ manifest=_manifest;
+ }
+ int service_register(waServiceFactory *svc);
+protected:
+ RECVS_DISPATCH;
+private:
+ HANDLE manifest;
+}; \ No newline at end of file
diff --git a/Src/wbm/main.cpp b/Src/wbm/main.cpp
new file mode 100644
index 00000000..7a63f2fe
--- /dev/null
+++ b/Src/wbm/main.cpp
@@ -0,0 +1,168 @@
+#include <windows.h>
+#include <bfc/platform/types.h>
+#include <bfc/platform/guid.h>
+#include <bfc/std_mkncc.h>
+#include <rpc.h>
+#include <stdio.h>
+#include <api/service/api_service.h>
+#include "../Agave/Component/ifc_wa5component.h"
+#include "WbmSvcMgr.h"
+
+/* layout (binary)
+0xdeadbeef - 32 bits
+service guid - 128 bits
+service fourcc - 32 bits
+length of service name - 16bits
+service name - see previous
+length of test string - 16 bits
+test string - see previous
+repeat as necessary
+*/
+
+static uint32_t magic_word = 0xdeadbeefUL;
+int Add(HANDLE manifest, GUID service_guid, uint32_t service_type, const char *service_name, const char *service_test_string)
+{
+ DWORD bytesWritten=0;
+ WriteFile(manifest, &magic_word, sizeof(magic_word), &bytesWritten, NULL);
+ WriteFile(manifest, &service_guid, sizeof(service_guid), &bytesWritten, NULL);
+ WriteFile(manifest, &service_type, sizeof(service_type), &bytesWritten, NULL);
+ uint16_t service_name_length = 0;
+ if (service_name)
+ service_name_length = (uint16_t)strlen(service_name);
+ WriteFile(manifest, &service_name_length, sizeof(service_name_length), &bytesWritten, NULL);
+ if (service_name_length)
+ WriteFile(manifest, service_name, service_name_length, &bytesWritten, NULL);
+ uint16_t service_test_string_length = 0;
+ if (service_test_string)
+ service_test_string_length = (uint16_t)strlen(service_test_string);
+ WriteFile(manifest, &service_test_string_length, sizeof(service_test_string_length), &bytesWritten, NULL);
+ if (service_test_string_length)
+ WriteFile(manifest, service_test_string, service_test_string_length, &bytesWritten, NULL);
+ return 0;
+}
+
+static GUID MakeGUID(const char *source)
+{
+ if (!strchr(source, '{') || !strchr(source, '}'))
+ return INVALID_GUID;
+
+ GUID guid;
+ int Data1, Data2, Data3;
+ int Data4[8];
+
+ // {1B3CA60C-DA98-4826-B4A9-D79748A5FD73}
+ int n = sscanf( source, " { %08x - %04x - %04x - %02x%02x - %02x%02x%02x%02x%02x%02x } ",
+ &Data1, &Data2, &Data3, Data4 + 0, Data4 + 1,
+ Data4 + 2, Data4 + 3, Data4 + 4, Data4 + 5, Data4 + 6, Data4 + 7 );
+
+ if (n != 11) return INVALID_GUID;
+
+ // Cross assign all the values
+ guid.Data1 = Data1;
+ guid.Data2 = Data2;
+ guid.Data3 = Data3;
+ guid.Data4[0] = Data4[0];
+ guid.Data4[1] = Data4[1];
+ guid.Data4[2] = Data4[2];
+ guid.Data4[3] = Data4[3];
+ guid.Data4[4] = Data4[4];
+ guid.Data4[5] = Data4[5];
+ guid.Data4[6] = Data4[6];
+ guid.Data4[7] = Data4[7];
+
+ return guid;
+}
+
+static ifc_wa5component *LoadWasabiComponent(const char *filename, api_service *svcmgr)
+{
+ ifc_wa5component * comp = 0;
+ HMODULE wacLib = LoadLibraryA(filename);
+ if (wacLib)
+ {
+ GETCOMPONENT_FUNC f = (GETCOMPONENT_FUNC)GetProcAddress(wacLib, "GetWinamp5SystemComponent");
+ if (f)
+ {
+ comp = f();
+ if (comp)
+ {
+ comp->hModule = wacLib;
+ comp->RegisterServices(svcmgr);
+ }
+ }
+ }
+ return comp;
+}
+
+void UnloadWasabiComponent(ifc_wa5component *comp, api_service *svcmgr)
+{
+ comp->DeregisterServices(svcmgr);
+
+ FreeLibrary(comp->hModule);
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc < 3)
+ return 1;
+
+ const char *command=argv[1];
+ const char *filename=argv[2];
+
+ if (!_stricmp(command, "create"))
+ {
+ const char *guid = argv[3];
+ const char *type = argv[4];
+ const char *name = argv[5];
+ const char *test_string = (argc>6)?argv[5]:NULL;
+ GUID service_guid = MakeGUID(guid);
+
+ FOURCC service_type = MK4CC(type[0], type[1], type[2], type[3]);
+
+
+ HANDLE manifest = CreateFileA(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
+ if (manifest != INVALID_HANDLE_VALUE)
+ {
+ Add(manifest, service_guid, service_type, name, test_string);
+ CloseHandle(manifest);
+ }
+ }
+ else if (!_stricmp(command, "add"))
+ {
+ const char *guid = argv[3];
+ const char *type = argv[4];
+ const char *name = argv[5];
+ const char *test_string = (argc>6)?argv[5]:NULL;
+ GUID service_guid = MakeGUID(guid);
+
+ FOURCC service_type = MK4CC(type[0], type[1], type[2], type[3]);
+
+ HANDLE manifest = CreateFileA(filename, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
+ if (manifest != INVALID_HANDLE_VALUE)
+ {
+ SetFilePointer(manifest, 0, 0, FILE_END);
+ Add(manifest, service_guid, service_type, name, test_string);
+ CloseHandle(manifest);
+ }
+ }
+ else if (!_stricmp(command, "auto") && argc >= 4)
+ {
+ const char *w5s_filename = argv[3];
+ HANDLE manifest = CreateFileA(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
+ if (manifest != INVALID_HANDLE_VALUE)
+ {
+ WbmSvcMgr svcmgr(manifest);
+ ifc_wa5component *comp = LoadWasabiComponent(w5s_filename, &svcmgr);
+ if (comp)
+ {
+ UnloadWasabiComponent(comp, &svcmgr);
+ }
+ else
+ printf("failed to load %s\n", w5s_filename);
+ CloseHandle(manifest);
+ }
+ else
+ printf("failed to create %s\n", filename);
+
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/Src/wbm/wbm.sln b/Src/wbm/wbm.sln
new file mode 100644
index 00000000..25e2881d
--- /dev/null
+++ b/Src/wbm/wbm.sln
@@ -0,0 +1,30 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29424.173
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wbm", "wbm.vcxproj", "{7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Debug|Win32.Build.0 = Debug|Win32
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Debug|x64.ActiveCfg = Debug|x64
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Debug|x64.Build.0 = Debug|x64
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Release|Win32.ActiveCfg = Release|Win32
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Release|Win32.Build.0 = Release|Win32
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Release|x64.ActiveCfg = Release|x64
+ {7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9D2EA7DB-DF43-4944-9E6F-8CF2B012DA49}
+ EndGlobalSection
+EndGlobal
diff --git a/Src/wbm/wbm.vcxproj b/Src/wbm/wbm.vcxproj
new file mode 100644
index 00000000..ca373ed4
--- /dev/null
+++ b/Src/wbm/wbm.vcxproj
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{7B0D8017-8DC4-4DD0-94D7-2BA54E6800FD}</ProjectGuid>
+ <RootNamespace>wbm</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg">
+ <VcpkgEnableManifest>false</VcpkgEnableManifest>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ <VcpkgUseStatic>false</VcpkgUseStatic>
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ <VcpkgUseStatic>false</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ <VcpkgUseStatic>false</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ <VcpkgUseStatic>false</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp" />
+ <ClCompile Include="WbmSvcMgr.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="WbmSvcMgr.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Wasabi\Wasabi.vcxproj">
+ <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Src/wbm/wbm.vcxproj.filters b/Src/wbm/wbm.vcxproj.filters
new file mode 100644
index 00000000..835f1c7c
--- /dev/null
+++ b/Src/wbm/wbm.vcxproj.filters
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="WbmSvcMgr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{e669cb2f-4834-4b8d-96bc-4b1edce71719}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Ressource Files">
+ <UniqueIdentifier>{45b6b1bd-1ee8-4a27-a2f5-ec11788419e8}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{62a5586a-c0a8-49a4-8fca-4d46dff6117d}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="WbmSvcMgr.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file