ReactOS 0.4.16-dev-2621-gb0c8475
cicbase.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Cicero
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Cicero base
5 * COPYRIGHT: Copyright 2023-2026 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#pragma once
9
10#include <assert.h>
11#define cicAssert assert
12
14{
15 return LocalAlloc(0, size);
16}
17
19{
21}
22
23static inline void cicMemFree(LPVOID ptr)
24{
25 if (ptr)
27}
28
29static inline LPVOID cicMemReAlloc(LPVOID ptr, SIZE_T newSize)
30{
31 if (!newSize)
32 {
34 return NULL;
35 }
36 if (!ptr)
37 return LocalAlloc(LMEM_ZEROINIT, newSize);
38 return LocalReAlloc(ptr, newSize, LMEM_ZEROINIT | LMEM_MOVEABLE);
39}
40
42
43static inline bool cicIsNullPtr(LPCVOID ptr)
44{
45 return !ptr;
46}
47
48struct CicNoThrow { };
49#define cicNoThrow CicNoThrow{}
50
51void* operator new(size_t size, const CicNoThrow&) noexcept;
52void* operator new[](size_t size, const CicNoThrow&) noexcept;
53void operator delete(void* ptr) noexcept;
54void operator delete[](void* ptr) noexcept;
55void operator delete(void* ptr, size_t size) noexcept;
56void operator delete[](void* ptr, size_t size) noexcept;
57
58/* The flags of cicGetOSInfo() */
59#define CIC_OSINFO_NT 0x01
60#define CIC_OSINFO_2KPLUS 0x02
61#define CIC_OSINFO_95 0x04
62#define CIC_OSINFO_98PLUS 0x08
63#define CIC_OSINFO_CJK 0x10
64#define CIC_OSINFO_IMM 0x20
65#define CIC_OSINFO_DBCS 0x40
66#define CIC_OSINFO_XPPLUS 0x80
67
69void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo);
70
71#ifdef __cplusplus
72struct CicSystemModulePath
73{
74 TCHAR m_szPath[MAX_PATH + 2];
75 SIZE_T m_cchPath;
76
77 CicSystemModulePath()
78 {
79 m_szPath[0] = UNICODE_NULL;
80 m_cchPath = 0;
81 }
82
84};
85#endif
86
87// Get an instance handle that is already loaded
92 _In_ BOOL bSysWinDir);
93
94// Load a system library
99 _In_ BOOL bSysWinDir);
100
101#ifdef __cplusplus
102template <typename T_FN>
103static inline BOOL
104cicGetFN(HINSTANCE& hinstDLL, T_FN& fn, LPCTSTR pszDllName, LPCSTR pszFuncName)
105{
106 if (fn)
107 return TRUE;
108 if (!hinstDLL)
110 if (!hinstDLL)
111 return FALSE;
112 fn = reinterpret_cast<T_FN>(GetProcAddress(hinstDLL, pszFuncName));
113 return !!fn;
114}
115#endif
116
117/* Is the current process on WoW64? */
120
124 _In_ REFCLSID rclsid,
125 _In_ LPUNKNOWN pUnkOuter,
126 _In_ DWORD dwClsContext,
127 _In_ REFIID iid,
128 _Out_ LPVOID *ppv);
129
133 _In_ REFCLSID rclsid,
134 _In_ LPUNKNOWN pUnkOuter,
135 _In_ DWORD dwClsContext,
136 _In_ REFIID iid,
137 _Out_ LPVOID *ppv);
138
139// ole32!CoCreateInstance
141 REFCLSID rclsid,
142 LPUNKNOWN pUnkOuter,
143 DWORD dwClsContext,
144 REFIID iid,
145 LPVOID *ppv);
146
147EXTERN_C BOOL TFInitLib(FN_CoCreateInstance fnCoCreateInstance = NULL);
#define EXTERN_C
Definition: basetyps.h:12
EXTERN_C VOID TFUninitLib(VOID)
Definition: utils.cpp:760
EXTERN_C BOOL TFInitLib(FN_CoCreateInstance fnCoCreateInstance=NULL)
Definition: cicbase.cpp:270
static LPVOID cicMemAlloc(SIZE_T size)
Definition: cicbase.h:13
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:23
HRESULT(WINAPI * FN_CoCreateInstance)(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: cicbase.h:140
static LPVOID cicMemReAlloc(LPVOID ptr, SIZE_T newSize)
Definition: cicbase.h:29
EXTERN_C BOOL cicIsWow64(VOID)
Definition: cicbase.cpp:77
EXTERN_C HINSTANCE cicLoadSystemLibrary(_In_ LPCTSTR pszFileName, _In_ BOOL bSysWinDir)
Definition: cicbase.cpp:162
EXTERN_C HRESULT cicRealCoCreateInstance(_In_ REFCLSID rclsid, _In_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsContext, _In_ REFIID iid, _Out_ LPVOID *ppv)
Definition: cicbase.cpp:225
EXTERN_C HRESULT cicCoCreateInstance(_In_ REFCLSID rclsid, _In_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsContext, _In_ REFIID iid, _Out_ LPVOID *ppv)
Definition: cicbase.cpp:250
LPVOID cicMemReCalloc(LPVOID mem, SIZE_T num, SIZE_T size) noexcept
Definition: cicbase.cpp:41
EXTERN_C HINSTANCE cicGetSystemModuleHandle(_In_ LPCTSTR pszFileName, _In_ BOOL bSysWinDir)
Definition: cicbase.cpp:149
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:101
static bool cicIsNullPtr(LPCVOID ptr)
Definition: cicbase.h:43
static LPVOID cicMemAllocClear(SIZE_T size)
Definition: cicbase.h:18
static LPVOID LPUNKNOWN
Definition: dinput.c:53
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcAddress(x, y)
Definition: compat.h:753
#define MAX_PATH
Definition: compat.h:34
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
GLuint GLuint num
Definition: glext.h:9618
HLOCAL NTAPI LocalReAlloc(HLOCAL hMem, SIZE_T dwBytes, UINT uFlags)
Definition: heapmem.c:1625
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
char TCHAR
Definition: tchar.h:1402
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define LMEM_MOVEABLE
Definition: minwinbase.h:82
#define LMEM_ZEROINIT
Definition: minwinbase.h:85
CONST void * LPCVOID
Definition: minwindef.h:164
static PVOID ptr
Definition: dispmode.c:27
LPCSTR LPCTSTR
Definition: ms-dtyp.idl:130
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define UNICODE_NULL
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
char * pszDllName
Definition: spec2def.c:74
Definition: mem.c:349
const char * LPCSTR
Definition: typedefs.h:52
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
uint32_t * LPUINT
Definition: typedefs.h:59
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6