SECURITY_STATUS SEC_ENTRY thunk_SetContextAttributesW(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer, ULONG cbBuffer) { SECURITY_STATUS ret; TRACE("%p %d %p %d\n", phContext, ulAttribute, pBuffer, cbBuffer); if (phContext) { SecurePackage *package = (SecurePackage *)phContext->dwUpper; PCtxtHandle ctxt = (PCtxtHandle)phContext->dwLower; if (package && package->provider && pBuffer && cbBuffer) { if (package->provider->fnTableA.SetContextAttributesA) { /* TODO: gotta validate size too! */ ret = thunk_ContextAttributesAToW(package, ulAttribute, pBuffer); if (ret == SEC_E_OK) ret = package->provider->fnTableA.SetContextAttributesA( ctxt, ulAttribute, pBuffer, cbBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; } else ret = SEC_E_INVALID_HANDLE; } else ret = SEC_E_INVALID_HANDLE; return ret; }
SECURITY_STATUS SEC_ENTRY thunk_QueryContextAttributesW(PCtxtHandle phContext, unsigned long ulAttribute, void *pBuffer) { SECURITY_STATUS ret; TRACE("%p %ld %p\n", phContext, ulAttribute, pBuffer); 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); if (ret == SEC_E_OK) ret = thunk_ContextAttributesAToW(package, ulAttribute, pBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; } else ret = SEC_E_INVALID_HANDLE; } else ret = SEC_E_INVALID_HANDLE; return ret; }