www.pudn.com > ImageServU.rar > ImageServU.cpp


// ImageServU.cpp : Defines the initialization routines for the DLL. 
// 
 
#include "stdafx.h" 
#include  
#include "Serv-U.h" 
#include "FileName.h" 
 
#include "ShellFileOp.h"  
#include "Zcategories.h" 
 #include "Zimages.h" 
#include "MD5_CTX.h" 
#include "bompdmcomm.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
typedef struct tagIMGUSER { 
	CString original_password; 
//Table[4images_user] 
	long	user_id;  
	long	user_level;/*用户等级-1---9*/ 
 	CString	user_name; 
 	CString	user_password; 
	CString	user_email; 
	long	user_showemail; 
	long	user_allowemails; 
	long	user_invisible; 
	long	user_joindate; 
	CString	user_activationkey; 
	long	user_lastaction; 
	CString	user_location; 
	long	user_lastvisit; 
	long	user_comments; 
	CString	user_homepage; 
	CString	user_icq; 
//////////////////////////////// 
	//Table[4images_group] 
//	long	group_id; 
//	CString	group_name; 
//	long	group_type; 
 
////////////////////////////// 
 
}ImagesUser ; 
typedef struct tagIMGDATAS { 
	long	image_id; 
	long	cat_id; 
	long	user_id; 
	CString	image_name; 
	CString	image_description; 
	CString	image_keywords; 
	long	image_date; 
	long	image_active; 
	CString	image_media_file; 
	CString	image_thumb_file; 
	CString	image_download_url; 
	long	image_allow_comments; 
	long	image_comments; 
	long	image_downloads; 
	long	image_votes; 
	double	image_rating; 
	long	image_hits; 
	CString	sublib; 
 
}ImagesData; 
 
typedef struct tagIMGCATS{ 
	long	cat_id; 
	CString	cat_name; 
	CString	cat_description; 
	long	cat_parent_id; 
	long	cat_hits; 
	long	cat_order; 
	long	auth_viewcat; 
	long	auth_viewimage; 
	long	auth_download; 
	long	auth_upload; 
	long	auth_directupload; 
	long	auth_vote; 
	long	auth_sendpostcard; 
	long	auth_readcomment; 
	long	auth_postcomment; 
 
}ImagesCat; 
 
 
 
 
#define INIFILE         "ImageServU.ini"                  // .ini file name 
#define LOGFILE         "ImageServU.log"                  // .log file name 
 
 
HINSTANCE hInstanceParam =NULL; 
CDatabase m_database; 
 
void  WriteLogFile(HINSTANCE hInstance,LPCTSTR Component ); 
void  AppendLogFile(HINSTANCE hInstance,LPCTSTR Component ); 
 
 
CString CheckUser(CString  sUser,CString  sPassword) 
{ 
	CString md5_Password; 
	 
	CString err; 
	 
	MD5_CTX md;		 
	md5_Password= md.MD5(sPassword.GetBuffer(sPassword.GetLength())); 
	 
	 
	if(!m_database.IsOpen()) 
	{ 
		 
		TRY 
		{			 
			 
			m_database.OpenEx(PDMDSN,CDatabase::noOdbcDialog);   
			 
		}	 
		CATCH(CDBException, e) 
		{ 
			err = e->m_strError; 
			return err; 
		} 
		END_CATCH;	 
	} 
	 
	CRecordset recset(&m_database); 
	// 设置读取的查询语句. 
	CString  sSql;	 
	sSql.Format("SELECT * FROM 4images_users WHERE  user_name = '%s' AND user_password = '%s'",sUser,md5_Password);       
	 
	 
	// 打开搜查     
	TRY{        
		 
		recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); 
 
		if(recset.GetRecordCount() !=1) 
		{ 
			// 关闭数据库 
			recset.Close(); 
			 
			err = "invaild user or password"; 
			return err; 
		} 
	 
	 
		// 关闭数据库 
		recset.Close(); 
		 
	} 
	CATCH(CDBException, e) 
	{ 
		 
		err =  e->m_strError; 
 
			return  err; 
	} 
	END_CATCH;	 
 
	 
	return err;	 
 
} 
 
 
 
