Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De meeste KTM-routines gebruiken een naamgevingsindeling van ZwXxx. Deze routines zijn gebaseerd op grepen. Dat wil zeggen, ten minste één van de invoer- of uitvoerparameters is een verwijzing naar een KTM-object.
KTM biedt ook een kleiner aantal routines die een naamgevingsindeling van TmXxx gebruiken. Deze routines zijn gebaseerd op aanwijzers. Ten minste één van de invoer- of uitvoerparameters is een aanwijzer naar een KTM-object.
Sommige TmXxx-routines dupliceren ZwXxx-routines . Andere TmXxx-routines hebben geen ZwXxx-equivalenten .
In de meeste gevallen moet u de ZwXxx-routines gebruiken. Maar u moet TmXxx-routines gebruiken in de volgende situaties:
Uw resourcemanager maakt gebruik van de callbackroutine ResourceManagerNotification , die een aanwijzer naar een aanroepobject in plaats van een ingang biedt.
U kunt de aanwijzer voor het opsommingsobject doorgeven aan de TmXxx-routines van het opsommingsobject.
Uw TPS-onderdeel (Transaction Processing System) voert veel snelle aanroepen naar KTM uit, waardoor de systeemprestaties mogelijk te traag zijn.
In dit geval kan uw onderdeel ObReferenceObjectByHandle aanroepen om elke KTM-objectgreep te converteren naar een aanwijzer, de aanwijzer op te slaan en de aanwijzer vervolgens door te geven aan TmXxx-routines . Deze conversie elimineert de noodzaak voor KTM om elke ingang intern te converteren naar een aanwijzer telkens wanneer een ZwXxx-routine wordt aangeroepen.
Elke aanroep naar ObReferenceObectByHandle moet een toegangsmasker bevatten met de juiste KTM-gedefinieerde vlaggen. Deze vlaggen worden beschreven op de referentiepagina's voor het maken en openen van routines van KTM.
Wanneer uw onderdeel klaar is met het gebruik van het KTM-object, moet het object worden gedeverenceerd door ObDereferenceObjectDeferDelete of ObDereferenceObject aan te roepen.
U moet ObDereferenceObjectDeferDelete gebruiken als uw onderdeel of een ander onderdeel in uw stuurprogrammastack alle door het systeem geleverde vergrendelingen bevat, zoals spinvergrendelingen, mutex-objecten of snelle mutexes.
U kunt ObDereferenceObject gebruiken als u zeker weet dat er geen onderdeel op uw stuurprogrammastack systeemvergrendelingen bevat.
Deadlocks kunnen optreden als uw onderdeel de functie ObDereferenceObject aanroept terwijl vergrendelingen worden vastgehouden, omdat KTM mogelijk ook vergrendelingen voor de objectnaamruimte vasthoudt. Uw onderdeel kan ook TmGetTransactionId aanroepen om snel de id van een transactie efficiënter te verkrijgen dan zwQueryInformationTransaction aan te roepen.
U moet een mogelijkheid hebben die een ZwXxx-routine niet biedt.
Een resourcemanager kan met name de volgende routines aanroepen:
- TmEnableCallbacks om asynchrone levering van meldingen mogelijk te maken door een callback-routine.
- TmReferenceEnlistmentKey en TmDereferenceEnlistmentKey om het aantal sleutelverwijzingen van een enlistment-object te verhogen of te verlagen.
- TmRequestOutcomeEnlistment om een onmiddellijke commit- of rollback-notificatie aan te vragen voor een deelname.
- TmIsTransactionActive om te bepalen of een transactie de actieve status heeft.