当前位置:首页 » 密码管理 » 32位程序访问64位注册表

32位程序访问64位注册表

发布时间: 2022-08-31 11:45:41

Ⅰ 如何将32位的文件转换为64位的

摘要 把32位的注册表文件转换为64位的方法:

Ⅱ 32位操作系统怎么打开64位的注册表

这个貌似不可以的吧,我用硬盘安装法安装64位系统,32位PE就是无法运行任何64位的文件啊,还是放弃这样的想法吧,估计有牛人知道哇

Ⅲ 有没有哪位有C#或VB.NET的32位程序读写win7 64位注册表的可用的例子

try
{
if (int.Parse(Distinguish64or32System()) == 0x40)
{
Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Wow6432Node", true).OpenSubKey("Microsoft", true).OpenSubKey("Internet Explorer", true).OpenSubKey("MAIN", true).CreateSubKey("FeatureControl").CreateSubKey("FEATURE_BROWSER_EMULATION").SetValue("BOCIES.exe", 0x1f40);
}
else
{
Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Internet Explorer", true).OpenSubKey("MAIN", true).CreateSubKey("FeatureControl").CreateSubKey("FEATURE_BROWSER_EMULATION").SetValue("BOCIES.exe", 0x1f40);
}
}
catch (Exception exception)
{
GobleExceptionMsgLog.AddText(exception.Message);
}

Ⅳ 如何解决易语言编译的32位程序在64位系统运行的注册表写入转向问题

可能你所遇到的问题是编译器链接出错的问题吧,正常情况下,在64位运行正常,如果是编译时出错,请找到易语言安装文件夹,我不清楚你用的什么版本,安装文件夹下有个静态编译修正器,如果这个位置没有的话,请找到tools目录下,会看到这工具!

(如果以上没有解决你的问题,我可以把我的版本发给你用!)

【我用心解答,如果解决了您的问题,一定记得采纳额!】

Ⅳ 64位系统与32位的问题 200高分!

推荐windows7旗舰版64位,在兼容上已经做得很好!

64 位与 32 位电脑相比,64 位电脑能处理更大数量的信息。由于 64 位计算机可以使用更多 RAM(4 GB 以上),因此当您同时运行多个程序时,它具有更强的响应能力。

无论您选择哪种系统,Windows 7 均适用。除家庭普通版外,其他所有零售版本的 Windows 7 包中都包含 32 位以及 64 位软件。

----------------------------------------------------------------------

1、为什么需要64位操作系统?

最简单的原因,每个人的要求都是越来越高的,有更好的东西,当然是受欢迎的。其它的原因:随着多媒体功能的渗入和硬件价格的日趋平民化,越来越多的人加入到PC应用的行列,造就了一大批进行家庭多媒体创作等应用的非专业人士,很多人不再满足于用电脑打字、作表格、上网聊天等简单应用。随着人们对电脑要求越来越高,32位系统已力不从心。

2、64位与32位相比有啥特色?

32位Windows能支持最多4GB的系统内存,每个处理器可最多使用2GB专用内存。 x64 Edition当前支持多达128GB内存,随着硬件功能的增强和内存大小的增加,有可能支持多达16TB(1TB=1000GB)的虚拟内存;使用 64 位的 Windows,应用程序可以将足够多的数据预加载到虚拟内存中,以便 Itanium 处理器快速访问这些数据。这种特性减少了将数据载入虚拟内存,以及查找读取数据并将数据写入数据存储设备所花费的时间,因此可使应用程序运行地更快、更高效。

从个人桌面系统用户的角度来看,内存容量的限制只是体现64位计算技术优势的一个方面,大量数据处理才是64位计算真正发挥功效的地方。PC已经不仅仅是用户计算的工具,它更是“多媒体”中心,很多这方面应用是32位计算根本无法满足的。如在家用领域,32位无法实现高保真的声像,甚至无法完成20分钟视频的播放和编辑;在建筑、游戏设计领域,32位计算无法完成大量的数据计算和处理;在互联网上,32位计算无法实现大量的各种类型的数据搜索——这些应用都需要64位计算来实现。

64位和32位体系结构的比较:

地址空间 64 位 Windows 32 位 Windows

物理内存 128 GB 4 GB