int GetUserLevle(CString  sUser) 
{	 
	int iuserlevle = -1; 
 
	if(!m_database.IsOpen()) 
	{ 
		TRY 
		{			 
			 
			m_database.OpenEx(PDMDSN,CDatabase::noOdbcDialog);   
			 
		}	 
		CATCH(CDBException, e) 
		{ 
	 
			return -1; 
		} 
		END_CATCH;	 
	} 
	 
	CRecordset recset(&m_database); 
	// 设置读取的查询语句. 
	CString  sSql;	 
	 
	sSql.Format("SELECT * FROM 4images_users WHERE  user_name = '%s'", sUser);       
	 
	 
	// 打开搜查     
	TRY{        
		 
		recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); 
		CDBVariant  varValue; 
		if(recset.GetRecordCount() !=1) 
		{ 
			 
			recset.Close(); 
 
			return -1; 
		} 
			 
		recset.GetFieldValue("user_level",varValue); 
		iuserlevle =  varValue.m_iVal; 
	 
		// 关闭数据库 
		recset.Close(); 
		 
	} 
	CATCH(CDBException, e) 
	{ 
 
			return  -1; 
	} 
	END_CATCH;	 
 
 
	return  iuserlevle;	 
 
	 
} 
 
 
 
 
 
CString QueryImagesCat(int catid,ImagesCat &c_imagescat){	 
	 
	CString err; 
	if(!m_database.IsOpen()) 
	{ 
		 
		TRY{			 
			 
			m_database.OpenEx(PDMDSN,CDatabase::noOdbcDialog);   
			 
		}	 
		CATCH(CDBException, e) 
		{ 
			err = e->m_strError; 
	 
				return err; 
		} 
		END_CATCH;	 
	} 
	 
	CZcategories recset(&m_database); 
	// 设置读取的查询语句. 
	CString  sSql; 
	 
	 
	sSql.Format("SELECT * FROM %s WHERE  cat_id = %d",TABLE_CATEGORIES ,catid);       
	 
	 
	// 打开搜查     
	TRY{        
		 
		recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); 
		 
		if(recset.GetRecordCount() !=1) 
		{		  
			err ="NULL record"; 
			return err; 
		} 
		 
		 
		 
		 
		 
		c_imagescat.cat_id= recset.m_cat_id; 
		c_imagescat.cat_name= recset.m_cat_name; 
		c_imagescat.cat_description= recset.m_cat_description; 
		c_imagescat.cat_parent_id= recset.m_cat_parent_id; 
		c_imagescat.cat_hits= recset.m_cat_hits; 
		c_imagescat.cat_order= recset.m_cat_order; 
		c_imagescat.auth_viewcat= recset.m_auth_viewcat; 
		c_imagescat.auth_viewimage= recset.m_auth_viewimage; 
		c_imagescat.auth_download= recset.m_auth_download; 
		c_imagescat.auth_upload= recset.m_auth_upload; 
		c_imagescat.auth_directupload= recset.m_auth_directupload; 
		c_imagescat.auth_vote= recset.m_auth_vote; 
		c_imagescat.auth_sendpostcard= recset.m_auth_sendpostcard; 
		c_imagescat.auth_readcomment= recset.m_auth_readcomment; 
		c_imagescat.auth_postcomment= recset.m_auth_postcomment; 
 
		// 关闭数据库 
		recset.Close(); 
		 
	} 
	CATCH(CDBException, e) 
	{ 
		 
		err =  e->m_strError; 
 
			return  err; 
	} 
	END_CATCH;	 
	 
	return  err; 
	 
} 
 
 
CString QueryUser(CString  sUser,ImagesUser &c_user){	 
	 
	CString err; 
	if(!m_database.IsOpen()) 
	{ 
		 
		TRY{			 
			 
			m_database.OpenEx(PDMDSN,CDatabase::noOdbcDialog);   
			 
		}	 
		CATCH(CDBException, e) 
		{ 
			err = e->m_strError; 
	  
				return err; 
		} 
		END_CATCH;	 
	} 
	 
	CRecordset recset(&m_database); 
	// 设置读取的查询语句. 
	CString  sSql; 
	 
	 
	sSql.Format("SELECT * FROM 4images_users WHERE  user_name = '%s'", sUser);       
	 
	 
	// 打开搜查     
	TRY{        
		 
		recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); 
		CDBVariant  varValue; 
		if(recset.GetRecordCount() !=1) 
		{			 
			recset.Close(); 
			err = "invaild user or password"; 
			return err; 
		} 
		recset.GetFieldValue("user_name",varValue); 
		c_user.user_name =  *(varValue.m_pstring); 
		 
		recset.GetFieldValue("user_password",varValue); 
		c_user.user_password =  *(varValue.m_pstring); 
		 
		 
		 
		recset.GetFieldValue("user_id",varValue); 
		c_user.user_id=  varValue.m_iVal;			 
		 
		recset.GetFieldValue("user_level",varValue); 
		c_user.user_level =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_email",varValue); 
		c_user.user_email =  *(varValue.m_pstring); 
		 
		recset.GetFieldValue("user_showemail",varValue); 
		c_user.user_showemail =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_allowemails",varValue); 
		c_user.user_allowemails =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_invisible",varValue); 
		c_user.user_invisible =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_joindate",varValue); 
		c_user.user_joindate =  varValue.m_iVal; 
		 
		 
		recset.GetFieldValue("user_activationkey",varValue); 
		c_user.user_activationkey =  *(varValue.m_pstring);  
		 
		recset.GetFieldValue("user_lastaction",varValue); 
		c_user.user_lastaction =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_location",varValue); 
		c_user.user_location =  *(varValue.m_pstring);  
		 
		recset.GetFieldValue("user_lastvisit",varValue); 
		c_user.user_lastvisit =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_comments",varValue); 
		c_user.user_comments =  varValue.m_iVal; 
		 
		recset.GetFieldValue("user_homepage",varValue); 
		c_user.user_homepage =  *(varValue.m_pstring); 
		 
		 
		recset.GetFieldValue("user_icq",varValue); 
		c_user.user_icq =  *(varValue.m_pstring); 
		 
		 
		 
		 
		// 关闭数据库 
		recset.Close(); 
		 
	} 
	CATCH(CDBException, e) 
	{ 
		 
		err =  e->m_strError; 
			return  err; 
	} 
	END_CATCH;	 
 
	return  err;	 
	 
	 
} 
 
