$if (_WDMDDK_)
/******************************************************************************
 *                          Object Manager Functions                          *
 ******************************************************************************/
$endif (_WDMDDK_)

#if (NTDDI_VERSION >= NTDDI_WIN2K)
$if (_WDMDDK_)
_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
LONG_PTR
FASTCALL
ObfDereferenceObject(
  _In_ PVOID Object);
#define ObDereferenceObject ObfDereferenceObject

_IRQL_requires_max_(APC_LEVEL)
NTKERNELAPI
NTSTATUS
NTAPI
ObGetObjectSecurity(
  _In_ PVOID Object,
  _Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
  _Out_ PBOOLEAN MemoryAllocated);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
LONG_PTR
FASTCALL
ObfReferenceObject(
  _In_ PVOID Object);
#define ObReferenceObject ObfReferenceObject

_IRQL_requires_max_(APC_LEVEL)
NTKERNELAPI
NTSTATUS
NTAPI
ObReferenceObjectByHandle(
  _In_ HANDLE Handle,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode,
  _Out_ PVOID *Object,
  _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
NTSTATUS
NTAPI
ObReferenceObjectByPointer(
  _In_ PVOID Object,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode);

_IRQL_requires_max_(APC_LEVEL)
NTKERNELAPI
VOID
NTAPI
ObReleaseObjectSecurity(
  _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
  _In_ BOOLEAN MemoryAllocated);
$endif (_WDMDDK_)
$if (_NTIFS_)

NTKERNELAPI
NTSTATUS
NTAPI
ObInsertObject(
  _In_ PVOID Object,
  _Inout_opt_ PACCESS_STATE PassedAccessState,
  _In_opt_ ACCESS_MASK DesiredAccess,
  _In_ ULONG ObjectPointerBias,
  _Out_opt_ PVOID *NewObject,
  _Out_opt_ PHANDLE Handle);

NTKERNELAPI
NTSTATUS
NTAPI
ObOpenObjectByPointer(
  _In_ PVOID Object,
  _In_ ULONG HandleAttributes,
  _In_opt_ PACCESS_STATE PassedAccessState,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode,
  _Out_ PHANDLE Handle);

NTKERNELAPI
VOID
NTAPI
ObMakeTemporaryObject(
  _In_ PVOID Object);

NTKERNELAPI
NTSTATUS
NTAPI
ObQueryNameString(
  _In_ PVOID Object,
  _Out_writes_bytes_opt_(Length) POBJECT_NAME_INFORMATION ObjectNameInfo,
  _In_ ULONG Length,
  _Out_ PULONG ReturnLength);

NTKERNELAPI
NTSTATUS
NTAPI
ObQueryObjectAuditingByHandle(
  _In_ HANDLE Handle,
  _Out_ PBOOLEAN GenerateOnClose);
$endif (_NTIFS_)
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */

#if (NTDDI_VERSION >= NTDDI_VISTA)
$if (_WDMDDK_)
NTKERNELAPI
VOID
NTAPI
ObDereferenceObjectDeferDelete(
  _In_ PVOID Object);
$endif (_WDMDDK_)
$if (_NTIFS_)

NTKERNELAPI
BOOLEAN
NTAPI
ObIsKernelHandle(
  _In_ HANDLE Handle);
$endif (_NTIFS_)
#endif

$if (_WDMDDK_)
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
NTSTATUS
NTAPI
ObRegisterCallbacks(
  _In_ POB_CALLBACK_REGISTRATION CallbackRegistration,
  _Outptr_ PVOID *RegistrationHandle);

NTKERNELAPI
VOID
NTAPI
ObUnRegisterCallbacks(
  _In_ PVOID RegistrationHandle);

NTKERNELAPI
USHORT
NTAPI
ObGetFilterVersion(VOID);

#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
$endif (_WDMDDK_)

#if (NTDDI_VERSION >= NTDDI_WIN7)
$if (_WDMDDK_)
_IRQL_requires_max_(APC_LEVEL)
NTKERNELAPI
NTSTATUS
NTAPI
ObReferenceObjectByHandleWithTag(
  _In_ HANDLE Handle,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode,
  _In_ ULONG Tag,
  _Out_ PVOID *Object,
  _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
LONG_PTR
FASTCALL
ObfReferenceObjectWithTag(
  _In_ PVOID Object,
  _In_ ULONG Tag);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
NTSTATUS
NTAPI
ObReferenceObjectByPointerWithTag(
  _In_ PVOID Object,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode,
  _In_ ULONG Tag);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTKERNELAPI
LONG_PTR
FASTCALL
ObfDereferenceObjectWithTag(
  _In_ PVOID Object,
  _In_ ULONG Tag);

NTKERNELAPI
VOID
NTAPI
ObDereferenceObjectDeferDeleteWithTag(
  _In_ PVOID Object,
  _In_ ULONG Tag);

#define ObDereferenceObject ObfDereferenceObject
#define ObReferenceObject ObfReferenceObject
#define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
#define ObReferenceObjectWithTag ObfReferenceObjectWithTag
$endif (_WDMDDK_)
$if (_NTIFS_)

NTKERNELAPI
NTSTATUS
NTAPI
ObOpenObjectByPointerWithTag(
  _In_ PVOID Object,
  _In_ ULONG HandleAttributes,
  _In_opt_ PACCESS_STATE PassedAccessState,
  _In_ ACCESS_MASK DesiredAccess,
  _In_opt_ POBJECT_TYPE ObjectType,
  _In_ KPROCESSOR_MODE AccessMode,
  _In_ ULONG Tag,
  _Out_ PHANDLE Handle);

NTKERNELAPI
ULONG
NTAPI
ObGetObjectPointerCount(
    _In_ PVOID Object
);

$endif (_NTIFS_)
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */