用什么API可以设置NT目录的用户权限?(200分)

  • 主题发起人 主题发起人 yy
  • 开始时间 开始时间
Y

yy

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:某某用户有读取的权限,某某用户有完全控制的权限.
还有没有可能限制用户存取磁盘的字节数,例如2M.
 
又是200分?! :)
您可以使用SetFilePermission (Win32 API)来设置NTFS上的
文件和目录的权限
用法如下:
BOOL SetFilePermission(LPCTSTR lpFileName, // address of string for filename
SECURITY_INFORMATION SecurityInformation, // type of information to set
PSECURITY_DESCRIPTOR pSecurityDescriptor // address of security descriptor
);

SECURITY_INFORMATION用于指示下面一个参数的类型, 它可以取如下的值:
OWNER_SECURITY_INFORMATION
文件和目录的所有者信息

GROUP_SECURITY_INFORMATION
主组信息

DACL_SECURITY_INFORMATION
自由的访问控制列表(ACL)信息

SACL_SECURITY_INFORMATION
系统的访问控制列表(ACL)信息

请您参考下列API函数和数据结构以获得设置权限的进一步的信息:
ACL (DataStructure, Access Control List)
Get/SetSecurityDescriptorDacl
Get/SetSecurityDescriptorGroup
Get/SetSecurityDescriptorOwner
Get/SetSecurityDescriptorSacl

另外, 就是GetFilePermission, :)

至于设置用户的磁盘存储总量(在UNIX中叫做quote), 我现在正急于知道呢,
因为这是NT5.0的NTFS才支持的新特性, :) 另外, NT5.0的NTFS还支持数据
加密, 符号连接(Symbol Link), 呵呵, 可惜不兼容于NT4.0的NTFS, :(
 
我有NT下的控件组,可以解决权限以及你另一个添加用户的问题,
需要的话可以mail给你。
 
谢谢dwwang, 请Email给斑竹,让他贴出来吧.
 
这个问题的200分中有100是要解决"限制用户存取磁盘的字节数"的哦!
 
OK,马上就发!
 
I had said that under NT4.0 or previous version, you can not set the
quote of a user, :(
 
确实啊!NT4.0是不支持Quota的,如果想给我100分就太好了,
另外100分随便给谁都可以喽!
 
请下载<a href="/delphi/attachments/Ntset105.zip">来自dwwang的答案</a>。
 
NT 4.0下,有其他办法解决"限制用户存取磁盘的字节数"问题吗?
 
你这个问题已经超出了Delphi范围,
因此建议你不妨用Linux,既支持Quota,
又有Samba Server,可以让Win95/NT用户
透明共享文件服务.

一台低档Pentium微机就够了,配置可以比
NT Server低好多!


版主不反对我在这里宣传Linux吧 :)
 
绝对没有问题,我自己专门装了一台Linux,但是没有时间好好玩。
有时我甚至想开一个大富翁论坛Linux讨论区 ...
 
太好了,如果今后真的会开Linux专区.
某虽不才,愿多多贡献力量--当然也是想当大富翁喽 :)
 
很可惜没有Linux下的Delphi ...

Anyway,言归正传,等NT5还有很长时间.

有可能编个NT的Service一直监视某些用户的目录,截获用户对目录内容的操作,
然后作些限制什么的呢?
 
编这个Service,要真想做到比较成熟,
我觉得比等NT5省不了多长时间。

一年之内绝对有比较成型的Delphi for Linux
出现。WYSWYG的设计希望不大,但源码的编译
大约支持到Delphi2。
 
我的天哪, 问题的题目是"用什么API可以设置NT目录的用户权限", 咱不是已经, 已经... 穷呀, 呜呜,:(~~~~
 
编写service的想法绝对是错误的!
因为您的service是要以一定的身份运行的,
而用户可以设置目录的权限为只有自己可以访问,
这样, service就不能检查目录中的文件的长度.
要限制空间必须由操作系统把它做进文件系统内部去

>很可惜没有Linux下的Delphi ...
呵呵, 都免费了, Inprise就只能喝西北风啦!
 
Unix和Linux可以是一种解决之道。
但现在我无法不用NT,而改用Unix或者Linux,毕竟还有其他方面的应用在跑,
包括Delphi和用Delphi开发的很多程序。
所以想通过与各位高手交流找到解决的方法。故曾经提议用service监视文件系统。
好象也不可行?

pegasus,我不大明白您对service的解释。
 
Service本身是一个后台程序, 它并不能截获用户的文件读写请
求, (只有操作系统内部的文件系统才可以), 而监视别的用户的
文件则一定要获得相应的权限才可以. service的缺省状态是以
System身份运行, 当然您也可以设置成别的用户, 但是必须有该
用户的口令. 这样, 如果某个用户想越过系统的磁盘空间的限制,
他或她只需要把自己的目录和文件的权限设置成只有自己可以
访问, 排除System以及别的用户, Service就不能监视这些文件占
用的空间.

如果您需要临时的解决办法, 我建议您编写一个类似ZipMagic这
样的"可安装文件系统", 这样您就可以控制各个用户的磁盘空间
字节数, 而且并不限于NTFS, 可以用在任何普通文件系统之上.
(所谓可安装文件系统, 就是一种您自定义的文件存放格式, 提供
访问界面, 操作系统把用户的请求通过界面传给您自己的文件
系统, 您再按自己的格式存放数据, 数据库系统, Dblspace系统等
等都是很好的例子)
 
谢谢 pegasus,好象有些味道了。

用户应该没有权利设置目录和文件的权限,必须是Administrator才可以。
我的Service用Administrator的身份,可以监视他们了吧?

您的"可安装文件系统"真是大补!(我一直弄不明白,ZipMagic怎么会在
Explorer中弄出了Folder来)。赶紧请教,NT/95有"可安装文件系统"的接口吗?
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
934
DelphiTeacher的专栏
D
后退
顶部