CString QueryImagesData(int imageid,ImagesData &c_imagesdata){	 
	 
	CString err; 
	if(!m_database.IsOpen()) 
	{ 
		 
		TRY{			 
			 
			m_database.OpenEx(PDMDSN,CDatabase::noOdbcDialog);   
			 
		}	 
		CATCH(CDBException, e) 
		{ 
			err = e->m_strError; 
		 
				return err; 
		} 
		END_CATCH;	 
	} 
	 
	CZimages recset(&m_database); 
	// 设置读取的查询语句. 
	CString  sSql; 
	 
	 
	sSql.Format("SELECT * FROM %s WHERE  image_id = %d",TABLE_IMAGES ,imageid);       
	 
	 
	// 打开搜查     
	TRY{        
		 
		recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); 
		 
		if(recset.GetRecordCount() !=1) 
		{		  
			err ="NULL record"; 
					recset.Close(); 
			return err; 
		} 
		 
		c_imagesdata.image_id=recset.m_image_id; 
		c_imagesdata.cat_id=recset.m_cat_id; 
		c_imagesdata.user_id=recset.m_user_id; 
		c_imagesdata.image_name=recset.m_image_name; 
		c_imagesdata.image_description=recset.m_image_description; 
		c_imagesdata.image_keywords=recset.m_image_keywords; 
		c_imagesdata.image_date=recset.m_image_date; 
		c_imagesdata.image_active=recset.m_image_active; 
		c_imagesdata.image_media_file=recset.m_image_media_file; 
		c_imagesdata.image_thumb_file=recset.m_image_thumb_file; 
		c_imagesdata.image_download_url=recset.m_image_download_url; 
		c_imagesdata.image_allow_comments=recset.m_image_allow_comments; 
		c_imagesdata.image_comments=recset.m_image_comments; 
		c_imagesdata.image_downloads=recset.m_image_downloads; 
		c_imagesdata.image_votes=recset.m_image_votes; 
		c_imagesdata.image_rating=recset.m_image_rating; 
		c_imagesdata.image_hits=recset.m_image_hits; 
		c_imagesdata.sublib=recset.m_sublib; 
		 
		// 关闭数据库 
		recset.Close(); 
		 
	} 
	CATCH(CDBException, e) 
	{ 
		 
		err =  e->m_strError; 
 
			return  err; 
	} 
	END_CATCH;	 
	 
	return  err; 
	 
}	 
 
 
 
 
 
