//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: K K U T I L S . H // // Contents: Misc. helper functions // // Notes: // // Author: kumarp 14 Jan 1997 // //---------------------------------------------------------------------------- #pragma once #include "kkstl.h" #ifndef NCAPI #define NCAPI extern "C" HRESULT __declspec(dllexport) #endif #ifdef ENABLETRACE #define DefineFunctionName(name) static char __FUNCNAME__[] = name #else #define DefineFunctionName(name) (void) 0 #define __FUNCNAME__ "" #endif #define DeleteIfNotNull(p) \ delete p; \ p = NULL; #define ReturnHrIfFailedSz(hr,msg) if (FAILED(hr)) \ { \ TraceError(msg, hr); \ return hr; \ } #define ReturnHrIfFailed(hr) if (FAILED(hr)) \ { \ TraceError(__FUNCNAME__, hr); \ return hr; \ } #define ReturnErrorIf(condition,hr) if (condition) \ { \ TraceError(__FUNCNAME__, hr); \ return hr; \ } #define ReturnError(hr) if (1) { TraceFunctionError(hr); return hr; } #define DoErrorCleanupAndReturnError(status_var,error_code) \ { \ status_var = error_code; \ goto error_cleanup; \ } #define DoErrorCleanupAndReturnErrorIf(condition,status_var,error_code) \ if (condition) \ { \ status_var = error_code; \ goto error_cleanup; \ } #define TraceFunctionEntry(ttid) TraceTag(ttid, "---------> entering %s", __FUNCNAME__) #define TraceFunctionError(hr) TraceError(__FUNCNAME__, hr) #define TraceLastWin32ErrorInCurrentFunction() TraceLastWin32Error(__FUNCNAME__) #define TraceWin32FunctionError(e) TraceFunctionError(HRESULT_FROM_WIN32(e)) #define ReturnNULLIf(condition) if (condition) return NULL #define BreakIf(condition) if (condition) break #define ContinueIf(condition) if (condition) continue //#define ReturnFalseIfFailed(hr) if ((hr) != S_OK) return FALSE #define DoErrorCleanupIf(condition) if (condition) goto error_cleanup #define AppendErrorAndReturnFalseIf(condition,e) if (condition) { AppendError(e); return FALSE;} #define BenignAssert() AssertSz(FALSE,"Benign Assert (this is not a bug): Click Ignore to continue...") #define CR L"\n" void AddOnlyOnceToStringList(IN TStringList* psl, IN PCWSTR pszString); void ConvertDelimitedListToStringList(IN const tstring& strDelimitedList, IN WCHAR chDelimiter, OUT TStringList &slList); void ConvertCommaDelimitedListToStringList(IN const tstring& strDelimitedList, OUT TStringList &slList); void ConvertSpaceDelimitedListToStringList(IN const tstring& strDelimitedList, OUT TStringList &slList); void ConvertStringListToCommaList(IN const TStringList &slList, OUT tstring &strList); void ConvertStringListToDelimitedList(IN const TStringList &slList, OUT tstring &strList, IN WCHAR chDelimiter); BOOL IsBoolString(IN PCWSTR pszStr, OUT BOOL *pbValue); BOOL UpgradingFromNT(IN DWORD dwUpgradeFlag); BOOL FIsInStringArray( IN const PCWSTR* ppszStrings, IN DWORD cNumStrings, IN PCWSTR pszStringToFind, OUT UINT* puIndex=NULL); HRESULT HrRegOpenServiceKey(IN PCWSTR pszServiceName, REGSAM samDesired, OUT HKEY* phKey); HRESULT HrRegOpenServiceSubKey(IN PCWSTR pszServiceName, IN PCWSTR pszSubKey, REGSAM samDesired, OUT HKEY* phKey); BOOL FIsServiceKeyPresent(IN PCWSTR pszServiceName); void AppendToPath(IN OUT tstring* pstrPath, IN PCWSTR pszItem); void EraseAndDeleteAll(IN TStringArray* sa); void ConvertDelimitedListToStringArray(IN const tstring& strDelimitedList, IN WCHAR chDelimiter, OUT TStringArray &saStrings); void ConvertCommaDelimitedListToStringArray(IN const tstring& strDelimitedList, OUT TStringArray &saStrings);