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.
 
 
 
 
 
 

179 lines
4.6 KiB

//
// util.h
//
// utility functions used by updiag
//
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: U T I L . H
//
// Contents: Common data structure and function used by mulriple tools
//
// Notes:
//
// Author: tongl 25 Jan 2000
//
//----------------------------------------------------------------------------
#ifndef _UTIL_H
#define _UTIL_H
#include <setupapi.h>
#include <wininet.h>
#include <updiag.h>
static const DWORD MAX_SST_ROWS = 32;
static const MAX_ACTION_ARGUMENTS = 8;
static const MAX_ACTIONS = 32;
static const DWORD MAX_OPERATIONS = 10;
static const DWORD MAX_STD_OPERATIONS = 20;
// service state table
//
struct SST_ROW
{
TCHAR szPropName[256];
VARIANT varValue;
TCHAR mszAllowedValueList[256];
TCHAR szMin[256];
TCHAR szMax[256];
TCHAR szStep[256];
};
struct SST
{
SST_ROW rgRows[MAX_SST_ROWS];
DWORD cRows;
};
// service action set
//
struct OPERATION_DATA
{
// Assumptions:
// 1) one operation affects one and only one state variable
// 2) operations in the same action do NOT share the same argument
// (if they do the argument has to be passed in twice)
// 3) the order of input arguments to an action must be in the same
// order as the operations and arguments for each operation
// 4) the number of arguments each operation takes is uniquely
// determined by the name of the operation
TCHAR szOpName[256];
// The state variable this operation affects
TCHAR szVariableName[256];
// The list of constants and their values this operation takes
TCHAR mszConstantList[256];
};
struct ACTION
{
TCHAR szActionName[256];
OPERATION_DATA rgOperations[MAX_OPERATIONS];
DWORD cOperations;
};
struct ACTION_SET
{
ACTION rgActions[MAX_ACTIONS];
DWORD cActions;
};
// Control structures for demo services
//
typedef DWORD (WINAPI * PFNACTION)(DWORD cArgs, ARG *rgArgs);
struct DEMO_ACTION
{
LPCTSTR szAction;
PFNACTION pfnValidate;
PFNACTION pfnAction;
};
struct DEMO_SERVICE_CTL
{
LPCTSTR szServiceId;
DWORD cActions;
DEMO_ACTION rgActions[MAX_ACTIONS];
};
struct UPNPSVC
{
TCHAR szSti[256];
TCHAR szId[256];
TCHAR szServiceType[256];
TCHAR szControlUrl[INTERNET_MAX_URL_LENGTH];
TCHAR szEvtUrl[INTERNET_MAX_URL_LENGTH];
TCHAR szScpdUrl[INTERNET_MAX_URL_LENGTH];
TCHAR szConfigFile[MAX_PATH];
SST sst;
ACTION_SET action_set;
TCHAR szControlId[256];
HANDLE hSvc;
const DEMO_SERVICE_CTL* psvcDemoCtl;
};
// Standard state table operation list
//
typedef DWORD (WINAPI * PFNOPERATION)(UPNPSVC * psvc, OPERATION_DATA * pOpData,
DWORD cArgs, ARG *rgArgs);
struct STANDARD_OPERATION
{
LPCTSTR szOperation;
DWORD nArguments;
DWORD nConstants;
PFNOPERATION pfnOperation;
};
struct STANDARD_OPERATION_LIST
{
DWORD cOperations;
STANDARD_OPERATION rgOperations[MAX_STD_OPERATIONS];
};
VOID WcharToTcharInPlace(LPTSTR szT, LPWSTR szW);
inline BOOL
IsValidHandle(HANDLE h)
{
return (h && INVALID_HANDLE_VALUE != h);
}
HRESULT HrSetupOpenConfigFile( PCTSTR pszFileName,
UINT* punErrorLine,
HINF* phinf);
HRESULT HrSetupFindFirstLine( HINF hinf,
PCTSTR pszSection,
PCTSTR pszKey,
INFCONTEXT* pctx);
HRESULT HrSetupFindNextLine( const INFCONTEXT& ctxIn,
INFCONTEXT* pctxOut);
HRESULT HrSetupGetStringField( const INFCONTEXT& ctx,
DWORD dwFieldIndex,
PTSTR pszBuf,
DWORD cchBuf,
DWORD* pcchRequired);
HRESULT HrSetupGetLineText( const INFCONTEXT& ctx,
PTSTR pszBuf,
DWORD ReturnBufferSize,
DWORD* pcchRequired);
VOID SetupCloseInfFileSafe(HINF hinf);
BOOL fGetNextField(TCHAR ** pszLine, TCHAR * szBuffer);
BOOL IsStandardOperation(TCHAR * szOpName, DWORD * pnArgs, DWORD * pnConsts);
#endif // _UTIL_H