Blame winpr/include/winpr/credentials.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * WinPR: Windows Portable Runtime
Packit 1fb8d4
 * Credentials Management
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef WINPR_CREDENTIALS_H
Packit 1fb8d4
#define WINPR_CREDENTIALS_H
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/winpr.h>
Packit 1fb8d4
#include <winpr/wtypes.h>
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit 1fb8d4
#define CRED_SESSION_WILDCARD_NAME_W			L"*Session"
Packit 1fb8d4
#define CRED_SESSION_WILDCARD_NAME_A			"*Session"
Packit 1fb8d4
#define CRED_SESSION_WILDCARD_NAME_LENGTH		(sizeof(CRED_SESSION_WILDCARD_NAME_A) - 1)
Packit 1fb8d4
Packit 1fb8d4
#define CRED_MAX_STRING_LENGTH				256
Packit 1fb8d4
#define CRED_MAX_USERNAME_LENGTH			(256 + 1 + 256)
Packit 1fb8d4
#define CRED_MAX_GENERIC_TARGET_NAME_LENGTH		32767
Packit 1fb8d4
#define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH		(256 + 1 + 80)
Packit 1fb8d4
#define CRED_MAX_VALUE_SIZE				256
Packit 1fb8d4
#define CRED_MAX_ATTRIBUTES				64
Packit 1fb8d4
Packit 1fb8d4
#define CRED_FLAGS_PASSWORD_FOR_CERT			0x0001
Packit 1fb8d4
#define CRED_FLAGS_PROMPT_NOW				0x0002
Packit 1fb8d4
#define CRED_FLAGS_USERNAME_TARGET			0x0004
Packit 1fb8d4
#define CRED_FLAGS_OWF_CRED_BLOB			0x0008
Packit 1fb8d4
#define CRED_FLAGS_VALID_FLAGS				0x000F
Packit 1fb8d4
Packit 1fb8d4
#define CRED_TYPE_GENERIC				1
Packit 1fb8d4
#define CRED_TYPE_DOMAIN_PASSWORD			2
Packit 1fb8d4
#define CRED_TYPE_DOMAIN_CERTIFICATE			3
Packit 1fb8d4
#define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD		4
Packit 1fb8d4
#define CRED_TYPE_MAXIMUM				5
Packit 1fb8d4
#define CRED_TYPE_MAXIMUM_EX				(CRED_TYPE_MAXIMUM + 1000)
Packit 1fb8d4
Packit 1fb8d4
#define CRED_MAX_CREDENTIAL_BLOB_SIZE			512
Packit 1fb8d4
Packit 1fb8d4
#define CRED_PERSIST_NONE				0
Packit 1fb8d4
#define CRED_PERSIST_SESSION				1
Packit 1fb8d4
#define CRED_PERSIST_LOCAL_MACHINE			2
Packit 1fb8d4
#define CRED_PERSIST_ENTERPRISE				3
Packit 1fb8d4
Packit 1fb8d4
#define CRED_PRESERVE_CREDENTIAL_BLOB			0x1
Packit 1fb8d4
#define CRED_CACHE_TARGET_INFORMATION			0x1
Packit 1fb8d4
#define CRED_ALLOW_NAME_RESOLUTION			0x1
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIAL_ATTRIBUTEA
Packit 1fb8d4
{
Packit 1fb8d4
	LPSTR Keyword;
Packit 1fb8d4
	DWORD Flags;
Packit 1fb8d4
	DWORD ValueSize;
Packit 1fb8d4
	LPBYTE Value;
Packit 1fb8d4
} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIAL_ATTRIBUTEW
Packit 1fb8d4
{
Packit 1fb8d4
	LPWSTR Keyword;
Packit 1fb8d4
	DWORD Flags;
Packit 1fb8d4
	DWORD ValueSize;
Packit 1fb8d4
	LPBYTE Value;
Packit 1fb8d4
} CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIALA
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD Flags;
Packit 1fb8d4
	DWORD Type;
Packit 1fb8d4
	LPSTR TargetName;
Packit 1fb8d4
	LPSTR Comment;
Packit 1fb8d4
	FILETIME LastWritten;
Packit 1fb8d4
	DWORD CredentialBlobSize;
Packit 1fb8d4
	LPBYTE CredentialBlob;
Packit 1fb8d4
	DWORD Persist;
Packit 1fb8d4
	DWORD AttributeCount;
Packit 1fb8d4
	PCREDENTIAL_ATTRIBUTEA Attributes;
Packit 1fb8d4
	LPSTR TargetAlias;
Packit 1fb8d4
	LPSTR UserName;
Packit 1fb8d4
} CREDENTIALA, *PCREDENTIALA;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIALW
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD Flags;
Packit 1fb8d4
	DWORD Type;
Packit 1fb8d4
	LPWSTR TargetName;
Packit 1fb8d4
	LPWSTR Comment;
Packit 1fb8d4
	FILETIME LastWritten;
Packit 1fb8d4
	DWORD CredentialBlobSize;
Packit 1fb8d4
	LPBYTE CredentialBlob;
