当前位置:编程学习 > VB >>

能否限制某个文件夹的访问权?

能否限制某个文件夹的访问权(不是指登陆用户的权限):只能由指定的进程访问,其他进程不能访问,包括Windows的文件管理器?
我的想法是:我的VB应用程序运行后,不允许其他程序(包括Windows的文件管理器)访问某个文件夹,只允许自己的应用程序访问这个文件夹.这样我可以将一些重要的数据读写到这个文件夹的临时文件中,而不允许用户通过其他方法读取这些重要数据.
不知可否做到,真诚请教! --------------------编程问答-------------------- 先坐沙发,回头来看,呵呵^-^ --------------------编程问答-------------------- 网上见过的例子:http://www.pudn.com/downloads87/sourcecode/windows/vxd/detail335196.html
这里是一个名为hidedirforother的例子,说明为"对本程序不隐藏 对其他程序隐藏,目录,盘符 其他进程不能访问目录,打开,修改,删除,格式化"。但代码是C的,看不懂。还请高手指点。 --------------------编程问答--------------------
引用 2 楼 gdzsk 的回复:
网上见过的例子:http://www.pudn.com/downloads87/sourcecode/windows/vxd/detail335196.html
这里是一个名为hidedirforother的例子,说明为"对本程序不隐藏 对其他程序隐藏,目录,盘符 其他进程不能访问目录,打开,修改,删除,格式化"。但代码是C的,看不懂。还请高手指点。


这是ifs ddk中的东西,写的是驱动级别的玩意,vb做不到。 --------------------编程问答-------------------- 这段代码可以禁止打开、复制、移动、删除文件夹。但仍然可以在应用程序(例如Excel)中通过对话框打开被锁定文件夹中的文件。不知是否可以改进一下?

' **********************************************************************
'  描  述:文件夹锁定解锁示例
'  xywhsoft.cn : 星月无痕鼎力打造全国最好的VB学习网站
'  星月无痕收集整理
'  网址:http://www.xywhsoft.cn/
'  QQ:605072846
'  E-mail:xywhsoft@qq.com
' **********************************************************************
Option Explicit
Private Const FILE_LIST_DIRECTORY = &H1
Private Const FILE_SHARE_READ = &H1&
Private Const FILE_SHARE_DELETE = &H4&
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal PassZero As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal PassZero As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Dim File_Share_Flag As Long
Dim hDir As Long

Private Sub cmdlock_Click()
    Dim PathDir As String
    PathDir = "C:\Test\"
    hDir = CreateFile(PathDir, FILE_LIST_DIRECTORY, File_Share_Flag, _
                      ByVal 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, ByVal 0&)
    cmdlock.Enabled = False
    cmdunlock.Enabled = True
End Sub

Private Sub cmdunlock_Click()
    CloseHandle hDir
    cmdlock.Enabled = True
    cmdunlock.Enabled = False
End Sub

Private Sub Form_Load()
    File_Share_Flag = 0 'if =FILE_SHARE_READ then read only (for example)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call cmdunlock_Click
End Sub
--------------------编程问答-------------------- 简单问题不要搞复杂。
你的目的就是保存一些私有数据不许其它程序访问,直接用文件加锁就可以了,下面的例子保证你的窗体运行期间其它程序不能访问数据文件
Option Explicit

Private hFile As Integer

Private Sub Form_Load()
    hFile = FreeFile
    Open "C:\temp\1.dat" For Binary Access Read Write Lock Read Write As #hFile
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Close #hFile
End Sub
--------------------编程问答--------------------
引用 4 楼 gdzsk 的回复:
这段代码可以禁止打开、复制、移动、删除文件夹。但仍然可以在应用程序(例如Excel)中通过对话框打开被锁定文件夹中的文件。不知是否可以改进一下? 

' ********************************************************************** 
'  描  述:文件夹锁定解锁示例 
'  xywhsoft.cn : 星月无痕鼎力打造全国最好的VB学习网站 
'  星月无痕收集整理 
'  网址:http://www.xywhsoft.cn/ 
'  QQ:605072846 
'  E-mail:xywhs…


怎么我用它可以正确锁定?
你“照抄”后没有作必要的修改吧!

