因为很急,不得以出此下策。
问题描述:
    我想控制磁盘分区的访问,就是说在本机上用户试图访问硬盘的某一分区时,截获这一消息并不给他访问出现死机状态;
    而用户在网络中访问时不控制;如果以上做不到,那么:
   控制用户在“我的电脑”和资源管理器“中的访问,也就是
截获用户在“我的电脑”中文件列表框和地址栏中的访问;
截获用户在“资源管理器”中目录列表框和地址栏中的访问;
并不给他访问出现死机状态;请给出详细代码
解决后另开4贴(100分一贴)请您进去拿分。请帮帮我

解决方案 »

  1.   

    98下面用这个DeviceIoControl,发个通知码就可以了,具体那个你自己查吧,我记不清了
    好像是写几个寄存器,然后发送通知码,寄存器里面有盘符,想只读,或不可访问什么的,自己设置
      

  2.   

    Volume Management Control CodesThe following control codes are used in volume management.Control code Operation 
    FSCTL_DISMOUNT_VOLUME Dismounts a volume. 
    FSCTL_EXTEND_VOLUME Increases the size of a mounted volume. 
    FSCTL_GET_NTFS_VOLUME_DATA Retrieves information about the specified NTFS volume. 
    FSCTL_IS_VOLUME_MOUNTED Determines whether the specified volume is mounted, or if the specified file or directory is on a mounted volume. 
    FSCTL_LOCK_VOLUME Locks a volume. 
    FSCTL_READ_FROM_PLEX Reads from the specified plex. 
    FSCTL_UNLOCK_VOLUME Unlocks a volume. 
    IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS Retrieves the physical location of the specified volume on one or more disks. 
    IOCTL_VOLUME_IS_CLUSTERED Determines whether a volume is clustered. 
    The following control codes are used with change journals.Value Meaning 
    FSCTL_CREATE_USN_JOURNAL Creates a change journal stream on a target volume or modifies an existing change journal stream. 
    FSCTL_DELETE_USN_JOURNAL Deletes a change journal on a volume or awaits notification of deletion of a change journal. 
    FSCTL_ENUM_USN_DATA Creates an enumeration that lists the change journal entries between two specified boundaries. 
    FSCTL_MARK_HANDLE Marks a specified file or directory and its change journal record with information about changes to that file or directory. 
    FSCTL_QUERY_USN_JOURNAL Queries for information on the current change journal, its records, and its capacity. 
    FSCTL_READ_FILE_USN_DATA Retrieves the change-journal information for the specified file or directory. 
    FSCTL_READ_USN_JOURNAL Returns to the calling process the set of change journal records between two specified USN values. 
    FSCTL_SECURITY_ID_CHECK Performs a bulk security check of the security identifiers exposed through USN records. 
    FSCTL_WRITE_USN_CLOSE_RECORD Generates a record in the change journal stream for the input file. This record will have the USN_REASON_CLOSE flag. 
    Platform SDK Release: February 2003  What did you think of this topic?
      Order a Platform SDK CD 
      

  3.   

    我现在已经截获了
    用WH_CALLWNDPROC
    用户在“资源管理器”中目录列表框的SysTreeView32消息,
    但不知怎么不让
    “资源管理器”不执行这一消息
    同时将消息发送到我的窗口(使用HOOK另一应用中已传入hwnd)
    又怎么从这个消息中得出用户选择的Item的值
    如只要控制D:盘
      

  4.   

    那就快了。楼主水平不错吗。findWindow("资源管理器"),sendMessage(WM_CLOSE,0,0);
    可以吗???
      

  5.   

    如果只限制从我的电脑和资源管理器中访问的话,不需要编程实现添加个注册表键值就可以了Software\Microsoft\Windows\CurrentVersion\Policies\ExplorerName: NoViewOnDrive
    Type: Dword
    Value: 一个数字,从最低位到最高位依次代表A, B, C, ... , Z 如果要限制用户访问A盘和C盘,让它的值等于5就可以了(5的二进制是101)设置在HKEY_CURRENT_USER下,则只限制当前用户
    设置在HKEY_LOCAL_MACHINE,则限制当前机器上所有用户
    另外还有另外一个是在我的电脑和资源管理器中隐藏驱动器的,但用户可以在地址栏将路径进行访问Name: NoDrives
    Type: Dword
    Value: 意思跟上一个差不多,只不过是在我的电脑中隐藏相应的驱动器
      

  6.   

    多谢
    我主是水平太差,VC不会呀xstring(麻雀) 
    我是想分盘符控制
    用你的方法不行
    如只控制D盘不能访问现在关键是
    同时将消息发送到我的窗口(使用HOOK另一应用中已传入hwnd)
    又怎么从这个消息中得出用户选择的Item的值
      

  7.   

    只控制D盘不能访问的话
    你试试在HKEY_CURRENT_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    下面加上
    DWORD的NoViewOnDrive值为8
    然后注销再登录,看看你能在我的电脑中访问d盘么不想隐藏就不设NoDrive
      

  8.   

    多谢
    请指点第二种方法的HOOK
      

  9.   

    请问楼上兄弟
    FileMon
    在哪里有?
      

  10.   

    你先去www.sysinternals.com下一个filemon看看符不符合你的要求.
    源代码现在不公开了,不过之前公开的源代码很多地方都有的下载.
      

  11.   

    我三年前以前改过FileMon的代码,只能监视,不能监控(控制)
      

  12.   

    我现在已经截获了
    用WH_CALLWNDPROC
    用户在“资源管理器”中目录列表框的SysTreeView32消息,
    但:
    1,不知为什么钩不到WM_LBUTTONDOWN消息;
    2 ,但不知又怎么从这个消息中得出用户选择的Item的值
    如只要控制D:盘
    继续求助
      

  13.   

    我发现在SPY中
     Message中监视到
    第三个参数为p (Posted)
    的消息无法钩到,不知怎么回事?
      

  14.   

    我用鼠标钩子
    已经截获了
    这2个窗口的
    “资源管理器”中的SysTreeView32 和 “我的电脑”中的SysListView32 的
    鼠标点击
    但不知道
    怎么得到用户将要点击的item的值
    因为我要分盘符控制
    如只控制 D盘请帮忙,
      

  15.   

    能监视就能监控。在驱动程序栈中不往下传递IRP就可以了。
      

  16.   

    有C的朋友嘛?
    我的钩子中截获鼠标的WM_LBUTTONDOWN消息后
    用 SendMessage(OrgWnd,TVM_GETNEXTITEM,TVGN_CARET,hitem);
    ltWnd = ((PCWPSTRUCT)hitem)->hwnd;
    SendMessage(ltWnd,TVM_GETITEM,0,(LPARAM) pitem);//(LPTVITEM)
    strcpy(szDiskName,((TV_ITEM *)pitem)->pszText);得到当前Tree的item的text后
    无法不执行这条消息
    return 1;
    也不行
    不加上面的代码就可以 
      

  17.   

    我本来是控制在资源管理器左边的目录列表中
    用户不能点击
    如D盘控制访问
    现在用HOOK截获取WM_LBUTTONDOWN消息
    如果直接return 1;
    就可以实现但不能分盘符控制
    我用上面的方法得到item的text后
    想判断是D盘再控制
    但我return 1;时也没用,还是执行了点击消息