1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef __WINEFS_H__
7 #define __WINEFS_H__
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #ifndef ALGIDDEF
14 #define ALGIDDEF
15   typedef unsigned int ALG_ID;
16 #endif
17 
18   typedef struct _CERTIFICATE_BLOB {
19     DWORD dwCertEncodingType;
20     DWORD cbData;
21     PBYTE pbData;
22   } EFS_CERTIFICATE_BLOB,*PEFS_CERTIFICATE_BLOB;
23 
24   typedef struct _EFS_HASH_BLOB {
25     DWORD cbData;
26     PBYTE pbData;
27   } EFS_HASH_BLOB,*PEFS_HASH_BLOB;
28 
29   typedef struct _EFS_RPC_BLOB {
30     DWORD cbData;
31     PBYTE pbData;
32   } EFS_RPC_BLOB,*PEFS_RPC_BLOB;
33 
34   typedef struct _EFS_KEY_INFO {
35     DWORD dwVersion;
36     ULONG Entropy;
37     ALG_ID Algorithm;
38     ULONG KeyLength;
39   } EFS_KEY_INFO,*PEFS_KEY_INFO;
40 
41   typedef struct _ENCRYPTION_CERTIFICATE {
42     DWORD cbTotalLength;
43     SID *pUserSid;
44     PEFS_CERTIFICATE_BLOB pCertBlob;
45   } ENCRYPTION_CERTIFICATE,*PENCRYPTION_CERTIFICATE;
46 
47 #define MAX_SID_SIZE 256
48 
49   typedef struct _ENCRYPTION_CERTIFICATE_HASH {
50     DWORD cbTotalLength;
51     SID *pUserSid;
52     PEFS_HASH_BLOB pHash;
53     LPWSTR lpDisplayInformation;
54   } ENCRYPTION_CERTIFICATE_HASH,*PENCRYPTION_CERTIFICATE_HASH;
55 
56   typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST {
57     DWORD nCert_Hash;
58     PENCRYPTION_CERTIFICATE_HASH *pUsers;
59   } ENCRYPTION_CERTIFICATE_HASH_LIST,*PENCRYPTION_CERTIFICATE_HASH_LIST;
60 
61   typedef struct _ENCRYPTION_CERTIFICATE_LIST {
62     DWORD nUsers;
63     PENCRYPTION_CERTIFICATE *pUsers;
64   } ENCRYPTION_CERTIFICATE_LIST,*PENCRYPTION_CERTIFICATE_LIST;
65 
66   WINADVAPI DWORD WINAPI QueryUsersOnEncryptedFile(LPCWSTR lpFileName,PENCRYPTION_CERTIFICATE_HASH_LIST *pUsers);
67   WINADVAPI DWORD WINAPI QueryRecoveryAgentsOnEncryptedFile(LPCWSTR lpFileName,PENCRYPTION_CERTIFICATE_HASH_LIST *pRecoveryAgents);
68   WINADVAPI DWORD WINAPI RemoveUsersFromEncryptedFile(LPCWSTR lpFileName,PENCRYPTION_CERTIFICATE_HASH_LIST pHashes);
69   WINADVAPI DWORD WINAPI AddUsersToEncryptedFile(LPCWSTR lpFileName,PENCRYPTION_CERTIFICATE_LIST pUsers);
70   WINADVAPI DWORD WINAPI SetUserFileEncryptionKey(PENCRYPTION_CERTIFICATE pEncryptionCertificate);
71   WINADVAPI VOID WINAPI FreeEncryptionCertificateHashList(PENCRYPTION_CERTIFICATE_HASH_LIST pHashes);
72   WINADVAPI WINBOOL WINAPI EncryptionDisable(LPCWSTR DirPath,WINBOOL Disable);
73   WINADVAPI DWORD WINAPI DuplicateEncryptionInfoFile(LPCWSTR SrcFileName,LPCWSTR DstFileName,DWORD dwCreationDistribution,DWORD dwAttributes,CONST LPSECURITY_ATTRIBUTES lpSecurityAttributes);
74 
75 #ifdef __cplusplus
76 }
77 #endif
78 #endif
79