Articles of 活动目录

读取内存时出现访问冲突

背景 我正在用Visual Studio 2013 Community Edition编写命令行C ++程序。 它通过LDAP连接到Active Directory服务器,并在一些属性(例如:办公地点,部门)中检索唯一值列表。 问题 该程序编译好,但我遇到一个内存访问问题,当我运行它: Unhandled exception at 0x74EDC6B1 (Wldap32.dll) in LdapSearchResultTest1.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC. 这是我第一次使用C ++与外部库,所以我不知道如何甚至接近debugging(通常我为Android写Java)。 我花了一天的更好的时间来看看这个问题,并根据类似问题的答案尝试一些想法,但是我仍然无法解决这个问题。 确切的问题在于这个函数调用的最后一个参数: // Do the search int searchReturnCode = ldap_search_s( ldapSession, &searchBase[0], LDAP_SCOPE_SUBTREE, filter, pAttributes, 0, &pSearchResults); // Error is here 我的代码 我的代码是基于MSDN网站的一个例子,我已经在代码中复制了这个例子。 这是一个certificate这个问题的SSCCE : #include<iostream> #include<Windows.h> #include<Winldap.h> #include<WinBer.h> […]

Win32:如何根据Active Directoryvalidation凭据?

它已被问及 .NET的答案,但现在是时候得到本机Win32代码的答案: 我如何validationWindows用户名和密码? 我之前问过这个问题的托pipe代码 。 现在是本地解决scheme的时候了。 它需要指出一些更常见的解决scheme的陷阱: 无效的方法1.使用模拟查询Active Directory 很多人build议查询Active Directory的东西。 如果抛出exception,那么你知道凭据是无效的 – 正如在这个stackoverflow问题中所build议的。 然而,这种方法有一些严重的缺陷 : 您不仅要validation域帐户,还要进行隐式授权检查。 也就是说,您正在使用模拟令牌从AD读取属性。 如果否则有效的帐户没有权利从AD读取? 默认情况下,所有用户都具有读取访问权限,但可以将域策略设置为禁用受限帐户(和/或组)的访问权限。 针对AD的绑定具有严重开销,AD架构caching必须在客户端(DirectoryServices使用的ADSI提供程序中的ADSIcaching)中加载。 这既是networking,又是AD服务器,消耗资源,而且对于像validation用户帐户这样的简单操作来说太昂贵了。 对于非例外情况,您依赖exception失败,并假设这意味着无效的用户名和密码。 其他问题(如networking故障,AD连接故障,内存分配错误等)则被误解为authentication失败。 .NET的DirectoryEntry类的使用是validation凭据的不正确方法的一个例子: 无效的方法1a – .NET DirectoryEntry entry = new DirectoryEntry("persuis", "iboyd", "Tr0ub4dor&3"); object nativeObject = entry.NativeObject; 无效的方法1b – .NET#2 public static Boolean CheckADUserCredentials(String accountName, String password, String domain) { Boolean result; using […]

将button添加到Windows 7login屏幕

我想为Windows 7用户实现自复位密码function。 login屏幕提示域用户应该显示一个忘记密码button,这将打开密码重置向导。 所以问题是如何添加一个命令button到标准的Windowslogin屏幕? 我知道在Windows XP中的GINA如下所述: 将命令button添加到Windowslogin屏幕 但是这个话题已经三年了,而在Vista / Windows 7中,微软提出了“Microsoft Windows Credential Provider”。

如何在ASP.NET中列出Windows用户和组?

