Freigeben über


ObOpenObjectByPointer-Funktion (ntifs.h)

Die ObOpenObjectByPointer--Funktion öffnet ein Objekt, auf das von einem Zeiger verwiesen wird, und gibt ein Handle an das Objekt zurück.

Syntax

NTSTATUS ObOpenObjectByPointer(
  [in]           PVOID           Object,
  [in]           ULONG           HandleAttributes,
  [in, optional] PACCESS_STATE   PassedAccessState,
  [in]           ACCESS_MASK     DesiredAccess,
  [in, optional] POBJECT_TYPE    ObjectType,
  [in]           KPROCESSOR_MODE AccessMode,
  [out]          PHANDLE         Handle
);

Parameter

[in] Object

Zeiger auf das zu öffnende Objekt.

[in] HandleAttributes

Bitmaske von Flags, die die gewünschten Attribute für das Objekthandle angeben. Wenn der Aufrufer nicht im Systemprozesskontext ausgeführt wird, müssen diese Flags OBJ_KERNEL_HANDLE enthalten. Dieser Parameter ist optional und kann null sein. Andernfalls handelt es sich um eine OR'ed-Kombination aus einem oder mehreren der folgenden Werte.

Flagge Bedeutung
OBJ_EXCLUSIVE Das Objekt soll für exklusiven Zugriff geöffnet werden. Wenn dieses Flag festgelegt ist und der Aufruf von ObOpenObjectByPoint er erfolgreich ausgeführt wird, kann das Objekt nicht freigegeben und erst wieder geöffnet werden, wenn das Handle geschlossen wird. Dieses Flag ist nicht mit dem OBJ_INHERIT Flag kompatibel. Dieses Flag ist für Dateiobjekte ungültig.
OBJ_FORCE_ACCESS_CHECK Alle Zugriffsprüfungen müssen für das Objekt erzwungen werden, auch wenn das Objekt im Kernelmodus geöffnet wird. Wenn dieses Flag angegeben ist, wird der Wert des AccessMode- Parameters ignoriert.
OBJ_INHERIT Das Handle kann von untergeordneten Prozessen des aktuellen Prozesses geerbt werden. Dieses Flag ist mit dem OBJ_EXCLUSIVE Flag nicht kompatibel.
OBJ_KERNEL_HANDLE Auf das Handle kann nur im Kernelmodus zugegriffen werden. Dieses Flag muss angegeben werden, wenn der Aufrufer nicht im Systemprozesskontext ausgeführt wird.

[in, optional] PassedAccessState

Zeigen Sie auf eine ACCESS_STATE Struktur, die den Betreffkontext des Objekts enthält, Zugriffstypen gewährt und die gewünschten Zugriffstypen erhalten. Dieser Parameter ist optional und kann NULL sein. In einer Create Dispatch Routine kann dieser Zeiger in IrpSp->Parameters.Create.SecurityContext->AccessStategefunden werden, wobei IrpSp- ein Zeiger auf den eigenen Stapelspeicherort des Aufrufers im IRP ist. (Weitere Informationen finden Sie unter IRP_MJ_CREATE.)

[in] DesiredAccess

ACCESS_MASK Wert, der den gewünschten Zugriff auf das Objekt angibt. Dieser Parameter ist optional und kann null sein.

[in, optional] ObjectType

Zeiger auf den Objekttyp. Wenn der Wert von AccessMode-KernelMode-ist, ist dieser Parameter optional und kann NULL sein. Andernfalls muss es sich um *ExEventObjectType, *ExSemaphoreObjectType, *IoFileObjectType, *PsThreadType, *SeTokenObjectType, oder *CmKeyObjectType.

Anmerkung

Der SeTokenObjectType Objekttyp wird durch Windows XP unterstützt, und der CmKeyObjectType Objekttyp wird mit Windows 7 mit Sternung unterstützt.

[in] AccessMode

Der Zugriffsmodus, der für die Zugriffsüberprüfung verwendet werden soll. Dieser Parameter ist erforderlich und muss entweder UserMode- oder KernelMode-sein:

  • Wenn AccessMode-KernelMode-ist, ermöglicht das System immer den angeforderten Zugriff unabhängig von zuvor festgelegtem eingeschränktem Zugriff (z. B. zugriff eingeschränkten in einem vorherigen Aufruf an POB_PRE_OPERATION_CALLBACK Rückruf).

  • Wenn AccessMode-UserMode-ist, wird der angeforderte Zugriff mit dem gewährten Zugriff für das Objekt verglichen.

[out] Handle

Zeiger auf eine vom Aufrufer zugewiesene Variable, die ein Handle für das Objekt empfängt.

Rückgabewert

ObOpenObjectByPointer gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS-Wert zurück, z. B. einen der folgenden:

Rückgabecode Beschreibung
STATUS_ACCESS_DENIED Der Aufrufer verfügte nicht über den erforderlichen Zugriff, um ein Handle für das Objekt zu öffnen. Dies ist ein Fehlercode.
STATUS_INSUFFICIENT_RESOURCES ObOpenObjectByPointer auf einen Poolzuweisungsfehler stoßen. Dies ist ein Fehlercode.
STATUS_INVALID_PARAMETER Im parameter HandleAttributes wurde ein ungültiger Flagwert angegeben. Dies ist ein Fehlercode.
STATUS_OBJECT_TYPE_MISMATCH Das Objekt, auf das der parameter Object verweist, war nicht vom Typ, der im parameter ObjectType angegeben wurde. Dies ist ein Fehlercode.
STATUS_PRIVILEGE_NOT_HELD Der Aufrufer verfügte nicht über die erforderlichen Berechtigungen zum Erstellen eines Handles mit dem im parameter DesiredAccess angegebenen Zugriff. Dies ist ein Fehlercode.
STATUS_QUOTA_EXCEEDED Der Aufrufer wird im Kontext eines Prozesses ausgeführt, dessen Speicherkontingent nicht ausreicht, um das Objekthandle zuzuweisen. Dies ist ein Fehlercode.
STATUS_UNSUCCESSFUL Das Objekthandle konnte nicht erstellt werden. Dies ist ein Fehlercode.

Bemerkungen

Wenn der parameter Object auf ein Dateiobjekt verweist (d. h. eine FILE_OBJECT-Struktur), kann ObOpenObjectByPointer- nur aufgerufen werden, nachdem mindestens ein Handle für das Dateiobjekt erstellt wurde. Aufrufer können das Flags Element der FILE_OBJECT Struktur überprüfen, auf die der parameter Object verweist. Wenn das FO_HANDLE_CREATED Flag festgelegt ist, bedeutet dies, dass mindestens ein Handles für das Dateiobjekt erstellt wurde, sodass es sicher ist, ObOpenObjectByPointeraufzurufen.

Jedes Handle, das durch Aufrufen von ObOpenObjectByPointer abgerufen wird, muss schließlich durch Aufrufen von ZwClosefreigegeben werden.

Treiberroutinen, die in einem anderen Prozesskontext als dem des Systemprozesses ausgeführt werden, müssen das OBJ_KERNEL_HANDLE Flag im HandleAttributes Parameter festlegen. Dadurch wird die Verwendung des von ObOpenObjectByPointer zurückgegebenen Handle auf Prozesse beschränkt, die im Kernelmodus ausgeführt werden. Andernfalls kann über den Prozess, in dem der Treiber ausgeführt wird, auf das Handle zugegriffen werden kann.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

ACCESS_MASK

ACCESS_STATE

IRP_MJ_CREATE

ObReferenceObject-

ObReferenceObjectByHandle-

ObReferenceObjectByPointer

ZwClose