Compartir a través de


Usar rutinas TmXxx

La mayoría de las rutinas KTM usan un formato de nomenclatura de ZwXxx. Estas rutinas se basan en identificadores. Es decir, al menos uno de sus parámetros de entrada o salida es un identificador de un objeto KTM.

KTM también proporciona un número menor de rutinas que usan un formato de nomenclatura de TmXxx. Estas rutinas se basan en punteros. Al menos uno de sus parámetros de entrada o salida es un puntero a un objeto KTM.

Algunas rutinas TmXxx duplican rutinas ZwXxx . Otras rutinas TmXxx no tienen equivalentes ZwXxx .

En la mayoría de los casos, debe usar las rutinas ZwXxx . Pero debe usar rutinas TmXxx en las situaciones siguientes:

  • El administrador de recursos usa la rutina de devolución de llamada ResourceManagerNotification , que proporciona un puntero a un objeto de inscripción en lugar de un identificador.

    Puede pasar el puntero del objeto de inscripción a las rutinas TmXxx del objeto de inscripción.

  • El componente del sistema de procesamiento de transacciones (TPS) realiza muchas llamadas rápidas a KTM, lo que puede provocar que el rendimiento del sistema sea demasiado lento.

    En este caso, el componente puede llamar a ObReferenceObjectByHandle para convertir cada identificador de objeto KTM en un puntero, guardar el puntero y, a continuación, pasar el puntero a las rutinas TmXxx . Esta conversión elimina la necesidad de que KTM convierta cada controlador en un puntero internamente cada vez que se llama a una rutina ZwXxx .

    Cada llamada a ObReferenceObectByHandle debe incluir una máscara de acceso que contenga las marcas definidas por KTM adecuadas. Estas marcas se describen en las páginas de referencia de las rutinas de creación y apertura de KTM.

    Cuando el componente haya terminado de usar el objeto KTM, debe desreferenciar el objeto llamando a ObDereferenceObjectDeferDelete o ObDereferenceObject.

    • Debe usar ObDereferenceObjectDeferDelete si el componente, o cualquier otro componente de la pila de controladores, contiene los bloqueos proporcionados por el sistema, como bloqueos de número, objetos de exclusión mutua o exclusiones mutuas rápidas.

    • Puede usar ObDereferenceObject si está seguro de que ningún componente de la pila de controladores contiene bloqueos proporcionados por el sistema.

    Los interbloqueos pueden producirse si el componente llama a ObDereferenceObject mientras mantiene bloqueados, ya que KTM también podría estar manteniendo bloqueos para el espacio de nombres del objeto. Además, el componente puede llamar a TmGetTransactionId para obtener rápidamente el identificador de una transacción de forma más eficaz que llamar a ZwQueryInformationTransaction.

  • Debe tener una funcionalidad que no proporcione una rutina ZwXxx .

    En concreto, un administrador de recursos puede llamar a las siguientes rutinas: