Winapi 如何解释AcquireCredentialsHandle(Kerberos)返回的到期日?

Winapi 如何解释AcquireCredentialsHandle(Kerberos)返回的到期日?,winapi,kerberos,sspi,Winapi,Kerberos,Sspi,Windows SSPI调用AcquireCredentialsHandle返回一个时间戳,指示凭据句柄何时过期。文档似乎在说时间戳结构应该与文件时间结构具有相同的格式。但是,当我在“Kerberos”包中使用此函数时,如果将其视为FILETIME,则结果毫无意义: #include <stdio.h> #define SECURITY_WIN32 #include <windows.h> #include <security.h> int main() {

Windows SSPI调用
AcquireCredentialsHandle
返回一个时间戳,指示凭据句柄何时过期。文档似乎在说
时间戳
结构应该与
文件时间
结构具有相同的格式。但是,当我在“Kerberos”包中使用此函数时,如果将其视为
FILETIME
,则结果毫无意义:

#include <stdio.h>
#define SECURITY_WIN32
#include <windows.h>
#include <security.h>

int main() {

  TimeStamp expiry;
  int aquireCode;
  CredHandle credHandle;
  BOOL timeOk;
  SYSTEMTIME sysTime;

  aquireCode = AcquireCredentialsHandle(
          NULL,
          "Kerberos",
          SECPKG_CRED_OUTBOUND,
          NULL,
          NULL,
          NULL,
          NULL,
          &credHandle,
          &expiry);

  printf("result = %d\n", aquireCode);
  printf("upper = %d (%X)\n", expiry.HighPart, expiry.HighPart);
  printf("lower = %d (%X)\n", expiry.LowPart, expiry.LowPart);

  timeOk = FileTimeToSystemTime((FILETIME*)&expiry, &sysTime);
  printf("time covert ok = %d\n", timeOk);
  printf("%4d/%02d/%02d %02d:%02d:%02d\n", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
}

如果不是
文件时间
,那是什么?

你有没有想过?我看到了完全相同的事情,而网络似乎对此保持沉默。不,我从来没有追根究底过。幸运的是,我最终不需要知道我正在解决的问题的有效期。注意,您的代码包含一个bug。ACH以本地时间返回时间对象,但FileTimeToSystemTime需要UTC时间对象才能转换。首先使用LocalTimeToFileTime。顺便说一句,我也有同样愚蠢的约会。一定是某个白痴女士。摘要或NTLM提供完全不同的日期。我想说,这个期限是绝对没有用的。
result = 0
upper = 2147483530 (7FFFFF8A)
lower = -1488801793 (A742AFFF)
time covert ok = 1
30828/09/13 12:48:05