xref: /reactos/dll/win32/iernonce/iernonce.cpp (revision 4d0cc206)
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