obQueryNameString 函数 (ntifs.h)

ObQueryNameString 例程提供调用方具有指针的给定对象的名称(如果有)。

语法

NTSTATUS ObQueryNameString(
  [in]            PVOID                    Object,
  [out, optional] POBJECT_NAME_INFORMATION ObjectNameInfo,
  [in]            ULONG                    Length,
  [out]           PULONG                   ReturnLength
);

参数

[in] Object

指向为其请求名称的 对象的指针。 此参数是必需的,不能为 NULL

[out, optional] ObjectNameInfo

指向以下类型的调用方分配的缓冲区的指针,该缓冲区接收对象名称信息:

typedef struct _OBJECT_NAME_INFORMATION {
  UNICODE_STRING Name;
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;

此参数是可选的,可以为 NULL。 如果 ObjectNameInfoNULL则 Length 必须为零。

[in] Length

ObjectNameInfo 指向的缓冲区的大小(以字节为单位)。 此参数是可选的,可以为零。 如果 Length 为零, 则 ReturnLength 接收保存对象名称信息所需的缓冲区的大小(以字节为单位)。 缓冲区容纳大多数对象名称的合理大小为 1024 字节。 如果 Length 为零, 则 ObjectNameInfo 可以为 NULL

[out] ReturnLength

指向调用方分配的变量的指针,该变量接收返回的对象名称信息的大小(以字节为单位)。 当存在) 包含 NULL 终止符和名称中的所有路径分隔符“\”时,对象名称 (。 如果 ObQueryNameString 返回 STATUS_INFO_LENGTH_MISMATCH,则会将此参数设置为所需的缓冲区长度。

返回值

ObQueryNameString 返回STATUS_SUCCESS或 NTSTATUS 值,如下所示:

返回代码 说明
STATUS_INFO_LENGTH_MISMATCH
ObjectNameInfo 指向的缓冲区太小,无法保存请求的对象名称信息。 ReturnLength 指向所需的缓冲区大小。 在这种情况下,不会返回任何对象名称信息。 这是错误代码。 请注意,如果 Length 设置为零,则返回 STATUS_INFO_LENGTH_MISMATCH

注解

如果给定对象已命名且对象名称已成功获取,则返回的字符串是给定对象的名称,包括尽可能多的对象的完整路径。 在这种情况下, ObQueryNameStringName.Buffer 设置为指定对象的以 NULL 结尾的名称的地址。 Name.MaximumLength 的值是对象名称的长度,包括 NULL 终止。 Name.Length 的值是对象名称的长度。

如果给定对象未命名,或者未成功获取对象名称, 则 ObQueryNameStringName.Buffer 设置为 NULL ,并将 Name.LengthName.MaximumLength 设置为零。

ObjectNameInfo 的存储可以从分页池或非分页池中分配。

要求

要求
最低受支持的客户端 Windows 2000
目标平台 通用
标头 ntifs.h (包括 FltKernel.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

UNICODE_STRING