Windows 2000 file security: sample code
Here you can download source code to a small program which displays the ACL entries for a given file, much like the system command CACLS.
To compile viewacls.cpp with with Visual C++, you will need the Platform SDK installed. The command line below assumes you have installed it into c:\dev\sdk.
cl -I c:\dev\sdk viewacls.cpp /link advapi32.lib
The program works by
- Calling GetFileSecurity() to obtain a security descriptor for the target file. 
- Extracting the discretionary access control list from the security descriptor with GetSecurityDescriptorDacl(). 
- Using GetAclInformation() to retrieve the number of access control entries in the ACL. 
- Looping over the ACEs with GetAce(). 
- Calling LookupAccountSid() to find the accounts referenced by each ACE. 
- Also using ConvertSidToStringSid() to convert the SID to a printable format to output along with the account name. 
- Comparing values in the permissions bitmask to describe the control granted or revoked by the ACEs. 
Sample usage:
E:\dev>viewacls c:\testfile.txt
2KPRO\testuser
S-1-5-21-1275210071-1844237615-725345543-1002
        Deny    FILE_WRITE_DATA
        Deny    FILE_APPEND_DATA
        Deny    FILE_WRITE_EA
        Deny    FILE_WRITE_ATTRIBUTES
BUILTIN\Administrators
S-1-5-32-544
        Allow   FILE_READ_DATA
        Allow   FILE_WRITE_DATA
        Allow   FILE_APPEND_DATA
        Allow   FILE_READ_EA
        Allow   FILE_WRITE_EA
        Allow   FILE_EXECUTE
        Allow   FILE_READ_ATTRIBUTES
        Allow   FILE_WRITE_ATTRIBUTES
        Allow   FILE_DELETE
        Allow   DELETE
        Allow   READ_CONTROL
        Allow   WRITE_DAC
        Allow   SYNCHRONIZE
Everyone
S-1-1-0
        Allow   FILE_READ_DATA
        Allow   FILE_READ_EA
        Allow   FILE_EXECUTE
        Allow   FILE_READ_ATTRIBUTES
        Allow   FILE_DELETE
        Allow   READ_CONTROL
        Allow   WRITE_DAC
        Allow   WRITE_OWNER
        Allow   SYNCHRONIZE
