Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0
// 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;
}