ntQueryObject 函数 (winternl.h)

[此函数可能会更改或从 Windows 中删除,恕不另行通知。]

检索各种类型的对象信息。

语法

__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryObject(
  [in, optional]  HANDLE                   Handle,
  [in]            OBJECT_INFORMATION_CLASS ObjectInformationClass,
  [out, optional] PVOID                    ObjectInformation,
  [in]            ULONG                    ObjectInformationLength,
  [out, optional] PULONG                   ReturnLength
);

参数

[in, optional] Handle

要查询其信息的 对象的句柄。

[in] ObjectInformationClass

下列值之一,如 OBJECT_INFORMATION_CLASS 中枚举,指示要检索的对象信息的类型。

术语 说明
ObjectBasicInformation 返回 PUBLIC_OBJECT_BASIC_INFORMATION 结构,如以下“备注”部分所示。
ObjectTypeInformation 返回 PUBLIC_OBJECT_TYPE_INFORMATION 结构,如下面的“备注”部分所示。

[out, optional] ObjectInformation

指向要返回所请求信息的缓冲区的可选指针。 此信息的大小和结构因 ObjectInformationClass 参数的值而异。

[in] ObjectInformationLength

ObjectInformation 参数指向的缓冲区的大小(以字节为单位)。

[out, optional] ReturnLength

指向函数写入所请求信息的实际大小的位置的可选指针。 如果该大小小于或等于 ObjectInformationLength 参数,则函数将信息复制到 ObjectInformation 缓冲区中;否则,它将返回 NTSTATUS 错误代码,并在 ReturnLength 中返回接收请求的信息所需的缓冲区大小。

返回值

返回 NTSTATUS 或错误代码。

NTSTATUS 错误代码的形式和意义列在 WDK 中提供的 Ntstatus.h 头文件中,并在 WDK 文档中进行介绍。

注解

此函数没有关联的头文件或导入库。 必须使用 LoadLibraryGetProcAddress 函数动态链接到 Ntdll.dll。

如果 ObjectInformationClass 参数为 ObjectBasicInformation,则信息包含在以下结构中。

typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
    ULONG Attributes;
    ACCESS_MASK GrantedAccess;
    ULONG HandleCount;
    ULONG PointerCount;
    ULONG Reserved[10];    // reserved for internal use
 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;

此结构的可用成员包括句柄 (Attributes) 的对象属性、为句柄授予的访问权限 (GrantedAccess) 、对对象的打开句柄数 (HandleCount) ,以及对对象的内核引用数 (PointerCount) 。

如果 ObjectInformationClass 参数为 ObjectTypeInformation,则信息包含在以下结构中。

typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
    UNICODE_STRING TypeName;
    ULONG Reserved [22];    // reserved for internal use
} PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;

此结构的唯一可用成员是 typeName) (对象类型名称字符串。

要求

要求
目标平台 Windows
标头 winternl.h
Library ntdll.lib
DLL ntdll.dll