2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/bdaplgin.cpp
5 * PURPOSE: ClassFactory interface
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
12 const GUID CBDADeviceControl_GUID
= {STATIC_KSMETHODSETID_BdaChangeSync
};
13 const GUID CBDAPinControl_GUID
= {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
15 static INTERFACE_TABLE InterfaceTable
[] =
17 {&CBDADeviceControl_GUID
, CBDADeviceControl_fnConstructor
},
18 {&CBDAPinControl_GUID
, CBDAPinControl_fnConstructor
},
32 case DLL_PROCESS_ATTACH
:
36 OutputDebugStringW(L
"BDAPLGIN::DllMain()\n");
39 DisableThreadLibraryCalls(hInstDLL
);
53 DllUnregisterServer(void)
60 if (RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_SET_VALUE
, &hClass
) != ERROR_SUCCESS
)
65 hr
= StringFromCLSID(*InterfaceTable
[Index
].riid
, &pStr
);
69 RegDeleteKeyW(hClass
, pStr
);
72 }while(InterfaceTable
[Index
].lpfnCI
!= 0);
82 DllRegisterServer(void)
87 HKEY hClass
, hKey
, hSubKey
;
88 static LPCWSTR ModuleName
= L
"bdaplgin.ax";
89 static LPCWSTR ThreadingModel
= L
"Both";
91 if (RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_WRITE
, &hClass
) != ERROR_SUCCESS
)
96 hr
= StringFromCLSID(*InterfaceTable
[Index
].riid
, &pStr
);
100 if (RegCreateKeyExW(hClass
, pStr
, 0, 0, 0, KEY_WRITE
, NULL
, &hKey
, 0) == ERROR_SUCCESS
)
102 if (RegCreateKeyExW(hKey
, L
"InprocServer32", 0, 0, 0, KEY_WRITE
, NULL
, &hSubKey
, 0) == ERROR_SUCCESS
)
104 RegSetValueExW(hSubKey
, 0, 0, REG_SZ
, (const BYTE
*)ModuleName
, (wcslen(ModuleName
) + 1) * sizeof(WCHAR
));
105 RegSetValueExW(hSubKey
, L
"ThreadingModel", 0, REG_SZ
, (const BYTE
*)ThreadingModel
, (wcslen(ThreadingModel
) + 1) * sizeof(WCHAR
));
106 RegCloseKey(hSubKey
);
113 }while(InterfaceTable
[Index
].lpfnCI
!= 0);
128 HRESULT hres
= E_OUTOFMEMORY
;
129 IClassFactory
* pcf
= NULL
;
136 for (i
= 0; InterfaceTable
[i
].riid
; i
++)
138 if (IsEqualIID(*InterfaceTable
[i
].riid
, rclsid
))
140 pcf
= CClassFactory_fnConstructor(InterfaceTable
[i
].lpfnCI
, NULL
, NULL
);
147 return CLASS_E_CLASSNOTAVAILABLE
;
150 hres
= pcf
->QueryInterface(riid
, ppv
);
159 DllCanUnloadNow(void)