6 Appendix A: Full IDL
For ease of implementation, the full Interface Definition Language (IDL) is provided here, where "ms-dtyp.idl" is the IDL found in [MS-DTYP] Appendix A.
This IDL does not include a pointer_default declaration. As noted in [MS-RPCE], this declaration is not required in MIDL, and, in this case, pointer_default(unique) is assumed.
-
import "ms-dtyp.idl"; [ uuid(c681d488-d850-11d0-8c52-00c04fd90f7e), version(1.0), ] interface efsrpc { typedef [context_handle] void * PEXIMPORT_CONTEXT_HANDLE; typedef pipe unsigned char EFS_EXIM_PIPE; typedef struct _EFS_RPC_BLOB { [range(0,266240)] DWORD cbData; [size_is(cbData)] unsigned char * bData; } EFS_RPC_BLOB, *PEFS_RPC_BLOB; typedef struct { DWORD EfsVersion; } EFS_COMPATIBILITY_INFO; typedef unsigned int ALG_ID; typedef struct _EFS_HASH_BLOB { [range(0,100)] DWORD cbData; [size_is(cbData)] unsigned char * bData; } EFS_HASH_BLOB; typedef struct _ENCRYPTION_CERTIFICATE_HASH { DWORD cbTotalLength; RPC_SID * UserSid; EFS_HASH_BLOB * Hash; [string] wchar_t * lpDisplayInformation; } ENCRYPTION_CERTIFICATE_HASH; typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST { [range(0,500)] DWORD nCert_Hash; [size_is(nCert_Hash , )] ENCRYPTION_CERTIFICATE_HASH ** Users; } ENCRYPTION_CERTIFICATE_HASH_LIST; typedef struct _CERTIFICATE_BLOB { DWORD dwCertEncodingType; [range(0,32768)] DWORD cbData; [size_is(cbData)] unsigned char * bData; } EFS_CERTIFICATE_BLOB; typedef struct _ENCRYPTION_CERTIFICATE { DWORD cbTotalLength; RPC_SID * UserSid; EFS_CERTIFICATE_BLOB * CertBlob; } ENCRYPTION_CERTIFICATE; typedef struct _ENCRYPTION_CERTIFICATE_LIST { [range(0,500)] DWORD nUsers; [size_is(nUsers , )] ENCRYPTION_CERTIFICATE ** Users; } ENCRYPTION_CERTIFICATE_LIST; typedef struct _ENCRYPTED_FILE_METADATA_SIGNATURE { DWORD dwEfsAccessType; ENCRYPTION_CERTIFICATE_HASH_LIST * CertificatesAdded; ENCRYPTION_CERTIFICATE * EncryptionCertificate; EFS_RPC_BLOB * EfsStreamSignature; } ENCRYPTED_FILE_METADATA_SIGNATURE; typedef struct { DWORD dwVersion; unsigned long Entropy; ALG_ID Algorithm; unsigned long KeyLength; } EFS_KEY_INFO; typedef struct { DWORD dwDecryptionError; DWORD dwHashOffset; DWORD cbHash; } EFS_DECRYPTION_STATUS_INFO; typedef struct { BOOL bHasCurrentKey; DWORD dwEncryptionError; } EFS_ENCRYPTION_STATUS_INFO;
-
typedef struct _ENCRYPTION_PROTECTOR { DWORD cbTotalLength; RPC_SID* UserSid; [string] wchar_t* lpProtectorDescriptor; } ENCRYPTION_PROTECTOR, * PENCRYPTION_PROTECTOR; typedef struct _ENCRYPTION_PROTECTOR_LIST { DWORD nProtectors; [size_is(nProtectors)] PENCRYPTION_PROTECTOR* pProtectors; } ENCRYPTION_PROTECTOR_LIST, *PENCRYPTION_PROTECTOR_LIST;
-
long EfsRpcOpenFileRaw( [in] handle_t binding_h, [out] PEXIMPORT_CONTEXT_HANDLE * hContext, [in, string] wchar_t * FileName, [in] long Flags ); long EfsRpcReadFileRaw( [in] PEXIMPORT_CONTEXT_HANDLE hContext, [out] EFS_EXIM_PIPE * EfsOutPipe ); long EfsRpcWriteFileRaw( [in] PEXIMPORT_CONTEXT_HANDLE hContext, [in] EFS_EXIM_PIPE * EfsInPipe ); void EfsRpcCloseRaw( [in, out] PEXIMPORT_CONTEXT_HANDLE * hContext ); 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 ); DWORD EfsRpcQueryUsersOnFile( [in] handle_t binding_h, [in, string] wchar_t * FileName, [out] ENCRYPTION_CERTIFICATE_HASH_LIST ** Users ); DWORD EfsRpcQueryRecoveryAgents( [in] handle_t binding_h, [in, string] wchar_t * FileName, [out] ENCRYPTION_CERTIFICATE_HASH_LIST ** RecoveryAgents ); DWORD EfsRpcRemoveUsersFromFile( [in] handle_t binding_h, [in, string] wchar_t * FileName, [in] ENCRYPTION_CERTIFICATE_HASH_LIST * Users ); DWORD EfsRpcAddUsersToFile( [in] handle_t binding_h, [in, string] wchar_t * FileName, [in] ENCRYPTION_CERTIFICATE_LIST * EncryptionCertificates ); //local only method void Opnum10NotUsedOnWire(void); DWORD EfsRpcNotSupported( [in] handle_t binding_h, [in, string] wchar_t * Reserved1, [in, string] wchar_t * Reserved2, [in] DWORD dwReserved1, [in] DWORD dwReserved2, [in, unique] EFS_RPC_BLOB * Reserved, [in] BOOL bReserved ); DWORD EfsRpcFileKeyInfo( [in] handle_t binding_h, [in, string] wchar_t * FileName, [in] DWORD InfoClass, [out] EFS_RPC_BLOB ** KeyInfo ); DWORD EfsRpcDuplicateEncryptionInfoFile( [in] handle_t binding_h, [in, string] wchar_t * SrcFileName, [in, string] wchar_t * DestFileName, [in] DWORD dwCreationDisposition, [in] DWORD dwAttributes, [in, unique] EFS_RPC_BLOB * RelativeSD, [in] BOOL bInheritHandle ); //local only method void Opnum14NotUsedOnWire(void); DWORD EfsRpcAddUsersToFileEx( [in] handle_t binding_h, [in] DWORD dwFlags, [in, unique] EFS_RPC_BLOB * Reserved, [in, string] wchar_t * FileName, [in] ENCRYPTION_CERTIFICATE_LIST * EncryptionCertificates ); DWORD EfsRpcFileKeyInfoEx( [in] handle_t binding_h, [in] DWORD dwFileKeyInfoFlags, [in, unique] EFS_RPC_BLOB * Reserved, [in, string] wchar_t * FileName, [in] DWORD InfoClass, [out] EFS_RPC_BLOB ** KeyInfo ); //local only method void Opnum17NotUsedOnWire(void); DWORD EfsRpcGetEncryptedFileMetadata( [in] handle_t binding_h, [in, string, ref] wchar_t * FileName, [out, ref] EFS_RPC_BLOB ** EfsStreamBlob ); DWORD EfsRpcSetEncryptedFileMetadata( [in] handle_t binding_h, [in, string, ref] wchar_t * FileName, [in, unique] EFS_RPC_BLOB * OldEfsStreamBlob, [in, ref] EFS_RPC_BLOB * NewEfsStreamBlob, [in, unique] ENCRYPTED_FILE_METADATA_SIGNATURE * NewEfsSignature ); DWORD EfsRpcFlushEfsCache( [in] handle_t binding_h ); long EfsRpcEncryptFileExSrv( [in] handle_t binding_h, [in, string] wchar_t* FileName, [in, string, unique] wchar_t* ProtectorDescriptor, [in] unsigned long Flags ); DWORD EfsRpcQueryProtectors( [in] handle_t binding_h, [in, string] wchar_t* FileName, [out] PENCRYPTION_PROTECTOR_LIST **ppProtectorList ); //local only method void Opnum23NotUsedOnWire(void); //local only method void Opnum24NotUsedOnWire(void); //local only method void Opnum25NotUsedOnWire(void); //local only method void Opnum26NotUsedOnWire(void); //local only method void Opnum27NotUsedOnWire(void); //local only method void Opnum28NotUsedOnWire(void); //local only method void Opnum29NotUsedOnWire(void); //local only method void Opnum30NotUsedOnWire(void); //local only method void Opnum31NotUsedOnWire(void); //local only method void Opnum32NotUsedOnWire(void); //local only method void Opnum33NotUsedOnWire(void); //local only method void Opnum34NotUsedOnWire(void); //local only method void Opnum35NotUsedOnWire(void); //local only method void Opnum36NotUsedOnWire(void); //local only method void Opnum37NotUsedOnWire(void); //local only method void Opnum38NotUsedOnWire(void); //local only method void Opnum39NotUsedOnWire(void); //local only method void Opnum40NotUsedOnWire(void); //local only method void Opnum41NotUsedOnWire(void); //local only method void Opnum42NotUsedOnWire(void); //local only method void Opnum43NotUsedOnWire(void); //local only method void Opnum44NotUsedOnWire(void); }