1

我正在尝试编写一个程序来收集有关文件的安全信息并将其转换为人类可读的信息。但是,我在初始化指向结构的指针时遇到了问题:

#include <stdio.h>
#include <aclapi.h>
#pragma comment(lib, "advapi32.lib")
struct file_perms {
    char user_domain[2050];
    unsigned long user_mask;
};
static myfunc (){

PSECURITY_DESCRIPTOR pSD = NULL;
PACL pDACL = NULL;
char *file = "D:/code/test.c";
ACL_SIZE_INFORMATION aclSize;

ULONG result = GetNamedSecurityInfo(file,SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pDACL, NULL, &pSD);
if (ERROR_SUCCESS != result) {
    printf( "GetNamedSecurityInfo Error %u\n", result );
}
if(pDACL != NULL){printf ("2\n");}
//ACL_SIZE_INFORMATION aclSize = {0};
ZeroMemory(&aclSize, sizeof(ACL_SIZE_INFORMATION));
    if(pDACL != NULL){   
        if(!GetAclInformation(pDACL, &aclSize, sizeof(aclSize),
            AclSizeInformation)){
            printf("GetAclInformation Error \n");
            return 0;
        }
        printf("AceCount %d\n",aclSize.AceCount);
    }
file_perms *fp = new file_perms[aclSize.AceCount];

}

编译时,我收到以下错误。被命名的.c

getnamed.c(34) : error C2065: 'file_perms' : undeclared identifier
getnamed.c(34) : error C2065: 'fp' : undeclared identifier
getnamed.c(34) : error C2065: 'new' : undeclared identifier
getnamed.c(34) : error C2106: '=' : left operand must be l-value
getnamed.c(34) : error C2146: syntax error : missing ';' before identifier 'file
_perms'
getnamed.c(34) : error C2065: 'file_perms' : undeclared identifier
getnamed.c(34) : error C2109: subscript requires array or pointer type

有人可以帮我理解为什么 file_perms 被标记为未声明的标识符吗?虽然它已经被声明为一个结构?

感谢您的帮助。

4

3 回答 3

2

因为您正在将代码编译为 C 代码。它是 C++。

如果您希望将其编译为 C,请尝试以下操作:

typedef struct file_perms_ {
    char user_domain[2050];
    unsigned long user_mask;
} file_perms;
于 2012-05-26T09:08:40.340 回答
2

你应该有

struct file_perms *fp = new file_perms[aclSize.AceCount];

或在开始时创建类型:

typedef struct file_perms {
    char user_domain[2050];
    unsigned long user_mask;
}file_perm;

稍后你可以像使用它一样使用它

file_perms *fp;
fp = (file_perms*)malloc(aclSize.AceCount * sizeof(file_perms));

顺便说一句:operator new是 c++ 语法,而不是纯 C,您很可能正在尝试将 C++ 代码编译为 C

于 2012-05-26T09:09:15.163 回答
-1

改变

struct file_perms{ 
    char user_domain[2050]; 
    unsigned long user_mask; 
}; 

这将解决您的问题:

struct{ 
    char user_domain[2050]; 
    unsigned long user_mask; 
}file_perms; 
于 2012-05-26T09:13:23.593 回答