windows-nt/Source/XPSP1/NT/ds/security/base/lsa/server/credp.hxx

347 lines
6.2 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
credp.hxx
Abstract:
Credential Manager private interfaces
Author:
Cliff Van Dyke (CliffV)
Environment:
Revision History:
--*/
#ifndef _CREDP_HXX_
#define _CREDP_HXX_
#ifdef __cplusplus
extern "C" {
#endif
//
// Structure describing a set of credentials.
//
typedef struct _CREDENTIAL_SET {
//
// Number of references to the credential set.
// Access serialized by CredentialSetListLock
//
LONG ReferenceCount;
//
// List of credentials for this credential set.
// Access serialized by UserCredentialSets->CritSect
//
LIST_ENTRY Credentials;
//
// Flag indicating the credential set has been read from disk
// Access serialized by UserCredentialSets->CritSect
//
BOOLEAN FileRead;
//
// Flag indicating if the credential set is dirty
// Access serialized by UserCredentialSets->CritSect
//
BOOLEAN Dirty;
//
// Flag indicating a thread is already writing the credential set.
// Access serialized by UserCredentialSets->CritSect
//
BOOLEAN BeingWritten;
//
// Count of times cred set has been marked dirty.
// Access serialized by UserCredentialSets->CritSect
//
ULONG WriteCount;
} CREDENTIAL_SET, *PCREDENTIAL_SET;
//
// Structure describing a set of credential sets specific to a particular user
//
typedef struct _USER_CREDENTIAL_SETS {
//
// Link to next entry in the global list of all user credential sets (CredentialSetList).
// Access serialized by CredentialSetListLock
//
LIST_ENTRY Next;
//
// Number of references to the credential set.
// Access serialized by CredentialSetListLock
//
LONG ReferenceCount;
//
// The credential set replicated enterprise wide.
//
PCREDENTIAL_SET EnterpriseCredSet;
//
// The credential set specific to this machine
//
PCREDENTIAL_SET LocalMachineCredSet;
//
// Sid of the user owning this credential set.
// Access not serialized. This field is constant.
//
PSID UserSid;
//
// Critical Section to serialize access to credentials
//
RTL_CRITICAL_SECTION CritSect;
} USER_CREDENTIAL_SETS, *PUSER_CREDENTIAL_SETS;
//
// Structure describing a set of credential sets specific to a particular session
//
typedef struct _SESSION_CREDENTIAL_SETS {
//
// Number of references to the session credential sets.
// Access serialized by CredentialSetListLock
//
LONG ReferenceCount;
//
// The credential set specific to this session.
//
PCREDENTIAL_SET SessionCredSet;
//
// List of the PROMPT_DATA for session specific and non-session specific credentials
//
LIST_ENTRY PromptData;
//
// Cache of target infos
//
#define CRED_TARGET_INFO_HASH_TABLE_SIZE 16
LIST_ENTRY TargetInfoHashTable[ CRED_TARGET_INFO_HASH_TABLE_SIZE ];
LIST_ENTRY TargetInfoLruList;
// Number of entries in TargetInfoHashTable and TargetInfoLruList
ULONG TargetInfoCount;
//
// Flag indicating that the profile containing the credential set
// has been loaded.
//
BOOLEAN ProfileLoaded;
} SESSION_CREDENTIAL_SETS, *PSESSION_CREDENTIAL_SETS;
//
// Structure describing all of the credential sets for a logon session
//
typedef struct _CREDENTIAL_SETS {
//
// Credential sets shared by all logon sessions for this user.
//
PUSER_CREDENTIAL_SETS UserCredentialSets;
//
// Credential sets specific to this logon session
//
PSESSION_CREDENTIAL_SETS SessionCredSets;
//
// Attributes of the credential set
//
ULONG Flags;
#define CREDSETS_FLAGS_LOCAL_ACCOUNT 0x01 // User is logged onto a local account
} CREDENTIAL_SETS, *PCREDENTIAL_SETS;
//
// Functions
//
NTSTATUS
CrediWrite(
IN PLUID LogonId,
IN ULONG CredFlags,
IN PENCRYPTED_CREDENTIALW Credential,
IN ULONG Flags
);
NTSTATUS
CrediRead (
IN PLUID LogonId,
IN ULONG CredFlags,
IN LPWSTR TargetName,
IN ULONG Type,
IN ULONG Flags,
OUT PENCRYPTED_CREDENTIALW *Credential
);
NTSTATUS
CrediEnumerate (
IN PLUID LogonId,
IN ULONG CredFlags,
IN LPWSTR Filter,
IN ULONG Flags,
OUT PULONG Count,
OUT PENCRYPTED_CREDENTIALW **Credential
);
NTSTATUS
CrediWriteDomainCredentials (
IN PLUID LogonId,
IN ULONG CredFlags,
IN PCREDENTIAL_TARGET_INFORMATIONW TargetInfo,
IN PENCRYPTED_CREDENTIALW Credential,
IN ULONG Flags
);
NTSTATUS
CrediReadDomainCredentials (
IN PLUID LogonId,
IN ULONG CredFlags,
IN PCREDENTIAL_TARGET_INFORMATIONW TargetInfo,
IN ULONG Flags,
OUT PULONG Count,
OUT PENCRYPTED_CREDENTIALW **Credential
);
VOID
CrediFreeCredentials (
IN ULONG Count,
IN PENCRYPTED_CREDENTIALW *Credentials OPTIONAL
);
NTSTATUS
CrediDelete (
IN PLUID LogonId,
IN ULONG CredFlags,
IN LPWSTR TargetName,
IN ULONG Type,
IN ULONG Flags
);
NTSTATUS
CrediRename (
IN PLUID LogonId,
IN LPWSTR OldTargetName,
IN LPWSTR NewTargetName,
IN ULONG Type,
IN ULONG Flags
);
NTSTATUS
CrediGetTargetInfo (
IN PLUID LogonId,
IN LPWSTR TargetServerName,
IN ULONG Flags,
OUT PCREDENTIAL_TARGET_INFORMATIONW *TargetInfo
);
NTSTATUS
CrediGetSessionTypes (
IN PLUID LogonId,
IN DWORD MaximumPersistCount,
OUT LPDWORD MaximumPersist
);
NTSTATUS
CrediProfileLoaded (
IN PLUID LogonId
);
NTSTATUS
CredpInitialize(
VOID
);
NTSTATUS
CredpCreateCredSets(
IN PSID UserSid,
IN PUNICODE_STRING NetbiosDomainName,
OUT PCREDENTIAL_SETS CredentialSets
);
VOID
CredpDereferenceCredSets(
IN PCREDENTIAL_SETS CredentialSets
);
VOID
CredpNotifyPasswordChange(
IN PUNICODE_STRING NetbiosDomainName,
IN PUNICODE_STRING UserName,
IN PUNICODE_STRING DnsDomainName OPTIONAL,
IN PUNICODE_STRING Upn OPTIONAL,
IN PUNICODE_STRING NewPassword
);
VOID
LsaProtectMemory(
VOID *pData,
ULONG cbData
);
VOID
LsaUnprotectMemory(
VOID *pData,
ULONG cbData
);
#ifdef __cplusplus
} // extern C
#endif
#endif // _CREDP_HXX_