winapi_ui_automation/um/
dpapi.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! Data Protection API Prototypes and Definitions
7use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID};
8use shared::windef::HWND;
9use um::wincrypt::DATA_BLOB;
10use um::winnt::{LPCWSTR, LPWSTR, PSID, PVOID};
11pub const szFORCE_KEY_PROTECTION: &'static str = "ForceKeyProtection";
12pub const dwFORCE_KEY_PROTECTION_DISABLED: DWORD = 0x0;
13pub const dwFORCE_KEY_PROTECTION_USER_SELECT: DWORD = 0x1;
14pub const dwFORCE_KEY_PROTECTION_HIGH: DWORD = 0x2;
15STRUCT!{struct CRYPTPROTECT_PROMPTSTRUCT {
16    cbSize: DWORD,
17    dwPromptFlags: DWORD,
18    hwndApp: HWND,
19    szPrompt: LPCWSTR,
20}}
21pub type PCRYPTPROTECT_PROMPTSTRUCT = *mut CRYPTPROTECT_PROMPTSTRUCT;
22pub const CRYPTPROTECT_PROMPT_ON_UNPROTECT: DWORD = 0x1;
23pub const CRYPTPROTECT_PROMPT_ON_PROTECT: DWORD = 0x2;
24pub const CRYPTPROTECT_PROMPT_RESERVED: DWORD = 0x04;
25pub const CRYPTPROTECT_PROMPT_STRONG: DWORD = 0x08;
26pub const CRYPTPROTECT_PROMPT_REQUIRE_STRONG: DWORD = 0x10;
27pub const CRYPTPROTECT_UI_FORBIDDEN: DWORD = 0x1;
28pub const CRYPTPROTECT_LOCAL_MACHINE: DWORD = 0x4;
29pub const CRYPTPROTECT_CRED_SYNC: DWORD = 0x8;
30pub const CRYPTPROTECT_AUDIT: DWORD = 0x10;
31pub const CRYPTPROTECT_NO_RECOVERY: DWORD = 0x20;
32pub const CRYPTPROTECT_VERIFY_PROTECTION: DWORD = 0x40;
33pub const CRYPTPROTECT_CRED_REGENERATE: DWORD = 0x80;
34pub const CRYPTPROTECT_FIRST_RESERVED_FLAGVAL: DWORD = 0x0FFFFFFF;
35pub const CRYPTPROTECT_LAST_RESERVED_FLAGVAL: DWORD = 0xFFFFFFFF;
36extern "system" {
37    pub fn CryptProtectData(
38        pDataIn: *mut DATA_BLOB,
39        szDataDescr: LPCWSTR,
40        pOptionalEntropy: *mut DATA_BLOB,
41        pvReserved: PVOID,
42        pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
43        dwFlags: DWORD,
44        pDataOut: *mut DATA_BLOB,
45    ) -> BOOL;
46    pub fn CryptUnprotectData(
47        pDataIn: *mut DATA_BLOB,
48        ppszDataDescr: *mut LPWSTR,
49        pOptionalEntropy: *mut DATA_BLOB,
50        pvReserved: PVOID,
51        pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
52        dwFlags: DWORD,
53        pDataOut: *mut DATA_BLOB,
54    ) -> BOOL;
55    pub fn CryptProtectDataNoUI(
56        pDataIn: *mut DATA_BLOB,
57        szDataDescr: LPCWSTR,
58        pOptionalEntropy: *mut DATA_BLOB,
59        pvReserved: PVOID,
60        pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
61        dwFlags: DWORD,
62        pbOptionalPassword: *const BYTE,
63        cbOptionalPassword: DWORD,
64        pDataOut: *mut DATA_BLOB,
65    ) -> BOOL;
66    pub fn CryptUnprotectDataNoUI(
67        pDataIn: *mut DATA_BLOB,
68        ppszDataDescr: *mut LPWSTR,
69        pOptionalEntropy: *mut DATA_BLOB,
70        pvReserved: PVOID,
71        pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
72        dwFlags: DWORD,
73        pbOptionalPassword: *const BYTE,
74        cbOptionalPassword: DWORD,
75        pDataOut: *mut DATA_BLOB,
76    ) -> BOOL;
77    pub fn CryptUpdateProtectedState(
78        pOldSid: PSID,
79        pwszOldPassword: LPCWSTR,
80        dwFlags: DWORD,
81        pdwSuccessCount: *mut DWORD,
82        pdwFailureCount: *mut DWORD,
83    ) -> BOOL;
84}
85pub const CRYPTPROTECTMEMORY_BLOCK_SIZE: DWORD = 16;
86pub const CRYPTPROTECTMEMORY_SAME_PROCESS: DWORD = 0x00;
87pub const CRYPTPROTECTMEMORY_CROSS_PROCESS: DWORD = 0x01;
88pub const CRYPTPROTECTMEMORY_SAME_LOGON: DWORD = 0x02;
89extern "system" {
90    pub fn CryptProtectMemory(
91        pDataIn: LPVOID,
92        cbDataIn: DWORD,
93        dwFlags: DWORD,
94    ) -> BOOL;
95    pub fn CryptUnprotectMemory(
96        pDataIn: LPVOID,
97        cbDataIn: DWORD,
98        dwFlags: DWORD,
99    ) -> BOOL;
100}