IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Quels sont les deux composants de Windows 7 qui tirent profit du mode Transactionnel ?

Toutes les semaines un peu de code pour aller plus loin avec Windows 7

Retrouvez l'intégralité des questions/réponses sur le développement sous Windows 7 dans l'article suivant.

Commentez cet article : 41 commentaires Donner une note à l´article (5)

Article lu   fois.

Les deux auteurs

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Quels sont les deux composants de Windows 7 qui tirent profit du mode Transactionnel ?

Les deux composants qui tirent profit du mode transactionnel dans Windows 7 sont, le gestionnaire de fichiers NTFS, la technologie s'appelle TxF et le registre Windows (TxR). Ces deux composants s'appuient sur le Kernel Transaction Manager.

Pour en savoir plus : http://msdn.microsoft.com/fr-fr/visualc/bb880520.aspx

Listing C++ pour le mode transactionnel d'un fichier
Sélectionnez
HMODULE hmodule =LoadLibrary(L"ktmw32.dll");
CREATETRANSACTION pCreateTransaction ;
ROLLBACKTRANSACTION pRollbackTransaction;
COMMITTRANSACTION pCommitTransaction;
HANDLE htransaction=NULL ;
HANDLE hfile=NULL;
CString cs;
if (NULL ==hmodule)
{
    MessageBox(L"Ne trouve pas ktmw32.dll",L"",0);
    goto cleanup;
}
pCreateTransaction=(CREATETRANSACTION)GetProcAddress (hmodule,"CreateTransaction");
if (NULL ==pCreateTransaction)
{
    MessageBox(L"Ne trouve pas la méthode CreateTransaction",L"",0);
    goto cleanup;
}
pRollbackTransaction=(ROLLBACKTRANSACTION)GetProcAddress(hmodule,"RollbackTransaction");
if (NULL ==pRollbackTransaction)
{
    MessageBox(L"Ne trouve pas la méthode RollbackTransaction",L"",0);
    goto cleanup;
}
pCommitTransaction=(COMMITTRANSACTION)GetProcAddress(hmodule,"CommitTransaction");
if (NULL ==pCommitTransaction)
{
    MessageBox(L"Ne trouve pas la méthode CommitTransaction",L"",0);
    goto cleanup;
}

htransaction =(pCreateTransaction) (NULL, 0, TRANSACTION_DO_NOT_PROMOTE, 0, 0, NULL, L"Description de la Transaction");
if (NULL==htransaction)
{
    MessageBox(L"Ne peut créer de transaction",L"",0);
    goto cleanup;
}

hfile=CreateFileTransacted(L"TestTransaction.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0, htransaction, 0, 0);

if (NULL==hfile)
{
    MessageBox(L"Ne peut ouvrir le fichier spécifié",L"",0);
    goto cleanup;
}
    
    
m_Edit.GetWindowTextW (cs);
const     wchar_t *buffer=cs.GetString ();
DWORD pnumBytes;
DWORD npb=cs.GetLength ()*2;
BOOL b=WriteFile(hfile,buffer,npb,&pnumBytes,NULL);
if (b==FALSE)
{
    DWORD error=GetLastError ();
    MessageBox(L"Ne peut écrire dans le fichier spécifié",L"",0);
    goto cleanup;
}
if (m_checktransaction)
    b=(pCommitTransaction)(htransaction);  
else
    b=(pRollbackTransaction)(htransaction);
  
if (b==FALSE)
{
    MessageBox(L"Ne peut valider la transaction",L"Test TxF",0);            
}
Cleanup
Sélectionnez
if (hfile)
{
    CloseHandle(hfile);
}
if (htransaction)
{
    CloseHandle(htransaction);
}
if (hmodule) 
{
    FreeLibrary (hmodule);
}

Pour plus d'infos :

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2011 Microsoft MSDN France. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.