OSStatus CConfigPropertySheet::SetupRegistryNotifications() { unsigned int threadId; OSStatus err; check( m_threadExited == NULL ); check( m_thread == NULL ); err = RegCreateKey( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\State\\Hostnames", &m_statusKey ); require_noerr( err, exit ); m_threadExited = CreateEvent( NULL, FALSE, FALSE, NULL ); err = translate_errno( m_threadExited, (OSStatus) GetLastError(), kUnknownErr ); require_noerr( err, exit ); // Create thread with _beginthreadex() instead of CreateThread() to avoid memory leaks when using static run-time // libraries. See <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp>. m_thread = (HANDLE) _beginthreadex_compat( NULL, 0, WatchRegistry, this, 0, &threadId ); err = translate_errno( m_thread, (OSStatus) GetLastError(), kUnknownErr ); require_noerr( err, exit ); exit: if ( err ) { TearDownRegistryNotifications(); } return err; }
OSStatus CPrinterSetupWizardSheet::InstallPrinter(Printer * printer) { Service * service; BOOL ok; OSStatus err; service = printer->services.front(); check( service ); // // if the driver isn't installed, then install it // if ( !printer->driverInstalled ) { DWORD dwResult; HANDLE hThread; unsigned threadID; m_driverThreadFinished = false; // // create the thread // hThread = (HANDLE) _beginthreadex_compat( NULL, 0, InstallDriverThread, printer, 0, &threadID ); err = translate_errno( hThread, (OSStatus) GetLastError(), kUnknownErr ); require_noerr( err, exit ); // // go modal // while (!m_driverThreadFinished) { MSG msg; GetMessage( &msg, m_hWnd, 0, 0 ); TranslateMessage(&msg); DispatchMessage(&msg); } // // Wait until child process exits. // dwResult = WaitForSingleObject( hThread, INFINITE ); err = translate_errno( dwResult == WAIT_OBJECT_0, errno_compat(), err = kUnknownErr ); require_noerr( err, exit ); // // check the return value of thread // require_noerr( m_driverThreadExitCode, exit ); // // now we know that the driver was successfully installed // printer->driverInstalled = true; } if ( service->type == kPDLServiceType ) { err = InstallPrinterPDLAndLPR( printer, service, PROTOCOL_RAWTCP_TYPE ); require_noerr( err, exit ); } else if ( service->type == kLPRServiceType ) { err = InstallPrinterPDLAndLPR( printer, service, PROTOCOL_LPR_TYPE ); require_noerr( err, exit ); } else if ( service->type == kIPPServiceType ) { err = InstallPrinterIPP( printer, service ); require_noerr( err, exit ); } else { err = kUnknownErr; require_noerr( err, exit ); } printer->installed = true; // // if the user specified a default printer, set it // if (printer->deflt) { ok = SetDefaultPrinter( printer->actualName ); err = translate_errno( ok, errno_compat(), err = kUnknownErr ); require_noerr( err, exit ); } exit: return err; }