ReactOS 0.4.15-dev-7907-g95bf896
misc.cpp File Reference
#include "rapps.h"
#include "misc.h"
Include dependency graph for misc.cpp:

Go to the source code of this file.

Functions

VOID CopyTextToClipboard (LPCWSTR lpszText)
 
VOID ShowPopupMenuEx (HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem)
 
BOOL StartProcess (const CStringW &Path, BOOL Wait)
 
BOOL GetStorageDirectory (CStringW &Directory)
 
VOID InitLogs ()
 
VOID FreeLogs ()
 
BOOL WriteLogMessage (WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
 
BOOL GetInstalledVersion_WowUser (CStringW *szVersionResult, const CStringW &szRegName, BOOL IsUserKey, REGSAM keyWow)
 
BOOL GetInstalledVersion (CStringW *pszVersion, const CStringW &szRegName)
 
BOOL IsSystem64Bit ()
 
INT GetSystemColorDepth ()
 
void UnixTimeToFileTime (DWORD dwUnixTime, LPFILETIME pFileTime)
 
BOOL SearchPatternMatch (LPCWSTR szHaystack, LPCWSTR szNeedle)
 

Variables

static HANDLE hLog = NULL
 
static BOOL bIsSys64ResultCached = FALSE
 
static BOOL bIsSys64Result = FALSE
 

Function Documentation

◆ CopyTextToClipboard()

VOID CopyTextToClipboard ( LPCWSTR  lpszText)

Definition at line 19 of file misc.cpp.

20{
21 if (!OpenClipboard(NULL))
22 {
23 return;
24 }
25
26 HRESULT hr;
27 HGLOBAL ClipBuffer;
30
32 cchBuffer = wcslen(lpszText) + 1;
33 ClipBuffer = GlobalAlloc(GMEM_DDESHARE, cchBuffer * sizeof(WCHAR));
34
35 Buffer = (PWCHAR)GlobalLock(ClipBuffer);
36 hr = StringCchCopyW(Buffer, cchBuffer, lpszText);
37 GlobalUnlock(ClipBuffer);
38
39 if (SUCCEEDED(hr))
41
43}
#define CF_UNICODETEXT
Definition: constants.h:408
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
static DWORD cchBuffer
Definition: fusion.c:85
unsigned long DWORD
Definition: ntddk_ex.h:95
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT hr
Definition: shlfolder.c:183
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
uint16_t * PWCHAR
Definition: typedefs.h:56
#define GMEM_DDESHARE
Definition: winbase.h:298
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
BOOL WINAPI EmptyClipboard(void)
Definition: ntwrapper.h:190
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CAppInfoDisplay::OnCommand().

◆ FreeLogs()

VOID FreeLogs ( )

Definition at line 218 of file misc.cpp.

219{
220 if (hLog)
221 {
223 }
224}
static HANDLE hLog
Definition: misc.cpp:13
BOOL WINAPI DeregisterEventSource(IN HANDLE hEventLog)
Definition: eventlog.c:473

Referenced by CMainWindow::ProcessWindowMessage(), and wmain().

◆ GetInstalledVersion()

BOOL GetInstalledVersion ( CStringW pszVersion,
const CStringW szRegName 
)

Definition at line 280 of file misc.cpp.

281{
282 return (
283 !szRegName.IsEmpty() && (GetInstalledVersion_WowUser(pszVersion, szRegName, TRUE, KEY_WOW64_32KEY) ||
284 GetInstalledVersion_WowUser(pszVersion, szRegName, FALSE, KEY_WOW64_32KEY) ||
285 GetInstalledVersion_WowUser(pszVersion, szRegName, TRUE, KEY_WOW64_64KEY) ||
286 GetInstalledVersion_WowUser(pszVersion, szRegName, FALSE, KEY_WOW64_64KEY)));
287}
BOOL GetInstalledVersion_WowUser(CStringW *szVersionResult, const CStringW &szRegName, BOOL IsUserKey, REGSAM keyWow)
Definition: misc.cpp:243
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define KEY_WOW64_32KEY
Definition: cmtypes.h:45
#define KEY_WOW64_64KEY
Definition: cmtypes.h:46

Referenced by CAvailableApplicationInfo::InsertVersionInfo().

◆ GetInstalledVersion_WowUser()

BOOL GetInstalledVersion_WowUser ( CStringW szVersionResult,
const CStringW szRegName,
BOOL  IsUserKey,
REGSAM  keyWow 
)

Definition at line 243 of file misc.cpp.

244{
245 BOOL bHasSucceded = FALSE;
248 CStringW szPath = CStringW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\") + szRegName;
249
250 if (key.Open(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, szPath.GetString(), keyWow | KEY_READ) !=
252 {
253 return FALSE;
254 }
255
256 if (szVersionResult != NULL)
257 {
258 ULONG dwSize = MAX_PATH * sizeof(WCHAR);
259
260 if (key.QueryStringValue(L"DisplayVersion", szVersion.GetBuffer(MAX_PATH), &dwSize) == ERROR_SUCCESS)
261 {
262 szVersion.ReleaseBuffer();
263 *szVersionResult = szVersion;
264 bHasSucceded = TRUE;
265 }
266 else
267 {
268 szVersion.ReleaseBuffer();
269 }
270 }
271 else
272 {
273 bHasSucceded = TRUE;
274 }
275
276 return bHasSucceded;
277}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define MAX_PATH
Definition: compat.h:34
unsigned int BOOL
Definition: ntddk_ex.h:94
LPCWSTR szPath
Definition: env.c:37
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static LPCWSTR szVersion
Definition: asmcache.c:748
CAtlStringW CStringW
Definition: atlstr.h:130
#define KEY_READ
Definition: nt_native.h:1023
#define L(x)
Definition: ntvdm.h:50
Definition: copy.c:22
uint32_t ULONG
Definition: typedefs.h:59
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by GetInstalledVersion().

◆ GetStorageDirectory()

BOOL GetStorageDirectory ( CStringW Directory)

Definition at line 145 of file misc.cpp.

146{
147 static CStringW CachedDirectory;
148 static BOOL CachedDirectoryInitialized = FALSE;
149
150 if (!CachedDirectoryInitialized)
151 {
152 LPWSTR DirectoryStr = CachedDirectory.GetBuffer(MAX_PATH);
153 BOOL bHasPath = SHGetSpecialFolderPathW(NULL, DirectoryStr, CSIDL_LOCAL_APPDATA, TRUE);
154 if (bHasPath)
155 {
156 PathAppendW(DirectoryStr, RAPPS_NAME);
157 }
158 CachedDirectory.ReleaseBuffer();
159
160 if (bHasPath)
161 {
162 if (!CreateDirectoryW(CachedDirectory, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
163 {
164 CachedDirectory.Empty();
165 }
166 }
167 else
168 {
169 CachedDirectory.Empty();
170 }
171
172 CachedDirectoryInitialized = TRUE;
173 }
174
175 Directory = CachedDirectory;
176 return !Directory.IsEmpty();
177}
#define RAPPS_NAME
Definition: defines.h:34
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:387
void Empty() noexcept
Definition: atlsimpstr.h:253
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3092
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define PathAppendW
Definition: pathcch.h:309
#define CSIDL_LOCAL_APPDATA
Definition: shlobj.h:2185
base for all directory entries
Definition: entries.h:138
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by ParseCmdAndExecute(), CAppInfoDisplay::ProcessWindowMessage(), and CDownloadManager::ThreadFunc().

◆ GetSystemColorDepth()

INT GetSystemColorDepth ( )

Definition at line 321 of file misc.cpp.

322{
323 DEVMODEW pDevMode;
324 INT ColorDepth;
325
326 pDevMode.dmSize = sizeof(pDevMode);
327 pDevMode.dmDriverExtra = 0;
328
330 {
331 /* TODO: Error message */
332 return ILC_COLOR;
333 }
334
335 switch (pDevMode.dmBitsPerPel)
336 {
337 case 32:
338 ColorDepth = ILC_COLOR32;
339 break;
340 case 24:
341 ColorDepth = ILC_COLOR24;
342 break;
343 case 16:
344 ColorDepth = ILC_COLOR16;
345 break;
346 case 8:
347 ColorDepth = ILC_COLOR8;
348 break;
349 case 4:
350 ColorDepth = ILC_COLOR4;
351 break;
352 default:
353 ColorDepth = ILC_COLOR;
354 break;
355 }
356
357 return ColorDepth;
358}
#define ILC_COLOR4
Definition: commctrl.h:354
#define ILC_COLOR16
Definition: commctrl.h:356
#define ILC_COLOR8
Definition: commctrl.h:355
#define ILC_COLOR32
Definition: commctrl.h:358
#define ILC_COLOR24
Definition: commctrl.h:357
#define ILC_COLOR
Definition: commctrl.h:352
DWORD dmBitsPerPel
Definition: wingdi.h:1647
WORD dmDriverExtra
Definition: wingdi.h:1621
WORD dmSize
Definition: wingdi.h:1620
int32_t INT
Definition: typedefs.h:58
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179

Referenced by ApplicationPageWndProc(), CAppsListView::Create(), and CMainToolbar::InitImageList().

◆ InitLogs()

VOID InitLogs ( )

Definition at line 180 of file misc.cpp.

181{
183 {
184 return;
185 }
186
188 DWORD dwCategoryNum = 1;
189 DWORD dwDisp, dwData;
191
192 if (key.Create(
194 L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\ReactOS Application Manager", REG_NONE,
196 {
197 return;
198 }
199
201 {
202 return;
203 }
204
206
207 if ((key.SetStringValue(L"EventMessageFile", szPath, REG_EXPAND_SZ) == ERROR_SUCCESS) &&
208 (key.SetStringValue(L"CategoryMessageFile", szPath, REG_EXPAND_SZ) == ERROR_SUCCESS) &&
209 (key.SetDWORDValue(L"TypesSupported", dwData) == ERROR_SUCCESS) &&
210 (key.SetDWORDValue(L"CategoryCount", dwCategoryNum) == ERROR_SUCCESS))
211
212 {
213 hLog = RegisterEventSourceW(NULL, L"ReactOS Application Manager");
214 }
215}
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:20
HANDLE WINAPI RegisterEventSourceW(IN LPCWSTR lpUNCServerName, IN LPCWSTR lpSourceName)
Definition: eventlog.c:1295
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
static HANDLE ULONG_PTR dwData
Definition: file.c:35
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define REG_NONE
Definition: nt_native.h:1492
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define _countof(array)
Definition: sndvol32.h:68
BOOL bLogEnabled
Definition: settings.h:9
#define EVENTLOG_ERROR_TYPE
Definition: winnt_old.h:2834
#define EVENTLOG_INFORMATION_TYPE
Definition: winnt_old.h:2836
#define EVENTLOG_WARNING_TYPE
Definition: winnt_old.h:2835

Referenced by wmain(), and wWinMain().

◆ IsSystem64Bit()

BOOL IsSystem64Bit ( )

Definition at line 290 of file misc.cpp.

291{
293 {
294 // just return cached result
295 return bIsSys64Result;
296 }
297
298 SYSTEM_INFO si;
299 typedef void(WINAPI * LPFN_PGNSI)(LPSYSTEM_INFO);
300 LPFN_PGNSI pGetNativeSystemInfo =
301 (LPFN_PGNSI)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo");
302 if (pGetNativeSystemInfo)
303 {
304 pGetNativeSystemInfo(&si);
307 {
309 }
310 }
311 else
312 {
314 }
315
316 bIsSys64ResultCached = TRUE; // next time calling this function, it will directly return bIsSys64Result
317 return bIsSys64Result;
318}
static BOOL bIsSys64Result
Definition: misc.cpp:16
static BOOL bIsSys64ResultCached
Definition: misc.cpp:15
#define GetProcAddress(x, y)
Definition: compat.h:753
#define PROCESSOR_ARCHITECTURE_IA64
Definition: ketypes.h:111
#define PROCESSOR_ARCHITECTURE_AMD64
Definition: ketypes.h:114
WORD wProcessorArchitecture
Definition: winbase.h:1169
#define GetModuleHandle
Definition: winbase.h:3827
struct _SYSTEM_INFO * LPSYSTEM_INFO
#define WINAPI
Definition: msvc.h:6

Referenced by CAppDB::UpdateInstalled().

◆ SearchPatternMatch()

BOOL SearchPatternMatch ( LPCWSTR  szHaystack,
LPCWSTR  szNeedle 
)

Definition at line 372 of file misc.cpp.

373{
374 if (!*szNeedle)
375 return TRUE;
376 /* TODO: Improve pattern search beyond a simple case-insensitive substring search. */
377 return StrStrIW(szHaystack, szNeedle) != NULL;
378}
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
Definition: string.c:384

Referenced by CMainWindow::AddApplicationsToView(), and HandleFindCommand().

◆ ShowPopupMenuEx()

VOID ShowPopupMenuEx ( HWND  hwnd,
HWND  hwndOwner,
UINT  MenuID,
UINT  DefaultItem 
)

Definition at line 46 of file misc.cpp.

47{
48 HMENU hMenu = NULL;
49 HMENU hPopupMenu;
50 MENUITEMINFO ItemInfo;
51 POINT pt;
52
53 if (MenuID)
54 {
55 hMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID));
56 hPopupMenu = GetSubMenu(hMenu, 0);
57 }
58 else
59 {
60 hPopupMenu = GetMenu(hwnd);
61 }
62
63 ZeroMemory(&ItemInfo, sizeof(ItemInfo));
64 ItemInfo.cbSize = sizeof(ItemInfo);
65 ItemInfo.fMask = MIIM_STATE;
66
67 GetMenuItemInfoW(hPopupMenu, DefaultItem, FALSE, &ItemInfo);
68
69 if (!(ItemInfo.fState & MFS_GRAYED))
70 {
71 SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
72 }
73
75
77 TrackPopupMenu(hPopupMenu, 0, pt.x, pt.y, 0, hwndOwner, NULL);
78
79 if (hMenu)
80 {
81 DestroyMenu(hMenu);
82 }
83}
#define pt(x, y)
Definition: drawing.c:79
HINSTANCE hInst
Definition: dxdiag.c:13
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define ZeroMemory
Definition: winbase.h:1712
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2670
#define MIIM_STATE
Definition: winuser.h:721
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MFS_GRAYED
Definition: winuser.h:751
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
HMENU WINAPI GetMenu(_In_ HWND)

Referenced by CAppInfoDisplay::OnLink(), and CApplicationView::ProcessWindowMessage().

◆ StartProcess()

BOOL StartProcess ( const CStringW Path,
BOOL  Wait 
)

Definition at line 86 of file misc.cpp.

87{
89 STARTUPINFOW si;
90 DWORD dwRet;
91 MSG msg;
92
93 ZeroMemory(&si, sizeof(si));
94 si.cb = sizeof(si);
97
98 // The Unicode version of CreateProcess can modify the contents of this string.
99 CStringW Tmp = Path;
100 BOOL fSuccess = CreateProcessW(NULL, Tmp.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
101 Tmp.ReleaseBuffer();
102 if (!fSuccess)
103 {
104 return FALSE;
105 }
106
107 CloseHandle(pi.hThread);
108
109 if (Wait)
110 {
112 }
113
114 while (Wait)
115 {
116 dwRet = MsgWaitForMultipleObjects(1, &pi.hProcess, FALSE, INFINITE, QS_ALLEVENTS);
117 if (dwRet == WAIT_OBJECT_0 + 1)
118 {
119 while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
120 {
123 }
124 }
125 else
126 {
127 if (dwRet == WAIT_OBJECT_0 || dwRet == WAIT_FAILED)
128 break;
129 }
130 }
131
132 CloseHandle(pi.hProcess);
133
134 if (Wait)
135 {
139 }
140
141 return TRUE;
142}
PRTL_UNICODE_STRING_BUFFER Path
#define msg(x)
Definition: auth_time.c:54
#define CloseHandle
Definition: compat.h:739
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4592
#define INFINITE
Definition: serial.h:102
HWND hMainWnd
Definition: magnifier.c:32
static refpint_t pi[]
Definition: server.c:96
DWORD cb
Definition: winbase.h:852
DWORD dwFlags
Definition: winbase.h:863
WORD wShowWindow
Definition: winbase.h:864
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
_In_ WDFDPC _In_ BOOLEAN Wait
Definition: wdfdpc.h:170
#define STARTF_USESHOWWINDOW
Definition: winbase.h:491
#define WAIT_OBJECT_0
Definition: winbase.h:406
#define WAIT_FAILED
Definition: winbase.h:413
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define QS_ALLEVENTS
Definition: winuser.h:902
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define PM_REMOVE
Definition: winuser.h:1196
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define SW_SHOW
Definition: winuser.h:775

Referenced by CInstalledApplicationInfo::UninstallApplication().

◆ UnixTimeToFileTime()

void UnixTimeToFileTime ( DWORD  dwUnixTime,
LPFILETIME  pFileTime 
)

Definition at line 361 of file misc.cpp.

362{
363 // Note that LONGLONG is a 64-bit value
364 LONGLONG ll;
365
366 ll = Int32x32To64(dwUnixTime, 10000000) + 116444736000000000;
367 pFileTime->dwLowDateTime = (DWORD)ll;
368 pFileTime->dwHighDateTime = ll >> 32;
369}
w ll
Definition: byte_order.h:167
#define DWORD
Definition: nt_native.h:44
#define Int32x32To64(a, b)
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
int64_t LONGLONG
Definition: typedefs.h:68

Referenced by CInstalledApplicationInfo::RetrieveInstallDate().

◆ WriteLogMessage()

BOOL WriteLogMessage ( WORD  wType,
DWORD  dwEventID,
LPCWSTR  lpMsg 
)

Definition at line 227 of file misc.cpp.

228{
230 {
231 return TRUE;
232 }
233
234 if (!ReportEventW(hLog, wType, 0, dwEventID, NULL, 1, 0, &lpMsg, NULL))
235 {
236 return FALSE;
237 }
238
239 return TRUE;
240}
BOOL WINAPI ReportEventW(IN HANDLE hEventLog, IN WORD wType, IN WORD wCategory, IN DWORD dwEventID, IN PSID lpUserSid, IN WORD wNumStrings, IN DWORD dwDataSize, IN LPCWSTR *lpStrings, IN LPVOID lpRawData)
Definition: eventlog.c:1516

Referenced by CDownloadManager::ThreadFunc(), and CInstalledApplicationInfo::UninstallApplication().

Variable Documentation

◆ bIsSys64Result

BOOL bIsSys64Result = FALSE
static

Definition at line 16 of file misc.cpp.

Referenced by IsSystem64Bit().

◆ bIsSys64ResultCached

BOOL bIsSys64ResultCached = FALSE
static

Definition at line 15 of file misc.cpp.

Referenced by IsSystem64Bit().

◆ hLog