Signed-off-by: Sven Baars sven.wine@gmail.com --- dlls/d3dcompiler_43/tests/reflection.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/d3dcompiler_43/tests/reflection.c b/dlls/d3dcompiler_43/tests/reflection.c index f8c97230d6..dc854ea47d 100644 --- a/dlls/d3dcompiler_43/tests/reflection.c +++ b/dlls/d3dcompiler_43/tests/reflection.c @@ -740,8 +740,10 @@ static void test_reflection_desc_ps(void) i, desc.Mask, pdesc->Mask); ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "GetInputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n", i, desc.ReadWriteMask, pdesc->ReadWriteMask); +#if D3D_COMPILER_VERSION ok(desc.Stream == pdesc->Stream, "GetInputParameterDesc(%u) Stream failed, got %u, expected %u\n", i, desc.Stream, pdesc->Stream); +#endif }
for (i = 0; i < ARRAY_SIZE(test_reflection_desc_ps_resultout); ++i)
Signed-off-by: Sven Baars sven.wine@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;
Signed-off-by: Sven Baars sven.wine@gmail.com --- v2: Was previously part of the previous patch.
dlls/schannel/tests/main.c | 43 +++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-)
diff --git a/dlls/schannel/tests/main.c b/dlls/schannel/tests/main.c index 81a723c799..e945770d68 100644 --- a/dlls/schannel/tests/main.c +++ b/dlls/schannel/tests/main.c @@ -141,6 +141,7 @@ static void testInitialize(void) static PSECPKG_FUNCTION_TABLE getNextSecPkgTable(PSECPKG_FUNCTION_TABLE pTable, ULONG Version) { + int detectedVersion = 0; size_t size; PSECPKG_FUNCTION_TABLE pNextTable;
@@ -166,15 +167,41 @@ static PSECPKG_FUNCTION_TABLE getNextSecPkgTable(PSECPKG_FUNCTION_TABLE pTable, }
pNextTable = (PSECPKG_FUNCTION_TABLE)((PBYTE)pTable + size); - /* Win7 function tables appear to be SECPKG_INTERFACE_VERSION_6 format, - but unfortunately SpLsaModeInitialize returns SECPKG_INTERFACE_VERSION_3. - We detect that by comparing the "Initialize" pointer from the old table - to the "FreeCredentialsHandle" pointer of the new table. These functions - have different numbers of arguments, so they can't possibly point to the - same implementation */ - if (broken((void *) pTable->Initialize == (void *) pNextTable->FreeCredentialsHandle && - pNextTable->FreeCredentialsHandle != NULL)) + + /* For any version of Windows beyond Vista SpLsaModeInitialize returns + SECPKG_INTERFACE_VERSION_3, so try detecting the actual version here + by iterating until we find the Intitalize function */ + if (broken((void *) pTable->Initialize != (void *) pNextTable->Initialize && + pTable->Initialize != NULL)) { + for (size = 1; size <= SECPKG_FUNCTION_TABLE_SIZE_8; size++) + { + pNextTable = (PSECPKG_FUNCTION_TABLE)((PBYTE)pTable + size); + if ((void *) pTable->Initialize == (void *) pNextTable->Initialize) + { + if (size == SECPKG_FUNCTION_TABLE_SIZE_1) + detectedVersion = 1; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_2) + detectedVersion = 2; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_3) + detectedVersion = 3; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_4) + detectedVersion = 4; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_5) + detectedVersion = 5; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_6) + detectedVersion = 6; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_7) + detectedVersion = 7; + else if (size == SECPKG_FUNCTION_TABLE_SIZE_8) + detectedVersion = 8; + else + trace("Unknown package version with size %zu\n", size); + if (detectedVersion > 0) + trace("Detected SECPKG_INTERFACE_VERSION_%d\n", detectedVersion); + return pNextTable; + } + } win_skip("Invalid function pointers for next package\n"); return NULL; }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=60984
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
On 28-11-2019 00:11, Marvin wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=60984
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/d3dcompiler_43/tests/reflection.c:740 Task: Patch failed to apply
I'll send it again tomorrow when the testbot has been updated. Unless it has been rejected before that of course.