Condividi tramite


Funzione ObReferenceObjectByPointerWithTag (wdm.h)

La routine ObReferenceObjectByPointerWithTag incrementa il conteggio dei riferimenti dell'oggetto specificato e scrive un valore di tag a quattro byte nell'oggetto per supportare la traccia di riferimento agli oggetti.

Sintassi

NTSTATUS ObReferenceObjectByPointerWithTag(
  [in]           PVOID           Object,
  [in]           ACCESS_MASK     DesiredAccess,
  [in, optional] POBJECT_TYPE    ObjectType,
  [in]           KPROCESSOR_MODE AccessMode,
  [in]           ULONG           Tag
);

Parametri

[in] Object

Puntatore all'oggetto. Il chiamante ottiene questo puntatore quando crea l'oggetto o da una chiamata precedente alla routine ObReferenceObjectByHandleWithTag dopo aver aperto l'oggetto.

[in] DesiredAccess

Specifica i tipi di accesso all'oggetto richiesto dal chiamante. Questo parametro è una maschera di bit di tipo ACCESS_MASK. L'interpretazione di questo campo dipende dal tipo di oggetto. Non usare diritti di accesso generici.

[in, optional] ObjectType

Puntatore a una struttura opaca che specifica il tipo di oggetto. Questo parametro punta a una struttura OBJECT_TYPE . Impostare ObjectType su NULL o su uno dei valori del puntatore seguenti, dichiarati nel file di intestazione Wdm.h: *ExEventObjectType, *ExSemaphoreObjectType, *IoFileObjectType, *PsProcessType, *PsThreadType, *SeTokenObjectType, *TmEnlistmentObjectType, *TmResourceManagerObjectType, *TmTransactionManagerObjectType o *TmTransactionObjectType. Questo parametro può essere NULL se AccessMode è KernelMode. Se ObjectType non è NULL, la routine verifica che il tipo di oggetto fornito corrisponda al tipo di oggetto dell'oggetto specificato dal parametro Handle .

[in] AccessMode

Indica la modalità di accesso da usare per il controllo di accesso. Impostare questo parametro su uno dei valori di enumerazione MODE seguenti:

  • Usermode

  • KernelMode

I driver di livello inferiore devono specificare KernelMode.

[in] Tag

Specifica un valore di tag personalizzato a quattro byte. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

Valore restituito

ObReferenceObjectByPointerWithTag restituisce STATUS_SUCCESS se la chiamata ha esito positivo. I valori restituiti degli errori possibili includono quanto segue:

Codice restituito Descrizione
STATUS_OBJECT_TYPE_MISMATCH Il parametro ObjectType specifica il tipo di oggetto errato per l'oggetto a cui punta il parametro Object o ObjectType è NULL, ma AccessMode è UserMode.

Commenti

Questa routine accede alla convalida dell'oggetto specificato. Se è possibile concedere l'accesso, la routine incrementa il conteggio dei riferimenti all'oggetto. Questo incremento impedisce l'eliminazione dell'oggetto mentre il chiamante usa l'oggetto. Quando l'oggetto non è più necessario, il chiamante deve decrerere il conteggio dei riferimenti chiamando la routine ObDereferenceObjectWithTag o ObDereferenceObjectDeferDeleteWithTag.

Per altre informazioni sui riferimenti agli oggetti, vedere Ciclo di vita di un oggetto.

La routine ObReferenceObjectByPointer è simile a ObReferenceObjectByPointerWithTag, tranne che non consente al chiamante di scrivere un tag personalizzato in un oggetto. In Windows 7 e versioni successive di Windows , ObReferenceObjectByPointer scrive sempre un valore di tag predefinito ('tlfD') nell'oggetto. Una chiamata a ObReferenceObjectByPointer ha lo stesso effetto di una chiamata a ObReferenceObjectByPointerWithTag che specifica Tag = 'tlfD'.

Per visualizzare una traccia di riferimento a oggetti negli strumenti di debug di Windows, usare l'estensione del debugger in modalità kernel !obtrace . In Windows 7 l'estensione !obtrace è migliorata per visualizzare i tag di riferimento agli oggetti, se è abilitata la traccia dei riferimenti a oggetti. Per impostazione predefinita, la traccia dei riferimenti a oggetti viene disattivata. Usare l'editor di flag globali (Gflags) per abilitare la traccia dei riferimenti a oggetti. Per altre informazioni, vedere Traccia dei riferimenti a oggetti con tag.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows 7 e versioni successive del sistema operativo Windows.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport)

Vedi anche

ACCESS_MASK

OBJECT_TYPE

ObDereferenceObjectDeferDeleteWithTag

ObDereferenceObjectWithTag

ObReferenceObjectByPointer

ZwClose