// 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, PULONG, ULONG, USHORT}; use um::accctrl::{ ACCESS_MODE, MULTIPLE_TRUSTEE_OPERATION, PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESS_W, PFN_OBJECT_MGR_FUNCTS, PINHERITED_FROMA, PINHERITED_FROMW, POBJECTS_AND_NAME_A, POBJECTS_AND_NAME_W, POBJECTS_AND_SID, PPROG_INVOKE_SETTING, PROG_INVOKE_SETTING, PTRUSTEE_A, PTRUSTEE_W, SE_OBJECT_TYPE, TRUSTEE_FORM, TRUSTEE_TYPE }; use um::winnt::{ HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PACCESS_MASK, PACL, PGENERIC_MAPPING, PSECURITY_DESCRIPTOR, PSID, PVOID, SECURITY_INFORMATION }; FN!{cdecl FN_PROGRESS( pObjectName: LPWSTR, Status: DWORD, pInvokeSetting: PPROG_INVOKE_SETTING, Args: PVOID, SecuritySet: BOOL, ) -> ()} extern "system" { pub fn SetEntriesInAclA( cCountOfExplicitEntries: ULONG, pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: *mut PACL, ) -> DWORD; pub fn SetEntriesInAclW( cCountOfExplicitEntries: ULONG, pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: *mut PACL, ) -> DWORD; pub fn GetExplicitEntriesFromAclA( pacl: PACL, pcCountOfExplicitEntries: PULONG, pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_A, ) -> DWORD; pub fn GetExplicitEntriesFromAclW( pacl: PACL, pcCountOfExplicitEntries: PULONG, pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_W, ) -> DWORD; pub fn GetEffectiveRightsFromAclA( pacl: PACL, pTrustee: PTRUSTEE_A, pAccessRight: PACCESS_MASK, ) -> DWORD; pub fn GetEffectiveRightsFromAclW( pacl: PACL, pTrustee: PTRUSTEE_W, pAccessRight: PACCESS_MASK, ) -> DWORD; pub fn GetAuditedPermissionsFromAclA( pAcl: PACL, pTrustee: PTRUSTEE_A, pSuccessfulAuditedRights: PACCESS_MASK, pFailedAuditRights: PACCESS_MASK, ) -> DWORD; pub fn GetAuditedPermissionsFromAclW( pAcl: PACL, pTrustee: PTRUSTEE_W, pSuccessfulAuditedRights: PACCESS_MASK, pFailedAuditRights: PACCESS_MASK, ) -> DWORD; pub fn GetNamedSecurityInfoA( pObjectName: LPCSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn GetNamedSecurityInfoW( pObjectName: LPCWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn GetSecurityInfo( handle: HANDLE, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn SetNamedSecurityInfoA( pObjectame: LPSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, psidOwner: PSID, psidGroup: PSID, pDacl: PACL, pSacl: PACL, ) -> DWORD; pub fn SetNamedSecurityInfoW( pObjectame: LPWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, psidOwner: PSID, psidGroup: PSID, pDacl: PACL, pSacl: PACL, ) -> DWORD; pub fn SetSecurityInfo( handle: HANDLE, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, psidOwner: PSID, psidGroup: PSID, pDacl: PACL, pSacl: PACL, ) -> DWORD; pub fn GetInheritanceSourceA( pObjectName: LPSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, Container: BOOL, pObjectClassGuids: *mut *mut GUID, GuidCount: DWORD, pAcl: PACL, pfnArray: PFN_OBJECT_MGR_FUNCTS, pGenericMapping: PGENERIC_MAPPING, pInheritArray: PINHERITED_FROMA, ) -> DWORD; pub fn GetInheritanceSourceW( pObjectName: LPWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, Container: BOOL, pObjectClassGuids: *mut *mut GUID, GuidCount: DWORD, pAcl: PACL, pfnArray: PFN_OBJECT_MGR_FUNCTS, pGenericMapping: PGENERIC_MAPPING, pInheritArray: PINHERITED_FROMW, ) -> DWORD; pub fn FreeInheritedFromArray( pInheritArray: PINHERITED_FROMW, AceCnt: USHORT, pfnArray: PFN_OBJECT_MGR_FUNCTS, ) -> DWORD; pub fn TreeResetNamedSecurityInfoA( pObjectName: LPSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, pOwner: PSID, pGroup: PSID, pDacl: PACL, pSacl: PACL, KeepExplicit: BOOL, fnProgress: FN_PROGRESS, ProgressInvokeSetting: PROG_INVOKE_SETTING, Args: PVOID, ) -> DWORD; pub fn TreeResetNamedSecurityInfoW( pObjectName: LPWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, pOwner: PSID, pGroup: PSID, pDacl: PACL, pSacl: PACL, KeepExplicit: BOOL, fnProgress: FN_PROGRESS, ProgressInvokeSetting: PROG_INVOKE_SETTING, Args: PVOID, ) -> DWORD; pub fn TreeSetNamedSecurityInfoA( pObjectName: LPSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, pOwner: PSID, pGroup: PSID, pDacl: PACL, pSacl: PACL, dwAction: DWORD, fnProgress: FN_PROGRESS, ProgressInvokeSetting: PROG_INVOKE_SETTING, Args: PVOID, ) -> DWORD; pub fn TreeSetNamedSecurityInfoW( pObjectName: LPWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, pOwner: PSID, pGroup: PSID, pDacl: PACL, pSacl: PACL, dwAction: DWORD, fnProgress: FN_PROGRESS, ProgressInvokeSetting: PROG_INVOKE_SETTING, Args: PVOID, ) -> DWORD; pub fn BuildSecurityDescriptorA( pOwner: PTRUSTEE_A, pGroup: PTRUSTEE_A, cCountOfAccessEntries: ULONG, pListOfAccessEntries: PEXPLICIT_ACCESS_A, cCountOfAuditEntries: ULONG, pListOfAuditEntries: PEXPLICIT_ACCESS_A, pOldSD: PSECURITY_DESCRIPTOR, pSizeNewSD: PULONG, pNewSD: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn BuildSecurityDescriptorW( pOwner: PTRUSTEE_W, pGroup: PTRUSTEE_W, cCountOfAccessEntries: ULONG, pListOfAccessEntries: PEXPLICIT_ACCESS_W, cCountOfAuditEntries: ULONG, pListOfAuditEntries: PEXPLICIT_ACCESS_W, pOldSD: PSECURITY_DESCRIPTOR, pSizeNewSD: PULONG, pNewSD: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn LookupSecurityDescriptorPartsA( ppOwner: *mut PTRUSTEE_A, ppGroup: *mut PTRUSTEE_A, pcCountOfAccessEntries: PULONG, ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_A, pcCountOfAuditEntries: PULONG, ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_A, pSD: PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn LookupSecurityDescriptorPartsW( ppOwner: *mut PTRUSTEE_W, ppGroup: *mut PTRUSTEE_W, pcCountOfAccessEntries: PULONG, ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_W, pcCountOfAuditEntries: PULONG, ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_W, pSD: PSECURITY_DESCRIPTOR, ) -> DWORD; pub fn BuildExplicitAccessWithNameA( pExplicitAccess: PEXPLICIT_ACCESS_A, pTrusteeName: LPSTR, AccessPermissions: DWORD, AccessMode: ACCESS_MODE, Inheritance: DWORD, ); pub fn BuildExplicitAccessWithNameW( pExplicitAccess: PEXPLICIT_ACCESS_W, pTrusteeName: LPWSTR, AccessPermissions: DWORD, AccessMode: ACCESS_MODE, Inheritance: DWORD, ); pub fn BuildImpersonateExplicitAccessWithNameA( pExplicitAccess: PEXPLICIT_ACCESS_A, pTrusteeName: LPSTR, pTrustee: PTRUSTEE_A, AccessPermissions: DWORD, AccessMode: ACCESS_MODE, Inheritance: DWORD, ); pub fn BuildImpersonateExplicitAccessWithNameW( pExplicitAccess: PEXPLICIT_ACCESS_W, pTrusteeName: LPWSTR, pTrustee: PTRUSTEE_W, AccessPermissions: DWORD, AccessMode: ACCESS_MODE, Inheritance: DWORD, ); pub fn BuildTrusteeWithNameA( pTrustee: PTRUSTEE_A, pName: LPSTR, ); pub fn BuildTrusteeWithNameW( pTrustee: PTRUSTEE_W, pName: LPWSTR, ); pub fn BuildImpersonateTrusteeA( pTrustee: PTRUSTEE_A, pImpersonateTrustee: PTRUSTEE_A, ); pub fn BuildImpersonateTrusteeW( pTrustee: PTRUSTEE_W, pImpersonateTrustee: PTRUSTEE_W, ); pub fn BuildTrusteeWithSidA( pTrustee: PTRUSTEE_A, pSid: PSID, ); pub fn BuildTrusteeWithSidW( pTrustee: PTRUSTEE_W, pSid: PSID, ); pub fn BuildTrusteeWithObjectsAndSidA( pTrustee: PTRUSTEE_A, pObjSid: POBJECTS_AND_SID, pObjectGuid: *mut GUID, pInheritedObjectGuid: *mut GUID, pSid: PSID, ); pub fn BuildTrusteeWithObjectsAndSidW( pTrustee: PTRUSTEE_W, pObjSid: POBJECTS_AND_SID, pObjectGuid: *mut GUID, pInheritedObjectGuid: *mut GUID, pSid: PSID, ); pub fn BuildTrusteeWithObjectsAndNameA( pTrustee: PTRUSTEE_A, pObjName: POBJECTS_AND_NAME_A, ObjectType: SE_OBJECT_TYPE, ObjectTypeName: LPSTR, InheritedObjectTypeName: LPSTR, Name: LPSTR, ); pub fn BuildTrusteeWithObjectsAndNameW( pTrustee: PTRUSTEE_W, pObjName: POBJECTS_AND_NAME_W, ObjectType: SE_OBJECT_TYPE, ObjectTypeName: LPWSTR, InheritedObjectTypeName: LPWSTR, Name: LPWSTR, ); pub fn GetTrusteeNameA( pTrustee: PTRUSTEE_A, ) -> LPSTR; pub fn GetTrusteeNameW( pTrustee: PTRUSTEE_W, ) -> LPWSTR; pub fn GetTrusteeTypeA( pTrustee: PTRUSTEE_A, ) -> TRUSTEE_TYPE; pub fn GetTrusteeTypeW( pTrustee: PTRUSTEE_W, ) -> TRUSTEE_TYPE; pub fn GetTrusteeFormA( pTrustee: PTRUSTEE_A, ) -> TRUSTEE_FORM; pub fn GetTrusteeFormW( pTrustee: PTRUSTEE_W, ) -> TRUSTEE_FORM; pub fn GetMultipleTrusteeOperationA( pTrustee: PTRUSTEE_A, ) -> MULTIPLE_TRUSTEE_OPERATION; pub fn GetMultipleTrusteeOperationW( pTrustee: PTRUSTEE_W, ) -> MULTIPLE_TRUSTEE_OPERATION; pub fn GetMultipleTrusteeA( pTrustee: PTRUSTEE_A, ) -> PTRUSTEE_A; pub fn GetMultipleTrusteeW( pTrustee: PTRUSTEE_W, ) -> PTRUSTEE_W; }