//
// efsrpc.idl
//



[
uuid(c681d488-d850-11d0-8c52-00c04fd90f7e),
version(1.0),
]
interface efsrpc
{

import "efsimp.idl" ;

#define MAX_SID_SIZE 256

typedef [context_handle] void * PEXIMPORT_CONTEXT_HANDLE;
typedef [ref] PEXIMPORT_CONTEXT_HANDLE * PPEXIMPORT_CONTEXT_HANDLE;

typedef pipe unsigned char EFS_EXIM_PIPE;

//
// Explicit binding for OpenFileRaw
//

long EfsRpcOpenFileRaw(
    [in] handle_t binding_h,
    [out] PPEXIMPORT_CONTEXT_HANDLE pphContext,
    [in, string] wchar_t *FileName,
    [in] long Flags
    );

long EfsRpcReadFileRaw(
    [in] PEXIMPORT_CONTEXT_HANDLE phContext,
    [out] EFS_EXIM_PIPE *EfsOutPipe
    );

long EfsRpcWriteFileRaw(
    [in] PEXIMPORT_CONTEXT_HANDLE phContext,
    [in] EFS_EXIM_PIPE *EfsInPipe
    );

void EfsRpcCloseRaw(
    [in, out] PPEXIMPORT_CONTEXT_HANDLE pphContext
    );

long EfsRpcEncryptFileSrv(
    [in] handle_t binding_h,
    [in, string] wchar_t *FileName
    );

long EfsRpcDecryptFileSrv(
    [in] handle_t binding_h,
    [in, string] wchar_t *FileName,
    [in] unsigned long OpenFlag
    );

//
// Beta 2 API
//

DWORD
EfsRpcQueryUsersOnFile(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpFileName,
    [out] PENCRYPTION_CERTIFICATE_HASH_LIST * pUsers
    );

DWORD
EfsRpcQueryRecoveryAgents(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpFileName,
    [out] PENCRYPTION_CERTIFICATE_HASH_LIST * pRecoveryAgents
    );

DWORD
EfsRpcRemoveUsersFromFile(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpFileName,
    [in] PENCRYPTION_CERTIFICATE_HASH_LIST pUsers
    );

DWORD
EfsRpcAddUsersToFile(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpFileName,
    [in] PENCRYPTION_CERTIFICATE_LIST pEncryptionCertificates
    );

DWORD
EfsRpcSetFileEncryptionKey(
    [in] handle_t binding_h,
    [in, unique] PENCRYPTION_CERTIFICATE pEncryptionCertificate
    );

DWORD
EfsRpcNotSupported(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpSrcFileName,
    [in, string] LPCWSTR lpDestFileName,
    [in] DWORD dwCreationDistribution,
    [in] DWORD dwAttributes,
    [in, unique] PEFS_RPC_BLOB pRelativeSD,
    [in] BOOL bInheritHandle
    );
    
DWORD EfsRpcFileKeyInfo(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpFileName,
    [in] DWORD InfoClass,
    [out] PEFS_RPC_BLOB *KeyInfo
    );
    
DWORD
EfsRpcDuplicateEncryptionInfoFile(
    [in] handle_t binding_h,
    [in, string] LPCWSTR lpSrcFileName,
    [in, string] LPCWSTR lpDestFileName,
    [in] DWORD dwCreationDistribution,
    [in] DWORD dwAttributes,
    [in, unique] PEFS_RPC_BLOB pRelativeSD,
    [in] BOOL bInheritHandle
    );
}

