我在做一个控制NTFS文件夹权限的 vc
project
东查西找,
AddAccessAllowedAce
SetSecurityDescriptorDacl
SetFileSecurity
用这些API可以搞定.
但是发现生成的权限只是对文件夹本身生效.而不是我所期望的文件夹与子文件夹及子文件
后来发现 AddAccessAllowedAceEx 这个函数支持这个参数.
改好代码后,一编译,说这个函数未声明.
奇怪啊,我又 #include
<winbase.h> 还是不管用.
最后一研究.该函数必须要 WINNT 5.0 以上才支持的,也就是说
要在 stdafx.h
的最开头,添加如下一句
#define _WIN32_WINNT 0x0500
表示你所编译的是系统内核是NT
5.0以上的,就OK了.(也就是win2000以上的系统,非win98以下)
类似这样的函数很多.其实,要仔细一点就会发现,在msdn中有这么一行隔膜计量泵说明.
QuickInfo
Windows NT: Requires version 5.0 or later.
有时,登录的用户名是带有域名的,比如说
mydomain\user1
但是如果调用
GetUserName,则不论你是登录的本机,还是登录的域,获取的都是user1,而不能获得域名.
GetUserNameEx这个函数,就可以获得全名称.
不过,如果是在vc6情况下,就没办法直接使用这个函数了,我尝试将隔膜计量泵对应的.h和.lib复制过来,却总是不行.最后想到的一招还是使用LoadLibrary/GetProcAddres
typedef
enum
{
// Examples for the following formats assume a
fictitous company
// which hooks into the global X.500 and
DNS name spaces as follows.
//
//
Enterprise root domain in DNS is
//
// widget.com
//
// Enterprise root domain in X.500 (RFC 1779 format)
is
//
// O=Widget, C=US
//
// There exists the child domain
//
//
engineering.widget.com
//
//
equivalent to
//
// OU=Engineering, O=Widget,
C=US
//
// There exists a container
within the Engineering domain
//
// OU=Software, OU=Engineering, O=Widget,
C=US
//
// There exists the
user
//
// CN=John Doe, OU=Software, OU=Engineering,
O=Widget, C=US
//
// And this user‘s
downlevel (pre-ADS) user name is
//
// Engineering\JohnDoe
// unknown name type
NameUnknown =
0,
// CN=John Doe, OU=Software, OU=Engineering,
O=Widget, C=US
NameFullyQualifiedDN =
1,
// Engineering\JohnDoe
NameSamCompatible = 2,
// Probably "John Doe" but
could be something else. I.e. The
// display name is
not necessarily the defining RDN.
NameDisplay =
3,
// String-ized GUID as returned by
IIDFromString().
// eg:
{4fa050f0-f561-11cf-bdd9-00aa003a77b6}
NameUniqueId =
6,
// engineering.widget.com/software/John
Doe
NameCanonical = 7,
//
johndoe@engineering.com
NameUserPrincipal =
8,
// Same as NameCanonical except that rightmost ‘/‘
is
// replaced with ‘\n‘ - even in domain-only
case.
// eg: engineering.widget.com/software\nJohn
Doe
NameCanonicalEx = 9,http://www.tju.edu.cn/
// www/srv.engineering.com/engineering.com
NameServicePrincipal = 10,
// DNS domain name + SAM
username
// eg:
engineering.widget.com\JohnDoe
NameDnsDomain = 12
}
EXTENDED_NAME_FORMAT, * PEXTENDED_NAME_FORMAT;
typedef
BOOLEAN (SEC_ENTRY *MYGETUSERNAMEEX)
(EXTENDED_NAME_FORMAT,LPSTR,PULONG);
char
buffer[200];
ULONG len=200;
HINSTANCE
LibHandle;
LibHandle = LoadLibrary("secur32.dll");
if(
LibHandle )
{
MYGETUSERNAMEEX func;
func =
(MYGETUSERNAMEEX)GetProcAddress(LibHandle,"GetUserNameExA");
if( func
)
{
(func)(NameSamCompatible,buffer,&len);
AfxMessageBox(buffer);
原文地址:http://www.cnblogs.com/shhxpump/p/3738445.html