怎样在程序中屏蔽光驱,软驱?(20分)

  • 主题发起人 主题发起人 longlybug
  • 开始时间 开始时间
L

longlybug

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样做到我的程序在运行期间,光驱和软驱均不可使用?
 
一、 手工在Windows 98中隐藏光驱。
  Windows 98提供了隐藏某个磁盘驱动器(包括软驱、硬盘、光驱)的功能,我
们只需手工对注册表数据库进行修改即可达到隐藏光驱的目的,当然也就同样达到
了禁用光驱的目的。为此,可采用如下步骤:
  1. 单击“开始”按钮,然后选择“运行”命令,打开“运行”对话框。
  2. 在“运行”对话框的“打开”栏中输入“REGEDIT”,然后单击“确定”按
钮,启动Windows 98的注册表编辑器。
  3. 在注册表编辑器左边依次双击HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies
/Explorer,展开Explorer分支。
  4. 右击注册表编辑器右边空白处,然后执行“新建”菜单中的“二进制值”命
令,在Explorer主键下新建一个名为“新值 #1”的二进制值。
  5. 右击该二进制值,然后执行快捷菜单中的“重命名”命令,将“新值 #1”
二进制值改名为“NoDrives”。 该值就是用于设置是否隐藏某个驱动器的,它由四
个二进制字节构成(缺省值为00 00 00 00),每个字节的每一位都分别对应一个磁
盘驱动器的盘符,当某位为1时,资源管理器及“我的电脑”中的相应驱动器图标即
会隐藏起来。具体来说,“NoDrives”的第一个字节代表从A到H的八个盘(其中01
为A、02为B、04为C、08为D、10为E、20为F、40为G、80为H),第二个字节代表I
到P;第三个字节代表Q到X;第四个字节代表Y和Z。
  6. 双击NoDrives,系统弹出“编辑二进制值”对话框。
  7. 根据自己光驱盘符的实际情况对“NoDrives”的值进行修改,若光驱盘符为
D则应修改为08000000;若光驱盘符为E则应修改为10000000;若光驱盘符为F则应
修改为20000000……(将“NoDrives”改为FF FF FF FF则可隐藏所有驱动器)。
  8. 单击“确定”按钮,关闭“编辑二进制值”对话框。
  9. 执行注册表编辑器“注册表”菜单的“退出”命令,关闭注册表编辑器。
  10. 重新启动Windows 98。
  这样,光驱的图标就会从Windows 98的图形界面中消失,我们无论是从资源管
理器、我的电脑及打开文件、保存文件对话框中,还是在其他外挂文件管理器(如
Windows Command等)中都无法发现这些隐藏了的光驱的踪迹,从而达到了禁止他
人使用光驱的目的
以上栽自其他网站

procedure ShieldCDs;
function IsCDROM(DriveChar: Char): Boolean;
begin
Result := GetDriveType(PChar(DriveChar + ':/')) = DRIVE_CDROM;
end;
const
_PATH = '/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer';
var
I, T: Integer;
Buffer, Mask: DWORD;
R: TRegistry;
begin
Mask := 0;
for I := 0 to 25 do
if IsCDROM(Char(I + Ord('A'))) then Mask := Mask + 1 shl I;
R := TRegistry.Create;
R.Rootkey := HKEY_CURRENT_USER;
R.CreateKey(_PATH);
R.OpenKey(_PATH, False);
if R.ReadBinaryData('NoDrives', Buffer, SizeOf(Buffer)) = 0 then Buffer := 0;
Buffer := Buffer and not Mask or Mask; // 为了不破坏对其它驱动器的设置。
R.WriteBinaryData('NoDrives', Buffer, SizeOf(Buffer));
R.Free;
end;

 
[BLUE]procedure ShieldCDs;
function IsCDROM(DriveChar: Char): Boolean;
begin
Result := GetDriveType(PChar(DriveChar + ':/')) = DRIVE_CDROM;
end;
const
_PATH = '/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer';
var
I, T: Integer;
Buffer, Mask: DWORD;
R: TRegistry;
begin
Mask := 0;
for I := 0 to 25 do
if IsCDROM(Char(I + Ord('A'))) then Mask := Mask + 1 shl I;
R := TRegistry.Create;
R.Rootkey := HKEY_CURRENT_USER;
R.CreateKey(_PATH);
R.OpenKey(_PATH, False);
if R.ReadBinaryData('NoDrives', Buffer, SizeOf(Buffer)) = 0 then Buffer := 0;
Buffer := Buffer and not Mask or Mask; // 为了不破坏对其它驱动器的设置。
R.WriteBinaryData('NoDrives', Buffer, SizeOf(Buffer));
R.Free;
end;[/BLUE]
 
[RED]
比 benlei 大哥慢了一步~~~~
[/RED][:D][:D][:D]
 
如果在HKEY_CURRENT_USER中设置,那么用户如果不登陆运行此程序的那个用户,那么还是可以
使用的,特别是登陆时用户通过按“esc”健。
上面所说的“这样,光驱的图标就会从Windows 98的图形界面中消失,我们无论是从资源管
理器、我的电脑及打开文件、保存文件对话框中,还是在其他外挂文件管理器(如
Windows Command等)中都无法发现这些隐藏了的光驱的踪迹,”好象不太对,使用查找
等功能还是可以找到的,我已经写成程序试过了,因为我也有同样的需求。
 
我要的不是这种效果,我是要在程序运行的时候,光驱和软驱还是可见,
但是你插入软盘或光盘却不能读出。
 
就是锁定光、软驱吧。应该要用到类似VXD的底层编程。。。
关注:)
 
不是锁定光驱,而是正常可以插入光盘,但是就像是坏盘一样,读不了
“提示没有插入光盘”
 
注意,nt下这个nodrive的所在位置和98下不一样!!
 
没有答案的结束
 
多人接受答案了。
 
后退
顶部