问题标签 [local-security-authority]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 如何以编程方式确定用户帐户是否是 Windows 中特定组的成员?
给定组名和用户帐户,我想知道提供的用户是否属于特定组。用户可以是本地用户或域用户,组可以是本地组或域组,该组也可以嵌套在其他组中。简而言之,我正在寻找一个类似的函数bool IsUserMemberOf(User, Group)
,它将在内部调用适当的 Win32 API 来进行搜索。我想进行上述查询的过程应该具有查询本地和 AD 组的必要权限。我想在企业管理员帐户下运行该过程应该可以查询森林中的任何 DC,但可能不适用于不属于域的机器。关于这个查询过程应该运行什么帐户以便它可以查询 LSA 和 AD 的任何想法?
c++ - 如何确定 LSA 会话在 Windows XP 中是否处于活动状态
我正在尝试获取当前登录到机器的用户列表。
在 Windows 7 上,我可以调用 LsaEnumerateLogonSessions,然后使用 WTSConnectState 调用 WTSQuerySessionInformation。
但是在 XP 上,每个 LSA 会话的 TS 会话字段都为 0(除非它是远程桌面会话),它始终具有 WTSActive 的 WTSConnectState,并且我最终列出了所有已经注销机器的人。当会话是远程桌面会话时,WTSQuerySessionInformation 失败。
c# - 调用 LsaQueryInformationPolicy() 时收到拒绝访问错误,我是管理员
无论我LsaQueryInformationPolicy()
在本地主机上还是在域中的其他机器上尝试,我都会收到此错误返回。我使用的标志LsaOpenPolicy()
是,POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION
但我也尝试过POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION | READ_CONTROL
但没有成功。
我登录的用户是我的机器和我正在尝试的所有其他机器上的本地管理员。
对于LsaQueryInformationPolicy()
我使用的第二个参数PolicyAuditEventsInformation
。
我能够使用LsaEnumerateAccountRights()
相同的策略句柄成功地针对同一主机使用。
c++ - 实现自定义 Windows 身份验证包
我正在为 Windows 7 的 MSV1_0 构建一个自定义身份验证子包。我使用了 Windows SDK 中的 msvsubauth 示例,我有 2 个关于我面临的一些问题的问题:
当我试图确保调用例程并将注册表中的 Auth0 属性设置为我的包并在创建文件的 Msv1_0SubAuthenticationRoutine 末尾添加一个简单的代码时:
显然,该程序包被调用,因为当我输入密码时,我从 Windows 收到一条错误消息“参数不正确”,这是一个好兆头。但为什么我会收到这个错误?当从单独的 .exe 文件执行完全相同的代码时,它会完美运行并创建测试文本文件。我已经检查了权限并为“每个人”设置了“完全控制”。有任何想法吗?SDK 并没有具体提到 LSA 为 auth 包中的代码创建了什么样的隔离。
第二个问题是测试AP。目前,每次更改我都会重建库,将其复制到测试 VM,然后复制到 System32 文件夹并重新启动它。有没有更简单的方法来做到这一点?
预先感谢!
winapi - WIN32 - 最后登录的用户
是否有可靠的方法来确定登录系统的最后一个用户名?我查看了 LsaEnumerateLogonSessions() 和 LsaGetLogonSessionData() 但是它们需要在 Vista 和更高版本上提升(我很想避免)。WMI 也有同样的问题(大概只是在幕后调用 Lsa)。
我还查看了 HKLM 中的“SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LastLoggedOnUser”,但在测试中这是不可靠的并且没有得到更新。
我真的只对控制台登录感兴趣,而不是快速用户切换或 TS 登录。
我已经阅读了各种文章,但还没有提出一个好的解决方案。
c++ - 如何调用 OpenTokenByLogonId 函数?
我真的想找到一种方法来调用 OpenTokenByLogonId() 函数,但我很困惑。此外,我在任何地方都找不到任何例子!
从 MSDN 中,可以在从 SpInitialize() 函数接收的 LSA_SECPKG_FUNCTION_TABLE 函数表中找到指向 OpenTokenByLoginID() 的指针。
根据我想要做的,从几个 DLL 中实现的 SpLsaModeInitialize() 函数接收到的指向 SpInitialize() 函数的指针。
因此,我在 windows\system32\ 中寻找 SpLsaModeInitialize() 导出,并找到了一些 DLL。其中我选择使用 Kerberos.dll。我必须说,我之所以选择这个 DLL 而不是其他人,只是因为它的名字——我真的不明白有什么区别(我相信这些我不同的身份验证方法,但我真的不知道)。
所以,我得到了一个指向 SpLsaModeInitialize() 的指针:
调用函数:
现在我可以使用 pck_tbl->Initialize 调用 SpInitialize。
但是(这就是问题所在)我找不到函数参数的方法!
如何找到 packageID 更不用说它的 SECPKG_PARAMETERS 了?我到处寻找,但我想我错过或忽略了一些东西......
感谢您的帮助!!!
windows - 如何正确调用 LsaLogonUser 进行交互式登录?
我正在尝试使用 LsaLogonUser 创建交互式登录会话,但它总是返回STATUS_INVALID_INFO_CLASS
(0xc0000003)。从我在网上搜索的结果来看,结构的内存布局KERB_INTERACTIVE_LOGON
很棘手,但我很确定我做得对。
我也尝试过使用 MSV1.0 代替 Kerberos,MSV1_0_INTERACTIVE_LOGON
用于身份验证结构和MSV1_0_PACKAGE_NAME
作为包名称,但失败并显示STATUS_BAD_VALIDATION_CLASS
(0xc00000a7)。
谁能告诉我在这里做错了什么?这是代码,大部分错误处理都被剥离了。显然,这不是生产质量。我只是想得到一个工作样本。
c++ - 如何将 std::wstring 转换为 LSA_UNICODE_STRING
今天,我能够编写一个简单的 C++ 程序,授予用户“作为服务登录”权限。其中一部分涉及在 aLPCWSTR
和a 之间进行转换LSA_UNICODE_STRING
。执行此操作的代码在这里:
当我在这个函数中出现一些小错误时,我的调用LsaLookupNames2()
失败,代码为 87(十六进制 0x57)“参数不正确。” 我正在尝试在使用std::wstring
但失败的 C++ 应用程序中进行此调用。我目前的功能如下:
我究竟做错了什么?
windows - 使用用户过滤的令牌模拟线程
我正在编写一个应用程序,它是一种自定义公司设置。这个应用程序做了很多任务,其中一些需要提升。
我包含了一个清单,以便当应用程序启动时 UAC 要求用户提升。
其中一项任务是将一些网络驱动器(带有WNetAddConnection
)映射到远程服务器。这些映射应该是持久的。到目前为止一切顺利,除了当应用程序关闭时,用户看不到应用程序刚刚映射的驱动器。
经过一番研究(https://serverfault.com/a/185885/147818),我了解到当用户登录时,它的会话收到 2 个令牌,一个具有低权限,另一个具有完全权限,使用的那个在需要提升时运行进程。
我的问题:我的应用程序是否有可能启动一个线程来获取当前用户过滤的令牌,当应用程序的任务完成时,用户可以在资源管理器中看到网络驱动器?
可以用这个令牌模拟线程吗?
我知道这些可能的解决方法:
- 重新设计应用程序,以便仅将一些需要提升的特定任务封装在 COM 对象中。
- 使用设置调整注册表
EnableLinkedConnections
(需要用户的会话重新启动)
但由于某些原因,这些解决方案都不是一种选择。
任何帮助将不胜感激
c++ - 无法使用 C++ 在本地安全策略中设置审核对象访问
我正在使用以下代码启用本地安全策略中成功和失败的审计对象访问。
当我制作独立的 exe 并进行测试时,上面的代码可以完美运行。但是,一旦我将上述代码与我的主项目集成,就会ppPAUDInfo->MaximumAuditEventCount
给出一个六位数的计数,应该是 9。我的主项目进程在我尝试访问时立即退出ppPAUDInfo->EventAuditingOptions[index]
。