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 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 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 56 InitCallback(_In_ RUNONCEEX_CALLBACK Callback, 57 _In_ BOOL bSilence) 58 { 59 g_Callback = Callback; 60 g_bSilence = bSilence; 61 } 62