1 /** 2 Windows API header module 3 4 Translated from MinGW Windows headers 5 6 License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 Authors: Stewart Gordon, Luna Nielsen 8 */ 9 module nulib.system.win32.aclapi; 10 import nulib.system.win32.accctrl; 11 import nulib.system.win32.basetyps; 12 import nulib.system.win32.w32api; 13 import nulib.system.win32.winnt; 14 15 pragma(lib, "advapi32"); 16 17 version (ANSI) { 18 } else version = Unicode; 19 20 extern (Windows) nothrow @nogc { 21 VOID BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR, DWORD, 22 ACCESS_MODE, DWORD); 23 VOID BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR, DWORD, 24 ACCESS_MODE, DWORD); 25 DWORD BuildSecurityDescriptorA(PTRUSTEE_A, PTRUSTEE_A, ULONG, 26 PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, 27 PULONG, PSECURITY_DESCRIPTOR*); 28 DWORD BuildSecurityDescriptorW(PTRUSTEE_W, PTRUSTEE_W, ULONG, 29 PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, 30 PULONG, PSECURITY_DESCRIPTOR*); 31 VOID BuildTrusteeWithNameA(PTRUSTEE_A, LPSTR); 32 VOID BuildTrusteeWithNameW(PTRUSTEE_W, LPWSTR); 33 VOID BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A, POBJECTS_AND_NAME_A, 34 SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR); 35 VOID BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W, POBJECTS_AND_NAME_W, 36 SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR); 37 VOID BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A, POBJECTS_AND_SID, 38 GUID*, GUID*, PSID); 39 VOID BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W, POBJECTS_AND_SID, 40 GUID*, GUID*, PSID); 41 VOID BuildTrusteeWithSidA(PTRUSTEE_A, PSID); 42 VOID BuildTrusteeWithSidW(PTRUSTEE_W, PSID); 43 DWORD GetAuditedPermissionsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK, 44 PACCESS_MASK); 45 DWORD GetAuditedPermissionsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK, 46 PACCESS_MASK); 47 DWORD GetEffectiveRightsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK); 48 DWORD GetEffectiveRightsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK); 49 DWORD GetExplicitEntriesFromAclA(PACL, PULONG, PEXPLICIT_ACCESS_A*); 50 DWORD GetExplicitEntriesFromAclW(PACL, PULONG, PEXPLICIT_ACCESS_W*); 51 static if (_WIN32_WINNT >= 0x501) { 52 DWORD GetInheritanceSourceA(LPSTR, SE_OBJECT_TYPE, 53 SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*, 54 PGENERIC_MAPPING, PINHERITED_FROMA); 55 DWORD GetInheritanceSourceW(LPWSTR, SE_OBJECT_TYPE, 56 SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*, 57 PGENERIC_MAPPING, PINHERITED_FROMW); 58 } 59 DWORD GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, 60 PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); 61 DWORD GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, 62 PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); 63 DWORD GetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, 64 PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); 65 TRUSTEE_FORM GetTrusteeFormA(PTRUSTEE_A); 66 TRUSTEE_FORM GetTrusteeFormW(PTRUSTEE_W); 67 LPSTR GetTrusteeNameA(PTRUSTEE_A); 68 LPWSTR GetTrusteeNameW(PTRUSTEE_W); 69 TRUSTEE_TYPE GetTrusteeTypeA(PTRUSTEE_A); 70 TRUSTEE_TYPE GetTrusteeTypeW(PTRUSTEE_W); 71 DWORD LookupSecurityDescriptorPartsA(PTRUSTEE_A*, PTRUSTEE_A*, PULONG, 72 PEXPLICIT_ACCESS_A*, PULONG, PEXPLICIT_ACCESS_A*, 73 PSECURITY_DESCRIPTOR); 74 DWORD LookupSecurityDescriptorPartsW(PTRUSTEE_W*, PTRUSTEE_W*, PULONG, 75 PEXPLICIT_ACCESS_W*, PULONG, PEXPLICIT_ACCESS_W*, 76 PSECURITY_DESCRIPTOR); 77 DWORD SetEntriesInAclA(ULONG, PEXPLICIT_ACCESS_A, PACL, PACL*); 78 DWORD SetEntriesInAclW(ULONG, PEXPLICIT_ACCESS_W, PACL, PACL*); 79 DWORD SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, 80 PSID, PSID, PACL, PACL); 81 DWORD SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, 82 PSID, PSID, PACL, PACL); 83 DWORD SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, 84 PSID, PACL, PACL); 85 VOID BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR, 86 PTRUSTEE_A, DWORD, ACCESS_MODE, DWORD); 87 VOID BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR, 88 PTRUSTEE_W, DWORD, ACCESS_MODE, DWORD); 89 VOID BuildImpersonateTrusteeA(PTRUSTEE_A, PTRUSTEE_A); 90 VOID BuildImpersonateTrusteeW(PTRUSTEE_W, PTRUSTEE_W); 91 PTRUSTEE_A GetMultipleTrusteeA(PTRUSTEE_A); 92 PTRUSTEE_W GetMultipleTrusteeW(PTRUSTEE_W); 93 MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationA(PTRUSTEE_A); 94 MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationW(PTRUSTEE_W); 95 } 96 97 version (Unicode) { 98 alias BuildExplicitAccessWithName = BuildExplicitAccessWithNameW; 99 alias BuildSecurityDescriptor = BuildSecurityDescriptorW; 100 alias BuildTrusteeWithName = BuildTrusteeWithNameW; 101 alias BuildTrusteeWithObjectsAndName = BuildTrusteeWithObjectsAndNameW; 102 alias BuildTrusteeWithObjectsAndSid = BuildTrusteeWithObjectsAndSidW; 103 alias BuildTrusteeWithSid = BuildTrusteeWithSidW; 104 alias GetAuditedPermissionsFromAcl = GetAuditedPermissionsFromAclW; 105 alias GetEffectiveRightsFromAcl = GetEffectiveRightsFromAclW; 106 alias GetExplicitEntriesFromAcl = GetExplicitEntriesFromAclW; 107 alias GetNamedSecurityInfo = GetNamedSecurityInfoW; 108 alias GetTrusteeForm = GetTrusteeFormW; 109 alias GetTrusteeName = GetTrusteeNameW; 110 alias GetTrusteeType = GetTrusteeTypeW; 111 alias LookupSecurityDescriptorParts = LookupSecurityDescriptorPartsW; 112 alias SetEntriesInAcl = SetEntriesInAclW; 113 alias SetNamedSecurityInfo = SetNamedSecurityInfoW; 114 alias BuildImpersonateExplicitAccessWithName = BuildImpersonateExplicitAccessWithNameW; 115 alias BuildImpersonateTrustee = BuildImpersonateTrusteeW; 116 alias GetMultipleTrustee = GetMultipleTrusteeW; 117 alias GetMultipleTrusteeOperation = GetMultipleTrusteeOperationW; 118 } else { 119 alias BuildExplicitAccessWithName = BuildExplicitAccessWithNameA; 120 alias BuildSecurityDescriptor = BuildSecurityDescriptorA; 121 alias BuildTrusteeWithName = BuildTrusteeWithNameA; 122 alias BuildTrusteeWithObjectsAndName = BuildTrusteeWithObjectsAndNameA; 123 alias BuildTrusteeWithObjectsAndSid = BuildTrusteeWithObjectsAndSidA; 124 alias BuildTrusteeWithSid = BuildTrusteeWithSidA; 125 alias GetAuditedPermissionsFromAcl = GetAuditedPermissionsFromAclA; 126 alias GetEffectiveRightsFromAcl = GetEffectiveRightsFromAclA; 127 alias GetExplicitEntriesFromAcl = GetExplicitEntriesFromAclA; 128 alias GetNamedSecurityInfo = GetNamedSecurityInfoA; 129 alias GetTrusteeForm = GetTrusteeFormA; 130 alias GetTrusteeName = GetTrusteeNameA; 131 alias GetTrusteeType = GetTrusteeTypeA; 132 alias LookupSecurityDescriptorParts = LookupSecurityDescriptorPartsA; 133 alias SetEntriesInAcl = SetEntriesInAclA; 134 alias SetNamedSecurityInfo = SetNamedSecurityInfoA; 135 alias BuildImpersonateExplicitAccessWithName = BuildImpersonateExplicitAccessWithNameA; 136 alias BuildImpersonateTrustee = BuildImpersonateTrusteeA; 137 alias GetMultipleTrustee = GetMultipleTrusteeA; 138 alias GetMultipleTrusteeOperation = GetMultipleTrusteeOperationA; 139 }