虚拟内存 16 TB 4 GB

页面文件 512 TB 16 TB

页面缓冲池 128 GB 470 MB

非页面缓冲池 128 GB 256 MB

系统缓存 1 TB 1 GB

3、64位的劣势和门槛,32位程序如何在64位上运行?

对目前而言,64位Windows最大的一个劣势就是兼容性,而兼容性方面最突出的就是各种硬件设备的驱动程序。64位和32位Windows XP的硬件驱动程序完全不能混用。一般的软件程序在64位上无问题,但是如果该软件安装时还会向系统中装入驱动程序,则是不行的。所有目前大多的杀毒软件在64位上都是跑不起来的,同理针对64位系统的强势病毒也不多。

那么32位程序如何在64位上运行的呢?

1)重定向技术

为了将32位和64位程序分开,在64位系统上运行的运行的32位程序,有一个被叫做 wow64的模拟器,帮助32位程序模拟运行在64位下。这样的技术叫做重定向技术,设计文 件重定向和注册表重定向

2)文件如何被重定向?

64位的文件系统,%systemroot%/system32 目录和programfiles目录被保留给64位文件使用,而32位文件会被重定向到%systemroot%/SysWOW64目录和programfiles(x86)目录。换句话说,所有的32位程序只会出现在%systemroot%/SysWOW64目录和programfiles(x86)目录。任何32位程序试图访问%systemroot%/system32 和programfiles目录的企图都会被重定向到%systemroot%/SysWOW64目录和programfiles(x86)目录。这个是一个默认的行为,除非程序的线程明确的指名需要关闭这种重定向机制。

3)注册表如何重定向?

64位机器维护两份注册表,一份32位注册表项,一份64位注册表项。64位系统默认的64 位版本注册表编辑器 (Regedit.exe) 可显示 64 位和 32 位的 注册表项。

在 64 位版本的注册表编辑器中,32 位注册表项显示在以下注册表项下:

HKEY_LOCAL_MACHINE"Software"WOW6432Node可以使用 %systemroot%"Syswow64 文件夹中的 32 位版本注册表编辑器查看或编辑 32 位注册表项和项值。

WOW64 使用了一个“注册表反射器”来在 64 位注册表视图和 32 位注册表视图之间镜像某些注册表项和项值。

受反射的注册表项

WOW64 注册表反射器可能会在反射过程中修改注册表项的内容和项值,目的是为了调整路径名等。因此,32 位的内容与 64 位的内容可能会有所不同。下面的注册表项会被反射:

· HKEY_LOCAL_MACHINE"Software"Classes

· HKEY_LOCAL_MACHINE"Software"COM3

· HKEY_LOCAL_MACHINE"Software"Ole

· HKEY_LOCAL_MACHINE"Software"EventSystem

· HKEY_LOCAL_MACHINE"Software"RPC

· HKEY_CLASSES_ROOT

· HKEY_CURRENT_USER"Software"Classes

· HKEY_USERS"*"Software"Classes

· HKEY_USERS"*_Classes

4、64位操作系统在安全性方面有哪些优越性呢?

EVP(Enhanced Virus Protection,增强型病毒防护)是AMD Althlon 64处理器中采用的一种全新的防毒技术,但它只提供硬件支持,这一功能与Windows XP SP2或64位Windows XP的DEP(Date Execution Prevention,数据执行保护)技术相结合。两者结合后将生成一种全新的恶意代码防御机制:将所有内存位置均标记为不可执行——除非该位置已明确包含可执行代码。当有攻击程序企图在不可执行的内存位置中插入代码并执行代码时,这一行为将会被阻止。不难想象,除非得到了用户的允许,不明代码是很难执行的,这能在很大程度上扼制病毒等恶意代码的入侵。

Ⅵ 如何把32位的注册表文件转换为64位的

