// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use shared::guiddef::GUID; use shared::minwindef::{BOOL, DWORD, LPDWORD}; use um::winnt::{LANGID, LCID, LPWSTR, WCHAR}; ENUM!{enum INSTALLSPECTYPE { APPNAME = 1, FILEEXT, PROGID, COMCLASS, }} STRUCT!{struct INSTALLSPEC_APPNAME { Name: *mut WCHAR, GPOId: GUID, }} STRUCT!{struct INSTALLSPEC_COMCLASS { Clsid: GUID, ClsCtx: DWORD, }} UNION!{union INSTALLSPEC { [u32; 5] [u64; 3], AppName AppName_mut: INSTALLSPEC_APPNAME, FileExt FileExt_mut: *mut WCHAR, ProgId ProgId_mut: *mut WCHAR, COMClass COMClass_mut: INSTALLSPEC_COMCLASS, }} STRUCT!{struct INSTALLDATA { Type: INSTALLSPECTYPE, Spec: INSTALLSPEC, }} pub type PINSTALLDATA = *mut INSTALLDATA; ENUM!{enum APPSTATE { ABSENT, ASSIGNED, PUBLISHED, }} pub const LOCALSTATE_ASSIGNED: DWORD = 0x1; pub const LOCALSTATE_PUBLISHED: DWORD = 0x2; pub const LOCALSTATE_UNINSTALL_UNMANAGED: DWORD = 0x4; pub const LOCALSTATE_POLICYREMOVE_ORPHAN: DWORD = 0x8; pub const LOCALSTATE_POLICYREMOVE_UNINSTALL: DWORD = 0x10; pub const LOCALSTATE_ORPHANED: DWORD = 0x20; pub const LOCALSTATE_UNINSTALLED: DWORD = 0x40; STRUCT!{struct LOCALMANAGEDAPPLICATION { pszDeploymentName: LPWSTR, pszPolicyName: LPWSTR, pszProductId: LPWSTR, dwState: DWORD, }} pub type PLOCALMANAGEDAPPLICATION = *mut LOCALMANAGEDAPPLICATION; pub const MANAGED_APPS_USERAPPLICATIONS: DWORD = 0x1; pub const MANAGED_APPS_FROMCATEGORY: DWORD = 0x2; pub const MANAGED_APPS_INFOLEVEL_DEFAULT: DWORD = 0x10000; pub const MANAGED_APPTYPE_WINDOWSINSTALLER: DWORD = 0x1; pub const MANAGED_APPTYPE_SETUPEXE: DWORD = 0x2; pub const MANAGED_APPTYPE_UNSUPPORTED: DWORD = 0x3; STRUCT!{struct MANAGEDAPPLICATION { pszPackageName: LPWSTR, pszPublisher: LPWSTR, dwVersionHi: DWORD, dwVersionLo: DWORD, dwRevision: DWORD, GpoId: GUID, pszPolicyName: LPWSTR, ProductId: GUID, Language: LANGID, pszOwner: LPWSTR, pszCompany: LPWSTR, pszComments: LPWSTR, pszContact: LPWSTR, pszSupportUrl: LPWSTR, dwPathType: DWORD, bInstalled: BOOL, }} pub type PMANAGEDAPPLICATION = *mut MANAGEDAPPLICATION; STRUCT!{struct APPCATEGORYINFO { Locale: LCID, pszDescription: LPWSTR, AppCategoryId: GUID, }} STRUCT!{struct APPCATEGORYINFOLIST { cCategory: DWORD, pCategoryInfo: *mut APPCATEGORYINFO, }} extern "system" { pub fn InstallApplication( pInstallInfo: PINSTALLDATA, ) -> DWORD; pub fn UninstallApplication( ProductCode: LPWSTR, dwStatus: DWORD, ) -> DWORD; pub fn CommandLineFromMsiDescriptor( Descriptor: LPWSTR, CommandLine: LPWSTR, CommandLineLength: *mut DWORD, ) -> DWORD; pub fn GetManagedApplications( pCategory: *mut GUID, dwQueryFlags: DWORD, dwInfoLevel: DWORD, pdwApps: LPDWORD, prgManagedApps: *mut PMANAGEDAPPLICATION, ) -> DWORD; pub fn GetLocalManagedApplications( bUserApps: BOOL, pdwApps: LPDWORD, prgManagedApps: *mut PMANAGEDAPPLICATION, ) -> DWORD; pub fn GetLocalManagedApplicationData( ProductCode: LPWSTR, DisplayName: *mut LPWSTR, SupportUrl: *mut LPWSTR, ); pub fn GetManagedApplicationCategories( dwReserved: DWORD, pAppCategory: *mut APPCATEGORYINFOLIST, ) -> DWORD; }