C# lsalogonuser不返回令牌
lsalogonuser不返回令牌,即使返回为success并且事件查看器显示用户要登录 该代码与我在互联网上找到的许多示例相匹配。 有些参数很棘手,需要仔细操作指针以确保数据连续。 但我认为所有这些都是可以的,因为我得到一个零返回代码,表示成功,事件查看器显示用户登录。 我尝试了许多不同的登录类型。有些工作,有些不工作。但我从来没有得到令牌的非零指针,即使对于那些有效的令牌也是如此 一个疑点是路缘石登录提交类型枚举 至少有一个微软网站没有提到非线性值。 但我发现下面的代码,实际上12似乎适用于s4u类型 (除了不给我代币) 我很感激有任何想法C# lsalogonuser不返回令牌,c#,winapi,pinvoke,C#,Winapi,Pinvoke,lsalogonuser不返回令牌,即使返回为success并且事件查看器显示用户要登录 该代码与我在互联网上找到的许多示例相匹配。 有些参数很棘手,需要仔细操作指针以确保数据连续。 但我认为所有这些都是可以的,因为我得到一个零返回代码,表示成功,事件查看器显示用户登录。 我尝试了许多不同的登录类型。有些工作,有些不工作。但我从来没有得到令牌的非零指针,即使对于那些有效的令牌也是如此 一个疑点是路缘石登录提交类型枚举 至少有一个微软网站没有提到非线性值。 但我发现下面的代码,实际上12似乎适用于
enum KERB_LOGON_SUBMIT_TYPE {
KerbInteractiveLogon = 2,
KerbSmartCardLogon = 6,
KerbWorkstationUnlockLogon = 7,
KerbSmartCardUnlockLogon = 8,
KerbProxyLogon = 9,
KerbTicketLogon = 10,
KerbTicketUnlockLogon = 11,
KerbS4ULogon = 12,
KerbCertificateLogon = 13,
KerbCertificateS4ULogon = 14,
KerbCertificateUnlockLogon = 15,
}
[DllImport("secur32.dll", SetLastError = true)]
static extern uint LsaLogonUser(
[In] IntPtr LsaHandle,
[In] ref LSA_STRING OriginName,
[In] SECURITY_LOGON_TYPE LogonType,
[In] uint AuthenticationPackage,
[In] IntPtr AuthenticationInformation,
[In] uint AuthenticationInformationLength,
[In] IntPtr ptoken_groups,
[In] ref TOKEN_SOURCE SourceContext,
[Out] out IntPtr ProfileBuffer,
[Out] out uint ProfileBufferLength,
[Out] out LUID LogonId,
[Out] out IntPtr Token,
[Out] out QUOTA_LIMITS Quotas,
[Out] out uint SubStatus
);
uint ntstatus = LsaLogonUser(lsahandle, ref origin_name, SECURITY_LOGON_TYPE.Network,
authentication_package, auth_info, auth_info_length,
IntPtr.Zero,
ref token_source,
out ProfileBuffer,
out ProfileBufferLength,
out LogonId,
out Token,
out quota_limits,
out SubStatus);
调用后,指向令牌的指针始终为0,即使在用户登录的意义上调用“成功”,并且返回零表示成功您最好有一个完整的示例,可以运行该示例来尝试重现您看到的内容。除此之外,你见过吗?从那篇文章:
。。。如何以编程方式生成S4U令牌。。。WindowsIdentity s4u=新的WindowsIdentity(“user@domain"); ... 您将看到,此代码比调用LsaLogonUser()容易得多。…
此代码是否具有SeTcbPrivilege
权限?无论如何,这里有一个带有路缘4ulogon
的链接可以帮助你。谢谢你的回复。我确实知道如何通过windowsidentity创建令牌,但这是要求我编写的一些代码。我不确定Uticlimate的目标。也许他们要做一些自定义身份验证,这当然是新的windowsidentitymethod无法做到的。关于权限,我从不确定它们是否需要手动启用(对于某些功能,它们的存在似乎足够了),但我已经确保启用了SeTcbPrivilege。我在一些无关的工作中注意到,pinvoke.net有时与当前的MS文档不匹配(请参阅DOCINFOW)因此,我将重新检查所有声明。虽然我会感到惊讶,如果我有一些声明是错误的,它仍然工作得很好。我在互联网上只看到了另一个关于同一问题的提法。这个函数似乎适用于每个人,只要他们对参数进行了排序。所以我一定是做错了什么。或者我正在使用的域中有一些奇怪的权限配置Drake Wu感谢链接。我相信这是我为发现代码中的缺陷而查看的众多示例之一。看起来你在微软工作?对于这样的问题,是否有官方的支持渠道?当然,我希望被起诉,但这不是问题