// Copyright (c) 2000 - 2000 Microsoft Corporation. All Rights Reserved. // // reghlp.cpp - registration/enumeration part of DMO runtime // #include #include #include #include #include #define DMO_REGISTRY_HIVE HKEY_CLASSES_ROOT #define DMO_REGISTRY_PATH TEXT("DirectShow\\MediaObjects") #define CPU_RESOURCES_STR "SystemResources" // Automatically calls RegCloseKey when leaving scope class CAutoCreateHKey { public: CAutoCreateHKey(HKEY hKey, TCHAR* szSubKey, HKEY *phKey) { if (RegCreateKeyEx(hKey, szSubKey, 0, TEXT(""), REG_OPTION_NON_VOLATILE, MAXIMUM_ALLOWED, NULL, phKey, NULL) != ERROR_SUCCESS) m_hKey = *phKey = NULL; else m_hKey = *phKey; } ~CAutoCreateHKey() { if (m_hKey) RegCloseKey(m_hKey); } HKEY m_hKey; }; class CAutoOpenHKey { public: CAutoOpenHKey(HKEY hKey, TCHAR* szSubKey, HKEY *phKey, REGSAM samDesired = MAXIMUM_ALLOWED) { if (RegOpenKeyEx(hKey, szSubKey, 0, samDesired, phKey) != ERROR_SUCCESS) m_hKey = *phKey = NULL; else m_hKey = *phKey; } ~CAutoOpenHKey() { if (m_hKey) RegCloseKey(m_hKey); } HKEY m_hKey; }; ///////////////////////////////////////////////////////////////////////////// // // DMO Registration code // // // Public entry point // STDAPI DMORegisterCpuResources ( REFCLSID clsidDMO, unsigned long ulCpuResources ) { TCHAR szSubkeyName[80]; if (clsidDMO == GUID_NULL) return E_INVALIDARG; // open the main DMO key HKEY hMainKey; CAutoOpenHKey kMain(DMO_REGISTRY_HIVE, DMO_REGISTRY_PATH, &hMainKey); if (hMainKey == NULL) return E_FAIL; // open the object specific key underneath the main key //DMOGuidToStr(szSubkeyName, clsidDMO); // BUGBUG: redundant StringCchPrintf(szSubkeyName,sizeof(szSubkeyName)/sizeof(TCHAR),TEXT("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x"), clsidDMO.Data1, clsidDMO.Data2, clsidDMO.Data3, clsidDMO.Data4[0], clsidDMO.Data4[1], clsidDMO.Data4[2], clsidDMO.Data4[3], clsidDMO.Data4[4], clsidDMO.Data4[5], clsidDMO.Data4[6], clsidDMO.Data4[7]); HKEY hObjectKey; CAutoOpenHKey kObject(hMainKey, szSubkeyName, &hObjectKey); if (hObjectKey == NULL) return E_FAIL; // set the default value of the CPU Resources key to the value if (RegSetValueEx(hObjectKey, TEXT(CPU_RESOURCES_STR), (DWORD)0, REG_DWORD, (CONST BYTE *)&ulCpuResources, sizeof(DWORD)) != ERROR_SUCCESS) return E_FAIL; return NOERROR; } // // End registry helper code // /////////////////////////////////////////////////////////////////////////////