Initializing Wintrust_File_Info
let mut wt_file_info = WINTRUST_FILE_INFO{
cbStruct : std::mem::size_of::<WINTRUST_FILE_INFO>() as DWORD,
pcwszFilePath : file_path_wide.as_ptr(),//.as_ptr() as *const u16,
hFile : ptr::null_mut(),
pgKnownSubject : ptr::null_mut(),
};
Initializing WinTrust_Data
wt_data.cbStruct = std::mem::size_of::<WINTRUST_DATA>() as DWORD;
wt_data.dwUIChoice = WTD_UI_NONE;
wt_data.hWVTStateData = ptr::null_mut();
wt_data.pwszURLReference = ptr::null_mut();
wt_data.fdwRevocationChecks = WTD_REVOKE_NONE;
wt_data.pPolicyCallbackData = ptr::null_mut();
wt_data.pSIPClientData = ptr::null_mut();
wt_data.dwUnionChoice = WTD_CHOICE_FILE;
wt_data.dwStateAction = 1;
WINTRUST_DATA
has one member u
which takes WINTRUST_DATA_u
as input
STRUCT!{struct WINTRUST_DATA {
cbStruct: DWORD,
pPolicyCallbackData: LPVOID,
pSIPClientData: LPVOID,
dwUIChoice: DWORD,
fdwRevocationChecks: DWORD,
dwUnionChoice: DWORD,
u: WINTRUST_DATA_u,
dwStateAction: DWORD,
hWVTStateData: HANDLE,
pwszURLReference: *mut WCHAR,
dwProvFlags: DWORD,
dwUIContext: DWORD,
pSignatureSettings: *mut WINTRUST_SIGNATURE_SETTINGS,
}}
UNION!{union WINTRUST_DATA_u {
[usize; 1],
pFile pFile_mut: *mut WINTRUST_FILE_INFO,
}}
How do we initialize pFile
in WINTRUST_DATA_u
with WINTRUST_FILE_INFO
and then initialize wt_data.u