不是说GetNamedSecurityInfoEx没有定义就是unresolve symbole
//setacl.c
#include <windows.h>
#include <aclapi.h>void setacl(char *folder){
ACTRL_ACCESS_ENTRY      AccessEntry;
PACTRL_ACCESS           pOldAccessList, pNewAccessList;
DWORD                   dwErr;// Get the current DACL information from the object.DWORD dwRes = GetNamedSecurityInfoEx(folder, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldAccessList,NULL, NULL, NULL);// Initialize the access list entry.
memset(&AccessEntry,0,sizeof(ACTRL_ACCESS_ENTRY));
//ZeroMemory(&AccessEntry, sizeof(ACTRL_ACCESS_ENTRY) );
BuildTrusteeWithName(&(AccessEntry.Trustee), "ludwig");
AccessEntry.Inheritance = NO_INHERITANCE;
AccessEntry.fAccessFlags = ACTRL_ACCESS_DENIED;// Set provider-independent standard rights.AccessEntry.Access =0;
// ACTRL_READ_CONTROL | ACTRL_SYNCHRONIZE |ACTRL_CHANGE_ACCESS | ACTRL_DELETE;// Set provider-independent rights for file objects.AccessEntry.Access =0;
//|= ACTRL_FILE_READ | ACTRL_FILE_READ_ATTRIB |ACTRL_FILE_READ_PROP | ACTRL_FILE_WRITE |ACTRL_FILE_APPEND | ACTRL_FILE_WRITE_ATTRIB |ACTRL_FILE_WRITE_PROP;// Build an access list from the access list entry.dwErr = SetEntriesInAccessList(
     1,                  // Number of entries in array
     AccessEntry,        // array of entries
     SET_ACCESS,         // replace any existing items
     NULL,               // property name
     pOldAccessList,     // existing access list
     &pNewAccessList);   // new access list// Set the access-control information in the object's DACL.dwRes = SetNamedSecurityInfoEx(
    folder,              // name of the object
    SE_FILE_OBJECT,              // type of object
    DACL_SECURITY_INFORMATION,   // type of information to set
    NULL,                        // name of provider
    pNewAccessList,              // new access list
    NULL,                        // audit list
    NULL,                        // name of owner
    NULL,                        // name of group
    NULL);                       // pointer to OVERLAPPED structure// Free the returned buffers.if (pOldAccessList)
    LocalFree(pOldAccessList);
if (pNewAccessList)
    LocalFree(pNewAccessList);
        }