SecLookupAccountSid 函数 (ntifs.h)
SecLookupAccountSid 接受安全标识符(SID)作为输入。 它检索此 SID 的帐户的名称以及找到此 SID 的第一个域的名称。
语法
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecLookupAccountSid(
[in] PSID Sid,
[out] PULONG NameSize,
[in, out] PUNICODE_STRING NameBuffer,
[out] PULONG DomainSize,
[out, optional] PUNICODE_STRING DomainBuffer,
[out] PSID_NAME_USE NameUse
);
参数
[in] Sid
指向要查找的 SID 的指针。
[out] NameSize
指向指定 NameBuffer大小的变量的指针。 在输入时,此值指定输入 NameBuffer的大小(以字节为单位)。 如果函数由于缓冲区太小而失败,则此变量将接收所需的缓冲区大小。 成功后,此变量包含返回 NameBuffer的大小。
[in, out] NameBuffer
指向接收与 Sid关联的帐户名称的缓冲区的指针。 如果此参数为 NULL,NameSize 将为零。
[out] DomainSize
指向 ULONG 的指针,指定 DomainBuffer 参数的大小。 如果函数由于缓冲区太小而失败,则此变量将接收所需的缓冲区大小。 如果 DomainBuffer 参数 NULL,则此参数将设置为零。
[out, optional] DomainBuffer
指向接收找到此 SID 的第一个域名称的缓冲区的指针。
[out] NameUse
指向接收帐户类型的 SID_NAME_USE 枚举类型的指针。
返回值
SecLookupAccountSid 在成功或失败时返回以下错误代码之一STATUS_SUCCESS。
返回代码 | 描述 |
---|---|
SEC_E_INTERNAL_ERROR | 尝试连接到本地系统机构(LSA)或本地过程调用(LPC)时发生内部错误,安全提供程序失败。 |
STATUS_ACCESS_DENIED | 与当前正在执行的线程关联的进程 ID 与当前进程 ID 不匹配。 |
STATUS_BUFFER_TOO_SMALL | NameBuffer 或 ReferencedDomain 参数的缓冲区大小太小。 |
STATUS_INVALID_PARAMETER | Name 参数的长度超过了向本地系统机构(LSA)发送的消息中允许的长度。 |
STATUS_NO_MEMORY | 无法为此函数使用的临时内部缓冲区分配足够的内存。 |
STATUS_NONE_MAPPED | 找不到 Sid 参数。 |
STATUS_PROCESS_IS_TERMINATING | 此过程已终止,因此无法建立本地过程调用 (LPC) 连接。 |
言论
SecLookupAccountSid 首先检查已知 SID 列表,尝试查找指定 SID 的名称。 如果提供的 SID 与已知的 SID 不对应,该函数会检查内置和管理定义的本地帐户。 接下来,该函数检查主域。 根据对应于其 SID 前缀的受信任域检查主域无法识别的安全标识符。
如果函数找不到 SID 的帐户名称,SecLookupAccountSid 失败。 如果网络超时阻止函数查找名称,则可能会发生这种情况。 对于没有相应帐户名称的 SID(例如标识登录会话的登录 SID),也会发生这种情况。
除了查找本地帐户、本地域帐户和显式受信任的域帐户外,SecLookupAccountSid 还可以查找林中任何域中的任何帐户的 SID,包括仅显示在林中帐户的 SIDhistory 字段中的 SID。 SIDhistory 字段存储已从另一个域移动的帐户的前 SID。 若要查找 SID,SecLookupAccountSid 查询林的全局目录。
SecLookupAccountSid 等效于 Win32 LookupAccountSid 函数。
SecLookupAccountSid 由 ksecdd 驱动程序导出,该驱动程序使用用户模式帮助程序服务实现此函数。 因此,在文件系统中使用此函数必须遵循与用户模式服务通信的常规规则。 SecLookupAccountSid 在分页文件 I/O 期间无法使用。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | Ksecdd.lib |
IRQL | <= APC_LEVEL |