Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.3 KiB

  1. #include "stock.h"
  2. #pragma hdrstop
  3. STDAPI_(BOOL) IsTypeInList(LPCTSTR pszType, const LPCTSTR *arszList, UINT cList)
  4. {
  5. BOOL fRet = FALSE;
  6. if (pszType && *pszType)
  7. {
  8. PCWSTR pszExt = NULL;
  9. PCWSTR pszProgID = NULL;
  10. if (*pszType == L'.')
  11. pszExt = pszType;
  12. else
  13. pszProgID = pszType;
  14. WCHAR szProgID[MAX_PATH];
  15. DWORD cb = sizeof(szProgID);
  16. if (!pszProgID)
  17. {
  18. ASSERT(pszExt);
  19. if (ERROR_SUCCESS == SHGetValue(HKEY_CLASSES_ROOT, pszExt, NULL, NULL, szProgID, &cb))
  20. pszProgID = szProgID;
  21. else
  22. pszProgID = NULL;
  23. }
  24. for (UINT n = 0; FALSE == fRet && n < cList; n++)
  25. {
  26. // check extension if available
  27. if (pszExt)
  28. {
  29. fRet = (0 == StrCmpI(pszExt, arszList[n]));
  30. }
  31. if (!fRet && pszProgID)
  32. {
  33. WCHAR szTempID[MAX_PATH];
  34. ULONG cb = sizeof(szTempID);
  35. if (ERROR_SUCCESS == SHGetValue(HKEY_CLASSES_ROOT, arszList[n], NULL, NULL, szTempID, &cb))
  36. {
  37. fRet = 0 == StrCmpIW(pszProgID, szTempID);
  38. }
  39. }
  40. }
  41. }
  42. return fRet;
  43. }