static AFX_EXTENSION_MODULE ImageServUDLL = { NULL, NULL }; 
 
extern "C" int APIENTRY 
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) 
{ 
	// Remove this if you use lpReserved 
	UNREFERENCED_PARAMETER(lpReserved); 
	 
	if (dwReason == DLL_PROCESS_ATTACH) 
	{ 
		TRACE0("IMAGESERVU.DLL Initializing!\n"); 
		 
		// Extension DLL one-time initialization 
		if (!AfxInitExtensionModule(ImageServUDLL, hInstance)) 
			return 0; 
		 
		// Insert this DLL into the resource chain 
		// NOTE: If this Extension DLL is being implicitly linked to by 
		//  an MFC Regular DLL (such as an ActiveX Control) 
		//  instead of an MFC application, then you will want to 
		//  remove this line from DllMain and put it in a separate 
		//  function exported from this Extension DLL.  The Regular DLL 
		//  that uses this Extension DLL should then explicitly call that 
		//  function to initialize this Extension DLL.  Otherwise, 
		//  the CDynLinkLibrary object will not be attached to the 
		//  Regular DLL's resource chain, and serious problems will 
		//  result. 
		 
		 
        hInstanceParam =  hInstance ; 
        CString szNow; 
        GetSysTime(szNow); 
        CString log; 
        log.Format("%s-> load imageservu.dll success! for zpmcpdm system, written by zhoudaqiao,corpy right 2006",szNow); 
         
        ReadIniFileFromModuleFileDir(hInstanceParam,INIFILE);		 
         
        WriteLogFile(hInstanceParam,log); 
        log.Format("\nGet setting EXEFILE_DWG2DWF = %s",EXEFILE_DWG2DWF); 
        AppendLogFile(hInstanceParam,log); 
        log.Format("\nGet setting EXEFILE_DWG2JPG = %s",EXEFILE_DWG2JPG); 
        AppendLogFile(hInstanceParam,log); 
        log.Format("\nGet setting EXEFILE_DWG2PDF = %s",EXEFILE_DWG2PDF); 
        AppendLogFile(hInstanceParam,log);       
        log.Format("\nGet setting EXEFILE_DWG2SLD = %s",EXEFILE_DWG2SLD); 
        AppendLogFile(hInstanceParam,log);   
		log.Format("\nGet setting IMAGES_HOMEDIR = %s",IMAGES_HOMEDIR); 
        AppendLogFile(hInstanceParam,log); 	 
		 
		/*	 
		log.Format("\n登陆DSN:user=%s,name=%s",IMAGES_ADMIN,IMAGES_PASSWORD); 
		AppendLogFile(hInstanceParam,log);	 
		if (pg_imagerec ==NULL) 
		{ 
		 
		  CString err = g_imagerec.LoginDSN(IMAGES_ADMIN,IMAGES_PASSWORD); 
		   
			log.Format("\n登陆DSN:user=%s,name=%s",IMAGES_ADMIN,IMAGES_PASSWORD); 
			AppendLogFile(hInstanceParam,log); 
			 
			  if ( err !="") 
			  { 
			   
				log.Format("\n登陆DSN出错:%s",err); 
				AppendLogFile(hInstanceParam,log);  
				} 
				 
				   
					} 
		*/ 
		 
		 
		new CDynLinkLibrary(ImageServUDLL); 
	} 
	else if (dwReason == DLL_PROCESS_DETACH) 
	{ 
		TRACE0("IMAGESERVU.DLL Terminating!\n"); 
 
	if(m_database.IsOpen()) 
	{ 
      m_database.Close(); 
	} 
 
		// Terminate the library before destructors are called 
		AfxTermExtensionModule(ImageServUDLL); 
	} 
	return 1;   // ok 
} 
 
 
 
