import "wtypes.idl"; import "unknwn.idl"; [v1_enum] typedef enum _CREDENTIAL_PROVIDER_USAGE_SCENARIO { CPUS_INVALID = 0, CPUS_LOGON, CPUS_UNLOCK_WORKSTATION, CPUS_CHANGE_PASSWORD, CPUS_CREDUI, } CREDENTIAL_PROVIDER_USAGE_SCENARIO; [v1_enum] typedef enum _CREDENTIAL_PROVIDER_FIELD_TYPE { CPFT_CREDENTIAL_NAME = 0, CPFT_TILE_IMAGE, CPFT_FOOTER_TEXT, CPFT_EDIT_TEXT, CPFT_PASSWORD_TEXT, CPFT_STATIC_TEXT, } CREDENTIAL_PROVIDER_FIELD_TYPE; [v1_enum] typedef enum _CREDENTIAL_PROVIDER_FIELD_STATE { CPFS_HIDDEN = 0x0000, CPFS_READONLY = 0x0001, CPFS_DISABLED = 0x0002, CPFS_DISPLAY_IN_SELECTOR = 0x0004, CPFS_NONE = 0x0008, CPFS_FOCUSED = 0x0010, } CREDENTIAL_PROVIDER_FIELD_STATE; typedef struct _CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR { DWORD dwFieldID; CREDENTIAL_PROVIDER_FIELD_TYPE cpft; CREDENTIAL_PROVIDER_FIELD_STATE cpfs; LPWSTR pszLabel; } CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR; typedef struct _CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION { GUID guidAuthenticationPackage; GUID guidSerializationStruct; ULONG cbSerialization; [size_is(cbSerialization)] byte* rgbSerialization; } CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION; // // No idl files contain NTSTATUS. Therefore we mirror its definition in ntdef.h. // #ifndef NTSTATUS typedef LONG NTSTATUS; #endif cpp_quote("#define CREDENTIAL_PROVIDER_NO_DEFAULT ((DWORD)-1)") interface ICredentialProviderCredentialEvents; // forward [ local, object, pointer_default(ref), uuid(5b4c724c-9e5e-48cc-921b-5b237af3fd1e), ] interface ICredentialProviderCredential : IUnknown { HRESULT Advise([in] ICredentialProviderCredentialEvents* pcpce); HRESULT UnAdvise(); HRESULT GetStringValue([in] DWORD dwFieldID, [out, string] LPWSTR* ppsz); HRESULT GetBitmapValue([in] DWORD dwFieldID, [out] HBITMAP* phbm); HRESULT SetStringValue([in] DWORD dwFieldID, [in, string] LPCWSTR psz); HRESULT Validate([out, ptr] IUnknown** ppunkErrorContext); HRESULT GetSerialization([out] CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcs, [out, ptr] IUnknown** ppunkErrorContext); HRESULT ReportResult([in] NTSTATUS ntsStatus, [in] NTSTATUS ntsSubstatus, [out, ptr] IUnknown** ppunkErrorContext); HRESULT TranslateStatus([in] IUnknown* punkErrorContext, [out, string] LPWSTR* ppsz); }; [ local, object, pointer_default(ref), uuid(c3012feb-3d0e-11d9-b7e9-000cf1cda2ba), ] interface ICredentialProviderCredentialEvents : IUnknown { HRESULT ChangeFieldState([in] ICredentialProviderCredential* pcpc, [in] DWORD dwFieldID, [in] CREDENTIAL_PROVIDER_FIELD_STATE cpfs); HRESULT SetFieldStringValue([in] ICredentialProviderCredential* pcpc, [in] DWORD dwFieldID, [in, string, unique] LPCWSTR psz); }; interface ICredentialProviderEvents; // forward [ local, object, pointer_default(ref), uuid(c3012fec-3d0e-11d9-b7e9-000cf1cda2ba), ] interface ICredentialProvider : IUnknown { HRESULT SetUsageScenario([in] CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus); HRESULT SetTarget([in] LPCWSTR pszTarget); HRESULT Advise([in] ICredentialProviderEvents* pcpe); HRESULT UnAdvise(); HRESULT GetFieldDescriptorCount([out] DWORD* pdwCount); HRESULT GetFieldDescriptorAt([in] DWORD dwIndex, [out] CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR** ppcpfd); HRESULT GetCredentialCount([out] DWORD* pdwCount, [out] DWORD* pdwDefault, [out] BOOL* pbAutoLogonWithDefault); HRESULT GetCredentialAt([in] DWORD dwIndex, [out] ICredentialProviderCredential** ppcpc); HRESULT GetEmptyCredential([out] ICredentialProviderCredential** ppcpc); }; [ local, object, pointer_default(ref), uuid(c3012fed-3d0e-11d9-b7e9-000cf1cda2ba), ] interface ICredentialProviderEvents : IUnknown { HRESULT CredentialsChanged([in] ICredentialProvider* pcp); HRESULT FieldsChanged([in] ICredentialProvider* pcp); };