ReactOS 0.4.16-dev-853-g88d9285
errinfo.c File Reference
#include "uxthemep.h"
#include <stdlib.h>
#include <strsafe.h>
Include dependency graph for errinfo.c:

Go to the source code of this file.

Functions

PTMERRINFO UXTHEME_GetParseErrorInfo (_In_ BOOL bCreate)
 
VOID UXTHEME_DeleteParseErrorInfo (VOID)
 
static BOOL UXTHEME_FormatLocalMsg (_In_ HINSTANCE hInstance, _In_ UINT uID, _Out_ LPWSTR pszDest, _In_ SIZE_T cchDest, _In_ LPCWSTR pszDrive, _In_ PTMERRINFO pErrInfo)
 
static HRESULT UXTHEME_FormatParseMessage (_In_ PTMERRINFO pErrInfo, _Out_ LPWSTR pszDest, _In_ SIZE_T cchDest)
 
HRESULT UXTHEME_MakeParseError (_In_ UINT nID, _In_ LPCWSTR pszParam1, _In_ LPCWSTR pszParam2, _In_ LPCWSTR pszFile, _In_ LPCWSTR pszLine, _In_ INT nLineNo)
 
HRESULT WINAPI GetThemeParseErrorInfo (_Inout_ PPARSE_ERROR_INFO pInfo)
 

Function Documentation

◆ GetThemeParseErrorInfo()

HRESULT WINAPI GetThemeParseErrorInfo ( _Inout_ PPARSE_ERROR_INFO  pInfo)

Definition at line 126 of file errinfo.c.

127{
128 PTMERRINFO pErrInfo;
129 HRESULT hr;
130
131 if (!pInfo)
132 return E_POINTER;
133
134 if (pInfo->cbSize != sizeof(*pInfo))
135 return E_INVALIDARG;
136
138 if (!pErrInfo)
139 return E_OUTOFMEMORY;
140
141 hr = UXTHEME_FormatParseMessage(pErrInfo, pInfo->szDescription, _countof(pInfo->szDescription));
142 if (FAILED(hr))
143 return hr;
144
145 pInfo->nID = pErrInfo->nID;
146 pInfo->nLineNo = pErrInfo->nLineNo;
147 StringCchCopyW(pInfo->szFile, _countof(pInfo->szFile), pErrInfo->szFile);
148 StringCchCopyW(pInfo->szLine, _countof(pInfo->szLine), pErrInfo->szLine);
149 return hr;
150}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRUE
Definition: types.h:120
PTMERRINFO UXTHEME_GetParseErrorInfo(_In_ BOOL bCreate)
Definition: errinfo.c:13
static HRESULT UXTHEME_FormatParseMessage(_In_ PTMERRINFO pErrInfo, _Out_ LPWSTR pszDest, _In_ SIZE_T cchDest)
Definition: errinfo.c:64
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
WCHAR szFile[MAX_PATH]
Definition: uxthemep.h:98
UINT nID
Definition: uxthemep.h:95
WCHAR szLine[MAX_PATH]
Definition: uxthemep.h:99
#define E_POINTER
Definition: winerror.h:2365

Referenced by START_TEST().

◆ UXTHEME_DeleteParseErrorInfo()

VOID UXTHEME_DeleteParseErrorInfo ( VOID  )

Definition at line 34 of file errinfo.c.

35{
37 if (!pErrInfo)
38 return;
39
41 LocalFree(pErrInfo);
42}
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
DWORD gdwErrorInfoTlsIndex
Definition: system.c:27
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594

Referenced by DllMain(), and UXTHEME_UnInitSystem().

◆ UXTHEME_FormatLocalMsg()

static BOOL UXTHEME_FormatLocalMsg ( _In_ HINSTANCE  hInstance,
_In_ UINT  uID,
_Out_ LPWSTR  pszDest,
_In_ SIZE_T  cchDest,
_In_ LPCWSTR  pszDrive,
_In_ PTMERRINFO  pErrInfo 
)
static

Definition at line 45 of file errinfo.c.

52{
53 WCHAR szFormat[MAX_PATH];
54 LPCWSTR args[2] = { pErrInfo->szParam1, pErrInfo->szParam2 };
55
56 if (!LoadStringW(hInstance, uID, szFormat, _countof(szFormat)) || !szFormat[0])
57 return FALSE;
58
60 szFormat, 0, 0, pszDest, cchDest, (va_list *)args) != 0;
61}
static _In_ LPCWSTR _In_ DWORD _In_ int _In_ int cchDest
char * va_list
Definition: acmsvcex.h:78
HINSTANCE hInstance
Definition: charmap.c:19
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Definition: match.c:390
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:447
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:450
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by UXTHEME_FormatParseMessage().

◆ UXTHEME_FormatParseMessage()