你注意这句:
PathDir = "C:\Test\"
是锁定 C:\Test\ 目录。
你要锁定哪个目录,就要改成相应的目录才行。
--------------------编程问答-------------------- 我测试时,锁定后的目录,用:我的电脑、IE、Excel的打开对话框、CommonDialog32的打开对话框都没法打开这个目录。
--------------------编程问答-------------------- 七楼的说的对,我测试了四楼的代码,是可以锁定。谢谢四楼,学习了!!!! --------------------编程问答--------------------
引用 8 楼 QiaoDaLi 的回复:
七楼的说的对,我测试了四楼的代码,是可以锁定。谢谢四楼,学习了!!!!

四楼就是楼主贴的 ^_^

楼主在网上找的代码。

--------------------编程问答-------------------- 好像有一个问题,文件夹受限后,自己的程序也访问不了了 --------------------编程问答-------------------- 4楼代码其实就是独占了列目录的功能;
而用资源管理器进入、文件打开对话框等都需要列目录,所以似乎被独占了;
但是,其它程序除了不能对该目录执行 Dir(),只要预先知道文件名,依旧可以对目录下的文件进行读写。

所以不如像我5楼代码一样锁定文件更安全。 --------------------编程问答--------------------
引用 11 楼 Tiger_Zhao 的回复:
4楼代码其实就是独占了列目录的功能; 
而用资源管理器进入、文件打开对话框等都需要列目录,所以似乎被独占了; 
但是,其它程序除了不能对该目录执行 Dir(),只要预先知道文件名,依旧可以对目录下的文件进行读写。 

所以不如像我5楼代码一样锁定文件更安全。

不会吧!
我今天再试了一下,锁定后,在DOS命令行中,也无法进入该目录。
比如,我锁定:E:\Temp\VB程序\
然后打开DOS命令行,执行:
E:
CD E:\Temp\VB程序\

无法进入:另一个程序正在使用此文件,进程无法访问。


然后,我用记事本打开 E:\Temp\VB程序\质数表.bas
错误提示为:
  路径不存在。
  请检查所给的路径是否正确。
--------------------编程问答-------------------- DOS 的 CD 是肯定要区目录信息的,所以不行。
记事本也许对文件所在的目录进行了某些操作,无法确认;你可以再写一个VB程序直接读写指定文件。 --------------------编程问答-------------------- 不知道什么原因,我测试和我的朋友测试也是如11楼、12楼所说,有两种结果。我测试的结果是:“只要预先知道文件名,依旧可以对目录下的文件进行读写”,我朋友的测试结果是:无论是否知道文件名,均无法访问。奇怪了! --------------------编程问答-------------------- 比较一下:操作系统、文件系统、用户权限。 --------------------编程问答-------------------- 4L的方法可以用,但你必须再做一步,在注册表中相关的文件关联给去掉,这样就OK了,
5L的方法是简单,但如果程序被强行关了,你的这个功能就没用了:)

呵呵,,好久没来这里了,LZ的这个问题我能解,我不仅可以保护任意文件,还能保护任意用户指定的文件夹.

我的三重防御系统有这功能哦:)
但是有个问题的,就是只能保护单个文件,或文件夹,不能同时保护几个,这个我还没想好. :)
20分太少啦,我穷人啦. --------------------编程问答-------------------- 与文件关联有什么关系,在另外一个程序中用编程打开指定文件就可以了!
4楼、5楼的原理都是一样的,都用了文件句柄的锁定,所以程序异常退出都是无法解锁的,只能重启了。 --------------------编程问答-------------------- 用文件句柄的锁定,所以程序异常退出都是无法解锁的,只能重启了 --------------------编程问答-------------------- 可能还存在这样的问题:无论如何锁定,重启后就可以随便访问了.不知可否在内存创建一个文件夹,然后锁定.重启后文件夹就不存在了,可以减少这种危.请教:在内存中创建文件的方法. --------------------编程问答-------------------- 那就根本不需要文件,将你的数据保存在内存变量中就可以了。 --------------------编程问答-------------------- 搜索"Windows文件系统过滤驱动开发教程"

学会这个后就可以完美地解决你的问题....... --------------------编程问答-------------------- 回复20楼:"那就根本不需要文件,将你的数据保存在内存变量中就可以了。"
我想保存的不是变量,而是文件(例如一个Excel文件).可以做到吗?
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,