Platform SDK: Active Directory, ADSI, and Directory Services

Example Code for Checking the Status of ADS_SEARCHPREF_INFO

The following function checks the status of an array of ADS_SEARCHPREF_INFO structures and displays the status in a message box:

HRESULT CheckPreferences(
     ADS_SEARCHPREF_INFO *pSearchPref, // Array of search preferences.
     DWORD dwSearchPrefCount
     )
{
  if ((!pSearchPref)||(dwSearchPrefCount<1))
    return E_INVALIDARG;
  HRESULT hr = S_OK;
  LPOLESTR szString = new OLECHAR[MAX_PATH*5];
  LPOLESTR szTemp = new OLECHAR[MAX_PATH];
  LPOLESTR szStatus = new OLECHAR[MAX_PATH];
  LPOLESTR szPref = new OLECHAR[MAX_PATH];
    wcscpy(szString,L"Check preferences:\r\n");
  for (DWORD i=0; i<dwSearchPrefCount; i++)
  {
         switch (pSearchPref[i].dwStatus)
     {
     case ADS_STATUS_S_OK:
            wcscpy(szStatus, L"ADS_STATUS_S_OK");
      break;
     case ADS_STATUS_INVALID_SEARCHPREF:
       wcscpy(szStatus, L"ADS_STATUS_INVALID_SEARCHPREF");
       break;
     case ADS_STATUS_INVALID_SEARCHPREFVALUE:
       wcscpy(szStatus, L"ADS_STATUS_INVALID_SEARCHPREFVALUE");
       break;
     default:
       swprintf(szStatus, L"Unknown status: %d", 
                        pSearchPref[i].dwStatus);
       break;
     }
         switch (pSearchPref[i].dwSearchPref)
     {
     case ADS_SEARCHPREF_ASYNCHRONOUS:
             wcscpy(szPref, L"ADS_SEARCHPREF_ASYNCHRONOUS");
       break;
     case ADS_SEARCHPREF_SIZE_LIMIT:
       wcscpy(szPref, L"ADS_SEARCHPREF_SIZE_LIMIT");
       break;
     case ADS_SEARCHPREF_TIME_LIMIT:
       wcscpy(szPref, L"ADS_SEARCHPREF_TIME_LIMIT");
       break;
     case ADS_SEARCHPREF_ATTRIBTYPES_ONLY:
       wcscpy(szPref, L"ADS_SEARCHPREF_ATTRIBTYPES_ONLY");
       break;
     case ADS_SEARCHPREF_SEARCH_SCOPE:
       wcscpy(szPref, L"ADS_SEARCHPREF_SEARCH_SCOPE");
       break;
     case ADS_SEARCHPREF_TIMEOUT:
       wcscpy(szPref, L"ADS_SEARCHPREF_TIMEOUT");
       break;
     case ADS_SEARCHPREF_PAGESIZE:
       wcscpy(szPref, L"ADS_SEARCHPREF_PAGESIZE");
       break;
     case ADS_SEARCHPREF_PAGED_TIME_LIMIT:
       wcscpy(szPref, L"ADS_SEARCHPREF_PAGED_TIME_LIMIT");
       break;
     case ADS_SEARCHPREF_CHASE_REFERRALS:
       wcscpy(szPref, L"ADS_SEARCHPREF_CHASE_REFERRALS");
       break;
     case ADS_SEARCHPREF_SORT_ON:
       wcscpy(szPref, L"ADS_SEARCHPREF_SORT_ON");
       break;
     case ADS_SEARCHPREF_CACHE_RESULTS:
       wcscpy(szPref, L"ADS_SEARCHPREF_CACHE_RESULTS");
       break;
     default:
       swprintf(szPref, L"Unknown preference: %d", 
                        pSearchPref[i].dwSearchPref);
       break;
     }
     swprintf(szTemp, L"%d. %s = %s\r\n",
                      i, szPref, szStatus );
     wcscat(szString,szTemp);
    }
  MessageBox(NULL,szString,L"Check Preference Status",MB_OK);
 
  return hr;
}