//+-----------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) Microsoft Corporation 1991 - 1998
//
// File:        secext.h
//
// Contents:    Security function prototypes for functions not part of
//              the security support provider interface (secsuppr.h)
//
//
// History:     22 Dec 92   RichardW    Created
//
//------------------------------------------------------------------------

#ifndef __SECEXT_H__
#define __SECEXT_H__


typedef struct _SecurityUserData {
    SECURITY_STRING UserName;           // User name
    SECURITY_STRING LogonDomainName;    // Domain the user logged on to
    SECURITY_STRING LogonServer;        // Server that logged the user on
    PSID            pSid;               // SID of user
} SecurityUserData, * PSecurityUserData;

#define UNDERSTANDS_LONG_NAMES  1
#define NO_LONG_NAMES           2


HRESULT SEC_ENTRY
GetSecurityUserInfo(
    IN PLUID LogonId,
    IN ULONG Flags,
    OUT PSecurityUserData * UserInformation
    );



SECURITY_STATUS SEC_ENTRY
IsLogonOkay(unsigned long   fBlock);



//
// Credential Management types and APIs
//

//
// SaveCredentials
//

SECURITY_STATUS SEC_ENTRY
SaveCredentials (
    PCredHandle     pCredHandle,
    unsigned long   cbCredentials,
    unsigned char * pbCredentials
    );


//
// GetCredentials
//

SECURITY_STATUS SEC_ENTRY
GetCredentials (
    PCredHandle      pCredHandle,
    unsigned long *  pcbCredentials,
    unsigned char *  ppbCredentials
    );


//
// DeleteCredentials
//

SECURITY_STATUS SEC_ENTRY
DeleteCredentials (
    PCredHandle      pCredHandle,
    unsigned long    cbKey,
    unsigned char *  pbKey
    );


//
// FormatCredentials
//

SECURITY_STATUS SEC_ENTRY
FormatCredentials(
    LPWSTR          pszPackageName,
    ULONG           cbCredentials,
    PUCHAR          pbCredentials,
    PULONG          pcbFormattedCreds,
    PUCHAR *        ppbFormattedCreds);

typedef enum _SecStateDelta {
    SecStateStatic,             // The state is not changing
    SecStateChange,             // Req:  change state
    SecStateComplete,           // Req:  complete state change
    SecStateAbort,              // Req:  abort state change (revert)
    SecStateChanging            // The state is changing
} SecStateDelta, * PSecStateDelta;

typedef enum _SecState {
    SecStateStandalone,         // Not connected to a domain
    SecStateDisconnected,       // Joined, but no active connection
    SecStateJoined,             // Joined, active connection
    SecStateDC                  // Domain controller
} SecurityState, * PSecurityState;

SECURITY_STATUS SEC_ENTRY
SecChangeState(
    PWSTR           pszDomainName,  // Domain (for SecStateDelta)
    SecStateDelta   StateChange,    // State change type
    SecurityState   State);         // State type

SECURITY_STATUS SEC_ENTRY
SecQueryState(
    PSecurityState  pState,
    PSecStateDelta  pStateChange);

#define SECURITY_CONTROL_NAME                       L"SPMgr"
#define SECURITY_CONTROL_REFRESH                    100
#define SECURITY_CONTROL_UPDATE_MACHINE_JP_PROPS    101
#define SECURITY_CONTROL_RELOAD_LOCAL_POLICY        102



//
// this should map a SECURITY_STATUS to an NTSTATUS, but there is
// no guarantee that NTSTATUS is defined. MMS 10/38/94
//

SECURITY_STATUS SEC_ENTRY
MapSecurityError( SECURITY_STATUS hrValue );


#endif // __SECEXT_H__
