Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
La maggior parte delle routine KTM utilizza un formato di nome ZwXxx. Queste routine sono basate su handle. Ovvero, almeno uno dei relativi parametri di input o output è un handle per un oggetto KTM.
KTM fornisce anche un numero minore di routine che usano un formato di denominazione tmxxx. Queste routine sono basate sui puntatori. Almeno uno dei loro parametri di input o output è un puntatore a un oggetto KTM.
Alcune routine TmXxx duplicano le routine ZwXxx . Altre routine TmXxx non hanno equivalenti ZwXxx .
Nella maggior parte dei casi, è consigliabile usare le routine ZwXxx . Tuttavia, è consigliabile usare le routine TmXxx nelle situazioni seguenti:
Il tuo gestore delle risorse utilizza la routine di callback ResourceManagerNotification, la quale fornisce un puntatore a un oggetto di iscrizione anziché a un handle.
È possibile passare il puntatore dell'oggetto di arruolamento alle routine TmXxx dell'oggetto di arruolamento.
Il componente TPS (Transaction Processing System) esegue molte chiamate rapide a KTM, che potenzialmente causa un rallentamento delle prestazioni del sistema.
In questo caso, il componente può chiamare ObReferenceObjectByHandle per convertire ogni handle di oggetto KTM in un puntatore, salvare il puntatore e quindi passare il puntatore alle routine TmXxx . Questa conversione elimina la necessità che KTM converta ogni handle in un puntatore internamente ogni volta che viene chiamata una routine ZwXxx .
Ogni chiamata a ObReferenceObectByHandle deve includere una maschera di accesso che contiene flag definiti da KTM appropriati. Questi flag sono descritti nelle pagine di riferimento per le routine di creazione e di apertura di KTM.
Al termine dell'utilizzo dell'oggetto KTM, il componente deve dereferenziare l'oggetto chiamando ObDereferenceObjectDeferDelete o ObDereferenceObject.
È necessario usare ObDereferenceObjectDeferDelete se il componente o qualsiasi altro componente nello stack di driver contiene blocchi forniti dal sistema, ad esempio blocchi di selezione, oggetti mutex o mutex veloci.
È possibile usare ObDereferenceObject se si è certi che nessun componente nello stack di driver contenga blocchi forniti dal sistema.
I deadlock possono verificarsi se il componente chiama ObDereferenceObject mantenendo i blocchi, perché KTM potrebbe anche contenere blocchi per lo spazio dei nomi dell'oggetto. Inoltre, il componente può chiamare TmGetTransactionId per ottenere rapidamente l'identificatore di una transazione in modo più efficiente rispetto alla chiamata di ZwQueryInformationTransaction.
È necessario avere una funzionalità che una routine ZwXxx non fornisce.
In particolare, un gestore di risorse può chiamare le routine seguenti:
- TmEnableCallbacks per abilitare il recapito asincrono delle notifiche tramite una routine di callback.
- TmReferenceEnlistmentKey e TmDereferenceEnlistmentKey per incrementare o decrementare il conteggio dei riferimenti chiave di un oggetto di integrazione.
- TmRequestOutcomeEnlistment per richiedere una notifica immediata di commit o rollback per un'adesione.
- TmIsTransactionActive per determinare se una transazione è nello stato attivo.