public void AccessCheckByTypeResultListTest() { using (var pSD = AdvApi32Tests.GetSD(AdvApi32Tests.fn, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION | SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) using (var hTok = SafeHTOKEN.FromProcess(GetCurrentProcess(), TokenAccess.TOKEN_IMPERSONATE | TokenAccess.TOKEN_DUPLICATE | TokenAccess.TOKEN_READ).Duplicate(SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation)) { var ps = PRIVILEGE_SET.InitializeWithCapacity(100); var psSz = ps.SizeInBytes; var gm = GENERIC_MAPPING.GenericFileMapping; ACCESS_MASK accessMask = ACCESS_MASK.GENERIC_READ; MapGenericMask(ref accessMask, gm); var otl = new[] { new OBJECT_TYPE_LIST(ObjectTypeListLevel.ACCESS_OBJECT_GUID) }; var access = new uint[otl.Length]; var status = new uint[otl.Length]; Assert.That(AccessCheckByTypeResultList(pSD, default, hTok, accessMask, otl, (uint)otl.Length, gm, ps, ref psSz, access, status), ResultIs.Successful);
public void AccessCheckTest() { using (var pSD = GetSD(fn, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION | SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) using (var hTok = SafeHTOKEN.FromProcess(GetCurrentProcess(), TokenAccess.TOKEN_IMPERSONATE | TokenAccess.TOKEN_DUPLICATE | TokenAccess.TOKEN_READ).Duplicate(SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation)) { var ps = PRIVILEGE_SET.InitializeWithCapacity(10); var psSz = ps.SizeInBytes; var gm = GENERIC_MAPPING.GenericFileMapping; var accessMask = (uint)Kernel32.FileAccess.GENERIC_READ; MapGenericMask(ref accessMask, gm); var b = AccessCheck(pSD, hTok, accessMask, gm, ref ps, ref psSz, out var access, out var status); if (!b) { TestContext.WriteLine($"AccessCheck failed: {Win32Error.GetLastError()}"); } Assert.That(b, Is.True); TestContext.WriteLine($"Access={(Kernel32.FileAccess)access}; Status={status}"); } }