Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# lsalogonuser不返回令牌_C#_Winapi_Pinvoke - Fatal编程技术网

C# lsalogonuser不返回令牌

C# lsalogonuser不返回令牌,c#,winapi,pinvoke,C#,Winapi,Pinvoke,lsalogonuser不返回令牌,即使返回为success并且事件查看器显示用户要登录 该代码与我在互联网上找到的许多示例相匹配。 有些参数很棘手,需要仔细操作指针以确保数据连续。 但我认为所有这些都是可以的,因为我得到一个零返回代码,表示成功,事件查看器显示用户登录。 我尝试了许多不同的登录类型。有些工作,有些不工作。但我从来没有得到令牌的非零指针,即使对于那些有效的令牌也是如此 一个疑点是路缘石登录提交类型枚举 至少有一个微软网站没有提到非线性值。 但我发现下面的代码,实际上12似乎适用于

lsalogonuser不返回令牌,即使返回为success并且事件查看器显示用户要登录

该代码与我在互联网上找到的许多示例相匹配。 有些参数很棘手,需要仔细操作指针以确保数据连续。 但我认为所有这些都是可以的,因为我得到一个零返回代码,表示成功,事件查看器显示用户登录。 我尝试了许多不同的登录类型。有些工作,有些不工作。但我从来没有得到令牌的非零指针,即使对于那些有效的令牌也是如此

一个疑点是路缘石登录提交类型枚举 至少有一个微软网站没有提到非线性值。 但我发现下面的代码,实际上12似乎适用于s4u类型 (除了不给我代币)

我很感激有任何想法

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感谢链接。我相信这是我为发现代码中的缺陷而查看的众多示例之一。看起来你在微软工作?对于这样的问题,是否有官方的支持渠道?当然,我希望被起诉,但这不是问题