⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtcsetup.cpp

📁 Windows CE .Net 下面 VOIP编程的经典实例。对于初学Windows 平台下VOIP编程技术的程序员颇具借鉴意义!
💻 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 + -