347 lines
6.2 KiB
C++
347 lines
6.2 KiB
C++
|
/*++
|
||
|
|
||
|
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_
|