#if !defined ASSERT #define ASSERT assert #endif long RegCloneBranch(HKEY hkeyDestRoot, HKEY hkeySrcRoot) { long result=ERROR_SUCCESS; DWORD index; DWORD subkeys,maxkeyname,values,maxvaluename,maxdata,type; LPSTR lpName=NULL, lpData=NULL; /* get information, so that we know how much memory to allocate */ result=RegQueryInfoKey(hkeySrcRoot,NULL,NULL,NULL,&subkeys,&maxkeyname, NULL,&values,&maxvaluename,&maxdata,NULL,NULL); if (result!=ERROR_SUCCESS) return result; /* in Windows NT/2000/XP, the name lengths do not include the '\0' terminator */ maxkeyname++; maxvaluename++; /* allocate buffers, one for data and one for value & class names */ if (maxvaluename>maxkeyname) maxkeyname=maxvaluename; ASSERT(maxkeyname>0); lpName=malloc(maxkeyname); if (lpName==NULL) { result=ERROR_NOT_ENOUGH_MEMORY; goto error_exit; } /* if */ if (maxdata>0) { lpData=malloc(maxdata); if (lpData==NULL) { result=ERROR_NOT_ENOUGH_MEMORY; goto error_exit; } /* if */ } else { lpData=NULL; } /* if */ /* first walk through the values */ for (index=0; index