mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.5 KiB
94 lines
2.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2000.
|
|
//
|
|
// File: D E V I C E I N F O . C P P
|
|
//
|
|
// Contents: Registrar representation of a device
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: mbend 12 Sep 2000
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
|
|
#include "uhbase.h"
|
|
#include "DeviceInfo.h"
|
|
|
|
CDeviceInfo::CDeviceInfo()
|
|
{
|
|
}
|
|
|
|
CDeviceInfo::~CDeviceInfo()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
HRESULT CDeviceInfo::HrGetService(
|
|
const PhysicalDeviceIdentifier & pdi,
|
|
const wchar_t * szUDN,
|
|
const wchar_t * szServiceId,
|
|
const wchar_t * szContainerId,
|
|
IUPnPDeviceControlPtr & pDeviceControl,
|
|
CServiceInfo ** ppServiceInfo,
|
|
BOOL bRunning)
|
|
{
|
|
CHECK_POINTER(szUDN);
|
|
CHECK_POINTER(szServiceId);
|
|
CHECK_POINTER(ppServiceInfo);
|
|
CHECK_POINTER(pDeviceControl.GetRawPointer());
|
|
TraceTag(ttidRegistrar, "CDeviceInfo::HrGetService(UDN=%S, ServiceId=%S)", szUDN, szServiceId);
|
|
HRESULT hr = S_OK;
|
|
|
|
// Look it up in the service table first
|
|
CUString strSid;
|
|
hr = strSid.HrAssign(szServiceId);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
*ppServiceInfo = m_serviceTable.Lookup(strSid);
|
|
if(!*ppServiceInfo)
|
|
{
|
|
// It doesn't exist so create it
|
|
CServiceInfo serviceInfo;
|
|
hr = serviceInfo.HrInitialize(pdi, szUDN, szServiceId, szContainerId, pDeviceControl, bRunning);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
// Put it into the table - !!! This wipes out strSid
|
|
hr = m_serviceTable.HrInsertTransfer(strSid, serviceInfo);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
// Reinit strSid
|
|
hr = strSid.HrAssign(szServiceId);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
*ppServiceInfo = m_serviceTable.Lookup(strSid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(SUCCEEDED(hr) && !*ppServiceInfo)
|
|
{
|
|
hr = E_INVALIDARG;
|
|
TraceTag(ttidRegistrar, "CDeviceInfo::HrGetService- could not find ServiceId='%S'",
|
|
static_cast<const wchar_t *>(strSid));
|
|
}
|
|
|
|
TraceHr(ttidRegistrar, FAL, hr, FALSE, "CDeviceInfo::HrGetService");
|
|
return hr;
|
|
}
|
|
|
|
void CDeviceInfo::Transfer(CDeviceInfo & ref)
|
|
{
|
|
m_serviceTable.Swap(ref.m_serviceTable);
|
|
}
|
|
|
|
void CDeviceInfo::Clear()
|
|
{
|
|
m_serviceTable.Clear();
|
|
}
|
|
|