diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild
index 38f23cbeb2e..6099bf8c332 100644
--- a/reactos/baseaddress.rbuild
+++ b/reactos/baseaddress.rbuild
@@ -25,6 +25,7 @@
+
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.cpp b/reactos/dll/directx/bdaplgin/bdaplgin.cpp
new file mode 100644
index 00000000000..f4b443822f0
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.cpp
@@ -0,0 +1,106 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID CBDADeviceControl_GUID = {STATIC_KSMETHODSETID_BdaChangeSync};
+const GUID CBDAPinControl_GUID = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+
+
+static INTERFACE_TABLE InterfaceTable[] =
+{
+ {&CBDADeviceControl_GUID, CBDADeviceControl_fnConstructor},
+ {&CBDAPinControl_GUID, CBDAPinControl_fnConstructor},
+ {NULL, NULL}
+};
+
+extern "C"
+BOOL
+WINAPI
+DllMain(
+ HINSTANCE hInstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ OutputDebugStringW(L"BDAPLGIN::DllMain()\n");
+ DisableThreadLibraryCalls(hInstDLL);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllUnregisterServer(void)
+{
+ return S_OK;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllRegisterServer(void)
+{
+ return S_OK;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllGetClassObject(
+ REFCLSID rclsid,
+ REFIID riid,
+ LPVOID *ppv)
+{
+ UINT i;
+ HRESULT hres = E_OUTOFMEMORY;
+ IClassFactory * pcf = NULL;
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ for (i = 0; InterfaceTable[i].riid; i++)
+ {
+ if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
+ {
+ pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
+ break;
+ }
+ }
+
+ if (!pcf)
+ {
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ hres = pcf->QueryInterface(riid, ppv);
+ pcf->Release();
+
+ return hres;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllCanUnloadNow(void)
+{
+ return S_OK;
+}
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.rbuild b/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
new file mode 100644
index 00000000000..78408866a58
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
@@ -0,0 +1,27 @@
+
+
+
+
+
+ .
+ ntdll
+ kernel32
+ advapi32
+ ole32
+ advapi32
+ msvcrt
+
+ -fno-exceptions
+ -fno-rtti
+
+
+ /GR-
+
+
+ bdaplgin.cpp
+ bdaplgin.rc
+ classfactory.cpp
+ devicecontrol.cpp
+ pincontrol.cpp
+
+
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.spec b/reactos/dll/directx/bdaplgin/bdaplgin.spec
new file mode 100644
index 00000000000..5baed04ed66
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.spec
@@ -0,0 +1,4 @@
+@ stdcall DllCanUnloadNow()
+@ stdcall DllGetClassObject(ptr ptr ptr)
+@ stdcall DllRegisterServer()
+@ stdcall DllUnregisterServer()
diff --git a/reactos/dll/directx/bdaplgin/classfactory.cpp b/reactos/dll/directx/bdaplgin/classfactory.cpp
new file mode 100644
index 00000000000..10626eeae9f
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/classfactory.cpp
@@ -0,0 +1,106 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+class CClassFactory : public IClassFactory
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
+ HRESULT WINAPI LockServer(BOOL fLock);
+
+ CClassFactory(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, IID *riidInst) : m_Ref(1), m_lpfnCI(lpfnCI), m_IID(riidInst)
+ {};
+
+ virtual ~CClassFactory(){};
+
+protected:
+ LONG m_Ref;
+ LPFNCREATEINSTANCE m_lpfnCI;
+ IID * m_IID;
+};
+
+HRESULT
+WINAPI
+CClassFactory::QueryInterface(
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ *ppvObj = NULL;
+ if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppvObj = PVOID(this);
+ InterlockedIncrement(&m_Ref);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::CreateInstance(
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObject)
+{
+ *ppvObject = NULL;
+
+ if ( m_IID == NULL || IsEqualCLSID(riid, *m_IID) || IsEqualCLSID(riid, IID_IUnknown))
+ {
+ return m_lpfnCI(pUnkOuter, riid, ppvObject);
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::LockServer(
+ BOOL fLock)
+{
+ return E_NOTIMPL;
+}
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst)
+{
+ CClassFactory* factory = new CClassFactory(lpfnCI, pcRefDll, riidInst);
+
+ if (!factory)
+ return NULL;
+
+ if (pcRefDll)
+ InterlockedIncrement(pcRefDll);
+
+ return (LPCLASSFACTORY)factory;
+}
diff --git a/reactos/dll/directx/bdaplgin/devicecontrol.cpp b/reactos/dll/directx/bdaplgin/devicecontrol.cpp
new file mode 100644
index 00000000000..6fcd358ce5e
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/devicecontrol.cpp
@@ -0,0 +1,255 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
+const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
+
+class CBDADeviceControl : public IBDA_DeviceControl,
+ public IBDA_Topology
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBDA_DeviceControl methods
+ HRESULT STDMETHODCALLTYPE StartChanges( void);
+ HRESULT STDMETHODCALLTYPE CheckChanges( void);
+ HRESULT STDMETHODCALLTYPE CommitChanges( void);
+ HRESULT STDMETHODCALLTYPE GetChangeState(ULONG *pState);
+
+ // IBDA_Topology methods
+ HRESULT STDMETHODCALLTYPE GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes);
+ HRESULT STDMETHODCALLTYPE GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors);
+ HRESULT STDMETHODCALLTYPE GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces);
+ HRESULT STDMETHODCALLTYPE GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes);
+ HRESULT STDMETHODCALLTYPE GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections);
+ HRESULT STDMETHODCALLTYPE CreatePin(ULONG ulPinType, ULONG *pulPinId);
+ HRESULT STDMETHODCALLTYPE DeletePin(ULONG ulPinId);
+ HRESULT STDMETHODCALLTYPE SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType);
+ HRESULT STDMETHODCALLTYPE SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium);
+ HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId);
+ HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode);
+
+ CBDADeviceControl(HANDLE hFile) : m_Ref(0), m_Handle(hFile){};
+ virtual ~CBDADeviceControl(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IBDA_DeviceControl))
+ {
+ *Output = (IBDA_DeviceControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_Topology))
+ {
+ *Output = (IBDA_Topology*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+
+//-------------------------------------------------------------------
+// IBDA_DeviceControl methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::StartChanges( void)
+{
+ OutputDebugStringW(L"CBDADeviceControl::StartChanges: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CheckChanges( void)
+{
+ OutputDebugStringW(L"CBDADeviceControl::CheckChanges: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CommitChanges( void)
+{
+ OutputDebugStringW(L"CBDADeviceControl::CommitChanges: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetChangeState(ULONG *pState)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetChangeState: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IBDA_Topology methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetNodeTypes: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetNodeDescriptors: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetNodeInterfaces: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetPinTypes: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetTemplateConnections: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CreatePin(ULONG ulPinType, ULONG *pulPinId)
+{
+ OutputDebugStringW(L"CBDADeviceControl::CreatePin: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::DeletePin(ULONG ulPinId)
+{
+ OutputDebugStringW(L"CBDADeviceControl::DeletePin: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType)
+{
+ OutputDebugStringW(L"CBDADeviceControl::SetMediaType: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium)
+{
+ OutputDebugStringW(L"CBDADeviceControl::SetMedium: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId){
+ OutputDebugStringW(L"CBDADeviceControl::CreateTopology: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode)
+{
+ OutputDebugStringW(L"CBDADeviceControl::GetControlNode: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CBDADeviceControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CBDADeviceControl * handler = new CBDADeviceControl(NULL);
+
+ OutputDebugStringW(L"CBDADeviceControl_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/bdaplgin/pincontrol.cpp b/reactos/dll/directx/bdaplgin/pincontrol.cpp
new file mode 100644
index 00000000000..5b44495b088
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/pincontrol.cpp
@@ -0,0 +1,120 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+
+class CBDAPinControl : public IBDA_PinControl
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ // IBDA_PinControl methods
+ HRESULT STDMETHODCALLTYPE GetPinID(ULONG *pulPinID);
+ HRESULT STDMETHODCALLTYPE GetPinType(ULONG *pulPinType);
+ HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
+
+
+ CBDAPinControl(HANDLE hFile) : m_Ref(0), m_Handle(hFile){};
+ virtual ~CBDAPinControl(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IBDA_PinControl))
+ {
+ *Output = (IBDA_PinControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ OutputDebugStringW(L"CBDAPinControl::QueryInterface: NoInterface!!!\n");
+ return E_NOINTERFACE;
+}
+//-------------------------------------------------------------------
+// IBDA_PinControl methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::GetPinID(ULONG *pulPinID)
+{
+ OutputDebugStringW(L"CBDAPinControl::GetPinID: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::GetPinType(ULONG *pulPinType)
+{
+ OutputDebugStringW(L"CBDAPinControl::GetPinType: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
+{
+ OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CBDAPinControl * handler = new CBDAPinControl(NULL);
+
+ OutputDebugStringW(L"CBDAPinControl_fnConstructor");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/bdaplgin/precomp.h b/reactos/dll/directx/bdaplgin/precomp.h
new file mode 100644
index 00000000000..c14d9afa147
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/precomp.h
@@ -0,0 +1,51 @@
+#ifndef PRECOMP_H__
+#define PRECOMP_H__
+
+#define BUILDING_KS
+#define _KSDDK_
+#include
+//#include
+#include
+#define __STREAMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
+
+typedef struct
+{
+ const GUID* riid;
+ LPFNCREATEINSTANCE lpfnCI;
+} INTERFACE_TABLE;
+
+/* classfactory.cpp */
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst);
+
+/* devicecontrol.cpp */
+HRESULT
+WINAPI
+CBDADeviceControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+
+/* pincontrol.cpp */
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+
+#endif
diff --git a/reactos/dll/directx/directx.rbuild b/reactos/dll/directx/directx.rbuild
index 1f5718d37c6..78508ecc99f 100644
--- a/reactos/dll/directx/directx.rbuild
+++ b/reactos/dll/directx/directx.rbuild
@@ -4,6 +4,9 @@
+
+
+
diff --git a/reactos/include/dxsdk/bdamedia.h b/reactos/include/dxsdk/bdamedia.h
index 2eab21c70ba..1252565ff6a 100644
--- a/reactos/include/dxsdk/bdamedia.h
+++ b/reactos/include/dxsdk/bdamedia.h
@@ -201,4 +201,58 @@ typedef enum {
NULL, 0, NULL, NULL, 0)
+/* ------------------------------------------------------------
+ BDA Change Sync Method Set {FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}
+*/
+
+#define STATIC_KSMETHODSETID_BdaChangeSync \
+ 0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}
+DEFINE_GUIDSTRUCT("FD0A5AF3-B41D-11d2-9C95-00C04F7971E0", KSMETHODSETID_BdaChangeSync);
+#define KSMETHODSETID_BdaChangeSync DEFINE_GUIDNAMED(KSMETHODSETID_BdaChangeSync)
+
+typedef enum {
+ KSMETHOD_BDA_START_CHANGES = 0,
+ KSMETHOD_BDA_CHECK_CHANGES,
+ KSMETHOD_BDA_COMMIT_CHANGES,
+ KSMETHOD_BDA_GET_CHANGE_STATE
+} KSMETHOD_BDA_CHANGE_SYNC;
+
+#define DEFINE_KSMETHOD_ITEM_BDA_START_CHANGES(MethodHandler, SupportHandler)\
+ DEFINE_KSMETHOD_ITEM(\
+ KSMETHOD_BDA_START_CHANGES,\
+ KSMETHOD_TYPE_NONE,\
+ (MethodHandler),\
+ sizeof(KSMETHOD),\
+ 0,\
+ SupportHandler)
+
+#define DEFINE_KSMETHOD_ITEM_BDA_CHECK_CHANGES(MethodHandler, SupportHandler)\
+ DEFINE_KSMETHOD_ITEM(\
+ KSMETHOD_BDA_CHECK_CHANGES,\
+ KSMETHOD_TYPE_NONE,\
+ (MethodHandler),\
+ sizeof(KSMETHOD),\
+ 0,\
+ SupportHandler)
+
+#define DEFINE_KSMETHOD_ITEM_BDA_COMMIT_CHANGES(MethodHandler, SupportHandler)\
+ DEFINE_KSMETHOD_ITEM(\
+ KSMETHOD_BDA_COMMIT_CHANGES,\
+ KSMETHOD_TYPE_NONE,\
+ (MethodHandler),\
+ sizeof(KSMETHOD),\
+ 0,\
+ SupportHandler)
+
+#define DEFINE_KSMETHOD_ITEM_BDA_GET_CHANGE_STATE(MethodHandler, SupportHandler)\
+ DEFINE_KSMETHOD_ITEM(\
+ KSMETHOD_BDA_GET_CHANGE_STATE,\
+ KSMETHOD_TYPE_READ,\
+ (MethodHandler),\
+ sizeof(KSMETHOD),\
+ 0,\
+ SupportHandler)
+
+
+
#endif