//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996-1998 // // File: // // Contents: // // History: 12-09-97 HueiWang Modified from MSDN RPC Service Sample // //--------------------------------------------------------------------------- #include #include #include #include "common.h" //--------------------------------------------------------------------------- // FUNCTION: LogEvent( DWORD dwEventType, // DWORD dwIdEvent, // WORD cStrings, // LPTSTR *apwszStrings); // // PURPOSE: add the event to the event log // // INPUT: the event ID to report in the log, the number of insert // strings, and an array of null-terminated insert strings // // RETURNS: none //--------------------------------------------------------------------------- HRESULT LogEvent(LPTSTR lpszSource, DWORD dwEventType, WORD wCatalog, DWORD dwIdEvent, WORD cStrings, TCHAR **apwszStrings) { HANDLE hAppLog=NULL; BOOL bSuccess=FALSE; WORD wElogType; wElogType = (WORD) dwEventType; if(hAppLog=RegisterEventSource(NULL, lpszSource)) { bSuccess = ReportEvent(hAppLog, wElogType, wCatalog, dwIdEvent, NULL, cStrings, 0, (const TCHAR **) apwszStrings, NULL); DeregisterEventSource(hAppLog); } return((bSuccess) ? S_OK : GetLastError()); } //--------------------------------------------------------------------------- // FUNCTION: GetLastErrorText // // PURPOSE: copies error message text to string // // PARAMETERS: // lpszBuf - destination buffer // dwSize - size of buffer // // RETURN VALUE: // destination buffer // // COMMENTS: // LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize ) { DWORD dwRet; LPTSTR lpszTemp = NULL; dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, GetLastError(), LANG_NEUTRAL, (LPTSTR)&lpszTemp, 0, NULL ); // supplied buffer is not long enough if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) ) lpszBuf[0] = TEXT('\0'); else { lpszTemp[lstrlen(lpszTemp)-2] = _TEXT('\0'); //remove cr and newline character _sntprintf( lpszBuf, dwSize, _TEXT("%s (0x%x)"), lpszTemp, GetLastError() ); } if ( lpszTemp ) LocalFree((HLOCAL) lpszTemp ); return lpszBuf; } BOOL ConvertWszToBstr( OUT BSTR *pbstr, IN WCHAR const *pwc, IN LONG cb) { BOOL fOk = FALSE; BSTR bstr; do { bstr = NULL; if (NULL != pwc) { if (-1 == cb) { cb = wcslen(pwc) * sizeof(WCHAR); } bstr = SysAllocStringByteLen((char const *) pwc, cb); if (NULL == bstr) { break; } } if (NULL != *pbstr) { SysFreeString(*pbstr); } *pbstr = bstr; fOk = TRUE; } while (FALSE); return(fOk); } BOOL ConvertBstrToWsz( IN BSTR pbstr, OUT LPWSTR * pWsz) { LPWSTR wstrRequest = NULL; int wLen = 0; int returnvalue; if (pWsz != NULL) SysFreeString((BSTR) *pWsz); returnvalue = MultiByteToWideChar(GetACP(), 0, (LPCSTR) pbstr, -1, *pWsz, wLen); if (returnvalue == 0) { return FALSE; } else if (wLen == 0) { if((*pWsz = (LPWSTR) SysAllocStringLen (NULL, returnvalue)) == NULL) return FALSE; returnvalue = MultiByteToWideChar(GetACP(), 0, (LPCSTR) pbstr, -1, *pWsz, returnvalue); if (returnvalue == 0) { return FALSE; } else SysFreeString(pbstr); } return TRUE; }