把32位的注册表文件转换为64位的方法:
1.为了防止注册表键冲突,注册表在某些键也分成了两个部分。
2.一部分是专门给64位系统访问的,另一部分是专门给32位系统访问的,放在Wow6432Node下面。当32位程序去访问某些键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面。
3.Wow6432Node这个节点存在于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面。和RegOpenKeyEx方法办到。RegOpenEx方法在C#中调用声明方法如下:
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint RegOpenKeyEx( UIntPtr hKey,string lpSubKey, uint ulOptions,int samDesired,out IntPtr phkResult);
其中需要注意的是samDesired这个参数。这个参数可以取 KEY_ALL_ACCESS, KEY_QUERY_VALUE, KEY_WOW64_64KEY等值(详情可以查阅MSDN)。已经关闭了文件系统的转向,那么就可以利用:(KEY_QUERY_VALUE | KEY_WOW64_64KEY)来得到注册表的完全访问权限。这个地方需要注意的是,在Vista下面,有一些注册表项是只读的,如果用了KEY_ALL_ACCESS这个参数,就会出现“Access is denied” 这个错误(ErrorCode = 5)。因此,如果不是要写入注册表的话,不要使用KEY_ALL_ACCESS。

Ⅶ 32位注册表无法导入到64位系统中

64位的系统最好就只是装64位的软件好了,32位的的注册表信息就算可以导入也只入一部份,有的软件支持两种,但总而言之,64位的注册表为了兼容,也将注册表 分为了两个部份,一个部分供32位的使用,一个部份供64位的使用。

当前计算机系统已经逐渐地从32位转到64位,XP,2003,VISTA都有64位的版本。从目前而言,32位应用程序还是占了绝大多数,但是也有部分应用程序既有32位版本,又有64位版本。为了保证32位程序可以顺利运行在64位系统上,微软提供了一套叫WOW64的模拟机制。通常把这套系统称为WOW64。从总体上来说,WOW64是一套基于用户模式的动态链接库,它可以把32位应用程序的发出的命令翻译成64位系统可以接受的格式。从下图中可以大概地看出32位应用程序运行在64位系统上的方式。

当32位应用程序运行的时候,首先会去启动本地库加载器(Native Library Loader)。加载器会识别出应用程序是32位的并且用特殊的方式来处理它。加载器会为32位应用程序建立起一个WOW64的模拟环境并把控制权交给32位的Ntdll.dll。运行在32位应用程序和64位Ntdll.dll之间的WOW64模拟环境会将32位应用程序的指令翻译成64位Ntdll.dll可以接受的方式,并且它也可以把系统的指令翻译成32位应用程序可以接受的方式。

2 如何判断系统是64位
3 文件系统的转向

32位进程不能加载64位Dll,64位进程也不可以加载32位Dll。Windows的系统目录包含了所有安装的应用程序和它们的Dll文件,根据我们所述的规则,它应该被分为给64位应用程序的目录和给32位应用程序的目录。如果不这样,我们就无法区分32位和64位的Dll文件。对于64位应用程序,其文件通常被放在%windir%\system32和%programfiles%(比如:c:\program files)。对于32位应用程序,其文件通常在%windir%\syswow64和C:\program files (x86)下面。如果我们用32位程序去访问%windir%\system32,不管我们用硬编码还是其它的方式,系统都会自动地给我们转向到%windir%\syswow64下面。这种转向对于每个32位应用程序默认都是打开的。但是这种转向对于我们来说并不总是需要的。那么我们可以在C#里面调用相关的API来关闭和打开这种转向。常用的函数有3个,(关闭系统转向),Wow64RevertWow64FsRedirection(打开系统转向),Wow64EnableWow64FsRedirection(打开系统转向)。但是Wow64EnableWow64FsRedirection在嵌套使用的时候不可靠,所以通常用上面的Wow64RevertWow64FsRedirection来打开文件系统转向功能。在C#中,我们可以利用DllImport直接调用这两个函数。但是要注意到的是,在32位的Kernel.dll中是没有这两个函数的。那么在C++中应该使用LoadLibrary来动态加载这两个函数。否则会因为找不到这两个函数而无法通过编译。而且在目前的使用中,发现这两个函数有一个小小的问题。如果我们在调用了后去调用Comdlg32.dll的GetOpenFileName函数,是无法调用成功的。但是也得不到Error的值。在C#中可以用如下的代码关闭和打开文件的转向。

声明调用规则

