ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

Definition at line 34 of file shellservices.cpp.

{
    ComInit usingCOM(COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE|COINIT_SPEED_OVER_MEMORY);

    HKEY hkey;
    CLSID clsid;
    WCHAR name[MAX_PATH], value[MAX_PATH];

    typedef vector<SIfacePtr<IOleCommandTarget>*> SSOVector;
    SSOVector sso_ptrs;

    if (!RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ShellServiceObjectDelayLoad"), &hkey)) {
        for(int idx=0; ; ++idx) {
            DWORD name_len = MAX_PATH;
            DWORD value_len = sizeof(value);

            if (RegEnumValueW(hkey, idx, name, &name_len, 0, NULL, (LPBYTE)&value, &value_len))
                break;

            if (!_alive)
                break;

            SIfacePtr<IOleCommandTarget>* sso_ptr = new SIfacePtr<IOleCommandTarget>;

            if (CLSIDFromString(value, &clsid) == NOERROR) {
                if (SUCCEEDED(sso_ptr->CreateInstance(clsid, IID_IOleCommandTarget))) {
                    if (SUCCEEDED((*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_NEW, OLECMDEXECOPT_DODEFAULT, NULL, NULL)))
                        sso_ptrs.push_back(sso_ptr);
                }
            }
        }

        RegCloseKey(hkey);
    }

    if (!sso_ptrs.empty()) {
        MSG msg;

        while(_alive) {
            if (MsgWaitForMultipleObjects(1, &_evtFinish, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0+0)
                break;  // _evtFinish has been set.

            while(_alive) {
                if (!PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
                    break;

                if (msg.message == WM_QUIT)
                    break;

                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }

         // shutdown all running Shell Service Objects
        for(SSOVector::iterator it=sso_ptrs.begin(); it!=sso_ptrs.end(); ++it) {
            SIfacePtr<IOleCommandTarget>* sso_ptr = *it;
            (*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
            delete sso_ptr;
        }
    }

    return 0;
}

Generated on Sat May 26 2012 06:43:29 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.