dll_main.cpp
 1  #include "pch.h"
 2  
 3  #include "shell_context_menu_win10.h"
 4  #include "dll_main.h"
 5  #include "trace.h"
 6  
 7  #include <common/Telemetry/EtwTrace/EtwTrace.h>
 8  
 9  HMODULE module_instance_handle = 0;
10  Shared::Trace::ETWTrace trace(L"NewPlusShellExtension_Win10");
11  
12  BOOL APIENTRY DllMain(HMODULE module_handle, DWORD ul_reason_for_call, LPVOID reserved)
13  {
14      switch (ul_reason_for_call)
15      {
16      case DLL_PROCESS_ATTACH:
17          module_instance_handle = module_handle;
18          Trace::RegisterProvider();
19          newplus::utilities::init_logger();
20          break;
21  
22      case DLL_PROCESS_DETACH:
23          Trace::UnregisterProvider();
24          break;
25      }
26      return TRUE;
27  }
28  
29  STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory)
30  {
31      return Module<ModuleType::InProc>::GetModule().GetActivationFactory(activatableClassId, factory);
32  }
33  
34  STDAPI DllCanUnloadNow()
35  {
36      return Module<InProc>::GetModule().GetObjectCount() == 0 ? S_OK : S_FALSE;
37  }
38  
39  STDAPI DllGetClassObject(_In_ REFCLSID ref_class_id, _In_ REFIID ref_interface_id, _Outptr_ LPVOID FAR* object)
40  {
41      return Module<InProc>::GetModule().GetClassObject(ref_class_id, ref_interface_id, object);
42  }
43  
44  CoCreatableClass(shell_context_menu_win10)