ReactOS 0.4.15-dev-7918-g2a2556c
SSOThread Struct Reference

#include <shellservices.h>

Inheritance diagram for SSOThread:
Collaboration diagram for SSOThread:

Public Member Functions

int Run ()
 

Detailed Description

Definition at line 33 of file shellservices.h.

Member Function Documentation

◆ Run()

int SSOThread::Run ( )

Definition at line 34 of file shellservices.cpp.

35{
37
38 HKEY hkey;
41
42 typedef vector<SIfacePtr<IOleCommandTarget>*> SSOVector;
43 SSOVector sso_ptrs;
44
45 if (!RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ShellServiceObjectDelayLoad"), &hkey)) {
46 for(int idx=0; ; ++idx) {
47 DWORD name_len = MAX_PATH;
48 DWORD value_len = sizeof(value);
49
50 if (RegEnumValueW(hkey, idx, name, &name_len, 0, NULL, (LPBYTE)&value, &value_len))
51 break;
52
53 if (!_alive)
54 break;
55
57
59 if (SUCCEEDED(sso_ptr->CreateInstance(clsid, IID_IOleCommandTarget))) {
60 if (SUCCEEDED((*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_NEW, OLECMDEXECOPT_DODEFAULT, NULL, NULL)))
61 sso_ptrs.push_back(sso_ptr);
62 }
63 }
64 }
65
66 RegCloseKey(hkey);
67 }
68
69 if (!sso_ptrs.empty()) {
70 MSG msg;
71
72 while(_alive) {
74 break; // _evtFinish has been set.
75
76 while(_alive) {
77 if (!PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
78 break;
79
80 if (msg.message == WM_QUIT)
81 break;
82
85 }
86 }
87
88 // shutdown all running Shell Service Objects
89 for(SSOVector::iterator it=sso_ptrs.begin(); it!=sso_ptrs.end(); ++it) {
90 SIfacePtr<IOleCommandTarget>* sso_ptr = *it;
91 (*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
92 delete sso_ptr;
93 }
94 }
95
96 return 0;
97}
#define msg(x)
Definition: auth_time.c:54
#define RegCloseKey(hKey)
Definition: registry.h:49
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2830
#define MAX_PATH
Definition: compat.h:34
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
#define INFINITE
Definition: serial.h:102
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define TEXT(s)
Definition: k32.h:26
REFCLSID clsid
Definition: msctf.c:82
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:280
@ COINIT_SPEED_OVER_MEMORY
Definition: objbase.h:281
COM Initialisation.
Definition: shellclasses.h:179
wrapper class for COM interface pointers
Definition: shellclasses.h:333
HRESULT CreateInstance(REFIID clsid, REFIID riid)
Definition: shellclasses.h:412
Definition: name.c:39
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
unsigned char * LPBYTE
Definition: typedefs.h:53
Definition: pdh_main.c:94
#define WAIT_OBJECT_0
Definition: winbase.h:406
#define NOERROR
Definition: winerror.h:2354
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define RegOpenKey
Definition: winreg.h:519
#define WM_QUIT
Definition: winuser.h:1623
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define QS_ALLINPUT
Definition: winuser.h:903
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define PM_REMOVE
Definition: winuser.h:1196
#define PeekMessage
Definition: winuser.h:5830
#define DispatchMessage
Definition: winuser.h:5765
__wchar_t WCHAR
Definition: xmlstorage.h:180

The documentation for this struct was generated from the following files: