Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/secur32/wrapper.c | 292 ++++++++--------------------------------- 1 file changed, 52 insertions(+), 240 deletions(-)
diff --git a/dlls/secur32/wrapper.c b/dlls/secur32/wrapper.c index 4748de83d4f..e4475069b86 100644 --- a/dlls/secur32/wrapper.c +++ b/dlls/secur32/wrapper.c @@ -30,34 +30,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(secur32);
-/* Tries to allocate a new SecHandle, into which it stores package (in - * phSec->dwUpper) and a copy of realHandle (stored in phSec->dwLower). - * SecHandle is equivalent to both a CredHandle and a CtxtHandle. - */ -static SECURITY_STATUS make_sec_handle(PSecHandle phSec, SecurePackage *package, PSecHandle realHandle) -{ - SECURITY_STATUS ret; - - TRACE("%p %p %p\n", phSec, package, realHandle); - - if (phSec && package && realHandle) - { - PSecHandle newSec = malloc(sizeof(*newSec)); - if (newSec) - { - *newSec = *realHandle; - phSec->dwUpper = (ULONG_PTR)package; - phSec->dwLower = (ULONG_PTR)newSec; - ret = SEC_E_OK; - } - else - ret = SEC_E_INSUFFICIENT_MEMORY; - } - else - ret = SEC_E_INVALID_HANDLE; - return ret; -} - /*********************************************************************** * AcquireCredentialsHandleA (SECUR32.@) */ @@ -74,24 +46,16 @@ SECURITY_STATUS WINAPI AcquireCredentialsHandleA( if (pszPackage) { SecurePackage *package = SECUR32_findPackageA(pszPackage); - if (package && package->provider) { if (package->provider->fnTableA.AcquireCredentialsHandleA) { - CredHandle myCred; - ret = package->provider->fnTableA.AcquireCredentialsHandleA( pszPrincipal, pszPackage, fCredentialsUse, pvLogonID, - pAuthData, pGetKeyFn, pvGetKeyArgument, &myCred, + pAuthData, pGetKeyFn, pvGetKeyArgument, phCredential, ptsExpiry); if (ret == SEC_E_OK) - { - ret = make_sec_handle(phCredential, package, &myCred); - if (ret != SEC_E_OK) - package->provider->fnTableW.FreeCredentialsHandle( - &myCred); - } + phCredential->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -120,24 +84,16 @@ SECURITY_STATUS WINAPI AcquireCredentialsHandleW( if (pszPackage) { SecurePackage *package = SECUR32_findPackageW(pszPackage); - if (package && package->provider) { if (package->provider->fnTableW.AcquireCredentialsHandleW) { - CredHandle myCred; - ret = package->provider->fnTableW.AcquireCredentialsHandleW( pszPrincipal, pszPackage, fCredentialsUse, pvLogonID, - pAuthData, pGetKeyFn, pvGetKeyArgument, &myCred, + pAuthData, pGetKeyFn, pvGetKeyArgument, phCredential, ptsExpiry); if (ret == SEC_E_OK) - { - ret = make_sec_handle(phCredential, package, &myCred); - if (ret != SEC_E_OK) - package->provider->fnTableW.FreeCredentialsHandle( - &myCred); - } + phCredential->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -162,14 +118,10 @@ SECURITY_STATUS WINAPI FreeCredentialsHandle( if (phCredential) { SecurePackage *package = (SecurePackage *)phCredential->dwUpper; - PCredHandle cred = (PCredHandle)phCredential->dwLower; - - if (package && package->provider && - package->provider->fnTableW.FreeCredentialsHandle) - ret = package->provider->fnTableW.FreeCredentialsHandle(cred); + if (package && package->provider && package->provider->fnTableW.FreeCredentialsHandle) + ret = package->provider->fnTableW.FreeCredentialsHandle(phCredential); else ret = SEC_E_INVALID_HANDLE; - free(cred); } else ret = SEC_E_INVALID_HANDLE; @@ -188,13 +140,11 @@ SECURITY_STATUS WINAPI QueryCredentialsAttributesA( if (phCredential) { SecurePackage *package = (SecurePackage *)phCredential->dwUpper; - PCredHandle cred = (PCredHandle)phCredential->dwLower; - if (package && package->provider) { if (package->provider->fnTableA.QueryCredentialsAttributesA) ret = package->provider->fnTableA.QueryCredentialsAttributesA( - cred, ulAttribute, pBuffer); + phCredential, ulAttribute, pBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -218,13 +168,10 @@ SECURITY_STATUS WINAPI QueryCredentialsAttributesW( if (phCredential) { SecurePackage *package = (SecurePackage *)phCredential->dwUpper; - PCredHandle cred = (PCredHandle)phCredential->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.QueryCredentialsAttributesW) - ret = package->provider->fnTableW.QueryCredentialsAttributesW( - cred, ulAttribute, pBuffer); + ret = package->provider->fnTableW.QueryCredentialsAttributesW(phCredential, ulAttribute, pBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -248,49 +195,24 @@ SECURITY_STATUS WINAPI InitializeSecurityContextA( { SECURITY_STATUS ret; SecurePackage *package = NULL; - PCredHandle cred = NULL; - PCredHandle ctxt = NULL;
TRACE("%p %p %s 0x%08x %d %d %p %d %p %p %p %p\n", phCredential, phContext, debugstr_a(pszTargetName), fContextReq, Reserved1, TargetDataRep, pInput, Reserved1, phNewContext, pOutput, pfContextAttr, ptsExpiry);
- if (phContext) - { - package = (SecurePackage *)phContext->dwUpper; - ctxt = (PCtxtHandle)phContext->dwLower; - } - if (phCredential) - { - package = (SecurePackage *)phCredential->dwUpper; - cred = (PCredHandle)phCredential->dwLower; - } + if (phContext) package = (SecurePackage *)phContext->dwUpper; + else if (phCredential) package = (SecurePackage *)phCredential->dwUpper;
if (package && package->provider) { if (package->provider->fnTableA.InitializeSecurityContextA) { - CtxtHandle myCtxt; - - if (phContext) - { - PCtxtHandle realCtxt = (PCtxtHandle)phContext->dwLower; - myCtxt.dwUpper = realCtxt->dwUpper; - myCtxt.dwLower = realCtxt->dwLower; - } - ret = package->provider->fnTableA.InitializeSecurityContextA( - cred, ctxt, pszTargetName, fContextReq, - Reserved1, TargetDataRep, pInput, Reserved2, phNewContext ? &myCtxt : NULL, + phCredential, phContext, pszTargetName, fContextReq, + Reserved1, TargetDataRep, pInput, Reserved2, phNewContext, pOutput, pfContextAttr, ptsExpiry); - if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && - phNewContext && phNewContext != phContext) - { - SECURITY_STATUS ret2; - ret2 = make_sec_handle(phNewContext, package, &myCtxt); - if (ret2 != SEC_E_OK) - package->provider->fnTableA.DeleteSecurityContext(&myCtxt); - } + if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && phNewContext) + phNewContext->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -312,49 +234,24 @@ SECURITY_STATUS WINAPI InitializeSecurityContextW( { SECURITY_STATUS ret; SecurePackage *package = NULL; - PCredHandle cred = NULL; - PCredHandle ctxt = NULL;
TRACE("%p %p %s 0x%08x %d %d %p %d %p %p %p %p\n", phCredential, phContext, debugstr_w(pszTargetName), fContextReq, Reserved1, TargetDataRep, pInput, Reserved1, phNewContext, pOutput, pfContextAttr, ptsExpiry);
- if (phContext) - { - package = (SecurePackage *)phContext->dwUpper; - ctxt = (PCtxtHandle)phContext->dwLower; - } - if (phCredential) - { - package = (SecurePackage *)phCredential->dwUpper; - cred = (PCredHandle)phCredential->dwLower; - } + if (phContext) package = (SecurePackage *)phContext->dwUpper; + else if (phCredential) package = (SecurePackage *)phCredential->dwUpper;
if (package && package->provider) { if (package->provider->fnTableW.InitializeSecurityContextW) { - CtxtHandle myCtxt; - - if (phContext) - { - PCtxtHandle realCtxt = (PCtxtHandle)phContext->dwLower; - myCtxt.dwUpper = realCtxt->dwUpper; - myCtxt.dwLower = realCtxt->dwLower; - } - ret = package->provider->fnTableW.InitializeSecurityContextW( - cred, ctxt, pszTargetName, fContextReq, - Reserved1, TargetDataRep, pInput, Reserved2, phNewContext ? &myCtxt : NULL, + phCredential, phContext, pszTargetName, fContextReq, + Reserved1, TargetDataRep, pInput, Reserved2, phNewContext, pOutput, pfContextAttr, ptsExpiry); - if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && - phNewContext && phNewContext != phContext) - { - SECURITY_STATUS ret2; - ret2 = make_sec_handle(phNewContext, package, &myCtxt); - if (ret2 != SEC_E_OK) - package->provider->fnTableW.DeleteSecurityContext(&myCtxt); - } + if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && phNewContext) + phNewContext->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -380,34 +277,15 @@ SECURITY_STATUS WINAPI AcceptSecurityContext( if (phCredential) { SecurePackage *package = (SecurePackage *)phCredential->dwUpper; - PCredHandle cred = (PCredHandle)phCredential->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.AcceptSecurityContext) { - CtxtHandle myCtxt; - - if(phContext) - { - PCtxtHandle realCtxt = (PCtxtHandle)phContext->dwLower; - TRACE("realCtx: %p\n", realCtxt); - myCtxt.dwUpper = realCtxt->dwUpper; - myCtxt.dwLower = realCtxt->dwLower; - } - ret = package->provider->fnTableW.AcceptSecurityContext( - cred, phContext ? &myCtxt : NULL, pInput, fContextReq, - TargetDataRep, &myCtxt, pOutput, pfContextAttr, ptsExpiry); - if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && - phNewContext && phNewContext != phContext) - { - SECURITY_STATUS ret2; - ret2 = make_sec_handle(phNewContext, package, &myCtxt); - if (ret2 != SEC_E_OK) - package->provider->fnTableW.DeleteSecurityContext( - &myCtxt); - } + phCredential, phContext, pInput, fContextReq, + TargetDataRep, phNewContext, pOutput, pfContextAttr, ptsExpiry); + if ((ret == SEC_E_OK || ret == SEC_I_CONTINUE_NEEDED) && phNewContext) + phNewContext->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -432,13 +310,10 @@ SECURITY_STATUS WINAPI CompleteAuthToken(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.CompleteAuthToken) - ret = package->provider->fnTableW.CompleteAuthToken(ctxt, - pToken); + ret = package->provider->fnTableW.CompleteAuthToken(phContext, pToken); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -461,14 +336,10 @@ SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext) if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - - if (package && package->provider && - package->provider->fnTableW.DeleteSecurityContext) - ret = package->provider->fnTableW.DeleteSecurityContext(ctxt); + if (package && package->provider && package->provider->fnTableW.DeleteSecurityContext) + ret = package->provider->fnTableW.DeleteSecurityContext(phContext); else ret = SEC_E_INVALID_HANDLE; - free(ctxt); } else ret = SEC_E_INVALID_HANDLE; @@ -487,13 +358,10 @@ SECURITY_STATUS WINAPI ApplyControlToken(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.ApplyControlToken) - ret = package->provider->fnTableW.ApplyControlToken( - ctxt, pInput); + ret = package->provider->fnTableW.ApplyControlToken(phContext, pInput); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -517,13 +385,10 @@ SECURITY_STATUS WINAPI QueryContextAttributesA(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableA.QueryContextAttributesA) - ret = package->provider->fnTableA.QueryContextAttributesA( - ctxt, ulAttribute, pBuffer); + ret = package->provider->fnTableA.QueryContextAttributesA(phContext, ulAttribute, pBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -547,13 +412,10 @@ SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.QueryContextAttributesW) - ret = package->provider->fnTableW.QueryContextAttributesW( - ctxt, ulAttribute, pBuffer); + ret = package->provider->fnTableW.QueryContextAttributesW(phContext, ulAttribute, pBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -576,13 +438,10 @@ SECURITY_STATUS WINAPI ImpersonateSecurityContext(PCtxtHandle phContext) if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.ImpersonateSecurityContext) - ret = package->provider->fnTableW.ImpersonateSecurityContext( - ctxt); + ret = package->provider->fnTableW.ImpersonateSecurityContext(phContext); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -605,13 +464,10 @@ SECURITY_STATUS WINAPI RevertSecurityContext(PCtxtHandle phContext) if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.RevertSecurityContext) - ret = package->provider->fnTableW.RevertSecurityContext( - ctxt); + ret = package->provider->fnTableW.RevertSecurityContext(phContext); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -635,13 +491,10 @@ SECURITY_STATUS WINAPI MakeSignature(PCtxtHandle phContext, ULONG fQOP, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.MakeSignature) - ret = package->provider->fnTableW.MakeSignature( - ctxt, fQOP, pMessage, MessageSeqNo); + ret = package->provider->fnTableW.MakeSignature(phContext, fQOP, pMessage, MessageSeqNo); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -665,13 +518,10 @@ SECURITY_STATUS WINAPI VerifySignature(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.VerifySignature) - ret = package->provider->fnTableW.VerifySignature( - ctxt, pMessage, MessageSeqNo, pfQOP); + ret = package->provider->fnTableW.VerifySignature(phContext, pMessage, MessageSeqNo, pfQOP); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -819,13 +669,10 @@ SECURITY_STATUS WINAPI ExportSecurityContext(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.ExportSecurityContext) - ret = package->provider->fnTableW.ExportSecurityContext( - ctxt, fFlags, pPackedContext, pToken); + ret = package->provider->fnTableW.ExportSecurityContext(phContext, fFlags, pPackedContext, pToken); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -846,22 +693,14 @@ SECURITY_STATUS WINAPI ImportSecurityContextA(SEC_CHAR *pszPackage, SECURITY_STATUS ret; SecurePackage *package = SECUR32_findPackageA(pszPackage);
- TRACE("%s %p %p %p\n", debugstr_a(pszPackage), pPackedContext, Token, - phContext); + TRACE("%s %p %p %p\n", debugstr_a(pszPackage), pPackedContext, Token, phContext); if (package && package->provider) { if (package->provider->fnTableA.ImportSecurityContextA) { - CtxtHandle myCtxt; - - ret = package->provider->fnTableA.ImportSecurityContextA( - pszPackage, pPackedContext, Token, &myCtxt); + ret = package->provider->fnTableA.ImportSecurityContextA(pszPackage, pPackedContext, Token, phContext); if (ret == SEC_E_OK) - { - ret = make_sec_handle(phContext, package, &myCtxt); - if (ret != SEC_E_OK) - package->provider->fnTableW.DeleteSecurityContext(&myCtxt); - } + phContext->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -881,22 +720,14 @@ SECURITY_STATUS WINAPI ImportSecurityContextW(SEC_WCHAR *pszPackage, SECURITY_STATUS ret; SecurePackage *package = SECUR32_findPackageW(pszPackage);
- TRACE("%s %p %p %p\n", debugstr_w(pszPackage), pPackedContext, Token, - phContext); + TRACE("%s %p %p %p\n", debugstr_w(pszPackage), pPackedContext, Token, phContext); if (package && package->provider) { if (package->provider->fnTableW.ImportSecurityContextW) { - CtxtHandle myCtxt; - - ret = package->provider->fnTableW.ImportSecurityContextW( - pszPackage, pPackedContext, Token, &myCtxt); + ret = package->provider->fnTableW.ImportSecurityContextW(pszPackage, pPackedContext, Token, phContext); if (ret == SEC_E_OK) - { - ret = make_sec_handle(phContext, package, &myCtxt); - if (ret != SEC_E_OK) - package->provider->fnTableW.DeleteSecurityContext(&myCtxt); - } + phContext->dwUpper = (ULONG_PTR)package; } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -922,14 +753,12 @@ SECURITY_STATUS WINAPI AddCredentialsA(PCredHandle hCredentials, if (hCredentials) { SecurePackage *package = (SecurePackage *)hCredentials->dwUpper; - PCredHandle cred = (PCtxtHandle)hCredentials->dwLower; - if (package && package->provider) { if (package->provider->fnTableA.AddCredentialsA) - ret = package->provider->fnTableA.AddCredentialsA( - cred, pszPrincipal, pszPackage, fCredentialUse, pAuthData, - pGetKeyFn, pvGetKeyArgument, ptsExpiry); + ret = package->provider->fnTableA.AddCredentialsA(hCredentials, pszPrincipal, pszPackage, + fCredentialUse, pAuthData, pGetKeyFn, + pvGetKeyArgument, ptsExpiry); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -957,14 +786,12 @@ SECURITY_STATUS WINAPI AddCredentialsW(PCredHandle hCredentials, if (hCredentials) { SecurePackage *package = (SecurePackage *)hCredentials->dwUpper; - PCredHandle cred = (PCtxtHandle)hCredentials->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.AddCredentialsW) - ret = package->provider->fnTableW.AddCredentialsW( - cred, pszPrincipal, pszPackage, fCredentialUse, pAuthData, - pGetKeyFn, pvGetKeyArgument, ptsExpiry); + ret = package->provider->fnTableW.AddCredentialsW(hCredentials, pszPrincipal, pszPackage, + fCredentialUse, pAuthData, pGetKeyFn, + pvGetKeyArgument, ptsExpiry); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -988,13 +815,10 @@ SECURITY_STATUS WINAPI QuerySecurityContextToken(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.QuerySecurityContextToken) - ret = package->provider->fnTableW.QuerySecurityContextToken( - ctxt, phToken); + ret = package->provider->fnTableW.QuerySecurityContextToken(phContext, phToken); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -1018,13 +842,10 @@ SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle phContext, ULONG fQOP, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.EncryptMessage) - ret = package->provider->fnTableW.EncryptMessage( - ctxt, fQOP, pMessage, MessageSeqNo); + ret = package->provider->fnTableW.EncryptMessage(phContext, fQOP, pMessage, MessageSeqNo); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -1048,13 +869,10 @@ SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.DecryptMessage) - ret = package->provider->fnTableW.DecryptMessage( - ctxt, pMessage, MessageSeqNo, pfQOP); + ret = package->provider->fnTableW.DecryptMessage(phContext, pMessage, MessageSeqNo, pfQOP); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -1078,13 +896,10 @@ SECURITY_STATUS WINAPI SetContextAttributesA(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableA.SetContextAttributesA) - ret = package->provider->fnTableA.SetContextAttributesA( - ctxt, ulAttribute, pBuffer, cbBuffer); + ret = package->provider->fnTableA.SetContextAttributesA(phContext, ulAttribute, pBuffer, cbBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; } @@ -1108,13 +923,10 @@ SECURITY_STATUS WINAPI SetContextAttributesW(PCtxtHandle phContext, if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; - PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; - if (package && package->provider) { if (package->provider->fnTableW.SetContextAttributesW) - ret = package->provider->fnTableW.SetContextAttributesW( - ctxt, ulAttribute, pBuffer, cbBuffer); + ret = package->provider->fnTableW.SetContextAttributesW(phContext, ulAttribute, pBuffer, cbBuffer); else ret = SEC_E_UNSUPPORTED_FUNCTION; }