ReactOS  0.4.15-dev-4570-g4f8bbd1
misc.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Applications Manager
3  * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE: Misc functions
5  * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
6  * Copyright 2015 Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
7  * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
8  */
9 
10 #include "rapps.h"
11 #include "misc.h"
12 
13 static HANDLE hLog = NULL;
14 
17 
19 {
20  if (!OpenClipboard(NULL))
21  {
22  return;
23  }
24 
25  HRESULT hr;
26  HGLOBAL ClipBuffer;
27  LPWSTR Buffer;
29 
31  cchBuffer = wcslen(lpszText) + 1;
32  ClipBuffer = GlobalAlloc(GMEM_DDESHARE, cchBuffer * sizeof(WCHAR));
33 
34  Buffer = (PWCHAR) GlobalLock(ClipBuffer);
35  hr = StringCchCopyW(Buffer, cchBuffer, lpszText);
36  GlobalUnlock(ClipBuffer);
37 
38  if (SUCCEEDED(hr))
39  SetClipboardData(CF_UNICODETEXT, ClipBuffer);
40 
42 }
43 
44 VOID ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem)
45 {
46  HMENU hMenu = NULL;
47  HMENU hPopupMenu;
48  MENUITEMINFO ItemInfo;
49  POINT pt;
50 
51  if (MenuID)
52  {
53  hMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID));
54  hPopupMenu = GetSubMenu(hMenu, 0);
55  }
56  else
57  {
58  hPopupMenu = GetMenu(hwnd);
59  }
60 
61  ZeroMemory(&ItemInfo, sizeof(ItemInfo));
62  ItemInfo.cbSize = sizeof(ItemInfo);
63  ItemInfo.fMask = MIIM_STATE;
64 
65  GetMenuItemInfoW(hPopupMenu, DefaultItem, FALSE, &ItemInfo);
66 
67  if (!(ItemInfo.fState & MFS_GRAYED))
68  {
69  SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
70  }
71 
72  GetCursorPos(&pt);
73 
75  TrackPopupMenu(hPopupMenu, 0, pt.x, pt.y, 0, hwndOwner, NULL);
76 
77  if (hMenu)
78  {
79  DestroyMenu(hMenu);
80  }
81 }
82 
84 {
86  STARTUPINFOW si;
87  DWORD dwRet;
88  MSG msg;
89 
90  ZeroMemory(&si, sizeof(si));
91  si.cb = sizeof(si);
93  si.wShowWindow = SW_SHOW;
94 
95  // The Unicode version of CreateProcess can modify the contents of this string.
96  CStringW Tmp = Path;
97  BOOL fSuccess = CreateProcessW(NULL, Tmp.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
98  Tmp.ReleaseBuffer();
99  if (!fSuccess)
100  {
101  return FALSE;
102  }
103 
104  CloseHandle(pi.hThread);
105 
106  if (Wait)
107  {
109  }
110 
111  while (Wait)
112  {
113  dwRet = MsgWaitForMultipleObjects(1, &pi.hProcess, FALSE, INFINITE, QS_ALLEVENTS);
114  if (dwRet == WAIT_OBJECT_0 + 1)
115  {
116  while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
117  {
120  }
121  }
122  else
123  {
124  if (dwRet == WAIT_OBJECT_0 || dwRet == WAIT_FAILED)
125  break;
126  }
127  }
128 
129  CloseHandle(pi.hProcess);
130 
131  if (Wait)
132  {
136  }
137 
138  return TRUE;
139 }
140 
142 {
143  static CStringW CachedDirectory;
144  static BOOL CachedDirectoryInitialized = FALSE;
145 
146  if (!CachedDirectoryInitialized)
147  {
148  LPWSTR DirectoryStr = CachedDirectory.GetBuffer(MAX_PATH);
149  BOOL bHasPath = SHGetSpecialFolderPathW(NULL, DirectoryStr, CSIDL_LOCAL_APPDATA, TRUE);
150  if (bHasPath)
151  {
152  PathAppendW(DirectoryStr, L"rapps");
153  }
154  CachedDirectory.ReleaseBuffer();
155 
156  if (bHasPath)
157  {
158  if (!CreateDirectoryW(CachedDirectory, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
159  {
160  CachedDirectory.Empty();
161  }
162  }
163  else
164  {
165  CachedDirectory.Empty();
166  }
167 
168  CachedDirectoryInitialized = TRUE;
169  }
170 
171  Directory = CachedDirectory;
172  return !Directory.IsEmpty();
173 }
174 
176 {
178  {
179  return;
180  }
181 
183  DWORD dwCategoryNum = 1;
184  DWORD dwDisp, dwData;
186 
187  if (key.Create(HKEY_LOCAL_MACHINE,
188  L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\ReactOS Application Manager",
190  {
191  return;
192  }
193 
195  {
196  return;
197  }
198 
201 
202  if ((key.SetStringValue(L"EventMessageFile",
203  szPath,
205  && (key.SetStringValue(L"CategoryMessageFile",
206  szPath,
208  && (key.SetDWORDValue(L"TypesSupported",
209  dwData) == ERROR_SUCCESS)
210  && (key.SetDWORDValue(L"CategoryCount",
211  dwCategoryNum) == ERROR_SUCCESS))
212 
213  {
214  hLog = RegisterEventSourceW(NULL, L"ReactOS Application Manager");
215  }
216 }
217 
219 {
220  if (hLog)
221  {
223  }
224 }
225 
226 BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
227 {
229  {
230  return TRUE;
231  }
232 
233  if (!ReportEventW(hLog, wType, 0, dwEventID,
234  NULL, 1, 0, &lpMsg, NULL))
235  {
236  return FALSE;
237  }
238 
239  return TRUE;
240 }
241 
243  const ATL::CStringW& szRegName,
244  BOOL IsUserKey,
245  REGSAM keyWow)
246 {
247  BOOL bHasSucceded = FALSE;
250  ATL::CStringW szPath = ATL::CStringW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\") + szRegName;
251 
252  if (key.Open(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
253  szPath.GetString(),
254  keyWow | KEY_READ) != ERROR_SUCCESS)
255  {
256  return FALSE;
257  }
258 
259  if (szVersionResult != NULL)
260  {
261  ULONG dwSize = MAX_PATH * sizeof(WCHAR);
262 
263  if (key.QueryStringValue(L"DisplayVersion",
264  szVersion.GetBuffer(MAX_PATH),
265  &dwSize) == ERROR_SUCCESS)
266  {
267  szVersion.ReleaseBuffer();
268  *szVersionResult = szVersion;
269  bHasSucceded = TRUE;
270  }
271  else
272  {
273  szVersion.ReleaseBuffer();
274  }
275  }
276  else
277  {
278  bHasSucceded = TRUE;
279  szVersion.ReleaseBuffer();
280  }
281 
282  return bHasSucceded;
283 }
284 
285 BOOL GetInstalledVersion(ATL::CStringW *pszVersion, const ATL::CStringW &szRegName)
286 {
287  return (!szRegName.IsEmpty()
288  && (GetInstalledVersion_WowUser(pszVersion, szRegName, TRUE, KEY_WOW64_32KEY)
289  || GetInstalledVersion_WowUser(pszVersion, szRegName, FALSE, KEY_WOW64_32KEY)
290  || GetInstalledVersion_WowUser(pszVersion, szRegName, TRUE, KEY_WOW64_64KEY)
291  || GetInstalledVersion_WowUser(pszVersion, szRegName, FALSE, KEY_WOW64_64KEY)));
292 }
293 
295 {
296  WCHAR pszPathBuffer[MAX_PATH]; // buffer to store result
297  WCHAR pszPathCopy[MAX_PATH];
298 
299  if (!PathCanonicalizeW(pszPathCopy, pszPath))
300  {
301  return FALSE;
302  }
303 
304  PathRemoveBackslashW(pszPathCopy);
305 
306  if (StringCchCopyW(pszPathBuffer, _countof(pszPathBuffer), pszPathCopy) != S_OK)
307  {
308  return FALSE;
309  }
310 
311  if (!PathAppendW(pszPathBuffer, pszMore))
312  {
313  return FALSE;
314  }
315 
316  size_t PathLen;
317  if (StringCchLengthW(pszPathCopy, _countof(pszPathCopy), &PathLen) != S_OK)
318  {
319  return FALSE;
320  }
321  int CommonPrefixLen = PathCommonPrefixW(pszPathCopy, pszPathBuffer, NULL);
322 
323  if ((unsigned int)CommonPrefixLen != PathLen)
324  {
325  // pszPathBuffer should be a file/folder under pszPath.
326  // but now common prefix len is smaller than length of pszPathCopy
327  // hacking use ".." ?
328  return FALSE;
329  }
330 
331  if (StringCchCopyW(pszPath, MAX_PATH, pszPathBuffer) != S_OK)
332  {
333  return FALSE;
334  }
335 
336  return TRUE;
337 }
338 
340 {
342  {
343  // just return cached result
344  return bIsSys64Result;
345  }
346 
347  SYSTEM_INFO si;
348  typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO);
349  LPFN_PGNSI pGetNativeSystemInfo = (LPFN_PGNSI)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo");
350  if (pGetNativeSystemInfo)
351  {
352  pGetNativeSystemInfo(&si);
354  {
356  }
357  }
358  else
359  {
361  }
362 
363  bIsSys64ResultCached = TRUE; // next time calling this function, it will directly return bIsSys64Result
364  return bIsSys64Result;
365 }
366 
368 {
369  DEVMODEW pDevMode;
370  INT ColorDepth;
371 
372  pDevMode.dmSize = sizeof(pDevMode);
373  pDevMode.dmDriverExtra = 0;
374 
376  {
377  /* TODO: Error message */
378  return ILC_COLOR;
379  }
380 
381  switch (pDevMode.dmBitsPerPel)
382  {
383  case 32: ColorDepth = ILC_COLOR32; break;
384  case 24: ColorDepth = ILC_COLOR24; break;
385  case 16: ColorDepth = ILC_COLOR16; break;
386  case 8: ColorDepth = ILC_COLOR8; break;
387  case 4: ColorDepth = ILC_COLOR4; break;
388  default: ColorDepth = ILC_COLOR; break;
389  }
390 
391  return ColorDepth;
392 }
393 
394 void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
395 {
396  // Note that LONGLONG is a 64-bit value
397  LONGLONG ll;
398 
399  ll = Int32x32To64(dwUnixTime, 10000000) + 116444736000000000;
400  pFileTime->dwLowDateTime = (DWORD)ll;
401  pFileTime->dwHighDateTime = ll >> 32;
402 }
403 
404 BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
405 {
406  if (!*szNeedle)
407  return TRUE;
408  /* TODO: Improve pattern search beyond a simple case-insensitive substring search. */
409  return StrStrIW(szHaystack, szNeedle) != NULL;
410 }
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
#define ILC_COLOR16
Definition: commctrl.h:356
BOOL WINAPI TranslateMessage(_In_ const MSG *)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define CloseHandle
Definition: compat.h:598
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static BOOL bIsSys64ResultCached
Definition: misc.cpp:15
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT hr
Definition: shlfolder.c:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
int WINAPI PathCommonPrefixW(LPCWSTR lpszFile1, LPCWSTR lpszFile2, LPWSTR achPath)
Definition: path.c:2805
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
BOOL WINAPI PathCanonicalizeW(LPWSTR lpszBuf, LPCWSTR lpszPath)
Definition: path.c:2445
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
#define pt(x, y)
Definition: drawing.c:79
_In_ WDFDPC _In_ BOOLEAN Wait
Definition: wdfdpc.h:167
#define HKEY_CURRENT_USER
Definition: winreg.h:11
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
WORD dmDriverExtra
Definition: wingdi.h:1621
BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
Definition: misc.cpp:404
static HANDLE ULONG_PTR dwData
Definition: file.c:35
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ZeroMemory
Definition: winbase.h:1667
HWND WINAPI SetFocus(_In_opt_ HWND)
void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
Definition: misc.cpp:394
uint16_t * PWCHAR
Definition: typedefs.h:56
DWORD dmBitsPerPel
Definition: wingdi.h:1647
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2639
VOID ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem)
Definition: misc.cpp:44
#define DWORD
Definition: nt_native.h:44
int32_t INT
Definition: typedefs.h:58
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
#define ILC_COLOR4
Definition: commctrl.h:354
BOOL PathAppendNoDirEscapeW(LPWSTR pszPath, LPCWSTR pszMore)
Definition: misc.cpp:294
BOOL IsSystem64Bit()
Definition: misc.cpp:339
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
#define ILC_COLOR32
Definition: commctrl.h:358
#define PROCESSOR_ARCHITECTURE_IA64
Definition: ketypes.h:111
DWORD dwHighDateTime
Definition: mapidefs.h:66
#define L(x)
Definition: ntvdm.h:50
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
#define EVENTLOG_ERROR_TYPE
Definition: winnt_old.h:2881
#define FALSE
Definition: types.h:117
INT GetSystemColorDepth()
Definition: misc.cpp:367
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define MIIM_STATE
Definition: winuser.h:716
unsigned int BOOL
Definition: ntddk_ex.h:94
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
Definition: string.c:384
if SUCCEEDED(hr)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
static DWORD cchBuffer
Definition: fusion.c:85
#define ILC_COLOR
Definition: commctrl.h:352
VOID InitLogs()
Definition: misc.cpp:175
#define CF_UNICODETEXT
Definition: constants.h:408
#define QS_ALLEVENTS
Definition: winuser.h:896
Definition: bufpool.h:45
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
#define STARTF_USESHOWWINDOW
Definition: winbase.h:488
#define SW_SHOW
Definition: winuser.h:769
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:4594
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define KEY_WOW64_64KEY
Definition: cmtypes.h:46
int64_t LONGLONG
Definition: typedefs.h:68
static BOOL bIsSys64Result
Definition: misc.cpp:16
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
BOOL WINAPI EmptyClipboard(void)
Definition: ntwrapper.h:190
#define WAIT_OBJECT_0
Definition: winbase.h:403
DWORD cb
Definition: winbase.h:849
#define EVENTLOG_INFORMATION_TYPE
Definition: winnt_old.h:2883
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:20
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define EVENTLOG_WARNING_TYPE
Definition: winnt_old.h:2882
static refpint_t pi[]
Definition: server.c:96
LONG HRESULT
Definition: typedefs.h:79
#define _countof(array)
Definition: sndvol32.h:68
#define ILC_COLOR24
Definition: commctrl.h:357
#define CSIDL_LOCAL_APPDATA
Definition: shlobj.h:2039
WORD dmSize
Definition: wingdi.h:1620
#define MAX_PATH
Definition: compat.h:34
#define WINAPI
Definition: msvc.h:6
static HANDLE hLog
Definition: misc.cpp:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
#define WAIT_FAILED
Definition: winbase.h:410
#define PROCESSOR_ARCHITECTURE_AMD64
Definition: ketypes.h:114
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
static LPCWSTR szVersion
Definition: asmcache.c:748
HWND hMainWnd
Definition: magnifier.c:32
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
#define MFS_GRAYED
Definition: winuser.h:746
HKEY key
Definition: reg.c:42
WORD wShowWindow
Definition: winbase.h:861
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
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
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
Definition: path.c:867
VOID CopyTextToClipboard(LPCWSTR lpszText)
Definition: misc.cpp:18
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:226
BOOL GetInstalledVersion(ATL::CStringW *pszVersion, const ATL::CStringW &szRegName)
Definition: misc.cpp:285
bool IsEmpty() const
Definition: atlsimpstr.h:379
#define S_OK
Definition: intsafe.h:52
HINSTANCE hInst
Definition: dxdiag.c:13
PRTL_UNICODE_STRING_BUFFER Path
BOOL bLogEnabled
Definition: settings.h:9
#define GetModuleHandle
Definition: winbase.h:3688
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:2851
LPCWSTR szPath
Definition: env.c:37
struct _SYSTEM_INFO * LPSYSTEM_INFO
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
ACCESS_MASK REGSAM
Definition: winreg.h:69
w ll
Definition: byte_order.h:166
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL WINAPI DeregisterEventSource(IN HANDLE hEventLog)
Definition: eventlog.c:473
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz, size_t cchMax, size_t *pcchLength)
Definition: strsafe.h:842
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
WORD wProcessorArchitecture
Definition: winbase.h:1154
#define GMEM_DDESHARE
Definition: winbase.h:295
BOOL GetStorageDirectory(ATL::CStringW &Directory)
Definition: misc.cpp:141
#define msg(x)
Definition: auth_time.c:54
BOOL StartProcess(const ATL::CStringW &Path, BOOL Wait)
Definition: misc.cpp:83
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
unsigned int ULONG
Definition: retypes.h:1
#define ILC_COLOR8
Definition: commctrl.h:355
base for all directory entries
Definition: entries.h:138
BOOL WINAPI SetForegroundWindow(_In_ HWND)
CAtlStringW CStringW
Definition: atlstr.h:130
#define GetProcAddress(x, y)
Definition: compat.h:612
#define KEY_WOW64_32KEY
Definition: cmtypes.h:45
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
DWORD dwFlags
Definition: winbase.h:860
VOID FreeLogs()
Definition: misc.cpp:218
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define PM_REMOVE
Definition: winuser.h:1186
#define REG_NONE
Definition: nt_native.h:1492
WCHAR * LPWSTR
Definition: xmlstorage.h:184
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4022
#define INFINITE
Definition: serial.h:102
HANDLE WINAPI RegisterEventSourceW(IN LPCWSTR lpUNCServerName, IN LPCWSTR lpSourceName)
Definition: eventlog.c:1295
HMENU WINAPI GetMenu(_In_ HWND)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define Int32x32To64(a, b)
DWORD dwLowDateTime
Definition: mapidefs.h:65
BOOL GetInstalledVersion_WowUser(ATL::CStringW *szVersionResult, const ATL::CStringW &szRegName, BOOL IsUserKey, REGSAM keyWow)
Definition: misc.cpp:242
Definition: path.c:41
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12