// @pymethod |PyIKnownFolderManager|RegisterFolder|Defines a new known folder PyObject *PyIKnownFolderManager::RegisterFolder(PyObject *self, PyObject *args) { IKnownFolderManager *pIKFM = GetI(self); if ( pIKFM == NULL ) return NULL; IID kfid; PyObject *obdef; // @pyparm <o PyIID>|id||GUID used to identify the new known folder // @pyparm dict|Definition||Dictionary containing info to be placed in a KNOWNFOLDER_DEFINITION struct // @comm <om PyIKnownFolder.GetFolderDefinition> can be used to get a template dictionary KNOWNFOLDER_DEFINITION def; ZeroMemory(&def, sizeof(def)); if ( !PyArg_ParseTuple(args, "O&O:RegisterFolder", PyWinObject_AsIID, &kfid, &obdef)) return NULL; if (!PyWinObject_AsKNOWNFOLDER_DEFINITION(obdef, def)) return NULL; HRESULT hr; PY_INTERFACE_PRECALL; hr = pIKFM->RegisterFolder(kfid, &def); PY_INTERFACE_POSTCALL; FreeKnownFolderDefinitionFields(&def); if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pIKFM, IID_IKnownFolderManager); Py_INCREF(Py_None); return Py_None; }
HRESULT RegisterKnownFolder(REFKNOWNFOLDERID kfid, KNOWNFOLDER_DEFINITION *pkfd) { IKnownFolderManager *pkfm = NULL; HRESULT hr = CoCreateInstance(CLSID_KnownFolderManager, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pkfm)); if (SUCCEEDED(hr)) { hr = pkfm->RegisterFolder(kfid, pkfd); if (SUCCEEDED(hr)) { // to make it easy to clean up everything this sample does, we'll track each added kfid AddRegisteredFolderToHistory(kfid); } else { wprintf(L"IKnownFolder::RegisterFolder() failed with hr = 0x%x\nMake sure this tool is run as an administrator as that is necessary to regiser a known folder", hr); } pkfm->Release(); } return hr; }