Tag: 模拟

需要一些建议来尝试模拟.NET WebClient或等效的

我有一些代码可以下载一些RSS源。 我一直在使用WebClient或Argotic.Syndication.RssFeed库。 但这些都不可模糊:( 我绝对不希望每次运行unit testing时都能看到真正的RSS提要。 有没有人对我能做什么有任何建议? 我需要创建一个邪恶的包装器吗? 如果是的话……对此有何建议?

模拟和CurrentUser注册表访问

环境:Windows XP SP3,C#,. Net 4.0 问题: 我试图在模拟类中添加对模拟用户注册表配置单元的访问权限,并且我根据被模拟的用户类型遇到问题(或者更准确地说,限制似乎是模仿用户)。 我最初遵循CodeProject的模拟示例,该示例显示在使用通过从LogonUser()获取的原始令牌调用DuplcateToken()生成的重复令牌开始模拟后调用LoadUserProfile() LogonUser() 。 我无法让这个示例在我的环境中使用管理员帐户冒充有限的用户(从示例中包含的屏幕截图看来,它似乎是在Windows Vista \ 7系统上完成的,并且没有提供有关涉及的帐户类型)。 对LoadUserProfile()的调用抛出了“拒绝访问”的错误。 查看userenv.log显示“LoadUserProfile:无法启用还原权限。”错误c0000022“。 MSDN上的LoadUserProfile文档显示调用进程必须拥有SE_RESTORE_NAME和SE_BACKUP_NAME权限,默认情况下只有Administrators和Backup Operators组的成员具有该权限。 (作为旁注,当我尝试稍后将这两个权限添加到Users组时,我仍然收到拒绝访问但是userenv.log显示“DropClientContext:Client [number]没有足够的权限。错误5”我无法’找到任何信息) 鉴于我冒充的用户没有这些权限,我将调用LoadUserProfile()调用到开始模拟之前,这次加载没有问题,我能够在此测试中读取和写入。 考虑到我发现了我的答案,我创建了帐户类型的条件检查,以便在模拟之前调用LoadUserProfile() ,如果当前用户是管理员的成员,或者等到模仿后如果该成员不是管理员的成员(在后面的例子中,我将依赖具有这些特权的模拟用户)。 不幸的是我错了; 我没有发现我的答案。 当我使用反转角色测试呼叫时(用户>管理员)对LoadUserProfile() )的调用仍然失败,并且Access Denied错误和userenv.log显示相同的“LoadUserProfile:无法启用恢复权限。错误c0000061 ”但是这次是一个不同的错误号。 认为默认情况下可能无法在LogonUser()和\或DuplicateToken()返回的令牌上启用权限,我在从WindowsIdentity.GetCurrent(TokenAccessLevels.AdjustPrivileges | TokenAccessLevels.Query).Token )获取的当前用户令牌(在模拟后发生AdjustTokenPrivilege()上添加了两次AdjustTokenPrivilege()调用。 WindowsIdentity.GetCurrent(TokenAccessLevels.AdjustPrivileges | TokenAccessLevels.Query).Token 。 指定了TokenAccessLevels.AdjustPrivileges和TokenAccessLevels.Query ,因为MSDN上的AdjustTokenPrivilege文档指定在调整的令牌上需要它们(我还尝试使用从System.Diagnostics.Process.GetCurrentProcess().Handle检索的句柄通过调用OpenProcessToken()获取令牌。 System.Diagnostics.Process.GetCurrentProcess().Handle但是当用户在模拟内部和外部调用时失败, GetCurrentProcess()是拒绝访问的函数 与WindowsIdentity…Token一起使用时, AdjustTokenPrivilege()成功返回WindowsIdentity…Token但LoadUserProfile()仍然导致拒绝访问(还原权限)。 在这一点上,我不相信AdjustTokenPrivilege()正在做它的工作,所以我开始确定哪些特权是可用的,以及他们使用GetTokenInformation()获得特定令牌的状态,这导致了它自己的一小部分乐趣。 在学习了一些新东西后,我能够调用GetTokenInformation()并打印出一系列权限及其当前状态,但结果有些不确定,因为Restore和Backup在调用AdjustTokenPrivilege()之前和之后都显示了0的属性作为管理员和冒充管理员(奇怪的是,当调用AdjustTokenPrivilege()时,令牌上的其他三个权限从2更改为1,而不是实际调整的值保持为0的其他权限 我删除了对DuplicateToken()的调用,并将其使用的所有位置替换为LogonUser()返回的令牌,以查看这是否有助于测试令牌上的权限LogonUser()和DuplicateToken()令牌是相同。 当我最初编写模拟类时,我在调用WindowsImpersonationContext.Impersonate()一直使用主令牌而没有任何问题,并认为值得一试。 在下面提供的代码示例中,我可以在以管理员身份运行时模拟和访问用户的注册表,但不是相反。 任何帮助将不胜感激。 post前编辑: 我也尝试使用RegOpenCurrentUser() API代替LoadUserProfile() ,并成功使用管理员>自我和管理员>用户模拟,但是当从其他管理员帐户或用户RegOpenCurrentUser()模拟管理员时,返回指向HKEY_USERS的指针\ S-1-5-18(不管是什么)而不是实际的帐户蜂巢。 我猜是因为它实际上没有加载,这让我回到LoadUserProfile() […]

需要模拟用户访问网络资源,Asp.Net帐户

我需要访问只有给定域帐户才能访问的网络资源。 我正在使用LogonUser调用,但获得“用户没有必需的特权”exception,因为Web应用程序使用asp.net帐户运行,并且它没有足够的权限来进行此调用。 有办法解决它吗? 更改ASP.Net帐户的身份或权限不是一个选项,因为这是一个运行许多项目的生产计算机。 有没有更好的方法来实现这一目标? 使用Asp.Net 2.0,表单身份validation。 亲切的问候。

在C#中模拟键盘输入

我需要知道如何模拟键W , S , A , D键盘输入。 我没有使用SendKeys ,也没有使用InputSimulator库而没有修复。 我正在尝试做的是将游戏(战场,自然选择等新的FPS游戏)等应用程序注册为真正的击键。 我正在尝试创建一个虚拟控制器程序,其中外部控件将注册为这些游戏的键盘输入。 有没有办法手动模拟键盘输入,就像有这样的东西? [DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void mouse_event(uint dwFlags, uint dx, uint dy, int cButtons, uint dwExtraInfo);

validation方法被调用

使用Moq,我有一个非常奇怪的问题,即如果我设置的方法是公共的,模拟上的设置似乎只有效。 我不知道这是一个Moq bug还是我错了(Moq的新手)。 以下是测试用例: public class TestClass { public string Say() { return Hello(); } internal virtual string Hello() { return “”; } } [TestMethod] public void Say_WhenPublic_CallsHello() { Mock mock = new Mock(); mock.Setup(x => x.Hello()).Returns(“Hello World”); string result = mock.Object.Say(); mock.Verify(x => x.Hello(), Times.Exactly(1)); Assert.AreEqual(“Hello World”, result); } 该消息失败了: Say_WhenPublic_CallsHello失败:Moq.MockException:未在模拟上执行1次调用:x => x.Hello()在Moq.Mock.ThrowVerifyException(预期IProxyCall,表达式,时间)… 如果我像这样公开Hello方法,则测试通过。 […]

Process.Start()模拟问题

尝试使用另一个访问令牌启动进程,但没有成功,它作为非模拟用户运行。 using (WindowsIdentity identity = new WindowsIdentity(token)) using (identity.Impersonate()) { Process.Start(“blabla.txt”); } 如何使这项工作正常?