/*++ Copyright (C) 1996-2001 Microsoft Corporation Module Name: CSSPI.H Abstract: SSPI wrapper implementation History: raymcc 15-Jul-97 Created --*/ #ifndef _CSSPI_H_ #define _CSSPI_H_ #define SECURITY_WIN32 //#include "corepol.h" extern "C" { #include }; class CSSPIClient; class CSSPIServer; //*************************************************************************** // // CSSPI is the basic 'utility' class. // //*************************************************************************** class CSSPI { static ULONG m_uNumPackages; static PSecPkgInfo m_pEnumPkgInfo; public: enum { NoError, InvalidPackage, Idle, Busy, Failed, Continue }; static PSecurityFunctionTable pVtbl; // Used by client classes to access the SSPI v-table. static BOOL Initialize(); // Called by all clients to initialize SSPI. // Helpers. // ======== static const LPTSTR TranslateError( ULONG uCode ); static void DisplayContextAttributes( ULONG uAttrib ); static void DisplayPkgInfo( PSecPkgInfo pPkg ); // To enumerate through the packages. // ================================== static ULONG GetNumPkgs(); // Returns 0 if none available or an error occurred. static const PSecPkgInfo GetPkgInfo(ULONG lPkgNum); // Returns NULL on error static BOOL DumpSecurityPackages(); // Debug dump of packages // Query for support // ================= static BOOL ServerSupport(LPTSTR pszPkgName); static BOOL ClientSupport(LPTSTR pszPkgName); }; //*************************************************************************** // // CSSPIClient // // Used for client-side authentication. // //*************************************************************************** class CSSPIClient { DWORD m_dwStatus; ULONG m_cbMaxToken; PSecPkgInfo m_pPkgInfo; LPTSTR m_pszPkgName; BOOL m_bValidCredHandle; CredHandle m_ClientCredential; CtxtHandle m_ClientContext; BOOL m_bValidContextHandle; public: enum { NoError = 0, LoginCompleted, LoginContinue, InvalidUser, InternalError, AccessDenied = 5, // don't change InvalidPackage, Waiting, InvalidParameter, LoginCompleteNeeded, LoginCompleteAndContinue, Failed }; CSSPIClient(LPTSTR pszPkgName); ~CSSPIClient(); DWORD GetStatus() { return m_dwStatus; } ULONG MaxTokenSize() { return m_cbMaxToken; } DWORD SetLoginInfo( IN LPTSTR pszUser, IN LPTSTR pszDomain, IN LPTSTR pszPassword, IN DWORD dwFlags = 0 ); // Returns LoginContinue, AccessDenied, InvalidUser, InternalError // InvalidParameter DWORD SetDefaultLogin(DWORD dwFlags = 0); DWORD ContinueLogin( IN LPBYTE pInToken, IN DWORD dwInTokenSize, OUT LPBYTE *pToken, OUT DWORD *pdwTokenSize ); // Returns LoginContinue, LoginCompleted, AccessDenied, InternalError DWORD BuildLoginToken( OUT LPBYTE *pToken, OUT DWORD *pdwToken ); }; //*************************************************************************** // // CSSPIClient // // Used for client-side authentication. // //*************************************************************************** class CSSPIServer { DWORD m_dwStatus; ULONG m_cbMaxToken; PSecPkgInfo m_pPkgInfo; LPTSTR m_pszPkgName; CredHandle m_ServerCredential; BOOL m_bValidCredHandle; CtxtHandle m_ServerContext; BOOL m_bValidContextHandle; public: enum { NoError = 0, LoginCompleted, InvalidPackage, Failed, Waiting, AccessDenied = 5, // don't change LoginCompleteNeeded, LoginCompleteAndContinue, LoginContinue }; CSSPIServer(LPTSTR pszPkgName); ~CSSPIServer(); DWORD GetStatus() { return m_dwStatus; } ULONG MaxTokenSize() { return m_cbMaxToken; } DWORD ContinueClientLogin( IN LPBYTE pInToken, IN DWORD dwInTokenSize, OUT LPBYTE *pToken, OUT DWORD *pdwTokenSize ); DWORD IssueLoginToken( OUT CLSID &ClsId ); BOOL QueryUserInfo( OUT LPTSTR *pszUser // Use operator delete ); }; #endif