#include #define INITGUID #include #include #include #include #include #include // {BA4E57F0-FAB6-11cf-9D1A-00AA00A70D51} //static const GUID CLSID_MDCOM = //{ 0xba4e57f0, 0xfab6, 0x11cf, { 0x9d, 0x1a, 0x0, 0xaa, 0x0, 0xa7, 0xd, 0x51 } }; // {BA4E57F1-FAB6-11cf-9D1A-00AA00A70D51} //static const GUID IID_IMDCOMSRVFACTORY = //{ 0xba4e57f1, 0xfab6, 0x11cf, { 0x9d, 0x1a, 0x0, 0xaa, 0x0, 0xa7, 0xd, 0x51 } }; // {C1AA48C0-FACC-11cf-9D1A-00AA00A70D51} //static const GUID IID_IMDCOM = //{ 0xc1aa48c0, 0xfacc, 0x11cf, { 0x9d, 0x1a, 0x0, 0xaa, 0x0, 0xa7, 0xd, 0x51 } }; #define MD_TEST_MAX_STRING_LEN 2048 #define MD_TEST_MAX_BINARY_LEN 2048 #define FILL_RETURN_BUFF for(ReturnIndex=0;ReturnIndexdwMDIdentifier=ID; \ (PMDR)->dwMDAttributes=ATTR | g_dwSecurityFlags; \ (PMDR)->dwMDUserType=UTYPE; \ (PMDR)->dwMDDataType=DTYPE; \ (PMDR)->dwMDDataLen=DLEN; \ (PMDR)->pbMDData=PD; \ } #define TIMEOUT_VALUE 1000 #define INITIAL_TIMEOUT_VALUE 15000 #define DWORD_DATA_NAME 1 #define BINARY_DATA_NAME 2 #define STRING_DATA_NAME 3 #define BAD_BINARY_DATA_NAME 4 #define DWORD_DATA_NAME_INHERIT 5 #define DWORD_DATA_NAME_NO_INHERIT 6 #define REFERENCE_DATA_NAME 7 #define EXPANDSZ_DATA_NAME 8 #define MULTISZ_DATA_NAME 9 #define INSERT_PATH_DATA_NAME 10 #define MAX_DATA_ENTRIES 5 #define MY_GREATEROF(p1,p2) ((p1) > (p2))?(p1):(p2) #define MAX_BUFFER_LEN MY_GREATEROF((MD_TEST_MAX_STRING_LEN * sizeof(TCHAR)), MD_TEST_MAX_BINARY_LEN) #define BUFFER_SIZE 5000 #define HUNDREDNANOSECONDSPERSECOND (DWORDLONG)10000000 #define HUNDREDNANOSECONDSPERMINUTE (HUNDREDNANOSECONDSPERSECOND * (DWORDLONG)60) #define HUNDREDNANOSECONDSPERHOUR (HUNDREDNANOSECONDSPERMINUTE * (DWORDLONG)60) #define HUNDREDNANOSECONDSPERDAY (HUNDREDNANOSECONDSPERHOUR * (DWORDLONG)24) #define HUNDREDNANOSECONDSPERYEAR ((HUNDREDNANOSECONDSPERDAY * (DWORDLONG)365) + (HUNDREDNANOSECONDSPERDAY / (DWORDLONG)4)) #define INSERT_PATH_DATA "The path be inserted here: " MD_INSERT_PATH_STRING ":Before here" #define SET_GETALL_PARMS(p1) dwBufferSize = BUFFER_SIZE;dwNumDataEntries = MAX_DATA_ENTRIES;dwDataSetNumber=0;for (i=0;iRelease();\ } DWORD g_dwSecurityFlags = 0; VOID PrintTime(PFILETIME pftTime) { DWORDLONG dwlTime = *(PDWORDLONG)pftTime; printf("Year = %d\n", ((DWORD)(dwlTime / (DWORDLONG)HUNDREDNANOSECONDSPERYEAR)) + 1601); printf("Day = %d\n", (DWORD)((dwlTime % (DWORDLONG)HUNDREDNANOSECONDSPERYEAR) / (DWORDLONG)HUNDREDNANOSECONDSPERDAY)); printf("Time = %d minutes\n", (DWORD)((dwlTime % (DWORDLONG)HUNDREDNANOSECONDSPERDAY) / (DWORDLONG)HUNDREDNANOSECONDSPERMINUTE)); ULARGE_INTEGER uliTime = *(PULARGE_INTEGER)pftTime; printf("Time High Word = %X, Low Word = %X\n", uliTime.HighPart, uliTime.LowPart); } LPSTR ConvertDataTypeToString(DWORD dwDataType) { LPTSTR strReturn; switch (dwDataType) { case DWORD_METADATA: strReturn = "DWORD"; break; case STRING_METADATA: strReturn = "STRING"; break; case BINARY_METADATA: strReturn = "BINARY"; break; case EXPANDSZ_METADATA: strReturn = "EXPANDSZ"; break; case MULTISZ_METADATA: strReturn = "MULTISZ"; break; case ALL_METADATA: strReturn = "ALL"; break; default: strReturn = "Invalid Data Type"; } return (strReturn); } VOID PrintDataBuffer(PMETADATA_RECORD pmdrData, BOOL bPrintData, LPSTR strInitialString) { DWORD i; if (strInitialString != NULL) { printf("%s\n", strInitialString); } printf("Identifier = %x, Attributes = %x, UserType = %x, DataType = %s, DataLen = %x, DataTag = %x", pmdrData->dwMDIdentifier, pmdrData->dwMDAttributes, pmdrData->dwMDUserType, ConvertDataTypeToString(pmdrData->dwMDDataType), pmdrData->dwMDDataLen, pmdrData->dwMDDataTag); if (bPrintData) { printf(", Data = "); if (pmdrData->pbMDData != NULL) { switch (pmdrData->dwMDDataType) { case DWORD_METADATA: printf("%x", *(DWORD *)(pmdrData->pbMDData)); break; case STRING_METADATA: case EXPANDSZ_METADATA: printf("%s", (LPTSTR)(pmdrData->pbMDData)); break; case BINARY_METADATA: for (i = 0; i < pmdrData->dwMDDataLen; i++) { printf("%.2x ", ((PBYTE)(pmdrData->pbMDData))[i]); } break; case MULTISZ_METADATA: printf("\n\t"); LPSTR pszData = (LPSTR) pmdrData->pbMDData; for (i = 0; i < pmdrData->dwMDDataLen; i++) { if (pszData[i] != '\0') { printf("%c", pszData[i]); } else { printf("\n\t"); } } break; } } else { printf("NULL"); } } printf("\n"); } VOID PrintGetAllDataBuffer(PBYTE pbBase, PMETADATA_GETALL_RECORD pmdgarData, BOOL bPrintData, LPSTR strInitialString) { DWORD i; if (strInitialString != NULL) { printf("%s\n", strInitialString); } printf("Identifier = %x, Attributes = %x, UserType = %x, DataType = %s, DataLen = %x, DataTag = %x", pmdgarData->dwMDIdentifier, pmdgarData->dwMDAttributes, pmdgarData->dwMDUserType, ConvertDataTypeToString(pmdgarData->dwMDDataType), pmdgarData->dwMDDataLen, pmdgarData->dwMDDataTag); if (bPrintData) { PBYTE pbData; if (pmdgarData->dwMDDataTag != 0) { printf(", Reference Data Address = 0x%x", (DWORD)pmdgarData->pbMDData); } else { printf(", Data = "); pbData = pbBase + (pmdgarData->dwMDDataOffset); switch (pmdgarData->dwMDDataType) { case DWORD_METADATA: printf("%x", *(DWORD *)pbData); break; case STRING_METADATA: case EXPANDSZ_METADATA: printf("%s", (LPTSTR)pbData); break; case BINARY_METADATA: for (i = 0; i < pmdgarData->dwMDDataLen; i++) { printf("%.2x ", ((PBYTE)pbData)[i]); } break; case MULTISZ_METADATA: printf("\n\t"); LPSTR pszData = (LPSTR) pbData; for (i = 0; i < pmdgarData->dwMDDataLen; i++) { if (pszData[i] != '\0') { printf("%c", pszData[i]); } else { printf("\n\t"); } } break; } } } printf("\n"); } LPSTR ConvertReturnCodeToString(DWORD ReturnCode) { LPSTR RetCode = NULL; switch (ReturnCode) { case ERROR_SUCCESS: RetCode = "ERROR_SUCCESS"; break; case ERROR_PATH_NOT_FOUND: RetCode = "ERROR_PATH_NOT_FOUND"; break; case ERROR_INVALID_HANDLE: RetCode = "ERROR_INVALID_HANDLE"; break; case ERROR_INVALID_DATA: RetCode = "ERROR_INVALID_DATA"; break; case ERROR_INVALID_PARAMETER: RetCode = "ERROR_INVALID_PARAMETER"; break; case ERROR_NOT_SUPPORTED: RetCode = "ERROR_NOT_SUPPORTED"; break; case ERROR_ACCESS_DENIED: RetCode = "ERROR_ACCESS_DENIED"; break; case ERROR_NOT_ENOUGH_MEMORY: RetCode = "ERROR_NOT_ENOUGH_MEMORY"; break; case ERROR_FILE_NOT_FOUND: RetCode = "ERROR_FILE_NOT_FOUND"; break; case ERROR_DUP_NAME: RetCode = "ERROR_DUP_NAME"; break; case ERROR_PATH_BUSY: RetCode = "ERROR_PATH_BUSY"; break; case ERROR_NO_MORE_ITEMS: RetCode = "ERROR_NO_MORE_ITEMS"; break; case ERROR_INSUFFICIENT_BUFFER: RetCode = "ERROR_INSUFFICIENT_BUFFER"; break; case ERROR_PROC_NOT_FOUND: RetCode = "ERROR_PROC_NOT_FOUND"; break; case ERROR_INTERNAL_ERROR: RetCode = "ERROR_INTERNAL_ERROR"; break; case MD_ERROR_NOT_INITIALIZED: RetCode = "MD_ERROR_NOT_INITIALIZED"; break; case MD_ERROR_DATA_NOT_FOUND: RetCode = "MD_ERROR_DATA_NOT_FOUND"; break; case MD_ERROR_INVALID_VERSION: RetCode = "MD_ERROR_INVALID_VERSION"; break; case MD_ERROR_CANNOT_REMOVE_SECURE_ATTRIBUTE: RetCode = "MD_ERROR_CANNOT_REMOVE_SECURE_ATTRIBUTE"; break; case ERROR_ALREADY_EXISTS: RetCode = "ERROR_ALREADY_EXISTS"; break; case MD_WARNING_PATH_NOT_FOUND: RetCode = "MD_WARNING_PATH_NOT_FOUND"; break; case MD_WARNING_DUP_NAME: RetCode = "MD_WARNING_DUP_NAME"; break; case MD_WARNING_INVALID_DATA: RetCode = "MD_WARNING_INVALID_DATA"; break; case ERROR_INVALID_NAME: RetCode = "ERROR_INVALID_NAME"; break; case REGDB_E_CLASSNOTREG: RetCode = "REGDB_E_CLASSNOTREG"; break; case ERROR_NO_SYSTEM_RESOURCES: RetCode = "ERROR_NO_SYSTEM_RESOURCES"; break; default: RetCode = "Unrecognized Error Code"; break; } return (RetCode); } DWORD ConvertHresToDword(HRESULT hRes) { return HRESULTTOWIN32(hRes); } LPSTR ConvertHresToString(HRESULT hRes) { LPSTR strReturn = NULL; if ((HRESULT_FACILITY(hRes) == FACILITY_WIN32) || (HRESULT_FACILITY(hRes) == FACILITY_INTERNET) || (hRes == 0)) { strReturn = ConvertReturnCodeToString(ConvertHresToDword(hRes)); } else { strReturn = "Unrecognized hRes facility"; } return(strReturn); } void ConsumeRegistry(IMDCOM * pcCom, METADATA_HANDLE hHandle, LPTSTR pszPath, DWORD dwUnitSize = 10000); void ConsumeRegistry(IMDCOM * pcCom, METADATA_HANDLE hHandle, LPTSTR pszPath, DWORD dwUnitSize) { METADATA_RECORD mdrData; HRESULT hRes = ERROR_SUCCESS; DWORD i; BYTE *bData = new BYTE[dwUnitSize]; if (bData != NULL) { for (i = 0; i < dwUnitSize; i++) { bData[i] = 0; } for (i = 0; SUCCEEDED(hRes); i++) { MD_SET_DATA_RECORD(&mdrData, i, METADATA_NO_ATTRIBUTES, 0, BINARY_METADATA, dwUnitSize, bData) hRes = pcCom->ComMDSetMetaData(hHandle, (PBYTE)pszPath, &mdrData); printf("MDSetMetaData(hHandle, %s, &mdrData); Returns %s\n", pszPath, ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { hRes = pcCom->ComMDSaveData(); printf("\nMDSaveData(); Returns hRes = %X, %s\n", hRes, ConvertHresToString(hRes)); } (bData[i % dwUnitSize])++; } delete (bData); } } DWORD SetMultisz(LPSTR pszBuffer, LPSTR ppszStrings[], DWORD dwNumStrings) { DWORD i; LPSTR pszIndex = pszBuffer; for (i = 0; i < dwNumStrings; i++) { strcpy(pszIndex, ppszStrings[i]); pszIndex += strlen(pszIndex) + 1; } *pszIndex = '\0'; return ((pszIndex - pszBuffer) + 1); } DWORD GetMultiszDataLen(LPSTR pszData) { DWORD i; for (i = 1; (pszData[i-1] != (TCHAR)'\0') || (pszData[i] != (TCHAR)'\0'); i++) { } return(i + 1); } DWORD __cdecl main( INT cArgs, char * pArgs[] ) { DWORD RetCode; DWORD TestDword = 3; int TestBinary[] = {1,2,3,4}; int i, j, ReturnIndex; DWORD ReturnDword = 0; DWORD ReturnAttributes = 0; DWORD ReturnDataType = 0; DWORD ReturnUserType = 0; METADATA_RECORD mdrData; UCHAR ReturnBuf[MAX_BUFFER_LEN]; DWORD ReturnDataLen = sizeof(ReturnBuf); DWORD dwRequiredDataLen = 0; DWORD dwRequiredBufferLen = 0; TCHAR NameBuf[METADATA_MAX_NAME_LEN]; METADATA_HANDLE OpenHandle, RootHandle; DWORD ReturnDataIdentifier; METADATA_RECORD structDataEntries[MAX_DATA_ENTRIES]; BYTE binDataEntries[MAX_DATA_ENTRIES][MAX_BUFFER_LEN]; DWORD dwNumDataEntries; BYTE pbBuffer[BUFFER_SIZE]; DWORD dwBufferSize = BUFFER_SIZE; COSERVERINFO csiName; COSERVERINFO *pcsiParam = NULL; OLECHAR rgchName[256]; DWORD dwSystemChangeNumber; DWORD dwDataSetNumber; METADATA_HANDLE_INFO mhiInfo; FILETIME ftTime; LPSTR ppszData[10]; DWORD dwMultiszLen; IClassFactory * pcsfFactory = NULL; IClassFactory * pcsfFactory2 = NULL; IMDCOM * pcCom = NULL; HRESULT hRes; CImpIMDCOMSINK *pEventSink = new CImpIMDCOMSINK(); IConnectionPoint* pConnPoint = NULL; IConnectionPointContainer* pConnPointContainer = NULL; DWORD dwCookie; BOOL bSinkConnected = FALSE; if (cArgs > 1) { j = 1; if (_stricmp(pArgs[1], "-s") == 0) { g_dwSecurityFlags = METADATA_SECURE; j++; } if (j < cArgs) { for (i = 0; pArgs[j][i] != '\0'; i++) { rgchName[i] = (OLECHAR) pArgs[j][i]; } csiName.pwszName = rgchName; csiName.pAuthInfo = NULL; pcsiParam = &csiName; } } hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED); if (FAILED(hRes)) { printf("CoInitializeEx Failed\n"); } /* hRes = CoCreateInstance(GETMDCLSID(TRUE), NULL, CLSCTX_SERVER, IID_IMDCOM, (void**) &pcCom); if (FAILED(hRes)) { printf("CoCreateInstance Attaching to service failed, hRes = %X\n", hRes); hRes = CoCreateInstance(GETMDCLSID(FALSE), NULL, CLSCTX_SERVER, IID_IMDCOM, (void**) &pcCom); } if (FAILED(hRes)) { printf("CoCreateInstance attaching to exe failed, hRes = %X\n", hRes); } else { */ hRes = CoGetClassObject(GETMDCLSID(TRUE), CLSCTX_SERVER, pcsiParam, IID_IClassFactory, (void**) &pcsfFactory); hRes = CoGetClassObject(GETMDCLSID(TRUE), CLSCTX_SERVER, pcsiParam, IID_IClassFactory, (void**) &pcsfFactory2); printf("CoGetClassObject(GETMDCLSID(TRUE), ...; Returns hRes = %x, %s\n", hRes, ConvertHresToString(hRes)); if (FAILED(hRes)) { hRes = CoGetClassObject(GETMDCLSID(FALSE), CLSCTX_SERVER, pcsiParam, IID_IClassFactory, (void**) &pcsfFactory); printf("CoGetClassObject(GETMDCLSID(FALSE), ...; Returns hRes = %x, %s\n", hRes, ConvertHresToString(hRes)); } if (FAILED(hRes)) { } else { hRes = pcsfFactory->CreateInstance(NULL, IID_IMDCOM, (void **) &pcCom); printf("Factory->CreateInstance(...); Returns hRes = %X, %s\n", hRes, ConvertHresToString(hRes)); pcsfFactory->Release(); printf("Factory->Release() called\n"); if (FAILED(hRes)) { printf("Factory->CreateInstance failed, hRes = %X\n", hRes); } else { /* hRes = pcCom->ComMDInitialize(); hRes = pcCom->ComMDAddMetaObject(METADATA_MASTER_ROOT_HANDLE, sizeof("Garbage"), (unsigned char *)"Garbage"); hRes = pcCom->ComMDTerminate(FALSE); hRes = pcCom->ComMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, sizeof(""), (PBYTE)"", METADATA_PERMISSION_READ, TIMEOUT_VALUE, &OpenHandle); printf("MDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, NULL, METADATA_PERMISSION_READ, TIMEOUT_VALUE, &OpenHandle); Returns %s\n", ConvertHresToString(hRes)); */ // First query the object for its Connection Point Container. This // essentially asks the object in the server if it is connectable. hRes = pcCom->QueryInterface( IID_IConnectionPointContainer, (PVOID *)&pConnPointContainer); if SUCCEEDED(hRes) { // Find the requested Connection Point. This AddRef's the // returned pointer. hRes = pConnPointContainer->FindConnectionPoint(IID_IMDCOMSINK, &pConnPoint); if (SUCCEEDED(hRes)) { hRes = pConnPoint->Advise((IUnknown *)pEventSink, &dwCookie); if (SUCCEEDED(hRes)) { bSinkConnected = TRUE; } printf("pConnPoint->Advise((IUnknown *)pEventSink, &dwCookie); Returns %s\n", ConvertHresToString(hRes)); } RELEASE_INTERFACE(pConnPointContainer); } hRes = pcCom->ComMDInitialize(); printf("MDInitialize(); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { hRes = pcCom->ComMDInitialize(); printf("MDInitialize(); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { hRes = pcCom->ComMDTerminate(FALSE); printf("\nMDTerminate(FALSE); Returns %s\n", ConvertHresToString(hRes)); } hRes = pcCom->ComMDGetLastChangeTime(METADATA_MASTER_ROOT_HANDLE, (PBYTE)"Root Object", &ftTime); printf("MDGetLastChangeTime(METADATA_MASTER_ROOT_HANDLE, (PBYTE)\"Root Object\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDGetLastChangeTime(METADATA_MASTER_ROOT_HANDLE, NULL, &ftTime); printf("MDGetLastChangeTime(METADATA_MASTER_ROOT_HANDLE, NULL, &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } hRes = pcCom->ComMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, NULL, METADATA_PERMISSION_WRITE | METADATA_PERMISSION_READ, INITIAL_TIMEOUT_VALUE, &RootHandle); printf("MDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, \"\", METADATA_PERMISSION_WRITE || METADATA_PERMISSION_READ, TIMEOUT_VALUE, &RootHandle); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { hRes = pcCom->ComMDDeleteAllMetaData(RootHandle, (PBYTE)"Root Object", ALL_METADATA, ALL_METADATA); printf("MDDeleteAllMetaData(RootHandle, (PBYTE)\"Root Object\", ALL_METADATA, ALL_METADATA); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteAllMetaData(RootHandle, (PBYTE)"junk 1", ALL_METADATA, ALL_METADATA); printf("MDDeleteAllMetaData(RootHandle, (PBYTE)\"junk 1\", ALL_METADATA, ALL_METADATA); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteChildMetaObjects(RootHandle, (PBYTE)"junk 1"); printf("MDDeleteChildObjects(RootHandle, (PBYTE)\"junk 1\"); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteChildMetaObjects(RootHandle, (PBYTE)"Root Object"); printf("MDDeleteChildObjects(RootHandle, (PBYTE)\"Root Object\"); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaObject(RootHandle, (PBYTE)"Root Object"); printf("MDDeleteMetaObject(RootHandle, TEXT(\"Root Object\")); Returns %s\n", ConvertHresToString(hRes)); // // Delete everything we created last time. // hRes = pcCom->ComMDDeleteMetaObject(RootHandle, (PBYTE)"junk 1"); printf("MDDeleteMetaObject(RootHandle, TEXT(\"junk 1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetHandleInfo(RootHandle, &mhiInfo); printf("MDGetHandleInfo(RootHandle, &mhiInfo); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Handle Change Number = %d, Handle Permissions = %X\n", mhiInfo.dwMDSystemChangeNumber, mhiInfo.dwMDPermissions); } hRes = pcCom->ComMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, (PBYTE)"", METADATA_PERMISSION_READ, TIMEOUT_VALUE, &OpenHandle); printf("MDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, \"\", METADATA_PERMISSION_READ, TIMEOUT_VALUE, &OpenHandle); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"junk 1/junk 2/junk 3/junk 4"); printf("MDAddMetaObject(RootHandle, \"junk 1/junk 2/junk 3/junk 4\"); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE) "junk 1/This is a very long name for a metaobject and should generate an error" " qwerq asf asf asdf asdf asdf fasd asdf fasd asdf asdf dfas fasd asdf sdfa asdf fsd asdf" " fsd sdf asdf asdf fsd fasd sdfa sdfa asdf fas sdf fasd asdf asfd asfl asfpok sadfop asf 012345"); printf("MDAddMetaObject(RootHandle, \"junk 1/This is a very long name for a metaobject and should generate" " an error qwerq asf asf asdf asdf asdf fasd asdf fasd asdf asdf dfas fasd asdf sdfa asdf fsd asdf" " fsd sdf asdf asdf fsd fasd sdfa sdfa asdf fas sdf fasd asdf asfd asfl asfpok sadfop asf\"));" " Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object\")); Returns %s\n", ConvertHresToString(hRes)); // ConsumeRegistry(pcCom, RootHandle, "Root Object"); hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Child Object1"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Child Object1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Child Object2"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Child Object2\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Child Object2"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Child Object2\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Reference Object1"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Reference Object1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/Subject Object1"); printf("MDAddMetaObject(RootHandle, TEXT(\"Root Object/Subject Object1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetDataSetNumber(RootHandle, (PBYTE)"Root Object/Child Object1", &dwDataSetNumber); printf("MDGetDataSetNumber(RootHandle,(PBYTE)\"Root Object/Child Object1\", &dwDataSetNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Data Set Number = %d\n", dwDataSetNumber); } hRes = pcCom->ComMDGetDataSetNumber(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &dwDataSetNumber); printf("MDGetDataSetNumber(RootHandle,(PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &dwDataSetNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Data Set Number = %d\n", dwDataSetNumber); } hRes = pcCom->ComMDGetDataSetNumber(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1/Doesn't Exist", &dwDataSetNumber); printf("MDGetDataSetNumber(RootHandle,(PBYTE)\"Root Object/Child Object1/GrandChild Object1/Doesn't Exist\", &dwDataSetNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Data Set Number = %d\n", dwDataSetNumber); } MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, DWORD_METADATA, sizeof(DWORD), (PBYTE)&TestDword) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, MULTISZ_METADATA, 4, (PBYTE)NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, MULTISZ_METADATA, 0, (PBYTE)NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1",&mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } ppszData[0] = "Hello "; ppszData[1] = "World "; ppszData[2] = "Test "; dwMultiszLen = SetMultisz((LPSTR)binDataEntries, ppszData, 3); MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, MULTISZ_METADATA, dwMultiszLen - 1, (PBYTE)binDataEntries) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); ppszData[0] = "Hello "; ppszData[1] = "World "; ppszData[2] = "Test "; dwMultiszLen = SetMultisz((LPSTR)binDataEntries, ppszData, 3); MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, MULTISZ_METADATA, dwMultiszLen, (PBYTE)binDataEntries) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1",&mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } ppszData[0] = "Hello "; ppszData[1] = INSERT_PATH_DATA; ppszData[2] = "Test "; dwMultiszLen = SetMultisz((LPSTR)binDataEntries, ppszData, 3); MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_INSERT_PATH | METADATA_INHERIT, 0, MULTISZ_METADATA, dwMultiszLen, (PBYTE)binDataEntries) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, MULTISZ_DATA_NAME, METADATA_INSERT_PATH | METADATA_INHERIT, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1",&mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } hRes = ERROR_SUCCESS; printf("\nThis Enum should include the MULTISZ Data %x without path replacement ID. Get normally.\n", MULTISZ_DATA_NAME); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, 0, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } hRes = ERROR_SUCCESS; printf("\nThis Enum should include the MULTISZ Data %x with path replacement ID. Get normally.\n", MULTISZ_DATA_NAME); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, 0, METADATA_INSERT_PATH, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } hRes = pcCom->ComMDGetDataSetNumber(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1/Doesn't Exist", &dwDataSetNumber); printf("MDGetDataSetNumber(RootHandle,(PBYTE)\"Root Object/Child Object1/GrandChild Object1/Doesn't Exist\", &dwDataSetNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Data Set Number = %d\n", dwDataSetNumber); } hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", DWORD_DATA_NAME, ALL_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), DWORD_DATA_NAME, ALL_METADATA); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetDataSetNumber(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1/Doesn't Exist", &dwDataSetNumber); printf("MDGetDataSetNumber(RootHandle,(PBYTE)\"Root Object/Child Object1/GrandChild Object1/Doesn't Exist\", &dwDataSetNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Data Set Number = %d\n", dwDataSetNumber); } hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } /* hRes = pcCom->ComMDSetReferenceObject(RootHandle, (PBYTE)"Root Object/Reference Object1", RootHandle, (PBYTE)"Root Object/Reference Object1"); printf("MDSetReferenceObject(RootHandle, TEXT(\"Root Object/Reference Object1\"),\n\tRootHandle, TEXT(\"Root Object/Reference Object1\")); Returns %s\n", ConvertHresToString(hRes)); */ FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1",&mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, METADATA_INHERIT, 0, DWORD_METADATA, sizeof(DWORD), (PBYTE)&TestDword); PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_NO_INHERIT, METADATA_NO_ATTRIBUTES, 0, DWORD_METADATA, sizeof(DWORD), (PBYTE)&TestDword) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME, METADATA_INHERIT, 0, DWORD_METADATA, sizeof(DWORD), (PBYTE)&TestDword) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, METADATA_INHERIT, 0, STRING_METADATA, sizeof("STRING Data"), (PBYTE)"STRING Data") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, METADATA_INHERIT, 0, EXPANDSZ_METADATA, sizeof("STRING Data"), (PBYTE)"STRING Data") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, METADATA_INHERIT, 0, BINARY_METADATA, sizeof(TestBinary), (PBYTE)TestBinary) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle,(PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE)ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, METADATA_INHERIT, 0, BINARY_METADATA, sizeof(TestBinary), (PBYTE)TestBinary) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, METADATA_INHERIT, 0, STRING_METADATA, sizeof("STRING Data for Binary Name"), (PBYTE)"STRING Data for Binary Name") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, METADATA_INHERIT, 0, BINARY_METADATA, sizeof(TestBinary), (PBYTE)TestBinary) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, METADATA_INHERIT, 0, 0, sizeof(TestBinary), (PBYTE)TestBinary) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, BAD_BINARY_DATA_NAME, METADATA_INHERIT, 0, BINARY_METADATA, 0x80000000, (PBYTE)TestBinary) PrintDataBuffer(&mdrData, FALSE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (pcsiParam == NULL) { printf("\nTESTING REFERENCE DATA\n\n"); MD_SET_DATA_RECORD(&mdrData, REFERENCE_DATA_NAME, METADATA_REFERENCE, 0, STRING_METADATA, sizeof("STRING Data"), (PBYTE)"STRING Data") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, REFERENCE_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, REFERENCE_DATA_NAME, METADATA_REFERENCE, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); hRes = pcCom->ComMDAddRefReferenceData(mdrData.dwMDDataTag); printf("MDAddRefReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDReleaseReferenceData(mdrData.dwMDDataTag); printf("MDReleaseReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDReleaseReferenceData(mdrData.dwMDDataTag); printf("MDReleaseReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, REFERENCE_DATA_NAME, METADATA_REFERENCE, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); hRes = pcCom->ComMDReleaseReferenceData(mdrData.dwMDDataTag); printf("MDReleaseReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } hRes = ERROR_SUCCESS; printf("\nThis Enum should include the reference ID %x. Get normally.\n", REFERENCE_DATA_NAME); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, 0, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); if (mdrData.dwMDDataTag != 0) { hRes = pcCom->ComMDReleaseReferenceData(mdrData.dwMDDataTag); printf("MDReleaseReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); } } } hRes = ERROR_SUCCESS; printf("\nThis Enum should include the reference ID %x. Get by reference.\n", REFERENCE_DATA_NAME); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, 0, METADATA_REFERENCE, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); if (mdrData.dwMDDataTag != 0) { hRes = pcCom->ComMDReleaseReferenceData(mdrData.dwMDDataTag); printf("MDReleaseReferenceData(mdrData.dwMDDataTag); Returns %s\n", ConvertHresToString(hRes)); } } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis GetAll should include the reference ID %x. Get normally.\n", REFERENCE_DATA_NAME); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_NO_ATTRIBUTES, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_NO_ATTRIBUTES, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { for (i=0;(DWORD)idwMDDataTag; if (dwDT != 0) { hRes = pcCom->ComMDReleaseReferenceData(dwDT); printf("MDReleaseReferenceData(dwDT); Returns %s\n", ConvertHresToString(hRes)); } } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis GetAll should include the reference ID %x. Get by reference.\n", REFERENCE_DATA_NAME); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_REFERENCE, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_REFERENCE, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { for (i=0;(DWORD)idwMDDataTag; if (dwDT != 0) { hRes = pcCom->ComMDReleaseReferenceData(dwDT); printf("MDReleaseReferenceData(dwDT); Returns %s\n", ConvertHresToString(hRes)); } } } hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", REFERENCE_DATA_NAME, ALL_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), REFERENCE_DATA_NAME, ALL_METADATA); returns %s\n", ConvertHresToString(hRes)); printf("\nEND TESTING REFERENCE DATA\n\n"); } MD_SET_DATA_RECORD(&mdrData, INSERT_PATH_DATA_NAME, METADATA_INSERT_PATH | METADATA_INHERIT, 0, STRING_METADATA, sizeof(INSERT_PATH_DATA), (PBYTE)INSERT_PATH_DATA) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, INSERT_PATH_DATA_NAME, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, INSERT_PATH_DATA_NAME, METADATA_INSERT_PATH, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } printf("\nThis Enum should include the INSERT_PATH Data %x with path replacement ID.\n", INSERT_PATH_DATA_NAME); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, 0, METADATA_INSERT_PATH | METADATA_INHERIT, 0, STRING_METADATA, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } } for (i = 0; i < BUFFER_SIZE; i++) { pbBuffer[i] = 0xff; } dwBufferSize = 0; printf("\nThis GetAll should return ERROR_INSUFFICIENT_BUFFER.\n"); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_INSERT_PATH | METADATA_INHERIT, ALL_METADATA, STRING_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_INSERT_PATH | METADATA_INHERIT, ALL_METADATA, STRING_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_INSERT_PATH | METADATA_INHERIT, ALL_METADATA, STRING_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_INSERT_PATH | METADATA_INHERIT, ALL_METADATA, STRING_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with MD_ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with ERROR_PATH_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with MD_ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_NO_INHERIT, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), DWORD_DATA_NAME_NO_INHERIT,\n\t &ReturnAttributes, &ReturnUserType, &ReturnDataType, &ReturnDataLen, (PVOID) ReturnBuf); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with MD_ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_NO_INHERIT, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with MD_ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_NO_INHERIT, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with ERROR_PATH_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_NO_INHERIT, METADATA_NO_ATTRIBUTES, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } hRes = ERROR_SUCCESS; printf("\nThis Enum should include ID %x but not ID %x.\n", DWORD_DATA_NAME_INHERIT, DWORD_DATA_NAME_NO_INHERIT); for (i=0;hRes == ERROR_SUCCESS; i++) { FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, (METADATA_INHERIT | METADATA_PARTIAL_PATH), 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "EnumData Input Values"); hRes = pcCom->ComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis GetAll is a test case of a failure reported by Philippe\n"); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"LM/W3SVC/1//Scripts", METADATA_INHERIT | METADATA_PARTIAL_PATH, 2, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"LM/W3SVC/1//Scripts\"),\n" "\tMETADATA_INHERIT | METADATA_PARTIAL_PATH,2, ALL_METADATA, &dwNumDataEntries," "&dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen);" " Returns %s\n", ConvertHresToString(hRes)); printf("dwBufferSize = %d, dwDataSetNumber = %d\n", dwBufferSize, dwDataSetNumber); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDGetAllMetaData(RootHandle, (PBYTE)"LM/W3SVC/1//Scripts/garbage/", METADATA_INHERIT | METADATA_PARTIAL_PATH, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"LM/W3SVC/1//Scripts/garbage/\"),\n" "\tMETADATA_INHERIT | METADATA_PARTIAL_PATH, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," "&dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); printf("dwBufferSize = %d, dwDataSetNumber = %d\n", dwBufferSize, dwDataSetNumber); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, " "&dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen));" " Returns %s\n", ConvertHresToString(hRes)); printf("dwRequiredBufferLen = %d, dwDataSetNumber = %d\n", dwRequiredBufferLen, dwDataSetNumber); SET_GETALL_PARMS(MAX_DATA_ENTRIES); dwBufferSize = 101; printf("\nThis GetAll should return ERROR_INSUFFICIENT_BUFFER"); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, " "&dwDataSetNumber, dwBufferSize, (PBYTE)pbBuffer, &dwRequiredBufferLen));" " Returns %s\n", ConvertHresToString(hRes)); printf("dwRequiredBufferLen = %d\n", dwRequiredBufferLen); for (i = 0; i < BUFFER_SIZE; i++) { pbBuffer[i] = 0xff; } dwBufferSize = (dwRequiredBufferLen < BUFFER_SIZE)? dwRequiredBufferLen : BUFFER_SIZE; printf("\nThis GetAll should include ID %x but not ID %x.\n", DWORD_DATA_NAME_INHERIT, DWORD_DATA_NAME_NO_INHERIT); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis GetAll should not include ID %x or %x.\n", DWORD_DATA_NAME_INHERIT, DWORD_DATA_NAME_NO_INHERIT); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_NO_ATTRIBUTES, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"),\n" "\tMETADATA_NO_ATTRIBUTES, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { for (i=0;(DWORD)iComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis Partial Path GetAll should include ID %x but not ID %x.\n", DWORD_DATA_NAME_INHERIT, DWORD_DATA_NAME_NO_INHERIT); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", METADATA_INHERIT | METADATA_PARTIAL_PATH, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"),\n" "\tMETADATA_INHERIT | METADATA_PARTIAL_PATH, ALL_METADATA, ALL_METADATA, &dwNumDataEntries," " &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDEnumMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", &mdrData, i, &dwRequiredDataLen); printf("MDEnumMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"), &mdrData, i); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "EnumData Output Values"); } } SET_GETALL_PARMS(MAX_DATA_ENTRIES); printf("\nThis Partial Path GetAll should FAIL with ERROR_PATH_NOT_FOUND\n"); hRes = pcCom->ComMDGetAllMetaData(RootHandle, (PBYTE)"Root Object/Doesn't Exist", METADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber, dwBufferSize, pbBuffer, &dwRequiredBufferLen); printf("\nMDGetAllMetaData(RootHandle, TEXT(\"Root Object/Doesn't Exist\"),\n" "\tMETADATA_INHERIT, ALL_METADATA, ALL_METADATA, &dwNumDataEntries, &dwDataSetNumber," " dwBufferSize, pbBuffer, &dwRequiredBufferLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("dwDataSetNumber = %d\n", dwDataSetNumber); for (i=0;(DWORD)iComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } hRes = pcCom->ComMDCopyMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", RootHandle, (PBYTE)"Root Object/Child Object1", METADATA_INHERIT | METADATA_PARTIAL_PATH, ALL_METADATA, ALL_METADATA, TRUE); printf("\nMDCopyMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), RootHandle,\n\tTEXT(\"Root Object/Child Object1\"), METADATA_INHERIT | METADATA_PARTIAL_PATH, 0, TRUE); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"/Root Object", RootHandle, (PBYTE)"junk 1/Root Object", TRUE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"/Root Object\", RootHandle, (PBYTE)\"junk 1/Root Object\", TRUE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/junk 2/NewCopyName", TRUE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/junk 2/NewCopyName\", TRUE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/junk 2/NewCopyName", TRUE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/junk 2/NewCopyName\", TRUE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/NewCopyTree/NewCopyName", TRUE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/NewCopyTree/NewCopyName\", TRUE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/NewCopyTree2/Root Object", TRUE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/NewCopyTree2/Root Object\", TRUE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/junk 2/NewCopyName", FALSE, TRUE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/junk 2/NewCopyName\", FALSE, TRUE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCopyMetaObject(RootHandle, (PBYTE)"junk 1/Root Object", RootHandle, (PBYTE)"junk 1/junk 2/NewCopyName", FALSE, FALSE); printf("MDCopyMetaObject(RootHandle, (PBYTE)\"junk 1/Root Object\", RootHandle, (PBYTE)\"junk 1/junk 2/NewCopyName\", FALSE, FALSE); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDRenameMetaObject(RootHandle, (PBYTE)"junk 1/junk 2/NewCopyName", (PBYTE)"Renamed Object Long Name To Generate Resize"); printf("MDRenameMetaObject(RootHandle, (PBYTE)\"junk 1/junk 2/NewCopyName\", (PBYTE)\"Renamed Object Long Name To Generate Resize\"); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetSystemChangeNumber(&dwSystemChangeNumber); printf("MDGetSystemChangeNumber(&dwSystemChangeNumber); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("System Change Number = %d\n", dwSystemChangeNumber); } ftTime.dwHighDateTime = 1; ftTime.dwLowDateTime = 2; hRes = pcCom->ComMDSetLastChangeTime(RootHandle, (PBYTE)"Root Object", &ftTime); printf("MDSetLastChangeTime(RootHandle, (PBYTE)\"Root Object\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDSetLastChangeTime(RootHandle, NULL, &ftTime); printf("MDSetLastChangeTime(RootHandle, NULL, &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDChangePermissions(RootHandle, TIMEOUT_VALUE, METADATA_PERMISSION_READ); printf("MDChangePermissions(RootHandle, METADATA_PERMISSION_READ); Returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDOpenMetaObject(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", METADATA_PERMISSION_READ, TIMEOUT_VALUE, &OpenHandle); printf("MDOpenMetaObject(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), METADATA_PERMISSION_READ, &OpenHandle); Returns %s\n\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { hRes = pcCom->ComMDGetHandleInfo(OpenHandle, &mhiInfo); printf("MDGetHandleInfo(RootHandle, &mhiInfo); Returns %s\n", ConvertHresToString(hRes)); if (!FAILED(hRes)) { printf("Handle Change Number = %d, Handle Permissions = %X\n", mhiInfo.dwMDSystemChangeNumber, mhiInfo.dwMDPermissions); } for (i=0;hRes == ERROR_SUCCESS;i++) { hRes = pcCom->ComMDEnumMetaObjects(OpenHandle, (PBYTE)"", (PBYTE)NameBuf, i); printf("MDEnumMetaObjects(OpenHandle, NULL, (LPTSTR)NameBuf, i); returns %s\n", ConvertHresToString(hRes)); } hRes = pcCom->ComMDChangePermissions(RootHandle, TIMEOUT_VALUE, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); printf("\nMDChangePermissions(RootHandle, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); Returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDChangePermissions(OpenHandle, TIMEOUT_VALUE, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); printf("MDChangePermissions(OpenHandle, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); Returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCloseMetaObject(OpenHandle); printf("MDCloseMetaObject(OpenHandle); Returns %s\n\n", ConvertHresToString(hRes)); } for (i=0;hRes == ERROR_SUCCESS;i++) { hRes = pcCom->ComMDEnumMetaObjects(RootHandle, (PBYTE)"", (PBYTE)NameBuf, i); printf("MDEnumMetaObjects(RootHandle, NULL, (LPTSTR)NameBuf, i); returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { printf("Object Name = %s\n", NameBuf); } } hRes = pcCom->ComMDSaveData(); printf("\nMDSaveData(); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDSaveData(RootHandle); printf("\nMDSaveData(RootHandle); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDSaveData(OpenHandle); printf("\nMDSaveData(OpenHandle); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDChangePermissions(RootHandle, TIMEOUT_VALUE, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); printf("\nMDChangePermissions(RootHandle, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE); Returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, 0, 0, BINARY_METADATA, 0, NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle,(PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } MD_SET_DATA_RECORD(&mdrData, BINARY_DATA_NAME, 0, 0, BINARY_METADATA, 1, NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle,(PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, 0, 0, STRING_METADATA, 0, NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle,(PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n\n", ConvertHresToString(hRes)); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &mdrData, &dwRequiredDataLen); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } else if (hRes == ERROR_INSUFFICIENT_BUFFER) { printf("DataLen = %X\n", dwRequiredDataLen); } MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME, 0, 0, DWORD_METADATA, 0, NULL) PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(RootHandle,(PBYTE)"Root Object/Child Object1/GrandChild Object1", &mdrData); printf("MDSetMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), &mdrData); Returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", BINARY_DATA_NAME, BINARY_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), BINARY_DATA_NAME, BINARY_METADATA); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDSetLastChangeTime(RootHandle, (PBYTE)"Root Object", &ftTime); printf("MDSetLastChangeTime(RootHandle, (PBYTE)\"Root Object\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDGetLastChangeTime(RootHandle, (PBYTE)"Root Object", &ftTime); printf("MDGetLastChangeTime(RootHandle, (PBYTE)\"Root Object\", &ftTime); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { PrintTime(&ftTime); } hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", BINARY_DATA_NAME, STRING_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object/Child Object1/GrandChild Object1\"), BINARY_DATA_NAME, STRING_METADATA); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object", BINARY_DATA_NAME, ALL_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object\"), BINARY_DATA_NAME, ALL_METADATA); returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaData(RootHandle, (PBYTE)"Root Object/Trash", BINARY_DATA_NAME, ALL_METADATA); printf("MDDeleteMetaData(RootHandle, TEXT(\"Root Object/Trash\"), BINARY_DATA_NAME, ALL_METADATA); returns %s\n\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteAllMetaData(RootHandle, (PBYTE)"Root Object/Child Object1/GrandChild Object1", ALL_METADATA, ALL_METADATA); printf("MDDeleteAllMetaData(RootHandle, (PBYTE)\"Root Object/Child Object1/GrandChild Object1\", ALL_METADATA, ALL_METADATA); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteAllMetaData(RootHandle, (PBYTE)"Root Object", ALL_METADATA, ALL_METADATA); printf("MDDeleteAllMetaData(RootHandle, (PBYTE)\"Root Object\", ALL_METADATA, ALL_METADATA); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaObject(RootHandle, (PBYTE)"Root Object/Child Object1"); printf("MDDeleteMetaObject(RootHandle, TEXT(\"Root Object/Child Object1\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteMetaObject(RootHandle, (PBYTE)"Root Object"); printf("MDDeleteMetaObject(RootHandle, TEXT(\"Root Object\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteChildMetaObjects(RootHandle, (PBYTE)"junk 1"); printf("MDDeleteChildObjects(RootHandle, (PBYTE)\"junk 1\"); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDBackup(RootHandle, (PBYTE)"NamedBackup", MD_BACKUP_NEXT_VERSION, MD_BACKUP_OVERWRITE | MD_BACKUP_SAVE_FIRST); printf("\nMDBackup(...); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDBackup(RootHandle, (PBYTE)"NamedBackup", 27, MD_BACKUP_OVERWRITE | MD_BACKUP_SAVE_FIRST); printf("\nMDBackup(...); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCloseMetaObject(RootHandle); printf("MDCloseMetaObject(RootHandle); Returns %s\n", ConvertHresToString(hRes)); CHAR pszBackupName[MD_BACKUP_MAX_LEN]; DWORD dwBackupVersion; FILETIME ftBackupTime; hRes = ERROR_SUCCESS; for (i = 0;SUCCEEDED(hRes);i++) { pszBackupName[0] = (CHAR)'\0'; hRes = pcCom->ComMDEnumBackups((PBYTE) pszBackupName, &dwBackupVersion, &ftBackupTime, i); printf("\nMDEnumBackups(...); Returns %s\n", ConvertHresToString(hRes)); if (SUCCEEDED(hRes)) { printf("\tBackupName = %s, Backup Version = %d\n", pszBackupName, dwBackupVersion); } } // // Restore blows away existing handles, // so do this here, where all handles are closed. // hRes = pcCom->ComMDRestore((PBYTE)"NamedBackup", 27, 0); printf("\nMDRestore(...); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDDeleteBackup((PBYTE)"NamedBackup", 27); } /* hRes = pcCom->ComMDRemoveCallBack(&MDCallBack); printf("\nMDRemoveCallBack(&MDCallBack); Returns %s\n", ConvertHresToString(hRes)); */ hRes = pcCom->ComMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, (PBYTE)"", METADATA_PERMISSION_WRITE | METADATA_PERMISSION_READ, TIMEOUT_VALUE, &RootHandle); printf("\n\nMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, sizeof(\"\"), \"\", METADATA_PERMISSION_WRITE || METADATA_PERMISSION_READ, TIMEOUT_VALUE, &RootHandle); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"//"); printf("\nMDAddMetaObject(RootHandle, TEXT(\"//\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDAddMetaObject(RootHandle, (PBYTE)"Root Object/instance1//"); printf("\nMDAddMetaObject(RootHandle, TEXT(\"Root Object/instance1//\")); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDCloseMetaObject(RootHandle); printf("MDCloseMetaObject(RootHandle); Returns %s\n", ConvertHresToString(hRes)); hRes = pcCom->ComMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, (PBYTE)"Root Object/instance1/", METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE, TIMEOUT_VALUE, &OpenHandle); printf("\nMDOpenMetaObject(METADATA_MASTER_ROOT_HANDLE, sizeof(\"Root Object/instance1/\"), (PBYTE)\"Root Object/instance1/\", METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE, TIMEOUT_VALUE, &OpenHandle); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, METADATA_INHERIT, 0, DWORD_METADATA, sizeof(DWORD), (PBYTE)&TestDword); PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(OpenHandle, (PBYTE)"//", &mdrData); printf("MDSetMetaData(OpenHandle, sizeof(\"//\"), (PBYTE)\"//\", &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, METADATA_INHERIT, 0, STRING_METADATA, sizeof("STRING Data"), (PBYTE)"STRING Data") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(OpenHandle, (PBYTE)"/", &mdrData); printf("MDSetMetaData(RootHandle, sizeof(\"/\"), TEXT(\"Root Object/instance1/\", &mdrData); Returns %s\n", ConvertHresToString(hRes)); MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, METADATA_INHERIT, 0, EXPANDSZ_METADATA, sizeof("STRING Data"), (PBYTE)"STRING Data") PrintDataBuffer(&mdrData, TRUE, "SetData Input Values"); hRes = pcCom->ComMDSetMetaData(OpenHandle, (PBYTE)"/", &mdrData); printf("MDSetMetaData(RootHandle, sizeof(\"/\"), TEXT(\"Root Object/instance1/\", &mdrData); Returns %s\n", ConvertHresToString(hRes)); printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"//", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"//\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, DWORD_DATA_NAME_INHERIT, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"/", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"/\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"/", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"/\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"/", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"/\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, METADATA_INHERIT, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"//", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"//\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should SUCCEED.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, METADATA_INHERIT, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"//", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"//\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, STRING_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"//", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"//\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } printf("\nThis Get should FAIL with ERROR_DATA_NOT_FOUND.\n"); FILL_RETURN_BUFF; MD_SET_DATA_RECORD(&mdrData, EXPANDSZ_DATA_NAME, 0, 0, 0, sizeof(ReturnBuf), (PBYTE) ReturnBuf) PrintDataBuffer(&mdrData, FALSE, "GetData Input Values"); hRes = pcCom->ComMDGetMetaData(OpenHandle, (PBYTE)"//", &mdrData, &dwRequiredDataLen); printf("MDGetMetaData(OpenHandle, TEXT(\"//\"), &mdrData); Returns %s\n", ConvertHresToString(hRes)); if (hRes == ERROR_SUCCESS) { PrintDataBuffer(&mdrData, TRUE, "GetData Output Values"); } hRes = pcCom->ComMDCloseMetaObject(OpenHandle); printf("MDCloseMetaObject(OpenHandle); Returns %s\n", ConvertHresToString(hRes)); } } } hRes = pcCom->ComMDTerminate(TRUE); printf("\nMDTerminate(FALSE); Returns %s\n", ConvertHresToString(hRes)); if (bSinkConnected) { hRes = pConnPoint->Unadvise(dwCookie); } pcCom->Release(); } } CoFreeUnusedLibraries(); CoUninitialize(); delete (pEventSink); return (0); }