为啥报错误函数未定义

我在做一个控制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,

    //
[email protected]
    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);

时间: 2024-10-10 07:06:44

为啥报错误函数未定义的相关文章

PHPCMS里的日历插件及在IE下报Calendar未定义

日历代码: <link rel="stylesheet" type="text/css" href="calendar/jscal2.css"/> <link rel="stylesheet" type="text/css" href="calendar/border-radius.css"/> <link rel="stylesheet"

IE浏览器报Promise未定义

用vue-cli做的项目,用了promise,结果IE下报promise未定义,甚至在比较老的andriod手机浏览器上会显示空白页面,解决方案如下: 首先安装:babel-polyfill npm install babel-polyfill --save 然后引入:babel-polyfill 在build目录下,webpack.base.conf.js里 entry: { app: ["babel-polyfill", "./src/main.js"] },

remainingCharacters谷歌浏览器报错未定义,这到底是不是个属性呢,还是作者没有写清楚?

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script type="text/javascript"> 7 window.onload = function(){ 8 var limitLength = document.getElementById('limit

oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案

导出oracle11.2.0.2的服务器的数据时,报"EXP-00003: 未找到段 (0,0) 的存储定义"错误.初步分析是由于数据表是空表导致该问题. Oracle 11G在用EXPORT导出时,空表不能导出 11GR2中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法:一. insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表.二. 设置deferred_segment_cr

angularjs 遇见$scope,xxx=function()报错为该函数未定义

本包子今天遇见一个问题,就是明明写了$scope,xx=function()但是报错了,报错显示是该函数未定义,我就很着急的先将函数写成一个全局函数,就没问题,等下午有空的时候寻思了一下,为什么全局就行呢,后来尝试将之前写的$scope.xxx=function()放在最上面,发现就没有报错了,才明白过来,这个angularjs中的函数原来是有执行的顺序的,写调用方法的时候,最好写在上面,so de si nei! 自己基本功还是很不扎实,得多多锻炼啊

为什么报错说req未定义,createServer只接受匿名函数吗?

var http = require('http');var server = new http.createServer(handlerRequest(req,res));server.listen(8888);function handlerRequest(req,res){ res.end('hellow');}为什么报错说req未定义,createServer只接受匿名函数吗?

在datagrid中,IE浏览器报错:SCRIPT5007: 无法获取属性&ldquo;rowspan&rdquo;的值: 对象为 null 或未定义

项目总采用datagird时,产生界面如下图原本标题上有功能按钮,此时消失   错误:SCRIPT5007: 无法获取属性"rowspan"的值: 对象为 null 或未定义, 造成这种错误的原因大致为:(1) 可能是在datagrid里面下的frozenColumns:[[ {......}]]或者是columns:[[{...},{...}]]   {...}之间多一个逗号(,) 查找原因为:columns定义时中 某个位置多写了 逗号, 仔细检查一下. 实际效果为: 误区:并非是

jQuery中的关于$的未定义

1.在初学jQuery时,刚开始做好的一段简单的jQuery代码运行完成后,为了简便合理,把它放在了重新建的一个文件夹下,在运行时总是出现$未定义. 这是一个关键点:在jQuery中,一定要确保引用文件的位置在你所jQuery代码文件的位置之后,当我换回之后.就不再报错了. 问题感悟:1.在遇到问题时,要想一想自己是哪里记错了,才能有所感悟.多查多看多想...

0x800a1391-Microsoft Jscript &quot;JSON未定义&quot;

本人在进行调试代码是遇到以下问题: 在运行到var result = JSON.parse(data);这句时,报错:JSON未定义.如下图: 可是前几天运行还好好的,怎么突然就报错了呢? 经过查找发现,原来是ie浏览器的浏览模式出的鬼. 报错时的ie浏览模式是这样的:. 解决方法:把”ie9兼容性视图模式“改为“ie9模式”就可以了.