[DllImport( "Kernel32.dll", CharSet=CharSet.Auto, SetLastError = true)]
public static extern bool (ref IntPtr ptr);
[DllImport( "Kernel32.dll", CharSet=CharSet.Auto, SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

关闭转向

(ref Ptr);

打开转向

Wow64RevertWow64FsRedirection(Ptr);

要注意的是,关闭和打开要成对出现。以免出现混乱的行为。

4 注册表的转向

为了防止注册表键冲突,注册表在某些键也分成了两个部分。一部分是专门给64位系统访问的,另一部分是专门给32位系统访问的,放在Wow6432Node下面。当32位程序去访问某些键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面。Wow6432Node这个节点存在于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面。如果我们希望关闭这个转向的话,可以通过上面的和RegOpenKeyEx方法办到。RegOpenEx方法在C#中调用声明方法如下:

[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint RegOpenKeyEx( UIntPtr hKey,string lpSubKey, uint ulOptions,int samDesired,out IntPtr phkResult);

其中需要注意的是samDesired这个参数。这个参数可以取 KEY_ALL_ACCESS, KEY_QUERY_VALUE, KEY_WOW64_64KEY等值(详情可以查阅MSDN)。当我们已经关闭了文件系统的转向,那么就可以利用:(KEY_QUERY_VALUE | KEY_WOW64_64KEY)来得到注册表的完全访问权限。这个地方需要注意的是,在Vista下面,有一些注册表项是只读的,如果用了KEY_ALL_ACCESS这个参数,就会出现“Access is denied” 这个错误(ErrorCode = 5)。因此,如果不是要写入注册表的话,最好不要使用KEY_ALL_ACCESS。我们可以用如下代码来完全访问注册表。

//use this function transfer the string key name to HKEY handle
private static UIntPtr TransferKeyName(string keyName)
{
UIntPtr HKEY_CLASSES_ROOT = (UIntPtr)0x80000000;
UIntPtr HKEY_CURRENT_USER = (UIntPtr)0x80000001;
UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
UIntPtr HKEY_USERS = (UIntPtr)0x80000003;
UIntPtr HKEY_CURRENT_CONFIG = (UIntPtr)0x80000005;

switch(keyName)
{
case "HKEY_CLASSES_ROOT":
return HKEY_CLASSES_ROOT;
case "HKEY_CURRENT_USER":
return HKEY_CURRENT_USER;
case "HKEY_LOCAL_MACHINE":
return HKEY_LOCAL_MACHINE;
case "HKEY_USERS":
return HKEY_USERS;
case "HKEY_CURRENT_CONFIG":
return HKEY_CURRENT_CONFIG;
}

return HKEY_CLASSES_ROOT;
}

public static bool OpenRegKey(string keyName, string subKeyName)
{
UIntPtr hKey = TransferKeyName(keyName);
UIntPtr phkResult = UIntPtr.Zero;
int KEY_QUERY_VALUE = (0x0001);
int KEY_WOW64_64KEY = (0x0100);
int KEY_ALL_WOW64 = (KEY_QUERY_VALUE | KEY_WOW64_64KEY);

if(Is64bitOS && !IsWow64RedirectionEnabled) //The os is 64 bit and the FileRedirection is closed
{
samDesired = KEY_ALL_WOW64;
}

if(RegOpenKeyEx(hKey, subKeyName,0,samDesired,out phkResult) == 0) //ERROR_SUCCESS=0
{
return true;
}

int errCode = System.Runtime.InteropServices.Marshal.GetLastWin32Error();

return false;
}

热点内容
海澜之家广告脚本 发布:2025-05-17 13:56:06 浏览:29
手文件夹恢复 发布:2025-05-17 13:53:32 浏览:992
linux怎么看进程 发布:2025-05-17 13:53:30 浏览:302
thinkphp字段缓存 发布:2025-05-17 13:52:01 浏览:574
山灵app安卓版如何设置 发布:2025-05-17 13:51:49 浏览:387
帆布压缩袋 发布:2025-05-17 13:26:27 浏览:457
c语言16进制表示方法 发布:2025-05-17 13:11:25 浏览:480
ftp单位 发布:2025-05-17 13:10:03 浏览:142
c语言编写n的阶乘 发布:2025-05-17 13:10:02 浏览:685
lockjava 发布:2025-05-17 13:02:08 浏览:311