Packit 1fb8d4
	DWORD Persist;
Packit 1fb8d4
	DWORD AttributeCount;
Packit 1fb8d4
	PCREDENTIAL_ATTRIBUTEW Attributes;
Packit 1fb8d4
	LPWSTR TargetAlias;
Packit 1fb8d4
	LPWSTR UserName;
Packit 1fb8d4
} CREDENTIALW, *PCREDENTIALW;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIAL_TARGET_INFORMATIONA
Packit 1fb8d4
{
Packit 1fb8d4
	LPSTR TargetName;
Packit 1fb8d4
	LPSTR NetbiosServerName;
Packit 1fb8d4
	LPSTR DnsServerName;
Packit 1fb8d4
	LPSTR NetbiosDomainName;
Packit 1fb8d4
	LPSTR DnsDomainName;
Packit 1fb8d4
	LPSTR DnsTreeName;
Packit 1fb8d4
	LPSTR PackageName;
Packit 1fb8d4
	ULONG Flags;
Packit 1fb8d4
	DWORD CredTypeCount;
Packit 1fb8d4
	LPDWORD CredTypes;
Packit 1fb8d4
} CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _CREDENTIAL_TARGET_INFORMATIONW
Packit 1fb8d4
{
Packit 1fb8d4
	LPWSTR TargetName;
Packit 1fb8d4
	LPWSTR NetbiosServerName;
Packit 1fb8d4
	LPWSTR DnsServerName;
Packit 1fb8d4
	LPWSTR NetbiosDomainName;
Packit 1fb8d4
	LPWSTR DnsDomainName;
Packit 1fb8d4
	LPWSTR DnsTreeName;
Packit 1fb8d4
	LPWSTR PackageName;
Packit 1fb8d4
	ULONG Flags;
Packit 1fb8d4
	DWORD CredTypeCount;
Packit 1fb8d4
	LPDWORD CredTypes;
Packit 1fb8d4
} CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW;
Packit 1fb8d4
Packit 1fb8d4
typedef enum _CRED_MARSHAL_TYPE
Packit 1fb8d4
{
Packit 1fb8d4
	CertCredential = 1,
Packit 1fb8d4
	UsernameTargetCredential
Packit 1fb8d4
} CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE;
Packit 1fb8d4
Packit 1fb8d4
typedef enum _CRED_PROTECTION_TYPE
Packit 1fb8d4
{
Packit 1fb8d4
	CredUnprotected = 0,
Packit 1fb8d4
	CredUserProtection = 1,
Packit 1fb8d4
	CredTrustedProtection = 2
Packit 1fb8d4
} CRED_PROTECTION_TYPE, *PCRED_PROTECTION_TYPE;
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit 1fb8d4
#define CRED_SESSION_WILDCARD_NAME	CRED_SESSION_WILDCARD_NAME_W
Packit 1fb8d4
#define CREDENTIAL_ATTRIBUTE		CREDENTIAL_ATTRIBUTEW
Packit 1fb8d4
#define PCREDENTIAL_ATTRIBUTE		PCREDENTIAL_ATTRIBUTEW
Packit 1fb8d4
#define CREDENTIAL			CREDENTIALW
Packit 1fb8d4
#define PCREDENTIAL			PCREDENTIALW
Packit 1fb8d4
#define CREDENTIAL_TARGET_INFORMATION	CREDENTIAL_TARGET_INFORMATIONW
Packit 1fb8d4
#define PCREDENTIAL_TARGET_INFORMATION	PCREDENTIAL_TARGET_INFORMATIONW
Packit 1fb8d4
#else
Packit 1fb8d4
#define CRED_SESSION_WILDCARD_NAME	CRED_SESSION_WILDCARD_NAME_A
Packit 1fb8d4
#define CREDENTIAL_ATTRIBUTE		CREDENTIAL_ATTRIBUTEA
Packit 1fb8d4
#define PCREDENTIAL_ATTRIBUTE		PCREDENTIAL_ATTRIBUTEA
Packit 1fb8d4
#define CREDENTIAL			CREDENTIALA
Packit 1fb8d4
#define PCREDENTIAL			PCREDENTIALA
Packit 1fb8d4
#define CREDENTIAL_TARGET_INFORMATION	CREDENTIAL_TARGET_INFORMATIONA
Packit 1fb8d4
#define PCREDENTIAL_TARGET_INFORMATION	PCREDENTIAL_TARGET_INFORMATIONA
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
extern "C" {
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredWriteW(PCREDENTIALW Credential, DWORD Flags);
Packit 1fb8d4
WINPR_API BOOL CredWriteA(PCREDENTIALA Credential, DWORD Flags);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential);
Packit 1fb8d4
WINPR_API BOOL CredReadA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredEnumerateW(LPCWSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential);
Packit 1fb8d4
WINPR_API BOOL CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredWriteDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, PCREDENTIALW Credential, DWORD Flags);
Packit 1fb8d4
WINPR_API BOOL CredWriteDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, PCREDENTIALA Credential, DWORD Flags);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential);
Packit 1fb8d4
WINPR_API BOOL CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
Packit 1fb8d4
WINPR_API BOOL CredDeleteA(LPCSTR TargetName, DWORD Type, DWORD Flags);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredRenameW(LPCWSTR OldTargetName, LPCWSTR NewTargetName, DWORD Type, DWORD Flags);
Packit 1fb8d4
WINPR_API BOOL CredRenameA(LPCSTR OldTargetName, LPCSTR NewTargetName, DWORD Type, DWORD Flags);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredGetTargetInfoW(LPCWSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONW* TargetInfo);
Packit 1fb8d4
WINPR_API BOOL CredGetTargetInfoA(LPCSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONA* TargetInfo);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredMarshalCredentialW(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPWSTR* MarshaledCredential);
Packit 1fb8d4
WINPR_API BOOL CredMarshalCredentialA(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPSTR* MarshaledCredential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredUnmarshalCredentialW(LPCWSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential);
Packit 1fb8d4
WINPR_API BOOL CredUnmarshalCredentialA(LPCSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredIsMarshaledCredentialW(LPCWSTR MarshaledCredential);
Packit 1fb8d4
WINPR_API BOOL CredIsMarshaledCredentialA(LPCSTR MarshaledCredential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredProtectW(BOOL fAsSelf, LPWSTR pszCredentials, DWORD cchCredentials,
Packit 1fb8d4
		LPWSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType);
Packit 1fb8d4
WINPR_API BOOL CredProtectA(BOOL fAsSelf, LPSTR pszCredentials, DWORD cchCredentials,
Packit 1fb8d4
		LPSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredUnprotectW(BOOL fAsSelf, LPWSTR pszProtectedCredentials,
Packit 1fb8d4
		DWORD cchCredentials, LPWSTR pszCredentials, DWORD* pcchMaxChars);
Packit 1fb8d4
WINPR_API BOOL CredUnprotectA(BOOL fAsSelf, LPSTR pszProtectedCredentials,
Packit 1fb8d4
		DWORD cchCredentials, LPSTR pszCredentials, DWORD* pcchMaxChars);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredIsProtectedW(LPWSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType);
Packit 1fb8d4
WINPR_API BOOL CredIsProtectedA(LPSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredFindBestCredentialW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential);
Packit 1fb8d4
WINPR_API BOOL CredFindBestCredentialA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CredGetSessionTypes(DWORD MaximumPersistCount, LPDWORD MaximumPersist);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API VOID CredFree(PVOID Buffer);
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit 1fb8d4
#define CredWrite			CredWriteW
Packit 1fb8d4
#define CredRead			CredReadW
Packit 1fb8d4
#define CredEnumerate			CredEnumerateW
Packit 1fb8d4
#define CredWriteDomainCredentials	CredWriteDomainCredentialsW
Packit 1fb8d4
#define CredReadDomainCredentials	CredReadDomainCredentialsW
Packit 1fb8d4
#define CredDelete			CredDeleteW
Packit 1fb8d4
#define CredRename			CredRenameW
Packit 1fb8d4
#define CredGetTargetInfo		CredGetTargetInfoW
Packit 1fb8d4
#define CredMarshalCredential		CredMarshalCredentialW
Packit 1fb8d4
#define CredUnmarshalCredential		CredUnmarshalCredentialW
Packit 1fb8d4
#define CredIsMarshaledCredential	CredIsMarshaledCredentialW
Packit 1fb8d4
#define CredProtect			CredProtectW
Packit 1fb8d4
#define CredUnprotect			CredUnprotectW
Packit 1fb8d4
#define CredIsProtected			CredIsProtectedW
Packit 1fb8d4
#define CredFindBestCredential		CredFindBestCredentialW
Packit 1fb8d4
#else
Packit 1fb8d4
#define CredWrite			CredWriteA
Packit 1fb8d4
#define CredRead			CredReadA
Packit 1fb8d4
#define CredEnumerate			CredEnumerateA
Packit 1fb8d4
#define CredWriteDomainCredentials	CredWriteDomainCredentialsA
Packit 1fb8d4
#define CredReadDomainCredentials	CredReadDomainCredentialsA
Packit 1fb8d4
#define CredDelete			CredDeleteA
Packit 1fb8d4
#define CredRename			CredRenameA
Packit 1fb8d4
#define CredGetTargetInfo		CredGetTargetInfoA
Packit 1fb8d4
#define CredMarshalCredential		CredMarshalCredentialA
Packit 1fb8d4
#define CredUnmarshalCredential		CredUnmarshalCredentialA
Packit 1fb8d4
#define CredIsMarshaledCredential	CredIsMarshaledCredentialA
Packit 1fb8d4
#define CredProtect			CredProtectA
Packit 1fb8d4
#define CredUnprotect			CredUnprotectA
Packit 1fb8d4
#define CredIsProtected			CredIsProtectedA
Packit 1fb8d4
#define CredFindBestCredential		CredFindBestCredentialA
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif /* WINPR_CREDENTIALS_H */
Packit 1fb8d4