2011-03-10 69 views
1

我想从我的C#代码执行.exe文件。 .exe文件需要在注册表中存在一些密钥。现在我有两个选择: 1.我可以添加密钥,执行文件,然后删除我从注册表中添加的内容。 2.或者如果可能的话,我可以伪造注册表中的密钥,以便.exe可以执行,而且我不必修改注册表。有没有办法在C#中伪造注册表项?

有人可以告诉我,如果#2是可能的吗?如果没有,那么是否有其他更好的方法来处理这种情况(perhapds撤消我从注册表中所做的更改)?还是我必须坚持#1?

请指导我。

感谢

+0

你会如何伪造Windows注册表?您所描述的是强制EXE沿着不同的代码路径,而不是使用Windows API调用来访问注册表。这需要反汇编代码或用某种HEX编辑器进行修改,这些编辑器实际上超出了本网站的范围。 – 2011-03-10 02:03:06

+0

如果您添加了密钥,然后又无法恢复,会有多严重?请记住,您的程序可能会在该关键时间间隔内发生故障(不可恢复的RAM错误,电源故障等) – 2011-03-10 02:18:24

+1

听起来你很明显:把它添加到注册表中,*不要*删除它,永远不要乱用它再次。安装人员的典型工作。 – 2011-03-10 02:25:01

回答

2

拦截注册表中读取不是为微弱的心脏几乎肯定会需要数量级比选择更多的工作了几个数量1

0

它在技术上可能使用拦截的注册表调用像Detours。但是,拦截代码不能用C#编写,并且必须使用C++(或C,我想)。更不用说,以一种可靠的方式做到这一点将是一个lot的工作。

+0

Detours不是必需的,简单的DLL注入就足够了。 – 2011-03-10 02:09:08

2

There is a function for that,但它只影响调用它的过程。所以你将不得不使用DLL注入。 C#(或任何类型的托管代码)不会是我完成这个任务的选择。

1

如果必须拦截读,然后开始开发调用CmRegisterCallback挂钩全系统的调用并筛选出那些你需要的C/C++的驱动器。但我想你会严重后悔甚至开始该项目...只是去选择1。

相关问题