由游戏所想到的对注册表键的删除

虚拟光驱可以方便我们将用 ROM  介质才能玩的游戏从硬盘启动,但是有些游戏,特别是日本的有些游戏为了以防盗版添加了检测虚拟光驱的程序,这样的程序可以通过检测两项注册表键值来实现,即检测 HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/Scsi HKEY_LOCAL_MACHINE/SYSTEM/MountedDevices 两项键值。这两项键值包含了逻辑分区的一些信息,如果删除则可以轻松使得检测程序出错失效,而在重新启动计算机后,按常理系统将自动检测并修复两项注册表键值(若重启后出现错误,请参看本文最后的处理方法),所以重新启动计算机后,若游戏必须再进行删除,这样一来很不方便,所以想通过编写程序来自动删除键值。首先我们想到的是高级语言,便用 VB 调用 Windows API 中的 RegOpenKeyExRegDeleteKey 来编写如下程序进行注册表操作:
必须声明变量
Option Explicit
声明函数、变量、类和常量
''''//注册表 API 函数声明
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
    (
ByVal hKey As LongByVal lpSubKey As StringByVal ulOptions As Long, _
    
ByVal samDesired As Long, phkResult As LongAs Long

Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
   (
ByVal hKey As LongByVal lpSubKey As StringAs Long

''''//注册表访问权
Const KEY_ALL_ACCESS = &H3F

'''//注册表基本键值列表
Public Enum RootKeyEnum
   HKEY_CLASSES_ROOT 
= &H80000000
   HKEY_CURRENT_USER 
= &H80000001
   HKEY_LOCAL_MACHINE 
= &H80000002
   HKEY_USERS 
= &H80000003
   HKEY_PERFORMANCE_DATA_WIN2K_ONLY 
= &H80000004 ''''//仅Win2k
   HKEY_CURRENT_CONFIG = &H80000005
   HKEY_DYN_DATA 
= &H80000006
End Enum


Private Const ERR_NONE = 0
编写删除的主程序
Public Function DeleteRegistryKey(ByVal hKey As RootKeyEnum, _
RegKeyName 
As StringAs Boolean
'运行后返回 Boolean 值:True 表示操作成功; False 表示操作失败
On Error GoTo ErrHandle

   DeleteRegistryKey 
= False

   
Dim lRetval As Long      ''''//打开和输出注册表键的返回值
   Dim lRegHWND As Long     ''''//打开注册表键的句柄

  
   lRetval 
= RegOpenKeyEx(hKey, RegKeyName, 0, KEY_ALL_ACCESS, lRegHWND) '打开注册表键
  
   
If lRetval = ERR_NONE Then
      lRetval 
= RegDeleteKey(hKey, RegKeyName) '若打开未出现错误则删除
     
          
If lRetval <> ERR_NONE Then Exit Function '出错退出

          
If lRetval = ERR_NONE Then DeleteRegistryKey = True
     
   
End If
   
Exit Function
ErrHandle:

End Function
调用程序
If DeleteRegistryKey(HKEY_LOCAL_MACHINE, "SOFTWARE/Jmouse"= False Then
    MsgBox "删除键 HKEY_LOCAL_MACHINE/SOFTWARE/Jmouse 出错!"
Else
    MsgBox "成功删除键 HKEY_LOCAL_MACHINE/SOFTWARE/Jmouse !"
End If

这样,我们只需要调用 DeleteRegistryKey 便可以删除某个键值,但在上文叙述中提到的 HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/Scsi  却因为受到保护而不能删除,所以我们又想到了Windows 的命令行工具 REG.EXE,其命令操作方法可在命令提示符中键入 REG DELETE /? 来查看,下面我们以 HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/Scsi 为例介绍简单的强制删除注册表键的方法:
REG DELETE HKLM/HARDWARE/DEVICEMAP/Scsi /f
这样我们便可以强制删除一项键值。

删除以上两键值后可能出现的错误
在重新启动计算机后,可能出现在 我的电脑 中只有系统逻辑分区,而且其它介质的分区的盘符也出现了错误,若出现这样的错误,我们可以通过 我的电脑 -> 控制面板 -> 管理工具 -> 计算机管理 -> 磁盘管理 来重新调整磁盘的逻辑分区的盘符。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值