我有一个ASP.NET网站项目,我需要列出我的Windows系统上的所有用户和他们的组。 我已将身份模拟设置为true,并在web.config中提供了admin的用户名和密码。 我从哪说起呢? 提前致谢。 更新: 我目前有以下代码 – var machine = new DirectoryEntry("WinNT://<IP ADDRESS>"); foreach (DirectoryEntry child in machine.Children) { // get the child's group(s). } 当我debugging时,我可以看到machine.Children中的用户列表。 我如何find这个用户所属的组?

C# – 无法使用Windows 10上的PrincipalContext(ContextType.Machine):系统找不到指定的文件

以下几个Windows版本的服务器版本,Windows 7专业版和其他版本,但在Windows 10(至less两台机器),我得到的错误:“系统找不到指定的文件\ r \ n”。 错误来源是“活动目录” System.IO.FileNotFoundException:系统找不到指定的文件。 堆栈跟踪: at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADs.Get(String bstrName) at System.DirectoryServices.AccountManagement.CredentialValidator.BindSam(String target, String userName, String password) at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password) at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password) at IsValidWindowsUser(String userName, String password) in MembershipProvider.cs:line xxx 以下是我需要触发错误的最小数量的代码。 在这种情况下,我正在使用ValidateCredentials(),但其他操作(如PrincipalSearches也会失败,出现完全相同的错误。 我已经使用LogonUser()validation了凭据的有效性。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx bool IsValidWindowsUser(string userName, string password) { using (var p = new PrincipalContext(ContextType.Machine)) return p.ValidateCredentials(userName, […]

如何用C ++编程式更新组策略?

我以编程方式pipe理组策略,但是我无法find任何以编程方式更新组策略的function。 即gpupdate / force

如何将自定义属性添加到Windows中的AD组?

我想知道如何编写脚本。 另外,是否有一个开箱即用的GUI工具,让我这样做?

如何确定帐户的types(AD用户与AD组)?

我有一个关于确定帐户名称的types(用户或组)的问题。 例如,我有两个string,分别是“Adventure-works \ david”和“Adventure-works \ admins”,第一个表示名为david的用户,第二个表示AD组。 我的问题是如何确定这些帐户的types(用户或AD组)? 有没有方便的方法可以使用? 任何意见表示赞赏。 谢谢。

应该安装在Windows 7计算机上的PowerShell Active Directory模块导入它,还是可以从Windows 2008 R2 DC远程导入?

目前我正在taskpads上委托一些远程pipe理员的权限。我有以下问题; – >对于在PowerShell中导入活动目录模块,它是本地安装的,还是可以从Windows 2008 R2 DC远程导入? – >对于在远程工作站上工作的任务板,pipe理工具是否应安装在所有的远程机器上,还是有集中的维护方式? 请让我知道是否有关于我的努力的澄清/问题。

在Java或命令行实用工具中使用本机SSPI API获取服务的Kerberos票据有没有办法?

我想在Java中使用Kerberos实现单点login,并已成功地使用Windowslogin中的故障单创build了服务的故障单。 不幸的是,我只能在启用registry项“allowtgtsessionkey”时创build该票证。 我收到一个exception,只要我禁用它,消息“标识符不符合期望值(906)”。 registry项logging在http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html和http://support.microsoft.com/kb/308339上 。 不幸的是我没有访问我的应用程序将被使用的计算机上的registry,所以我正在寻找一种方法来做到这一点,而不必修改它。 当我在Internet Explorer或Mozilla Firefox上通过SPNEGO进行单点login时,他们会在我的票据caching中创build一个服务票据,所以肯定有办法在不设置registry项的情况下执行此操作。 有没有人有一个想法如何在Java中做到这一点? 感谢您的帮助,memminger 更新:我放弃这个问题。 Windowsregistry项禁止访问Ticketcaching内的票证(更确切地说:主体)。 Windows上的Java使用自己的GSSAPI实现,我想这需要访问票证来创build一个服务票据。 SSPI Windows API可以完全访问Ticketcaching,因此可以创build服务票据。 这个API被Web浏览器使用,但是它没有被Java使用(根据http://java.sun.com/developer/technicalArticles/J2SE/security/#3 )。 当我在访问过一次网页后禁用了SSPI(所以创build了一个服务票据)后,我仍然可以访问这个页面,所以使用命令行实用工具就足以使用SPPI API创build服务票据了。 对于我们来说,这意味着我们可以放弃单点login(这对我们来说是不可接受的),或者我们在应用程序的客户端进行authentication(因为我们只能读出用户名,而不能validation服务器),这是一个重大的安全风险。 另一个例子是安全约束越强,安全漏洞就越大,因为它们变得太复杂了。