1 /*
2 * PROJECT: ReactOS system libraries
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: ReactOS Extended RunOnce processing with UI.
5 * COPYRIGHT: Copyright 2013-2016 Robert Naumann
6 * Copyright 2021 He Yang <1160386205@qq.com>
7 */
8
9 #include "iernonce.h"
10
11 RUNONCEEX_CALLBACK g_Callback = NULL;
12 BOOL g_bSilence = FALSE;
13
14 BOOL
15 WINAPI
DllMain(_In_ HINSTANCE hinstDLL,_In_ DWORD dwReason,_In_ LPVOID reserved)16 DllMain(_In_ HINSTANCE hinstDLL,
17 _In_ DWORD dwReason,
18 _In_ LPVOID reserved)
19 {
20 switch (dwReason)
21 {
22 case DLL_PROCESS_ATTACH:
23 DisableThreadLibraryCalls(hinstDLL);
24 break;
25 case DLL_PROCESS_DETACH:
26 break;
27 }
28
29 return TRUE;
30 }
31
32 extern "C" VOID WINAPI
RunOnceExProcess(_In_ HWND hwnd,_In_ HINSTANCE hInst,_In_ LPCSTR pszCmdLine,_In_ int nCmdShow)33 RunOnceExProcess(_In_ HWND hwnd,
34 _In_ HINSTANCE hInst,
35 _In_ LPCSTR pszCmdLine,
36 _In_ int nCmdShow)
37 {
38 // iernonce may use shell32 API.
39 HRESULT Result = CoInitialize(NULL);
40 if (Result != S_OK && Result != S_FALSE)
41 {
42 return;
43 }
44
45 HKEY RootKeys[] = { HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER };
46 for (UINT i = 0; i < _countof(RootKeys); ++i)
47 {
48 RunOnceExInstance Instance(RootKeys[i]);
49 Instance.Run(g_bSilence);
50 }
51
52 CoUninitialize();
53 }
54
55 extern "C" VOID WINAPI
InitCallback(_In_ RUNONCEEX_CALLBACK Callback,_In_ BOOL bSilence)56 InitCallback(_In_ RUNONCEEX_CALLBACK Callback,
57 _In_ BOOL bSilence)
58 {
59 g_Callback = Callback;
60 g_bSilence = bSilence;
61 }
62