📄 rtcsetup.cpp
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*************************************************************************
Disclaimer:
This code and information is provided "as is" without warranty of
any kind, either expressed or implied, including but not limited to
the implied warranties of merchantability and/or fitness for a
particular purpose.
Module Name:
Session.h
Abstract:
Structures, defines, constants and code to install the COM interface registry keys
necessary for the VoIP feature.
Notes:
**************************************************************************/
#include <windows.h>
#define ROOT_HKEY HKEY_CLASSES_ROOT
typedef struct _REG_VALUE_DESCR {
LPWSTR val_name;
DWORD val_type;
PBYTE val_data;
} REG_VALUE_DESCR, * PREG_VALUE_DESCR;
WCHAR szMSRTPSourceFilter [] = L"CLSID\\{5467edec-0cca-11d3-96e0-00104bc7b3a8}\\InprocServer32";
WCHAR szMSRTPRenderFilter [] = L"CLSID\\{323cdf3c-0cca-11d3-96e0-00104bc7b3a8}\\InprocServer32";
WCHAR szTAPI_ENCODING_HANDLER [] = L"CLSID\\{1dcd0710-0b41-11d3-a565-00c04f8ef6e3}\\InprocServer32";
WCHAR szTAPI_DECODING_HANDLER [] = L"CLSID\\{1dcd0711-0b41-11d3-a565-00c04f8ef6e3}\\InprocServer32";
WCHAR szTAPIAudioCapture [] = L"CLSID\\{581d09e5-0b45-11d3-a565-00c04f8ef6e3}\\InprocServer32";
WCHAR szTAPIAudioDecoder [] = L"CLSID\\{65439c20-604f-49ca-aa82-dc01a10af171}\\InprocServer32";
WCHAR szTAPIAudioEncoder [] = L"CLSID\\{8d5c6cb6-0b44-4a5a-b785-44c366d4e677}\\InprocServer32";
WCHAR szTAPIAudioRender [] = L"CLSID\\{44a3b142-cf81-42ea-b4d1-f43dd6f64ece}\\InprocServer32";
WCHAR szIAudioStatistics [] = L"CLSID\\{20fc7641-f3b2-4384-96ad-bf3d986e8751}\\InprocServer32";
//
// RTCClient COM Interfaces
//
WCHAR szIID_IRTCBuddy[] = L"CLSID\\{fcb136c8-7b90-4e0c-befe-56edf0ba6f1c}\\InprocServer32";
WCHAR szIID_IRTCBuddyEvent[] = L"CLSID\\{f36d755d-17e6-404e-954f-0fc07574c78d}\\InprocServer32";
WCHAR szLIBID_RTCCORELib[] = L"CLSID\\{cd260094-de10-4aee-ac73ef87f6e12683}\\InprocServer32";
WCHAR szCLSID_RTCClient[] = L"CLSID\\{7a42ea29-a2b7-40c4-b091-f6f024aa89be}\\InprocServer32";
WCHAR szIID_IRTCClient[] = L"CLSID\\{07829e45-9a34-408e-a011-bddf13487cd1}\\InprocServer32";
WCHAR szIID_IRTCClientEvent[] = L"CLSID\\{2b493b7a-3cba-4170-9c8b-76a9dacdd644}\\InprocServer32";
WCHAR szIID_IRTCClientPresence[] = L"CLSID\\{11c3cbcc-0744-42d1-968a-51aa1bb274c6}\\InprocServer32";
WCHAR szIID_IRTCClientProvisioning[] = L"CLSID\\{B9F5CF06-65B9-4a80-A0E6-73CAE3EF3822}\\InprocServer32";
WCHAR szIID_IRTCCollection[] = L"CLSID\\{EC7C8096-B918-4044-94F1-E4FBA0361D5C}\\InprocServer32";
WCHAR szDIID_IRTCDispatchEventNotification[] = L"CLSID\\{176ddfbe-fec0-4d55-bc87-84cff1ef7f91}\\InprocServer32";
WCHAR szIID_IRTCEnumBuddies[] = L"CLSID\\{f7296917-5569-4b3b-b3af-98d1144b2b87}\\InprocServer32";
WCHAR szIID_IRTCEnumParticipants[] = L"CLSID\\{fcd56f29-4a4f-41b2-ba5c-f5bccc060bf6}\\InprocServer32";
WCHAR szIID_IRTCEnumProfiles[] = L"CLSID\\{29b7c41c-ed82-4bca-84ad-39d5101b58e3}\\InprocServer32";
WCHAR szIID_IRTCEnumWatchers[] = L"CLSID\\{a87d55d7-db74-4ed1-9ca4-77a0e41b413e}\\InprocServer32";
WCHAR szIID_IRTCEventNotification[] = L"CLSID\\{13fa24c7-5748-4b21-91f5-7397609ce747}\\InprocServer32";
WCHAR szIID_IRTCIntensityEvent[] = L"CLSID\\{4c23bf51-390c-4992-a41d-41eec05b2a4b}\\InprocServer32";
WCHAR szIID_IRTCMediaEvent[] = L"CLSID\\{099944fb-bcda-453e-8c41-e13da2adf7f3}\\InprocServer32";
WCHAR szIID_IRTCMessagingEvent[] = L"CLSID\\{d3609541-1b29-4de5-a4ad-5aebaf319512}\\InprocServer32";
WCHAR szIID_IRTCParticipant[] = L"CLSID\\{ae86add5-26b1-4414-af1d-b94cd938d739}\\InprocServer32";
WCHAR szIID_IRTCParticipantStateChangeEvent[] = L"CLSID\\{09bcb597-f0fa-48f9-b420-468cea7fde04}\\InprocServer32";
WCHAR szIID_IRTCPresenceContact[] = L"CLSID\\{8b22f92c-cd90-42db-a733-212205c3e3df}\\InprocServer32";
WCHAR szIID_IRTCProfile[] = L"CLSID\\{d07eca9e-4062-4dd4-9e7d-722a49ba7303}\\InprocServer32";
WCHAR szIID_IRTCRegistrationStateChangeEvent[] = L"CLSID\\{62d0991b-50ab-4f02-b948-ca94f26f8f95}\\InprocServer32";
WCHAR szIID_IRTCSession[] = L"CLSID\\{387c8086-99be-42fb-9973-7c0fc0ca9fa8}\\InprocServer32";
WCHAR szIID_IRTCSessionStateChangeEvent[] = L"CLSID\\{b5bad703-5952-48b3-9321-7f4500521506}\\InprocServer32";
WCHAR szIID_IRTCSessionOperationCompleteEvent[] = L"CLSID\\{a6bff4c0-f7c8-4d3c-9a41-3550f78a95b0}\\InprocServer32";
WCHAR szIID_IRTCWatcher[] = L"CLSID\\{f30d7261-587a-424f-822c-312788f43548}\\InprocServer32";
WCHAR szIID_IRTCWatcherEvent[] = L"CLSID\\{c7cedad8-346b-4d1b-ac02-a2088df9be4f}\\InprocServer32";
REG_VALUE_DESCR DxmRTPValues[] = {
NULL, REG_SZ, (PBYTE)(L"dxmrtp.dll"),
NULL, 0, NULL
};
REG_VALUE_DESCR RTCClientValues[] = {
NULL, REG_SZ, (PBYTE)(L"rtcclient.dll"),
NULL, 0, NULL
};
PREG_VALUE_DESCR Values[] = {
DxmRTPValues, // MSRTPSourceFilter
DxmRTPValues, // MSRTPRenderFilter
DxmRTPValues, // TAPI_ENCODING_HANDLER
DxmRTPValues, // TAPI_DECODING_HANDLER
DxmRTPValues, // TAPIAudioCapture
DxmRTPValues, // TAPIAudioDecoder
DxmRTPValues, // TAPIAudioEncoder
DxmRTPValues, // TAPIAudioRender
DxmRTPValues, // IAudioStatistics
RTCClientValues, // szIID_IRTCBuddy
RTCClientValues, // szIID_IRTCBuddyEvent
RTCClientValues, // szLIBID_RTCCORELib
RTCClientValues, // szCLSID_RTCClient
RTCClientValues, // szIID_IRTCClient
RTCClientValues, // szIID_IRTCClientEvent
RTCClientValues, // szIID_IRTCClientPresence
RTCClientValues, // szIID_IRTCClientProvisioning
RTCClientValues, // szIID_IRTCCollection
RTCClientValues, // szDIID_IRTCDispatchEventNotification
RTCClientValues, // szIID_IRTCEnumBuddies
RTCClientValues, // szIID_IRTCEnumParticipants
RTCClientValues, // szIID_IRTCEnumProfiles
RTCClientValues, // szIID_IRTCEnumWatchers
RTCClientValues, // szIID_IRTCEventNotification
RTCClientValues, // szIID_IRTCIntensityEvent
RTCClientValues, // szIID_IRTCMediaEvent
RTCClientValues, // szIID_IRTCMessagingEvent
RTCClientValues, // szIID_IRTCParticipant
RTCClientValues, // szIID_IRTCParticipantStateChangeEvent
RTCClientValues, // szIID_IRTCPresenceContact
RTCClientValues, // szIID_IRTCProfile
RTCClientValues, // szIID_IRTCRegistrationStateChangeEvent
RTCClientValues, // szIID_IRTCSession
RTCClientValues, // szIID_IRTCSessionStateChangeEvent
RTCClientValues, // szIID_IRTCSessionOperationCompleteEvent
RTCClientValues, // szIID_IRTCWatcher
RTCClientValues // szIID_IRTCWatcherEvent
};
LPWSTR KeyNames[] = {
szMSRTPSourceFilter,
szMSRTPRenderFilter,
szTAPI_ENCODING_HANDLER,
szTAPI_DECODING_HANDLER,
szTAPIAudioCapture,
szTAPIAudioDecoder,
szTAPIAudioEncoder,
szTAPIAudioRender,
szIAudioStatistics,
szIID_IRTCBuddy,
szIID_IRTCBuddyEvent,
szLIBID_RTCCORELib,
szCLSID_RTCClient,
szIID_IRTCClient,
szIID_IRTCClientEvent,
szIID_IRTCClientPresence,
szIID_IRTCClientProvisioning,
szIID_IRTCCollection,
szDIID_IRTCDispatchEventNotification,
szIID_IRTCEnumBuddies,
szIID_IRTCEnumParticipants,
szIID_IRTCEnumProfiles,
szIID_IRTCEnumWatchers,
szIID_IRTCEventNotification,
szIID_IRTCIntensityEvent,
szIID_IRTCMediaEvent,
szIID_IRTCMessagingEvent,
szIID_IRTCParticipant,
szIID_IRTCParticipantStateChangeEvent,
szIID_IRTCPresenceContact,
szIID_IRTCProfile,
szIID_IRTCRegistrationStateChangeEvent,
szIID_IRTCSession,
szIID_IRTCSessionStateChangeEvent,
szIID_IRTCSessionOperationCompleteEvent,
szIID_IRTCWatcher,
szIID_IRTCWatcherEvent
};
//
// Add the specified key and its values to the registry under HKEY_LOCAL_MACHINE
//
BOOL
AddKeyValues(
LPWSTR KeyName,
PREG_VALUE_DESCR Vals
)
{
DWORD Status;
DWORD dwDisp;
HKEY hKey;
PREG_VALUE_DESCR pValue;
DWORD ValLen;
PBYTE pVal;
DWORD dwVal;
LPWSTR pStr;
Status = RegCreateKeyEx(
ROOT_HKEY,
KeyName,
0,
NULL,
REG_OPTION_NON_VOLATILE,
0,
NULL,
&hKey,
&dwDisp);
if (Status != ERROR_SUCCESS) {
return FALSE;
}
pValue = Vals;
while (pValue->val_data) {
switch (pValue->val_type) {
case REG_DWORD:
pVal = (PBYTE)&dwVal;
dwVal = (DWORD)pValue->val_data;
ValLen = sizeof(DWORD);
break;
case REG_SZ:
pVal = (PBYTE)pValue->val_data;
ValLen = (wcslen((LPWSTR)pVal) + 1)*sizeof(WCHAR);
break;
case REG_MULTI_SZ:
pStr = (LPWSTR)pValue->val_data;
dwVal = 0;
while (*pStr) {
dwDisp = wcslen(pStr) + 1;
dwVal += dwDisp;
pStr += dwDisp;
}
dwVal++;
ValLen = dwVal*sizeof(WCHAR);
pVal = pValue->val_data;
break;
}
Status = RegSetValueEx(
hKey,
pValue->val_name,
0,
pValue->val_type,
pVal,
ValLen
);
if (Status != ERROR_SUCCESS) {
RegCloseKey(hKey);
return FALSE;
}
pValue++;
}
RegCloseKey(hKey);
return TRUE;
} // AddKeyValues
BOOL
AlreadyPresent(
LPWSTR szRegKey
)
{
HKEY hKey;
DWORD rc;
rc = RegOpenKeyEx(ROOT_HKEY, szRegKey, 0, 0, &hKey);
if (ERROR_SUCCESS == rc) {
RegCloseKey(hKey);
return TRUE;
}
return FALSE;
} // AlreadyPresent
//
// Install the RTC client COM interfaces and the RTP filter COM interfaces if not present.
//
void InstallCOMInterfaces(void)
{
DWORD i;
if (AlreadyPresent(szCLSID_RTCClient)) {
return;
}
for (i = 0; i < (sizeof(KeyNames)/sizeof(LPWSTR)); i++) {
AddKeyValues(KeyNames[i], Values[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -