[PATCH v2 1/2] schannel: Update SECPKG_FUNCTION_TABLE to SECPKG_INTERFACE_VERSION_8.

Sven Baars sven.wine at gmail.com
Wed Nov 27 17:07:54 CST 2019


Signed-off-by: Sven Baars <sven.wine at gmail.com>
---
v2: Split up the patch.

 dlls/schannel/lsamode.c    |  6 +++++-
 dlls/schannel/tests/main.c |  6 +++++-
 include/ntsecpkg.h         | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/dlls/schannel/lsamode.c b/dlls/schannel/lsamode.c
index 96ca240c08..372c5800b3 100644
--- a/dlls/schannel/lsamode.c
+++ b/dlls/schannel/lsamode.c
@@ -116,6 +116,8 @@ static SECPKG_FUNCTION_TABLE secPkgFunctionTable[2] =
     NULL, /* UpdateCredentials */
     NULL, /* ValidateTargetInfo */
     NULL, /* PostLogonUser */
+    NULL, /* GetRemoteCredGuardLogonBuffer */
+    NULL, /* GetRemoteCredGuardSupplementalCreds */
   }, {
     NULL, /* InitializePackage */
     NULL, /* LsaLogonUser */
@@ -153,6 +155,8 @@ static SECPKG_FUNCTION_TABLE secPkgFunctionTable[2] =
     NULL, /* UpdateCredentials */
     NULL, /* ValidateTargetInfo */
     NULL, /* PostLogonUser */
+    NULL, /* GetRemoteCredGuardLogonBuffer */
+    NULL, /* GetRemoteCredGuardSupplementalCreds */
   }
 };
 
@@ -164,7 +168,7 @@ NTSTATUS WINAPI SpLsaModeInitialize(ULONG LsaVersion, PULONG PackageVersion,
 {
     TRACE("(%u, %p, %p, %p)\n", LsaVersion, PackageVersion, ppTables, pcTables);
 
-    *PackageVersion = SECPKG_INTERFACE_VERSION_7;
+    *PackageVersion = SECPKG_INTERFACE_VERSION_8;
     *pcTables = 2;
     *ppTables = secPkgFunctionTable;
 
diff --git a/dlls/schannel/tests/main.c b/dlls/schannel/tests/main.c
index fc913c14a9..81a723c799 100644
--- a/dlls/schannel/tests/main.c
+++ b/dlls/schannel/tests/main.c
@@ -45,7 +45,9 @@
     ValidateTargetInfo)
 #define SECPKG_FUNCTION_TABLE_SIZE_6 FIELD_OFFSET(SECPKG_FUNCTION_TABLE, \
     PostLogonUser)
-#define SECPKG_FUNCTION_TABLE_SIZE_7 sizeof(SECPKG_FUNCTION_TABLE)
+#define SECPKG_FUNCTION_TABLE_SIZE_7 FIELD_OFFSET(SECPKG_FUNCTION_TABLE, \
+    GetRemoteCredGuardLogonBuffer)
+#define SECPKG_FUNCTION_TABLE_SIZE_8 sizeof(SECPKG_FUNCTION_TABLE)
 
 #define LSA_BASE_CAPS ( \
     SECPKG_FLAG_INTEGRITY         | \
@@ -156,6 +158,8 @@ static PSECPKG_FUNCTION_TABLE getNextSecPkgTable(PSECPKG_FUNCTION_TABLE pTable,
         size = SECPKG_FUNCTION_TABLE_SIZE_6;
     else if (Version == SECPKG_INTERFACE_VERSION_7)
         size = SECPKG_FUNCTION_TABLE_SIZE_7;
+    else if (Version == SECPKG_INTERFACE_VERSION_8)
+        size = SECPKG_FUNCTION_TABLE_SIZE_8;
     else {
         ok(FALSE, "Unknown package version 0x%x\n", Version);
         return NULL;
diff --git a/include/ntsecpkg.h b/include/ntsecpkg.h
index 08373a2635..99b9ec7d40 100644
--- a/include/ntsecpkg.h
+++ b/include/ntsecpkg.h
@@ -38,6 +38,7 @@ extern "C" {
 #define SECPKG_INTERFACE_VERSION_5                  0x100000
 #define SECPKG_INTERFACE_VERSION_6                  0x200000
 #define SECPKG_INTERFACE_VERSION_7                  0x400000
+#define SECPKG_INTERFACE_VERSION_8                  0x800000
 
 /* enum definitions for Secure Service Provider/Authentication Packages */
 typedef enum _LSA_TOKEN_INFORMATION_TYPE {
@@ -305,6 +306,28 @@ typedef struct _LSA_SECPKG_FUNCTION_TABLE {
 } LSA_SECPKG_FUNCTION_TABLE,
  *PLSA_SECPKG_FUNCTION_TABLE;
 
+/* Functions for redirected credentials */
+typedef NTSTATUS (NTAPI *PLSA_REDIRECTED_LOGON_INIT)(HANDLE,
+ const UNICODE_STRING *, ULONG, const LUID *);
+typedef NTSTATUS (NTAPI *PLSA_REDIRECTED_LOGON_CALLBACK)(HANDLE, PVOID, ULONG,
+ PVOID *, ULONG *);
+typedef VOID (NTAPI *PLSA_REDIRECTED_LOGON_CLEANUP_CALLBACK)(HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_REDIRECTED_LOGON_GET_LOGON_CREDS)(HANDLE, PBYTE *,
+ PULONG);
+typedef NTSTATUS (NTAPI *PLSA_REDIRECTED_LOGON_GET_SUPP_CREDS)(HANDLE,
+ PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);
+
+typedef struct _SECPKG_REDIRECTED_LOGON_BUFFER {
+    GUID RedirectedLogonGuid;
+    HANDLE RedirectedLogonHandle;
+    PLSA_REDIRECTED_LOGON_INIT Init;
+    PLSA_REDIRECTED_LOGON_CALLBACK Callback;
+    PLSA_REDIRECTED_LOGON_CLEANUP_CALLBACK CleanupCallback;
+    PLSA_REDIRECTED_LOGON_GET_LOGON_CREDS GetLogonCreds;
+    PLSA_REDIRECTED_LOGON_GET_SUPP_CREDS GetSupplementalCreds;
+} SECPKG_REDIRECTED_LOGON_BUFFER,
+ *PSECPKG_REDIRECTED_LOGON_BUFFER;
+
 /* LSA-mode functions implemented by SSP/AP obtainable by a dispatch table */
 typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,
  PLSA_STRING, PLSA_STRING, PLSA_STRING *);
@@ -374,6 +397,12 @@ typedef NTSTATUS (NTAPI SpUpdateCredentialsFn)(LSA_SEC_HANDLE, GUID *, ULONG,
 typedef NTSTATUS (NTAPI SpValidateTargetInfoFn)(PLSA_CLIENT_REQUEST, PVOID,
  PVOID, ULONG, PSECPKG_TARGETINFO);
 typedef NTSTATUS (NTAPI LSA_AP_POST_LOGON_USER)(PSECPKG_POST_LOGON_USER_INFO);
+typedef NTSTATUS (NTAPI SpGetRemoteCredGuardLogonBufferFn)(LSA_SEC_HANDLE,
+ const UNICODE_STRING *, PHANDLE, PLSA_REDIRECTED_LOGON_CALLBACK *,
+ PLSA_REDIRECTED_LOGON_CLEANUP_CALLBACK *, PULONG, PVOID *);
+typedef NTSTATUS (NTAPI SpGetRemoteCredGuardSupplementalCredsFn)(LSA_SEC_HANDLE,
+ const UNICODE_STRING *, PHANDLE, PLSA_REDIRECTED_LOGON_CALLBACK *,
+ PLSA_REDIRECTED_LOGON_CLEANUP_CALLBACK *, PULONG, PVOID *);
 
 /* User-mode functions implemented by SSP/AP obtainable by a dispatch table */
 typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,
@@ -446,6 +475,9 @@ typedef struct SECPKG_FUNCTION_TABLE {
     /* Packages with version SECPKG_INTERFACE_VERSION_6 end here */
     LSA_AP_POST_LOGON_USER* PostLogonUser;
     /* Packages with version SECPKG_INTERFACE_VERSION_7 end here */
+    SpGetRemoteCredGuardLogonBufferFn* GetRemoteCredGuardLogonBuffer;
+    SpGetRemoteCredGuardSupplementalCredsFn* GetRemoteCredGuardSupplementalCreds;
+    /* Packages with version SECPKG_INTERFACE_VERSION_8 end here */
 } SECPKG_FUNCTION_TABLE,
  *PSECPKG_FUNCTION_TABLE;
 
-- 
2.24.0




More information about the wine-devel mailing list