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

import "unknwn.idl";


import "basetsd.h";


typedef struct _SSCRYPTPROTECTDATA_PROMPTSTRUCT
{
    DWORD       cbSize;
    DWORD       dwPromptFlags;
//    DWORD_PTR   hwndApp;
//    LPCWSTR     szPrompt;
} SSCRYPTPROTECTDATA_PROMPTSTRUCT, *PSSCRYPTPROTECTDATA_PROMPTSTRUCT;


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

[
  uuid(11220835-5b26-4d94-ae86-c3e475a809de),
  version(1.0),
  pointer_default(unique)
]
interface ICryptProtect
{

    DWORD
    SSCryptProtectData(
        [in]                        handle_t    h,

        [out][size_is(,*pcbOut)]    BYTE**      ppbOut,
        [out]                       DWORD*      pcbOut,

        [in][size_is(cbIn)]         BYTE*       pbIn,           // in encr data
        [in]                        DWORD       cbIn,           // in encr cb

        [in]                        LPCWSTR     szDataDescr,

        [in,ptr][size_is(cbOptionalEntropy)]
                                    BYTE*       pbOptionalEntropy,
        [in]                        DWORD       cbOptionalEntropy,

        [in,ptr]                    GUID*       pguidProvider,
        [in,ptr]                    PSSCRYPTPROTECTDATA_PROMPTSTRUCT  pPromptStruct, 
        [in]                        DWORD       dwFlags,
        [in,ptr][size_is(cbOptionalPassword)]
                                    BYTE*       pbOptionalPassword,
        [in]                        DWORD       cbOptionalPassword
        );


    DWORD
    SSCryptUnprotectData(
        [in]                        handle_t    h,

        [out][size_is(,*pcbOut)]    BYTE**      ppbOut,
        [out]                       DWORD*      pcbOut,

        [in][size_is(cbIn)]         BYTE*       pbIn,           // in encr data
        [in]                        DWORD       cbIn,           // in encr cb

        [in,out,ptr]                LPWSTR*     ppszDataDescr,

        [in,ptr][size_is(cbOptionalEntropy)]
                                    BYTE*       pbOptionalEntropy,
        [in]                        DWORD       cbOptionalEntropy,

        [in,out,ptr]                GUID*       pguidProvider,
        [in,ptr]                    PSSCRYPTPROTECTDATA_PROMPTSTRUCT pPromptStruct, 
        [in]                        DWORD       dwFlags,
        [in,ptr][size_is(cbOptionalPassword)]
                                    BYTE*       pbOptionalPassword,
        [in]                        DWORD       cbOptionalPassword
        );

}