int __cdecl HandleClientEvent(RClientEventStr* pEventStruc) 
 
{ 
 
     
    int Ret = 0 ;                   // 0 not handled - 1 handled 
	 
    //如果需要修改事件的默认反映,记得返回1,否则服务器没有任何反映 
     
    // disect event 
     
    switch (pEventStruc->Event)          
    {        
    case SRVU_LoginMesFile  :      // get login message file 
        break; 
         
    case SRVU_HomeDir   :       // get home dir 
		 
            strcpy(pEventStruc->Aux,IMAGES_HOMEDIR);             
            pEventStruc->Flag = TRUE; 
            Ret = 1;         
         
        break; 
    case SRVU_Password :   // verify password 
			 
            if(strlen(pEventStruc->Aux) >0)  
			{  
				CString err = CheckUser(pEventStruc->User,pEventStruc->Aux)	; 
				if (err == "") 
				{				 
			    pEventStruc->Flag = TRUE; 
				} 
			} 
		Ret = 1; 
         
        break; 
    case SRVU_IPAccess      :   // verify IP access 
        break; 
    case SRVU_WriteFile     :   // verify write access 
	 
        break; 
    case SRVU_ReadFile      :   // verify read access 
			if (GetUserLevle(pEventStruc->User) > 0) 
		{ 
			 pEventStruc->Flag = TRUE; 
		} 
 
             Ret = 1; 
        break; 
         
    case SRVU_ModifyFile:   // verify mod./del. file access 
        
        break; 
    case SRVU_ExecProg      :   // verify execute access 
        break; 
    case SRVU_ListDir       :   // verify dir listing access 
  
		if (GetUserLevle(pEventStruc->User) > 0) 
		{ 
			 pEventStruc->Flag = TRUE; 
		} 
 
             Ret = 1; 
   
        break; 
    case SRVU_ChangeDir      :   // verify dir change access 
  
		if (GetUserLevle(pEventStruc->User) > 0) 
		{ 
			 pEventStruc->Flag = TRUE; 
		} 
 
             Ret = 1; 
    
        break; 
    case SRVU_DeleteDir         :   // verify dir delete access 
		if (GetUserLevle(pEventStruc->User) == 9) 
		{ 
			 pEventStruc->Flag = TRUE; 
		} 
 
             Ret = 1;          
        
        break; 
    case SRVU_CreateDir         :   // verify dir create access 
		if (GetUserLevle(pEventStruc->User) == 9) 
		{ 
			 pEventStruc->Flag = TRUE; 
		} 
 
             Ret = 1;      
        break; 
    case SRVU_HideHidden    :   // get setting for 'hide hidden files' 
        break; 
    case SRVU_RelPaths      :   // get setting for 'relative paths' 
		pEventStruc->Flag = TRUE; 
           Ret = 1;   
        break; 
    case SRVU_RatioType         :   // get setting for type of ratios 
        break; 
    case SRVU_RatioDown         :   // get setting for download ratio 
        break; 
    case SRVU_RatioUp           :   // get setting for upload ratio 
        break; 
    case SRVU_RatioCredit       :   // get/adjust ratio credit setting 
        break; 
    case SRVU_RatioFree         :   // verify if file is free for ratios 
        break; 
    case SRVU_QuotaEnable       :   // verify if disk quota is enabled 
        break; 
    case SRVU_QuotaChange       :   // change in disk quota 
        break; 
    case SRVU_QuotaMax      :   // maximum disk quota 
        break; 
    case SRVU_AlwaysLogin       :   // always allow login 
        break; 
    case SRVU_OneLoginPerIP         :   // allow one login per user/IP pair 
        break; 
    case SRVU_LogClientIP       :   // log client from this IP address 
        break; 
    case SRVU_SpeedLimit        :   // maximum transfer speed 
        break; 
    case SRVU_PassChange    :   // change user's password 
        break; 
    case SRVU_TimeOut       :   // get user time-out value 
        break; 
    case SRVU_MaxUsers      :   // max. no. of users for account 
        break; 
    case SRVU_PassChallenge         :   // get password challenge if needed 
        break; 
    case SRVU_Connect       :   // information only: client connected 
        break; 
    case SRVU_Close         :   // information only: client disconnected 
      if(m_database.IsOpen()) 
	{ 
      m_database.Close(); 
	} 
        break; 
    case SRVU_MaxLoginPerIP         :   // max. no. of logins from same IP for user 
        break; 
    case SRVU_VerifyPasswd      :   // verify old password before changing it 
        break; 
    case SRVU_AppendFile        :   // verify append file access 
 
        break; 
    case SRVU_SignOnMes     :   // get signon message file 
        break; 
    case SRVU_SignOffMes        :   // get signoff message file 
        break; 
    case SRVU_Maintenance       :   // switch to maintenance mode 
        break; 
    case SRVU_SessionTimeOut        :   // session time-out 
        break; 
    case SRVU_SecureOnly        :   // only allow login over secure connection 
        break; 
    case SRVU_PassExpired       :   // verify if password is expired 
        break;       
    default: 
        ; 
         
    } 
     
    return(Ret); 
     
} 
 
 
WORD CALLBACK HandleEventHook(RFTPEventStr* pEventStruc) 
{ 
     
     
    WORD Ret=REVNT_None;    // return value, default is to allow operation 
     
    // disect event 
    switch (pEventStruc->Event)  
    { 
         
    case EVNT_EndUp:    // successful upload of file 
  
         
		 
        break; 
         
    case EVNT_EndDown:  // successful download of file 
         
           
         
        break; 
         
    default: 
        ; 
    } 
     
	 
    return (Ret); 
     
     
} 
 
 
 
 
 
