Source code of Windows XP (NT5)
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.
|
|
//
// MODULE: LaunchTS.cpp
//
// PURPOSE: The interface that TSHOOT.OCX uses to get network and node information
// from the LaunchServ.
//
// PROJECT: Local Troubleshooter Launcher for the Device Manager
//
// COMPANY: Saltmine Creative, Inc. (206)-633-4743 [email protected]
//
// AUTHOR: Richard Meadows
// COMMENTS BY: Joe Mabel
//
// ORIGINAL DATE: 2-26-98
//
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.1 - RM Original
///////////////////////
#include "stdafx.h"
#include "LaunchServ.h"
#include "StateInfo.h"
#include "LaunchTS.h"
#include "ComGlobals.h"
extern CSMStateInfo g_StateInfo;
/////////////////////////////////////////////////////////////////////////////
// CLaunchTS - Created as a plain apartment model interface.
// This fills in m_refedLaunchState from TSLaunchServ's global memory.
// The resulting values tell us what troubleshooting network to use and can
// indicate a problem node and even indicate states to set for other nodes.
STDMETHODIMP CLaunchTS::GetShooterStates(DWORD * pdwResult) { HRESULT hRes; m_csThreadSafeBr.Lock(); hRes = g_StateInfo.GetShooterStates(m_refedLaunchState, pdwResult); m_csThreadSafeBr.Unlock(); return hRes; }
// OUTPUT pbstrShooter is the name of the Troubleshooting network to launch to
// Note that this string is allocated by this function
// Returns true if there is a Troubleshooting network to launch to
// Must be called after CLaunchTS::GetShooterStates, since it assumes
// m_refedLaunchState contains good values
STDMETHODIMP CLaunchTS::GetTroubleShooter(BSTR * pbstrShooter) { LPTSTR pszCmd; LPTSTR pszVal; m_csThreadSafeBr.Lock(); if (!m_refedLaunchState.GetNetwork(&pszCmd, &pszVal)) { m_csThreadSafeBr.Unlock(); return S_FALSE; } *pbstrShooter = SysAllocString((BSTR) CComBSTR(pszVal)); m_csThreadSafeBr.Unlock(); return S_OK; }
// OUTPUT pbstrProblem is the symbolic name of the selected problem node
// Note that this string is allocated by this function
// Returns true if there is a selected problem node
// Must be called after CLaunchTS::GetShooterStates, since it assumes
// m_refedLaunchState contains good values
STDMETHODIMP CLaunchTS::GetProblem(BSTR * pbstrProblem) { LPTSTR pszCmd; LPTSTR pszVal; m_csThreadSafeBr.Lock(); if (!m_refedLaunchState.GetProblem(&pszCmd, &pszVal)) { m_csThreadSafeBr.Unlock(); return S_FALSE; } *pbstrProblem = SysAllocString((BSTR) CComBSTR(pszVal)); m_csThreadSafeBr.Unlock(); return S_OK; }
STDMETHODIMP CLaunchTS::GetMachine(BSTR * pbstrMachine) { m_csThreadSafeBr.Lock(); *pbstrMachine = ::SysAllocString((BSTR) CComBSTR(m_refedLaunchState.m_szMachineID)); m_csThreadSafeBr.Unlock(); return S_OK; }
STDMETHODIMP CLaunchTS::GetPNPDevice(BSTR *pbstrPNPDevice) { m_csThreadSafeBr.Lock(); *pbstrPNPDevice = ::SysAllocString((BSTR) CComBSTR(m_refedLaunchState.m_szPNPDeviceID)); m_csThreadSafeBr.Unlock(); return S_OK; }
STDMETHODIMP CLaunchTS::GetGuidClass(BSTR *pbstrGuidClass) { m_csThreadSafeBr.Lock(); *pbstrGuidClass = ::SysAllocString((BSTR) CComBSTR(m_refedLaunchState.m_szGuidClass)); m_csThreadSafeBr.Unlock(); return S_OK; }
STDMETHODIMP CLaunchTS::GetDeviceInstance(BSTR *pbstrDeviceInstance) { m_csThreadSafeBr.Lock(); *pbstrDeviceInstance = ::SysAllocString((BSTR) CComBSTR(m_refedLaunchState.m_szDeviceInstanceID)); m_csThreadSafeBr.Unlock(); return S_OK; }
// INPUT iNode - index of (non-problem) node. Typically, this function should be called
// in a loop where we first see if there is a pbstrNode value for iNode == 0 and then
// increment iNode until we reach a value for which pbstrNode is undefined.
// OUTPUT pbstrNode is the symbolic name of a (non-problem) node whose state we want to set
// Note that this string is allocated by this function
// Returns true if there is a selected problem node
// Must be called after CLaunchTS::GetShooterStates, since it assumes
// m_refedLaunchState contains good values
STDMETHODIMP CLaunchTS::GetNode(short iNode, BSTR * pbstrNode) { LPTSTR pszCmd; LPTSTR pszVal; m_csThreadSafeBr.Lock(); if (!m_refedLaunchState.GetNodeState(iNode, &pszCmd, &pszVal)) { m_csThreadSafeBr.Unlock(); return S_FALSE; } *pbstrNode = SysAllocString((BSTR) CComBSTR(pszCmd)); m_csThreadSafeBr.Unlock(); return S_OK; }
// see comments on CLaunchTS::GetNode; this returns the node state rather than
// the symbolic node name
STDMETHODIMP CLaunchTS::GetState(short iNode, BSTR * pbstrState) { LPTSTR pszCmd; LPTSTR pszVal; m_csThreadSafeBr.Lock(); if (!m_refedLaunchState.GetNodeState(iNode, &pszCmd, &pszVal)) { m_csThreadSafeBr.Unlock(); return S_FALSE; } *pbstrState = SysAllocString((BSTR) CComBSTR(pszVal)); m_csThreadSafeBr.Unlock(); return S_OK; }
// Test: Used to get network and node information from the server without
// launching the browser. Use the TShootATL::Test method before ILaunchTS::Test.
STDMETHODIMP CLaunchTS::Test() { extern CSMStateInfo g_StateInfo; m_csThreadSafeBr.Lock(); g_StateInfo.TestGet(m_refedLaunchState); m_csThreadSafeBr.Unlock(); return S_OK; }
|