static HRESULT UXTHEME_FormatParseMessage ( _In_ PTMERRINFO  pErrInfo,
_Out_ LPWSTR  pszDest,
_In_ SIZE_T  cchDest 
)
static

Definition at line 64 of file errinfo.c.

68{
69 DWORD nID;
70 HMODULE hMod, hUxTheme;
71 WCHAR szFullPath[_MAX_PATH];
72 WCHAR szDrive[_MAX_DRIVE + 1], szDir[_MAX_DIR], szFileName[_MAX_FNAME], szExt[_MAX_EXT];
73 BOOL ret;
74 HRESULT hr;
75
76 nID = LOWORD(pErrInfo->nID);
77 if (!GetModuleFileNameW(NULL, szFullPath, _countof(szFullPath)))
78 return S_OK;
79
80 _wsplitpath(szFullPath, szDrive, szDir, szFileName, szExt);
81 if (lstrcmpiW(szFileName, L"packthem") == 0)
82 {
83 hMod = GetModuleHandleW(NULL);
84 if (UXTHEME_FormatLocalMsg(hMod, nID, pszDest, cchDest, szDrive, pErrInfo))
85 return S_OK;
86 }
87
88 hUxTheme = LoadLibraryW(L"uxtheme.dll");
89 if (!hUxTheme)
90 return E_FAIL;
91
92 ret = UXTHEME_FormatLocalMsg(hUxTheme, nID, pszDest, cchDest, szDrive, pErrInfo);
95
96 return hr;
97}
static HMODULE hUxTheme
Definition: theme.c:60
#define E_FAIL
Definition: ddrawi.h:102
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
static BOOL UXTHEME_FormatLocalMsg(_In_ HINSTANCE hInstance, _In_ UINT uID, _Out_ LPWSTR pszDest, _In_ SIZE_T cchDest, _In_ LPCWSTR pszDrive, _In_ PTMERRINFO pErrInfo)
Definition: errinfo.c:45
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP void __cdecl _wsplitpath(_In_z_ const wchar_t *_FullPath, _Pre_maybenull_ _Post_z_ wchar_t *_Drive, _Pre_maybenull_ _Post_z_ wchar_t *_Dir, _Pre_maybenull_ _Post_z_ wchar_t *_Filename, _Pre_maybenull_ _Post_z_ wchar_t *_Ext)
#define S_OK
Definition: intsafe.h:52
#define _MAX_FNAME
Definition: utility.h:74
#define _MAX_PATH
Definition: utility.h:77
#define _MAX_DIR
Definition: utility.h:75
#define _MAX_DRIVE
Definition: utility.h:73
#define _MAX_EXT
Definition: utility.h:76
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
static HRESULT UXTHEME_MakeLastError(VOID)
Definition: uxthemep.h:315
int ret

Referenced by GetThemeParseErrorInfo().

◆ UXTHEME_GetParseErrorInfo()

PTMERRINFO UXTHEME_GetParseErrorInfo ( _In_ BOOL  bCreate)

Definition at line 13 of file errinfo.c.

14{
15 PTMERRINFO pErrInfo;
16
18 return NULL;
19
21 if (pErrInfo)
22 return pErrInfo;
23
24 if (bCreate)
25 {
26 pErrInfo = LocalAlloc(LPTR, sizeof(*pErrInfo));
28 }
29
30 return pErrInfo;
31}
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1528
#define LPTR
Definition: winbase.h:407
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:575

Referenced by GetThemeParseErrorInfo(), UXTHEME_DeleteParseErrorInfo(), and UXTHEME_MakeParseError().

◆ UXTHEME_MakeParseError()

HRESULT UXTHEME_MakeParseError ( _In_ UINT  nID,
_In_ LPCWSTR  pszParam1,
_In_ LPCWSTR  pszParam2,
_In_ LPCWSTR  pszFile,
_In_ LPCWSTR  pszLine,
_In_ INT  nLineNo 
)

Definition at line 101 of file errinfo.c.

108{
110 if (pErrInfo)
111 {
112 pErrInfo->nID = nID;
113 pErrInfo->nLineNo = nLineNo;
114 StringCchCopyW(pErrInfo->szParam1, _countof(pErrInfo->szParam1), pszParam1);
115 StringCchCopyW(pErrInfo->szParam2, _countof(pErrInfo->szParam2), pszParam2);
116 StringCchCopyW(pErrInfo->szFile, _countof(pErrInfo->szFile), pszFile);
117 StringCchCopyW(pErrInfo->szLine, _countof(pErrInfo->szLine), pszLine);
118 }
120}
WCHAR szParam1[MAX_PATH]
Definition: uxthemep.h:96
WCHAR szParam2[MAX_PATH]
Definition: uxthemep.h:97
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_UNKNOWN_PROPERTY
Definition: winerror.h:966