void  WriteLogFile(HINSTANCE hInstance,LPCTSTR Component ) 
 
// ****** 
// Load .ini file variables 
// ****** 
{ 
    char LogFile[MAX_PATH];                // full path of .ini file 
     
    // only initialize once 
    static bool Once=FALSE; 
    if (Once) return;                     // already initialized 
    Once=true;                            // this is first time, remember  
     
    // construct full path of .ini file 
    GetModuleFileName(hInstance,LogFile,MAX_PATH); 
    char* pEnd=strrchr(LogFile,'\\');   // strip .dll file name 
    if (pEnd) pEnd[1]='\0'; 
    strcat(LogFile,LOGFILE);              // create full path .ini name 
     
     
     
     
    CStdioFile file; 
     
    if(file.Open(LogFile,CFile::modeCreate)) 
    { 
         
        file.Close(); 
    } 
     
    if(file.Open(LogFile,CFile::modeWrite)) 
    { 
        //       file.SeekToEnd(); 
        file.WriteString(Component); 
        file.Close(); 
    } 
     
     
     
    /* 
    // get log file name 
    GetPrivateProfileString(INISECTION,INILOGFILE,"",LogFile,MAXPATH,IniFile); 
     
      // get the double space value 
      bDoubleSpace = (GetPrivateProfileInt(INISECTION, INIDBLSPACE, 0, IniFile)) ? true : false; 
    */ 
     
} 
 
 
 
void  AppendLogFile(HINSTANCE hInstance,LPCTSTR Component ) 
 
{ 
	 
    char LogFile[MAX_PATH];                // full path of .ini file 
                                           /* 
                                           // only initialize once 
                                           static bool Once=FALSE; 
                                           if (Once) return;                     // already initialized 
                                           Once=true;                            // this is first time, remember  
    */ 
    // construct full path of .ini file 
    ::GetModuleFileName(hInstance,LogFile,MAX_PATH); 
    char* pEnd=strrchr(LogFile,'\\');   // strip .dll file name 
    if (pEnd) pEnd[1]='\0'; 
    strcat(LogFile,LOGFILE);              // create full path .ini name 
     
    CStdioFile file; 
     
    if(file.Open(LogFile,CFile::modeWrite)) 
	{ 
        file.SeekToEnd(); 
        file.WriteString(Component); 
        file.Close(); 
    }    
     
     
     
     
}