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 fichier 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
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
);
}
if
(hfile)
{
CloseHandle(hfile);
}
if
(htransaction)
{
CloseHandle(htransaction);
}
if
(hmodule)
{
FreeLibrary (hmodule);
}
- MSDN : http://msdn.microsoft.com/fr-fr/windows/default.aspx
- Le coach Windows 7 : http://msdn.microsoft.com/fr-fr/windows/msdn.coach.windows7
- Kit de développement pour Windows 7 : http://msdn.microsoft.com/fr-fr/windows/gg398052.aspx