//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994 - 1998. // // File: newbrows.cpp // // Contents: implementation of the new GPO browser // // Functions: BrowseForGPO // // History: 04-30-1998 stevebl Created // //--------------------------------------------------------------------------- #include "main.h" #include "browser.h" #include "compspp.h" int CALLBACK PSCallback(HWND hwndDlg, UINT uMsg, LPARAM lParam); //+-------------------------------------------------------------------------- // // Function: BrowseForGPO // // Synopsis: the GPO browser // // Arguments: [lpBrowseInfo] - structure that defines the behavior of the // browser and contains the results // // Returns: S_OK - success // // Modifies: // // History: 04-30-1998 stevebl Created // // Notes: // //--------------------------------------------------------------------------- HRESULT BrowseForGPO(LPGPOBROWSEINFO lpBrowseInfo) { LPOLESTR szCaption; if (NULL != lpBrowseInfo->lpTitle) { szCaption = lpBrowseInfo->lpTitle; } else { szCaption = new OLECHAR[256]; if (szCaption) { LoadString(g_hInstance, IDS_CAPTION, szCaption, 256); } } // bind to lpBrowseInfo->lpInitialOU and see if it is a site BOOL fSite = FALSE; IADs * pADs = NULL; HRESULT hr = OpenDSObject(lpBrowseInfo->lpInitialOU, IID_IADs, (void **)&pADs); if (SUCCEEDED(hr)) { VARIANT var; VariantInit(&var); BSTR bstrProperty = SysAllocString(L"objectClass"); if (bstrProperty) { hr = pADs->Get(bstrProperty, &var); if (SUCCEEDED(hr)) { int cElements = var.parray->rgsabound[0].cElements; VARIANT * rgData = (VARIANT *)var.parray->pvData; while (cElements--) { if (0 == _wcsicmp(L"site", rgData[cElements].bstrVal)) { fSite = TRUE; } } } SysFreeString(bstrProperty); } VariantClear(&var); pADs->Release(); } HPROPSHEETPAGE hpage[4]; int nPage = 0; int nStartPage = 0; void * pActive; CBrowserPP ppDomains; if (0 == (lpBrowseInfo->dwFlags & GPO_BROWSE_NODSGPOS)) hpage[nPage++]= ppDomains.Initialize(PAGETYPE_DOMAINS, lpBrowseInfo, &pActive); CBrowserPP ppSites; if (0 == (lpBrowseInfo->dwFlags & GPO_BROWSE_NODSGPOS)) { if (fSite) { nStartPage = nPage; } hpage[nPage++]= ppSites.Initialize(PAGETYPE_SITES, lpBrowseInfo, &pActive); } CCompsPP ppComputers; if (0 == (lpBrowseInfo->dwFlags & GPO_BROWSE_NOCOMPUTERS)) hpage[nPage++]= ppComputers.Initialize(PAGETYPE_COMPUTERS, lpBrowseInfo, &pActive); CBrowserPP ppAll; if (0 == (lpBrowseInfo->dwFlags & GPO_BROWSE_NODSGPOS)) { if (lpBrowseInfo->dwFlags & GPO_BROWSE_INITTOALL) { nStartPage = nPage; } hpage[nPage++]= ppAll.Initialize(PAGETYPE_ALL, lpBrowseInfo, &pActive); } PROPSHEETHEADER psh; memset(&psh, 0, sizeof(psh)); psh.dwSize = sizeof(psh); psh.dwFlags = PSH_NOAPPLYNOW | ((lpBrowseInfo->dwFlags & GPO_BROWSE_OPENBUTTON) ? PSH_USECALLBACK : 0); psh.hwndParent = lpBrowseInfo->hwndOwner; psh.pszCaption = szCaption; psh.nPages = nPage; psh.phpage = hpage; psh.pfnCallback = PSCallback; psh.nStartPage = nStartPage; int iReturn = (int)PropertySheet(&psh); if (szCaption && (szCaption != lpBrowseInfo->lpTitle)) { delete [] szCaption; } if (IDOK == iReturn) { return S_OK; } else return HRESULT_FROM_WIN32(ERROR_CANCELLED); } //+-------------------------------------------------------------------------- // // Function: PSCallback // // Synopsis: Callback function called by Windows during property sheet // initialization (among others). // // Arguments: [hwndDlg] - handle to the property sheet // [uMsg] - message ID // [lParam] - additional message specific info // // Returns: 0 // // History: 04-30-1998 stevebl Created // // Notes: This is used to change the text of the OK button // //--------------------------------------------------------------------------- int CALLBACK PSCallback(HWND hwndDlg, UINT uMsg, LPARAM lParam) { if (uMsg == PSCB_INITIALIZED) { TCHAR szOpen[64]; LoadString(g_hInstance, IDS_OPENBUTTON, szOpen, ARRAYSIZE(szOpen)); SetDlgItemText(hwndDlg, IDOK, szOpen); } return 0; }