1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 use shared::guiddef::GUID; 7 use shared::minwindef::{BOOL, DWORD, PULONG, ULONG, USHORT}; 8 use um::accctrl::{ 9 ACCESS_MODE, MULTIPLE_TRUSTEE_OPERATION, PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESS_W, 10 PFN_OBJECT_MGR_FUNCTS, PINHERITED_FROMA, PINHERITED_FROMW, POBJECTS_AND_NAME_A, 11 POBJECTS_AND_NAME_W, POBJECTS_AND_SID, PPROG_INVOKE_SETTING, PROG_INVOKE_SETTING, PTRUSTEE_A, 12 PTRUSTEE_W, SE_OBJECT_TYPE, TRUSTEE_FORM, TRUSTEE_TYPE 13 }; 14 use um::winnt::{ 15 HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PACCESS_MASK, PACL, PGENERIC_MAPPING, 16 PSECURITY_DESCRIPTOR, PSID, PVOID, SECURITY_INFORMATION 17 }; 18 FN!{cdecl FN_PROGRESS( 19 pObjectName: LPWSTR, 20 Status: DWORD, 21 pInvokeSetting: PPROG_INVOKE_SETTING, 22 Args: PVOID, 23 SecuritySet: BOOL, 24 ) -> ()} 25 extern "system" { 26 pub fn SetEntriesInAclA( 27 cCountOfExplicitEntries: ULONG, 28 pListOfExplicitEntries: PEXPLICIT_ACCESS_A, 29 OldAcl: PACL, 30 NewAcl: *mut PACL, 31 ) -> DWORD; 32 pub fn SetEntriesInAclW( 33 cCountOfExplicitEntries: ULONG, 34 pListOfExplicitEntries: PEXPLICIT_ACCESS_W, 35 OldAcl: PACL, 36 NewAcl: *mut PACL, 37 ) -> DWORD; 38 pub fn GetExplicitEntriesFromAclA( 39 pacl: PACL, 40 pcCountOfExplicitEntries: PULONG, 41 pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_A, 42 ) -> DWORD; 43 pub fn GetExplicitEntriesFromAclW( 44 pacl: PACL, 45 pcCountOfExplicitEntries: PULONG, 46 pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_W, 47 ) -> DWORD; 48 pub fn GetEffectiveRightsFromAclA( 49 pacl: PACL, 50 pTrustee: PTRUSTEE_A, 51 pAccessRight: PACCESS_MASK, 52 ) -> DWORD; 53 pub fn GetEffectiveRightsFromAclW( 54 pacl: PACL, 55 pTrustee: PTRUSTEE_W, 56 pAccessRight: PACCESS_MASK, 57 ) -> DWORD; 58 pub fn GetAuditedPermissionsFromAclA( 59 pAcl: PACL, 60 pTrustee: PTRUSTEE_A, 61 pSuccessfulAuditedRights: PACCESS_MASK, 62 pFailedAuditRights: PACCESS_MASK, 63 ) -> DWORD; 64 pub fn GetAuditedPermissionsFromAclW( 65 pAcl: PACL, 66 pTrustee: PTRUSTEE_W, 67 pSuccessfulAuditedRights: PACCESS_MASK, 68 pFailedAuditRights: PACCESS_MASK, 69 ) -> DWORD; 70 pub fn GetNamedSecurityInfoA( 71 pObjectName: LPCSTR, 72 ObjectType: SE_OBJECT_TYPE, 73 SecurityInfo: SECURITY_INFORMATION, 74 ppsidOwner: *mut PSID, 75 ppsidGroup: *mut PSID, 76 ppDacl: *mut PACL, 77 ppSacl: *mut PACL, 78 ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, 79 ) -> DWORD; 80 pub fn GetNamedSecurityInfoW( 81 pObjectName: LPCWSTR, 82 ObjectType: SE_OBJECT_TYPE, 83 SecurityInfo: SECURITY_INFORMATION, 84 ppsidOwner: *mut PSID, 85 ppsidGroup: *mut PSID, 86 ppDacl: *mut PACL, 87 ppSacl: *mut PACL, 88 ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, 89 ) -> DWORD; 90 pub fn GetSecurityInfo( 91 handle: HANDLE, 92 ObjectType: SE_OBJECT_TYPE, 93 SecurityInfo: SECURITY_INFORMATION, 94 ppsidOwner: *mut PSID, 95 ppsidGroup: *mut PSID, 96 ppDacl: *mut PACL, 97 ppSacl: *mut PACL, 98 ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, 99 ) -> DWORD; 100 pub fn SetNamedSecurityInfoA( 101 pObjectame: LPSTR, 102 ObjectType: SE_OBJECT_TYPE, 103 SecurityInfo: SECURITY_INFORMATION, 104 psidOwner: PSID, 105 psidGroup: PSID, 106 pDacl: PACL, 107 pSacl: PACL, 108 ) -> DWORD; 109 pub fn SetNamedSecurityInfoW( 110 pObjectame: LPWSTR, 111 ObjectType: SE_OBJECT_TYPE, 112 SecurityInfo: SECURITY_INFORMATION, 113 psidOwner: PSID, 114 psidGroup: PSID, 115 pDacl: PACL, 116 pSacl: PACL, 117 ) -> DWORD; 118 pub fn SetSecurityInfo( 119 handle: HANDLE, 120 ObjectType: SE_OBJECT_TYPE, 121 SecurityInfo: SECURITY_INFORMATION, 122 psidOwner: PSID, 123 psidGroup: PSID, 124 pDacl: PACL, 125 pSacl: PACL, 126 ) -> DWORD; 127 pub fn GetInheritanceSourceA( 128 pObjectName: LPSTR, 129 ObjectType: SE_OBJECT_TYPE, 130 SecurityInfo: SECURITY_INFORMATION, 131 Container: BOOL, 132 pObjectClassGuids: *mut *mut GUID, 133 GuidCount: DWORD, 134 pAcl: PACL, 135 pfnArray: PFN_OBJECT_MGR_FUNCTS, 136 pGenericMapping: PGENERIC_MAPPING, 137 pInheritArray: PINHERITED_FROMA, 138 ) -> DWORD; 139 pub fn GetInheritanceSourceW( 140 pObjectName: LPWSTR, 141 ObjectType: SE_OBJECT_TYPE, 142 SecurityInfo: SECURITY_INFORMATION, 143 Container: BOOL, 144 pObjectClassGuids: *mut *mut GUID, 145 GuidCount: DWORD, 146 pAcl: PACL, 147 pfnArray: PFN_OBJECT_MGR_FUNCTS, 148 pGenericMapping: PGENERIC_MAPPING, 149 pInheritArray: PINHERITED_FROMW, 150 ) -> DWORD; 151 pub fn FreeInheritedFromArray( 152 pInheritArray: PINHERITED_FROMW, 153 AceCnt: USHORT, 154 pfnArray: PFN_OBJECT_MGR_FUNCTS, 155 ) -> DWORD; 156 pub fn TreeResetNamedSecurityInfoA( 157 pObjectName: LPSTR, 158 ObjectType: SE_OBJECT_TYPE, 159 SecurityInfo: SECURITY_INFORMATION, 160 pOwner: PSID, 161 pGroup: PSID, 162 pDacl: PACL, 163 pSacl: PACL, 164 KeepExplicit: BOOL, 165 fnProgress: FN_PROGRESS, 166 ProgressInvokeSetting: PROG_INVOKE_SETTING, 167 Args: PVOID, 168 ) -> DWORD; 169 pub fn TreeResetNamedSecurityInfoW( 170 pObjectName: LPWSTR, 171 ObjectType: SE_OBJECT_TYPE, 172 SecurityInfo: SECURITY_INFORMATION, 173 pOwner: PSID, 174 pGroup: PSID, 175 pDacl: PACL, 176 pSacl: PACL, 177 KeepExplicit: BOOL, 178 fnProgress: FN_PROGRESS, 179 ProgressInvokeSetting: PROG_INVOKE_SETTING, 180 Args: PVOID, 181 ) -> DWORD; 182 pub fn TreeSetNamedSecurityInfoA( 183 pObjectName: LPSTR, 184 ObjectType: SE_OBJECT_TYPE, 185 SecurityInfo: SECURITY_INFORMATION, 186 pOwner: PSID, 187 pGroup: PSID, 188 pDacl: PACL, 189 pSacl: PACL, 190 dwAction: DWORD, 191 fnProgress: FN_PROGRESS, 192 ProgressInvokeSetting: PROG_INVOKE_SETTING, 193 Args: PVOID, 194 ) -> DWORD; 195 pub fn TreeSetNamedSecurityInfoW( 196 pObjectName: LPWSTR, 197 ObjectType: SE_OBJECT_TYPE, 198 SecurityInfo: SECURITY_INFORMATION, 199 pOwner: PSID, 200 pGroup: PSID, 201 pDacl: PACL, 202 pSacl: PACL, 203 dwAction: DWORD, 204 fnProgress: FN_PROGRESS, 205 ProgressInvokeSetting: PROG_INVOKE_SETTING, 206 Args: PVOID, 207 ) -> DWORD; 208 pub fn BuildSecurityDescriptorA( 209 pOwner: PTRUSTEE_A, 210 pGroup: PTRUSTEE_A, 211 cCountOfAccessEntries: ULONG, 212 pListOfAccessEntries: PEXPLICIT_ACCESS_A, 213 cCountOfAuditEntries: ULONG, 214 pListOfAuditEntries: PEXPLICIT_ACCESS_A, 215 pOldSD: PSECURITY_DESCRIPTOR, 216 pSizeNewSD: PULONG, 217 pNewSD: *mut PSECURITY_DESCRIPTOR, 218 ) -> DWORD; 219 pub fn BuildSecurityDescriptorW( 220 pOwner: PTRUSTEE_W, 221 pGroup: PTRUSTEE_W, 222 cCountOfAccessEntries: ULONG, 223 pListOfAccessEntries: PEXPLICIT_ACCESS_W, 224 cCountOfAuditEntries: ULONG, 225 pListOfAuditEntries: PEXPLICIT_ACCESS_W, 226 pOldSD: PSECURITY_DESCRIPTOR, 227 pSizeNewSD: PULONG, 228 pNewSD: *mut PSECURITY_DESCRIPTOR, 229 ) -> DWORD; 230 pub fn LookupSecurityDescriptorPartsA( 231 ppOwner: *mut PTRUSTEE_A, 232 ppGroup: *mut PTRUSTEE_A, 233 pcCountOfAccessEntries: PULONG, 234 ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_A, 235 pcCountOfAuditEntries: PULONG, 236 ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_A, 237 pSD: PSECURITY_DESCRIPTOR, 238 ) -> DWORD; 239 pub fn LookupSecurityDescriptorPartsW( 240 ppOwner: *mut PTRUSTEE_W, 241 ppGroup: *mut PTRUSTEE_W, 242 pcCountOfAccessEntries: PULONG, 243 ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_W, 244 pcCountOfAuditEntries: PULONG, 245 ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_W, 246 pSD: PSECURITY_DESCRIPTOR, 247 ) -> DWORD; 248 pub fn BuildExplicitAccessWithNameA( 249 pExplicitAccess: PEXPLICIT_ACCESS_A, 250 pTrusteeName: LPSTR, 251 AccessPermissions: DWORD, 252 AccessMode: ACCESS_MODE, 253 Inheritance: DWORD, 254 ); 255 pub fn BuildExplicitAccessWithNameW( 256 pExplicitAccess: PEXPLICIT_ACCESS_W, 257 pTrusteeName: LPWSTR, 258 AccessPermissions: DWORD, 259 AccessMode: ACCESS_MODE, 260 Inheritance: DWORD, 261 ); 262 pub fn BuildImpersonateExplicitAccessWithNameA( 263 pExplicitAccess: PEXPLICIT_ACCESS_A, 264 pTrusteeName: LPSTR, 265 pTrustee: PTRUSTEE_A, 266 AccessPermissions: DWORD, 267 AccessMode: ACCESS_MODE, 268 Inheritance: DWORD, 269 ); 270 pub fn BuildImpersonateExplicitAccessWithNameW( 271 pExplicitAccess: PEXPLICIT_ACCESS_W, 272 pTrusteeName: LPWSTR, 273 pTrustee: PTRUSTEE_W, 274 AccessPermissions: DWORD, 275 AccessMode: ACCESS_MODE, 276 Inheritance: DWORD, 277 ); 278 pub fn BuildTrusteeWithNameA( 279 pTrustee: PTRUSTEE_A, 280 pName: LPSTR, 281 ); 282 pub fn BuildTrusteeWithNameW( 283 pTrustee: PTRUSTEE_W, 284 pName: LPWSTR, 285 ); 286 pub fn BuildImpersonateTrusteeA( 287 pTrustee: PTRUSTEE_A, 288 pImpersonateTrustee: PTRUSTEE_A, 289 ); 290 pub fn BuildImpersonateTrusteeW( 291 pTrustee: PTRUSTEE_W, 292 pImpersonateTrustee: PTRUSTEE_W, 293 ); 294 pub fn BuildTrusteeWithSidA( 295 pTrustee: PTRUSTEE_A, 296 pSid: PSID, 297 ); 298 pub fn BuildTrusteeWithSidW( 299 pTrustee: PTRUSTEE_W, 300 pSid: PSID, 301 ); 302 pub fn BuildTrusteeWithObjectsAndSidA( 303 pTrustee: PTRUSTEE_A, 304 pObjSid: POBJECTS_AND_SID, 305 pObjectGuid: *mut GUID, 306 pInheritedObjectGuid: *mut GUID, 307 pSid: PSID, 308 ); 309 pub fn BuildTrusteeWithObjectsAndSidW( 310 pTrustee: PTRUSTEE_W, 311 pObjSid: POBJECTS_AND_SID, 312 pObjectGuid: *mut GUID, 313 pInheritedObjectGuid: *mut GUID, 314 pSid: PSID, 315 ); 316 pub fn BuildTrusteeWithObjectsAndNameA( 317 pTrustee: PTRUSTEE_A, 318 pObjName: POBJECTS_AND_NAME_A, 319 ObjectType: SE_OBJECT_TYPE, 320 ObjectTypeName: LPSTR, 321 InheritedObjectTypeName: LPSTR, 322 Name: LPSTR, 323 ); 324 pub fn BuildTrusteeWithObjectsAndNameW( 325 pTrustee: PTRUSTEE_W, 326 pObjName: POBJECTS_AND_NAME_W, 327 ObjectType: SE_OBJECT_TYPE, 328 ObjectTypeName: LPWSTR, 329 InheritedObjectTypeName: LPWSTR, 330 Name: LPWSTR, 331 ); 332 pub fn GetTrusteeNameA( 333 pTrustee: PTRUSTEE_A, 334 ) -> LPSTR; 335 pub fn GetTrusteeNameW( 336 pTrustee: PTRUSTEE_W, 337 ) -> LPWSTR; 338 pub fn GetTrusteeTypeA( 339 pTrustee: PTRUSTEE_A, 340 ) -> TRUSTEE_TYPE; 341 pub fn GetTrusteeTypeW( 342 pTrustee: PTRUSTEE_W, 343 ) -> TRUSTEE_TYPE; 344 pub fn GetTrusteeFormA( 345 pTrustee: PTRUSTEE_A, 346 ) -> TRUSTEE_FORM; 347 pub fn GetTrusteeFormW( 348 pTrustee: PTRUSTEE_W, 349 ) -> TRUSTEE_FORM; 350 pub fn GetMultipleTrusteeOperationA( 351 pTrustee: PTRUSTEE_A, 352 ) -> MULTIPLE_TRUSTEE_OPERATION; 353 pub fn GetMultipleTrusteeOperationW( 354 pTrustee: PTRUSTEE_W, 355 ) -> MULTIPLE_TRUSTEE_OPERATION; 356 pub fn GetMultipleTrusteeA( 357 pTrustee: PTRUSTEE_A, 358 ) -> PTRUSTEE_A; 359 pub fn GetMultipleTrusteeW( 360 pTrustee: PTRUSTEE_W, 361 ) -> PTRUSTEE_W; 362 } 363