windows-nt/Source/XPSP1/NT/multimedia/dshow/mfvideo/tvplayer/tvprof/tvprofile.cpp
2020-09-26 16:20:57 +08:00

146 lines
3.6 KiB
C++

// TVProfile.cpp : Implementation of CTVProfile
#include "stdafx.h"
#include "Tvprof.h"
#include "TVProfile.h"
typedef TCHAR IPADDR_TSTR[4*4];
TCHAR gc_tszPathTVProfile[] = _TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\TVPlayer");
TCHAR gc_tszIPSinkAddress[] = _TEXT("IPSinkAddress");
TCHAR gc_tszAudioDestination[] = _TEXT("AudioDestination");
/////////////////////////////////////////////////////////////////////////////
// CTVProfile
STDMETHODIMP CTVProfile::get_IPSinkAddress(BSTR *pVal)
{
if (NULL == pVal)
return E_POINTER;
HRESULT hr = S_OK;
HKEY hKey = NULL;
LONG lRes;
// TODO: Once we expand the list of environment variables, write a function
// ReadMachineProfile that reads and caches all HKLM variables at once, and
// call it from here if not already called.
// Open key
lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
gc_tszPathTVProfile,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_QUERY_VALUE,
NULL,
&hKey,
NULL );
if ((lRes != ERROR_SUCCESS) || (hKey == NULL))
return E_FAIL;
IPADDR_TSTR tszData;
DWORD cbData;
DWORD dwType;
cbData = sizeof(IPADDR_TSTR);
lRes = RegQueryValueExA(hKey,
gc_tszIPSinkAddress,
NULL,
&dwType,
(LPBYTE)tszData,
&cbData);
RegCloseKey(hKey);
if (lRes != ERROR_SUCCESS)
{
return E_FAIL;
}
if (dwType != REG_SZ)
{
// Registry is messed up. Value of IPStringAddress is not a string.
return E_FAIL;
}
#ifdef UNICODE
*pVal = SysAllocString(tszData);
if (NULL == *pVal)
{
return E_OUTOFMEMORY;
}
#else
*pVal = SysAllocStringLen(NULL, cbData); // length of string == cbData
if (NULL == *pVal)
{
return E_OUTOFMEMORY;
}
int cConverted = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, tszData, cbData, *pVal, cbData);
if (0 == cConverted)
{
return HRESULT_FROM_WIN32(GetLastError());
}
#endif
return S_OK;
}
//******************************************************************************************
STDMETHODIMP CTVProfile::get_AudioDestination(long *pVal)
{
if (NULL == pVal)
return E_POINTER;
HRESULT hr = S_OK;
HKEY hKey = NULL;
LONG lRes;
// Open key
lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
gc_tszPathTVProfile,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_QUERY_VALUE,
NULL,
&hKey,
NULL );
if ((lRes != ERROR_SUCCESS) || (hKey == NULL))
return E_FAIL;
DWORD dwAudioDestination;
DWORD cbData;
DWORD dwType;
cbData = sizeof(DWORD);
lRes = RegQueryValueEx(hKey,
gc_tszAudioDestination,
NULL,
&dwType,
(LPBYTE)&dwAudioDestination,
&cbData);
RegCloseKey(hKey);
if (lRes != ERROR_SUCCESS)
{
return E_FAIL;
}
if (dwType != REG_DWORD)
{
// Registry is messed up. Value of AudioDestination is not a dword
return E_FAIL;
}
*pVal = (long)dwAudioDestination;
return S_OK;
}