//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1997 - 1999
//
//  File:       pstrpc.idl
//
//--------------------------------------------------------------------------

import "unknwn.idl";
import "pstypes.idl";

import "basetsd.h";

////////////////////////////
// Interfaces

[
  uuid(C9378FF1-16F7-11d0-A0B2-00AA0061426A),
  version(1.0),
  pointer_default(unique)
]
interface IPStoreProv
{
    HRESULT     SSPStoreEnumProviders(
        [in]        handle_t        h,
        [in]        PST_CALL_CONTEXT CallerContext,
        [out]       PPST_PROVIDERINFO*   ppPSTInfo,
        [in]        DWORD           dwIndex,
        [in]        DWORD           dwFlags);

    HRESULT     SSGetProvInfo(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [out]       PPST_PROVIDERINFO*   ppPSTInfo,
        [in]        DWORD           dwFlags);

    HRESULT     SSGetProvParam(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        DWORD           dwParam,
        [out]       DWORD*          pcbData,
        [out][size_is(,*pcbData)]
                    BYTE**          ppbData,
        [in]        DWORD           dwFlags);

    HRESULT     SSSetProvParam(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        DWORD           dwParam,
        [in]        DWORD           cbData,
        [in][size_is(cbData)]
                    BYTE*           pbData,
        [in]        DWORD           dwFlags);

    HRESULT     SSAcquireContext(
        [in]        handle_t        h,
        [in]        PPST_PROVIDERID pProvID,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        DWORD           pidCaller,
        [out]       PST_PROVIDER_HANDLE* phPSTProv,
        [in]        DWORD_PTR           lpReserved,
        [in]        DWORD           dwFlags);

    HRESULT     SSReleaseContext(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        DWORD           dwFlags);


    // interface to communicate passwords from external sources
    // such as credential managers

    HRESULT     SSPasswordInterface(
        [in]        handle_t        h,
        [in]        DWORD           dwParam,
        [in]        DWORD           cbData,
        [in][size_is(cbData)]
                    BYTE*           pbData);


    // Enumeration

    HRESULT     SSEnumTypes(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [out]       GUID*           pguidType,
        [in]        DWORD           dwIndex,
        [in]        DWORD           dwFlags);

    HRESULT     SSEnumSubtypes(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [out]       GUID*           pguidSubtype,
        [in]        DWORD           dwIndex,
        [in]        DWORD           dwFlags);

    HRESULT     SSEnumItems(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [out]       LPWSTR*         ppszItemName,
        [in]        DWORD           dwIndex,
        [in]        DWORD           dwFlags);


    // Type, Subtype info

    HRESULT     SSGetTypeInfo(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [out]       PPST_TYPEINFO*  ppinfoType,
        [in]        DWORD           dwFlags);

    HRESULT     SSGetSubtypeInfo(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [out]       PPST_TYPEINFO*  ppinfoSubtype,
        [in]        DWORD           dwFlags);


    // Creation

    HRESULT     SSCreateType(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        PPST_TYPEINFO   pinfoType,
        [in]        DWORD           dwFlags);

    HRESULT     SSCreateSubtype(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        PPST_TYPEINFO   pinfoSubtype,
        [in]        PPST_ACCESSRULESET psRules,
        [in]        DWORD           dwFlags);


    // Deletion

    HRESULT     SSDeleteType(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        DWORD           dwFlags);

    HRESULT     SSDeleteSubtype(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        DWORD           dwFlags);

    HRESULT     SSDeleteItem(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        LPCWSTR         szItemName,
        [in]        PPST_PROMPTINFO psPrompt,
        [in]        DWORD           dwFlags);


    // Item read/write

    HRESULT     SSReadItem(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        LPCWSTR         szItemName,
        [out]       DWORD*          pcbData,
        [out][size_is(,*pcbData)]
                    BYTE**          ppbData,
        [in]        PPST_PROMPTINFO psPrompt,
        [in]        DWORD           dwFlags);

    HRESULT     SSWriteItem(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        LPCWSTR         szItemName,
        [in]        DWORD           cbData,
        [in][size_is(cbData)]
                    BYTE*           pbData,
        [in]        PPST_PROMPTINFO psPrompt,
        [in]        DWORD           dwDefaultConfirmationStyle,
        [in]        DWORD           dwFlags);

    HRESULT     SSOpenItem(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        LPCWSTR         szItemName,
        [in]        PST_ACCESSMODE  ModeFlags,
        [in]        PPST_PROMPTINFO psPrompt,
        [in]        DWORD           dwFlags);

    HRESULT     SSCloseItem(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        LPCWSTR         szItemName,
        [in]        DWORD           dwFlags);

    HRESULT     SSReadAccessRuleset(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [out]       PPST_ACCESSRULESET*    ppsRules,
        [in]        DWORD           dwFlags);

    HRESULT     SSWriteAccessRuleset(
        [in]        handle_t        h,
        [in]        PST_PROVIDER_HANDLE hPSTProv,
        [in]        PST_CALL_CONTEXT CallerContext,
        [in]        PST_KEY         Key,
        [in]        const GUID*     pguidType,
        [in]        const GUID*     pguidSubtype,
        [in]        PPST_ACCESSRULESET     psRules,
        [in]        DWORD           dwFlags);

}