当前位置: 首页 > news >正文

windows GetUserNameEx api使用c++

windows域账号信息获取GetUserNameExhttps://learn.microsoft.com/zh-cn/windows/win32/api/secext/ne-secext-extended_name_formatEXTENDED_NAME_FORMAT 枚举 (secext.h)
typedef enum {NameUnknown = 0,NameFullyQualifiedDN = 1,NameSamCompatible = 2,NameDisplay = 3,NameUniqueId = 6,NameCanonical = 7,NameUserPrincipal = 8,NameCanonicalEx = 9,NameServicePrincipal = 10,NameDnsDomain = 12,NameGivenName = 13,NameSurname = 14
} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT;常量NameUnknown
值: 0
未知的名称类型。
NameFullyQualifiedDN
值:1
完全限定的可分辨名称 (例如 CN=Jeff Smith,OU=Users,DC=Engineering,DC=Microsoft,DC=Com) 。
NameSamCompatible
值: 2
旧帐户名称 (例如 Engineering\JSmith) 。 仅限域的版本包括尾随反斜杠 (\) 。
NameDisplay
值: 3
“友好”显示名称 (例如 Jeff Smith) 。 显示名称不一定是 RDN) (定义的相对可分辨名称。
NameUniqueId
值: 6
一个 GUID 字符串,该字符串
IIDFromString 函数返回 (例如{4fa050f0-f561-11cf-bdd9-00aa003a77b6}) 。
NameCanonical
值: 7
完整的规范名称 (例如,engineering.microsoft.com/software/someone) 。 仅限域的版本包含尾随正斜杠 (/) 。
NameUserPrincipal
值: 8
用户主体名称 (例如, someone@example.com) 。
NameCanonicalEx
值: 9
与 NameCanonical 相同,只不过最右边的正斜杠 (/) 替换为新的行字符 (\n) ,即使在仅域的情况下 (,engineering.microsoft.com/software\nJSmith) 也是如此。
NameServicePrincipal
值: 10
通用化服务主体名称 (,例如 www/www.microsoft.com@microsoft.com) 。
NameDnsDomain
值: 12
DNS 域名后跟反斜杠和 SAM 用户名。
NameGivenName
值: 13
用户的名字或给定名称。 注意:此类型仅适用于 Active Directory 用户的 GetUserNameEx 调用。
NameSurname
值: 14
用户的姓氏。 注意:此类型仅适用于 Active Directory 用户的 GetUserNameEx 调用。
要求
要求	值
最低受支持的客户端	Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器	Windows 2000 Server [仅限桌面应用]
标头	secext.h (包括 Security.h)例子:#include <iostream>
#include <tchar.h>
#include <string>
#include <stdio.h>
#include <windows.h>
#define SECURITY_WIN32 1
#include <security.h>
#undef SECURITY_WIN32
#include <wincred.h>
#pragma comment(lib, "Secur32.lib")namespace test {// unknown name typeconst char kNameUnknown[] = "NameUnknown";// CN=John Doe, OU=Software, OU=Engineering, O=Widget, C=USconst char kNameFullyQualifiedDN[] = "NameFullyQualifiedDN";// Engineering\JohnDoeconst char kNameSamCompatible[] = "NameSamCompatible";// Probably "John Doe" but could be something else.  I.e. The// display name is not necessarily the defining RDN.const char kNameDisplay[] = "NameDisplay";// String-ized GUID as returned by IIDFromString().// eg: {4fa050f0-f561-11cf-bdd9-00aa003a77b6}const char kNameUniqueId[] = "NameUniqueId";// engineering.widget.com/software/John Doeconst char kNameCanonical[] = "kNameCanonical";// someone@example.comconst char kNameUserPrincipal[] = "NameUserPrincipal";// Same as NameCanonical except that rightmost '/' is// replaced with '\n' - even in domain-only case.// eg: engineering.widget.com/software\nJohn Doeconst char kNameCanonicalEx[] = "NameCanonicalEx";// www/srv.engineering.com/engineering.comconst char kNameServicePrincipal[] = "NameServicePrincipal";// DNS domain name + SAM username// eg: engineering.widget.com\JohnDoeconst char kNameDnsDomain[] = "NameDnsDomain";std::wstring GetUserNameByIndex(_In_ EXTENDED_NAME_FORMAT NameFormat) {WCHAR username[CREDUI_MAX_USERNAME_LENGTH + 1] = { 0 };DWORD username_length = sizeof(username);// someone@example.com 域账号登录下有值 非域无值if (!::GetUserNameEx(NameFormat, username, &username_length) ||username_length <= 0) {return std::wstring();}return std::wstring(username);}
};int main()
{  std::wcout <<test::GetUserNameByIndex(::NameFullyQualifiedDN).c_str();return 0;
}


http://www.mrgr.cn/news/36118.html

相关文章:

  • RTE 大会报名丨AI 时代新基建:云边端架构和 AI Infra ,RTE2024 技术专场第二弹!
  • visio 2021入门直通车(一天全搞定)
  • 二维环境下TDOA的MATLAB仿真代码(4个锚节点)
  • project modules模块消失,只显示module,不显示project
  • 深入理解包管理工具
  • 【Golang】Go语言中如何面向对象?
  • 二分查找及变体
  • shell配置文件介绍
  • 一个简单的个人博客管理平台适合新手学习(最底下有github链接)
  • 【多线程】面试高频考点!JUC常见类的详细总结,建议收藏!
  • add normal user to docker group
  • 信息安全工程师(17)密码体制分类
  • Python操作系统的6个自动化脚本
  • 一个操作榨干宽带WIFI性能,运营商直呼内行
  • 护工系统|护理陪护系统|陪护系统开发
  • Java: String类
  • Rust语言桌面应用开发GTK3 Gtk3-rs Glade
  • 解释python requests包的timeout
  • OpenAI创始人的长文:在智能时代下的全国信息学奥赛泄题事件反思
  • 负载均衡的作用