Cant get SACL

I cant get SACL of an existing file on my system with this code.

GetNamedSecurityInfo returns 0 (ERROR_SUCCESS) , which means
there is no error in execution of it but pSACL still becomes 0x00000000
and IsValidAcl(pSACL) returns FALSE .

#include <windows.h>
#include <aclapi.h>

unsigned long enable_privilege(const char priv)
{
HANDLE token = INVALID_HANDLE_VALUE;
u status = OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES,
&token
);
if( !status )
{
return GetLastError();
}

unsigned char buf[sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES)];
TOKEN_PRIVILEGES privs = (TOKEN_PRIVILEGES)buf;

status = LookupPrivilegeValue(
NULL,
priv,
&privs->Privileges->Luid
);
if( !status )
{
u err = GetLastError();
CloseHandle(token);
return err;
}

privs->PrivilegeCount = 1;
privs->Privileges->Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(
token,
FALSE, // do not disable all
privs,
0, // zero buffer for prev state
NULL, // prev state don’t care
NULL // no sink for returned prev state size
);

status = GetLastError();

CloseHandle(token);

return status;
}

int _tmain(int argc, _TCHAR
argv)
{
PACL pSACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;

unsigned long returnValue ;

enable_privilege(SE_SECURITY_NAME );

returnValue = GetNamedSecurityInfo(
“D:\aa.txt”, // object name
SE_FILE_OBJECT, // object type
SACL_SECURITY_INFORMATION, // information type
NULL, // owner SID
NULL, // primary group SID
NULL, // DACL
&pSACL, // SACL

&pSD); // SD

if(!IsValidAcl(pSACL))
printf(“FAILED , ERROR CODE : %d\n\n”,returnValue);

LocalFree(pSD);

return 0 ;
}</aclapi.h></windows.h>

It may not contain an SACL.

mm

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of
xxxxx@hotmail.com
Sent: Saturday, July 07, 2007 10:28
To: Windows System Software Devs Interest List
Subject: [ntdev] Cant get SACL

I cant get SACL of an existing file on my system with this code.

GetNamedSecurityInfo returns 0 (ERROR_SUCCESS) , which means
there is no error in execution of it but pSACL still becomes 0x00000000
and IsValidAcl(pSACL) returns FALSE .

#include <windows.h>
#include <aclapi.h>

unsigned long enable_privilege(const char priv)
{
HANDLE token = INVALID_HANDLE_VALUE;
u status = OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES,
&token
);
if( !status )
{
return GetLastError();
}

unsigned char buf[sizeof(TOKEN_PRIVILEGES) +
sizeof(LUID_AND_ATTRIBUTES)];
TOKEN_PRIVILEGES privs = (TOKEN_PRIVILEGES)buf;

status = LookupPrivilegeValue(
NULL,
priv,
&privs->Privileges->Luid
);
if( !status )
{
u err = GetLastError();
CloseHandle(token);
return err;
}

privs->PrivilegeCount = 1;
privs->Privileges->Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(
token,
FALSE, // do not disable all
privs,
0, // zero buffer for prev state
NULL, // prev state don’t care
NULL // no sink for returned prev state size
);

status = GetLastError();

CloseHandle(token);

return status;
}

int _tmain(int argc, _TCHAR
argv)
{
PACL pSACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;

unsigned long returnValue ;

enable_privilege(SE_SECURITY_NAME );

returnValue = GetNamedSecurityInfo(
“D:\aa.txt”, // object name
SE_FILE_OBJECT,
// object type
SACL_SECURITY_INFORMATION,
// information type
NULL, // owner SID
NULL, // primary
group SID
NULL,
// DACL
&pSACL, // SACL

&pSD); // SD

if(!IsValidAcl(pSACL))
printf(“FAILED , ERROR CODE : %d\n\n”,returnValue);

LocalFree(pSD);

return 0 ;
}


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer</aclapi.h></windows.h>