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