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。 如果 ObjectNameInfo 为 NULL ,则 长度 必须为零。

[in] Length

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

[out] ReturnLength

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

返回值

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

返回代码 描述
STATUS_INFO_LENGTH_MISMATCH
ObjectNameInfo 指向的缓冲区太小,无法保存请求的对象名称信息。 ReturnLength 指向所需的缓冲区大小。 在这种情况下,不会返回任何对象名称信息。 这是一个错误代码。 请注意,如果 长度 设置为零,则返回 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)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

UNICODE_STRING