winapi_ui_automation/um/
winefs.rs1use shared::basetsd::SIZE_T;
7use shared::minwindef::{BOOL, DWORD, LPVOID, PBYTE, PDWORD, ULONG};
8use um::minwinbase::SECURITY_ATTRIBUTES;
9use um::wincrypt::ALG_ID;
10use um::winnt::{LPCWSTR, LPWSTR, SID};
11pub const WINEFS_SETUSERKEY_SET_CAPABILITIES: DWORD = 0x00000001;
12STRUCT!{struct EFS_CERTIFICATE_BLOB {
13 dwCertEncodingType: DWORD,
14 cbData: DWORD,
15 pbData: PBYTE,
16}}
17pub type PEFS_CERTIFICATE_BLOB = *mut EFS_CERTIFICATE_BLOB;
18STRUCT!{struct EFS_HASH_BLOB {
19 cbData: DWORD,
20 pbData: PBYTE,
21}}
22pub type PEFS_HASH_BLOB = *mut EFS_HASH_BLOB;
23STRUCT!{struct EFS_RPC_BLOB {
24 cbData: DWORD,
25 pbData: PBYTE,
26}}
27pub type PEFS_RPC_BLOB = *mut EFS_RPC_BLOB;
28STRUCT!{struct EFS_PIN_BLOB {
29 cbPadding: DWORD,
30 cbData: DWORD,
31 pbData: PBYTE,
32}}
33pub type PEFS_PIN_BLOB = *mut EFS_PIN_BLOB;
34STRUCT!{struct EFS_KEY_INFO {
35 dwVersion: DWORD,
36 Entropy: ULONG,
37 Algorithm: ALG_ID,
38 KeyLength: ULONG,
39}}
40pub type PEFS_KEY_INFO = *mut EFS_KEY_INFO;
41STRUCT!{struct EFS_COMPATIBILITY_INFO {
42 EfsVersion: DWORD,
43}}
44pub type PEFS_COMPATIBILITY_INFO = *mut EFS_COMPATIBILITY_INFO;
45pub const EFS_COMPATIBILITY_VERSION_NCRYPT_PROTECTOR: DWORD = 5;
46pub const EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR: DWORD = 6;
47#[inline]
48pub fn EFS_IS_DESCRIPTOR_VERSION(v: DWORD) -> bool {
49 v == EFS_COMPATIBILITY_VERSION_NCRYPT_PROTECTOR
50 || v == EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR
51}
52pub const EFS_SUBVER_UNKNOWN: DWORD = 0;
53pub const EFS_EFS_SUBVER_EFS_CERT: DWORD = 1;
54pub const EFS_PFILE_SUBVER_RMS: DWORD = 2;
55pub const EFS_PFILE_SUBVER_APPX: DWORD = 3;
56STRUCT!{struct EFS_VERSION_INFO {
57 EfsVersion: DWORD,
58 SubVersion: DWORD,
59}}
60pub type PEFS_VERSION_INFO = *mut EFS_VERSION_INFO;
61#[inline]
62pub fn EFS_IS_APPX_VERSION(v: DWORD, subV: DWORD) -> bool {
63 v == EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR && subV == EFS_PFILE_SUBVER_APPX
64}
65STRUCT!{struct EFS_DECRYPTION_STATUS_INFO {
66 dwDecryptionError: DWORD,
67 dwHashOffset: DWORD,
68 cbHash: DWORD,
69}}
70pub type PEFS_DECRYPTION_STATUS_INFO = *mut EFS_DECRYPTION_STATUS_INFO;
71STRUCT!{struct EFS_ENCRYPTION_STATUS_INFO {
72 bHasCurrentKey: BOOL,
73 dwEncryptionError: DWORD,
74}}
75pub type PEFS_ENCRYPTION_STATUS_INFO = *mut EFS_ENCRYPTION_STATUS_INFO;
76STRUCT!{struct ENCRYPTION_CERTIFICATE {
77 cbTotalLength: DWORD,
78 pUserSid: *mut SID,
79 pCertBlob: PEFS_CERTIFICATE_BLOB,
80}}
81pub type PENCRYPTION_CERTIFICATE = *mut ENCRYPTION_CERTIFICATE;
82pub const MAX_SID_SIZE: SIZE_T = 256;
83STRUCT!{struct ENCRYPTION_CERTIFICATE_HASH {
84 cbTotalLength: DWORD,
85 pUserSid: *mut SID,
86 pHash: PEFS_HASH_BLOB,
87 lpDisplayInformation: LPWSTR,
88}}
89pub type PENCRYPTION_CERTIFICATE_HASH = *mut ENCRYPTION_CERTIFICATE_HASH;
90STRUCT!{struct ENCRYPTION_CERTIFICATE_HASH_LIST {
91 nCert_Hash: DWORD,
92 pUsers: *mut PENCRYPTION_CERTIFICATE_HASH,
93}}
94pub type PENCRYPTION_CERTIFICATE_HASH_LIST = *mut ENCRYPTION_CERTIFICATE_HASH_LIST;
95STRUCT!{struct ENCRYPTION_CERTIFICATE_LIST {
96 nUsers: DWORD,
97 pUsers: *mut PENCRYPTION_CERTIFICATE,
98}}
99pub type PENCRYPTION_CERTIFICATE_LIST = *mut ENCRYPTION_CERTIFICATE_LIST;
100pub const EFS_METADATA_ADD_USER: DWORD = 0x00000001;
101pub const EFS_METADATA_REMOVE_USER: DWORD = 0x00000002;
102pub const EFS_METADATA_REPLACE_USER: DWORD = 0x00000004;
103pub const EFS_METADATA_GENERAL_OP: DWORD = 0x00000008;
104STRUCT!{struct ENCRYPTED_FILE_METADATA_SIGNATURE {
105 dwEfsAccessType: DWORD,
106 pCertificatesAdded: PENCRYPTION_CERTIFICATE_HASH_LIST,
107 pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
108 pEfsStreamSignature: PEFS_RPC_BLOB,
109}}
110pub type PENCRYPTED_FILE_METADATA_SIGNATURE = *mut ENCRYPTED_FILE_METADATA_SIGNATURE;
111STRUCT!{struct ENCRYPTION_PROTECTOR {
112 cbTotalLength: DWORD,
113 pUserSid: *mut SID,
114 lpProtectorDescriptor: LPWSTR,
115}}
116pub type PENCRYPTION_PROTECTOR = *mut ENCRYPTION_PROTECTOR;
117STRUCT!{struct ENCRYPTION_PROTECTOR_LIST {
118 nProtectors: DWORD,
119 pProtectors: *mut PENCRYPTION_PROTECTOR,
120}}
121pub type PENCRYPTION_PROTECTOR_LIST = *mut ENCRYPTION_PROTECTOR_LIST;
122extern "system" {
123 pub fn QueryUsersOnEncryptedFile(
124 lpFileName: LPCWSTR,
125 pUsers: *mut PENCRYPTION_CERTIFICATE_HASH_LIST,
126 ) -> DWORD;
127 pub fn QueryRecoveryAgentsOnEncryptedFile(
128 lpFileName: LPCWSTR,
129 pRecoveryAgents: *mut PENCRYPTION_CERTIFICATE_HASH_LIST,
130 ) -> DWORD;
131 pub fn RemoveUsersFromEncryptedFile(
132 lpFileName: LPCWSTR,
133 pHashes: PENCRYPTION_CERTIFICATE_HASH_LIST,
134 ) -> DWORD;
135 pub fn AddUsersToEncryptedFile(
136 lpFileName: LPCWSTR,
137 pEncryptionCertificate: PENCRYPTION_CERTIFICATE_LIST,
138 ) -> DWORD;
139 pub fn SetUserFileEncryptionKey(
140 pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
141 ) -> DWORD;
142 pub fn SetUserFileEncryptionKeyEx(
143 pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
144 dwCapabilities: DWORD,
145 dwFlags: DWORD,
146 pvReserved: LPVOID,
147 ) -> DWORD;
148 pub fn FreeEncryptionCertificateHashList(
149 pUsers: PENCRYPTION_CERTIFICATE_HASH_LIST,
150 );
151 pub fn EncryptionDisable(
152 DirPath: LPCWSTR,
153 Disable: BOOL,
154 ) -> BOOL;
155 pub fn DuplicateEncryptionInfoFile(
156 SrcFileName: LPCWSTR,
157 DstFileName: LPCWSTR,
158 dwCreationDistribution: DWORD,
159 dwAttributes: DWORD,
160 lpSecurityAttributes: *const SECURITY_ATTRIBUTES,
161 ) -> DWORD;
162 pub fn GetEncryptedFileMetadata(
163 lpFileName: LPCWSTR,
164 pcbMetadata: PDWORD,
165 ppbMetadata: *mut PBYTE,
166 ) -> DWORD;
167 pub fn SetEncryptedFileMetadata(
168 lpFileName: LPCWSTR,
169 pbOldMetadata: PBYTE,
170 pbNewMetadata: PBYTE,
171 pOwnerHash: PENCRYPTION_CERTIFICATE_HASH,
172 dwOperation: DWORD,
173 pCertificatesAdded: PENCRYPTION_CERTIFICATE_HASH_LIST,
174 ) -> DWORD;
175 pub fn FreeEncryptedFileMetadata(
176 pbMetadata: PBYTE,
177 );
178}