advapi32: Thunk GetFileSecurityW to NtQuerySecurityObject.
This commit is contained in:
parent
d0c83654f8
commit
481de9d82d
@ -1746,64 +1746,18 @@ GetFileSecurityW( LPCWSTR lpFileName,
|
|||||||
PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
||||||
DWORD nLength, LPDWORD lpnLengthNeeded )
|
DWORD nLength, LPDWORD lpnLengthNeeded )
|
||||||
{
|
{
|
||||||
DWORD nNeeded;
|
HANDLE hfile;
|
||||||
LPBYTE pBuffer;
|
NTSTATUS status;
|
||||||
DWORD iLocNow;
|
|
||||||
SECURITY_DESCRIPTOR_RELATIVE *pSDRelative;
|
|
||||||
|
|
||||||
if(INVALID_FILE_ATTRIBUTES == GetFileAttributesW(lpFileName))
|
hfile = CreateFileW( lpFileName, GENERIC_READ, FILE_SHARE_READ,
|
||||||
|
NULL, OPEN_EXISTING, 0, 0 );
|
||||||
|
if ( hfile == INVALID_HANDLE_VALUE )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
FIXME("(%s) : returns fake SECURITY_DESCRIPTOR\n", debugstr_w(lpFileName) );
|
status = NtQuerySecurityObject( hfile, RequestedInformation, pSecurityDescriptor,
|
||||||
|
nLength, lpnLengthNeeded );
|
||||||
nNeeded = sizeof(SECURITY_DESCRIPTOR_RELATIVE);
|
CloseHandle( hfile );
|
||||||
if (RequestedInformation & OWNER_SECURITY_INFORMATION)
|
return set_ntstatus( status );
|
||||||
nNeeded += sizeof(sidWorld);
|
|
||||||
if (RequestedInformation & GROUP_SECURITY_INFORMATION)
|
|
||||||
nNeeded += sizeof(sidWorld);
|
|
||||||
if (RequestedInformation & DACL_SECURITY_INFORMATION)
|
|
||||||
nNeeded += WINE_SIZE_OF_WORLD_ACCESS_ACL;
|
|
||||||
if (RequestedInformation & SACL_SECURITY_INFORMATION)
|
|
||||||
nNeeded += WINE_SIZE_OF_WORLD_ACCESS_ACL;
|
|
||||||
|
|
||||||
*lpnLengthNeeded = nNeeded;
|
|
||||||
|
|
||||||
if (nNeeded > nLength)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (!InitializeSecurityDescriptor(pSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
pSDRelative = (PISECURITY_DESCRIPTOR_RELATIVE) pSecurityDescriptor;
|
|
||||||
pSDRelative->Control |= SE_SELF_RELATIVE;
|
|
||||||
pBuffer = (LPBYTE) pSDRelative;
|
|
||||||
iLocNow = sizeof(SECURITY_DESCRIPTOR_RELATIVE);
|
|
||||||
|
|
||||||
if (RequestedInformation & OWNER_SECURITY_INFORMATION)
|
|
||||||
{
|
|
||||||
memcpy(pBuffer + iLocNow, &sidWorld, sizeof(sidWorld));
|
|
||||||
pSDRelative->Owner = iLocNow;
|
|
||||||
iLocNow += sizeof(sidWorld);
|
|
||||||
}
|
|
||||||
if (RequestedInformation & GROUP_SECURITY_INFORMATION)
|
|
||||||
{
|
|
||||||
memcpy(pBuffer + iLocNow, &sidWorld, sizeof(sidWorld));
|
|
||||||
pSDRelative->Group = iLocNow;
|
|
||||||
iLocNow += sizeof(sidWorld);
|
|
||||||
}
|
|
||||||
if (RequestedInformation & DACL_SECURITY_INFORMATION)
|
|
||||||
{
|
|
||||||
GetWorldAccessACL((PACL) (pBuffer + iLocNow));
|
|
||||||
pSDRelative->Dacl = iLocNow;
|
|
||||||
iLocNow += WINE_SIZE_OF_WORLD_ACCESS_ACL;
|
|
||||||
}
|
|
||||||
if (RequestedInformation & SACL_SECURITY_INFORMATION)
|
|
||||||
{
|
|
||||||
GetWorldAccessACL((PACL) (pBuffer + iLocNow));
|
|
||||||
pSDRelative->Sacl = iLocNow;
|
|
||||||
/* iLocNow += WINE_SIZE_OF_WORLD_ACCESS_ACL; */
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user