inline void get_shared_documents_folder(std::string &s) { s.clear(); void *hAdvapi = load_library("Advapi32.dll"); if (hAdvapi){ library_unloader unloader(hAdvapi); // Pointer to function RegOpenKeyA RegOpenKeyEx_t pRegOpenKey = (RegOpenKeyEx_t)get_proc_address(hAdvapi, "RegOpenKeyExA"); if (pRegOpenKey){ // Pointer to function RegCloseKey RegCloseKey_t pRegCloseKey = (RegCloseKey_t)get_proc_address(hAdvapi, "RegCloseKey"); if (pRegCloseKey){ // Pointer to function RegQueryValueA RegQueryValueEx_t pRegQueryValue = (RegQueryValueEx_t)get_proc_address(hAdvapi, "RegQueryValueExA"); if (pRegQueryValue){ //Open the key void *key; if ((*pRegOpenKey)( hkey_local_machine , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" , 0 , key_query_value , &key) == 0){ reg_closer key_closer(pRegCloseKey, key); //Obtain the value unsigned long size; unsigned long type; const char *const reg_value = "Common AppData"; long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); if(!err){ //Size includes terminating NULL s.resize(size); err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); if(!err) s.erase(s.end()-1); (void)err; } } } } } } }
//pszFilename must have room for at least MaxPath+1 characters inline bool get_file_name_from_handle_function (void * hFile, wchar_t *pszFilename, std::size_t length, std::size_t &out_length) { if(length <= MaxPath){ return false; } void *hiPSAPI = load_library("PSAPI.DLL"); if (0 == hiPSAPI) return 0; library_unloader unloader(hiPSAPI); // Pointer to function getMappedFileName() in PSAPI.DLL GetMappedFileName_t pfGMFN = (GetMappedFileName_t)get_proc_address(hiPSAPI, "GetMappedFileNameW"); if (! pfGMFN){ return 0; // Failed: unexpected error } bool bSuccess = false; // Create a file mapping object. void * hFileMap = create_file_mapping(hFile, page_readonly, 0, 1, 0); if(hFileMap) { // Create a file mapping to get the file name. void* pMem = map_view_of_file_ex(hFileMap, file_map_read, 0, 0, 1, 0); if (pMem){ out_length = pfGMFN(get_current_process(), pMem, pszFilename, MaxPath); if(out_length){ bSuccess = true; } unmap_view_of_file(pMem); } close_handle(hFileMap); } return(bSuccess); }
void ObjectGridUnloader::Unload(GridType &grid) { TypeContainerVisitor<ObjectGridUnloader, GridTypeMapContainer > unloader(*this); grid.Visit(unloader); }
void ObjectGridUnloader::Unload(GridType &grid) { TypeContainerVisitor<ObjectGridUnloader, TypeMapContainer<AllObjectTypes> > unloader(*this); grid.VisitGridObjects(unloader); }
/** * Process a callout to package loader function */ void LibraryUnloaderDispatcher::run() { RexxThreadContext *context = activity->getThreadContext(); unloader(context); }