[Aide Svp]Comment faire lire a un programe .exe une archive .rar avec un mots de

Signaler
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
Bonjour je voudrais faire en sorte que mon serveur puisse lire les archive suivente ".rar" avec un mots de passe mais la je suis perdu de ce coter la >< si une personne pourais maider sa serais un grand merci a lui :)

Cordialement.


size_t CResFile::Read( void *ptr, size_t size, size_t n /* = 1  */ )
{
if( !m_bResouceInFile )
return CFileIO::Read( ptr, size, n );
else
{
//m_File.Seek( m_nFileCurrentPosition, CFile::begin );
size_t size_  = m_File.Read( ptr, size * n );
m_nFileCurrentPosition += size_;
// &#190;ÏȣȭÀÏ °æ¿ì &#190;ÏÈ£&#184;&#166; Ǭ&#180;Ù.
if( IsEncryption() )
{
for( int i = 0; i < (int)( size_ );  i++ )
((BYTE*)ptr)[ i ] = Decryption( m_byEncryptionKey, ((BYTE*)ptr)[ i ] );
}
#ifdef __SECURITE_A_B_FLYFF
CString strResFile	= m_File.GetFileName();
CString strFile	= m_szFileName;
if( strResFile.Find( "data.rar", 0 ) >= 0 //Fichier a Décrypter data.rar
|| strResFile.Find( "dataSub1.rar", 0 ) >= 0 //Fichier a Décrypter dataSub1.rar
|| strResFile.Find( "dataSub2.rar", 0 ) >= 0 ) //Fichier a Décrypter dataSub2.rar
if( strFile.Find( "\", 0 ) < 0 )	///Fichier a Décrypter Fin

{
char sFile[100]	= { 0,};
char sData[100]	= { 0,};
md5( sFile, m_szFileName );
md5( sData, (BYTE*)ptr, size );
map<string, string>::iterator i	= CResFile::m_mapAuth.find( sFile );
if( i != CResFile::m_mapAuth.end() )
{
if( lstrcmp( sData, i->second.data() ) != 0 )
{
TRACE( "%s est modifié !\n", m_szFileName );
::Error( "killed by CResFile::Read() %s, 3", m_szFileName );
ExitProcess( -1 );
}
}

else
{
TRACE( "%s:%s introuvable !\n", m_szFileName, sFile );
MessageBox( g_Neuz.GetSafeHwnd(), "resource not found", "error", MB_OK );
ExitProcess( -1 );
}

}
return size_;
}
}

#endif	// __SECURITE_A_B_FLYFF

5 réponses

Messages postés
4718
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
14 janvier 2021
14
je déplace en c++

cantador
je tien a apporter un peux plus d'information ^_^

je voudrais le faire via une base de donner ^^

je pense que sa serra dans ce style la :

ACCOUNT_DBF => dbo.DECRYPTEUR_TBL =>

Id ( "1" le 1 représentera le fichier data.rar )
name ( "data.rar" représentera le fichier en question a décrypter )
password ( "azerty123" représentera le mots de passe en question )

est t'il possible de faire sa ? mon serveur marche avec SQL server 2005.

Cordialement.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Salut,

ben, il suffit de faire un ::ShellExecute() ou un ::CreateProcess() avec la commande rar.exe -p pour le mot de passe et -bkg (si je me rappelle bien) pour le faire travailler en arrière plan.

Tu peux aussi créer le process dans un thread de travail.

Depuis la base de données, tu peux faire la même chose avec la procédure étendue : xp_xmdshell


Bye...
Tu pourais me faire un exemple ?

Merci d'avance.

Cordialement.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Salut,

Je veux bien parceque c'est toi :

static void ProcessRAR( CString sWinRARPath, CString sCmd )
{
CString sProcess;
sProcess.Format(_T(""%s" %s"), sWinRARPath, sCmd);

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
LPSTR lpStr = (LPSTR)sProcess.GetBuffer();

if( !::CreateProcess(0, lpStr, 0, 0, FALSE, 0, 0, 0, &si, &pi) )
{  
AfxMessageBox(_T("Echec ..."), MB_OK|MB_ICONERROR);
}
else
{
::WaitForSingleObject( pi.hProcess, INFINITE );
::CloseHandle( pi.hProcess );
::CloseHandle( pi.hThread );
}

sProcess.ReleaseBuffer();  
}


// test 
CString sWinRARPath(_T("C:\\Program Files\\WinRAR\\rar.exe"));
CString sRarCmd(_T("e -c- -ep -ep1 -inul -y -IBCK -punPassword "D:\\test.rar" "D:\\destExtract\\""));

ProcessRAR( sWinRARPath, sRarCmd );


bye...