Rob Shearman : advapi32: Implement SetFileSecurityW on top of NtSetSecurityObject.
Alexandre Julliard
julliard at winehq.org
Wed Oct 3 06:08:17 CDT 2007
Module: wine
Branch: master
Commit: 1262d7dbefe65a072bf02244293ea8536262fa77
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1262d7dbefe65a072bf02244293ea8536262fa77
Author: Rob Shearman <rob at codeweavers.com>
Date: Tue Oct 2 16:34:42 2007 +0100
advapi32: Implement SetFileSecurityW on top of NtSetSecurityObject.
---
dlls/advapi32/security.c | 25 +++++++++++++++++++++++--
1 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index cfe73f4..3d070a3 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -2096,8 +2096,29 @@ SetFileSecurityW( LPCWSTR lpFileName,
SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor )
{
- FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
- return TRUE;
+ HANDLE file;
+ DWORD access = 0;
+ NTSTATUS status;
+
+ TRACE("(%s, 0x%x, %p)\n", debugstr_w(lpFileName), RequestedInformation,
+ pSecurityDescriptor );
+
+ if (RequestedInformation & OWNER_SECURITY_INFORMATION ||
+ RequestedInformation & GROUP_SECURITY_INFORMATION)
+ access |= WRITE_OWNER;
+ if (RequestedInformation & SACL_SECURITY_INFORMATION)
+ access |= ACCESS_SYSTEM_SECURITY;
+ if (RequestedInformation & DACL_SECURITY_INFORMATION)
+ access |= WRITE_DAC;
+
+ file = CreateFileW( lpFileName, access, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
+ NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
+ if (file == INVALID_HANDLE_VALUE)
+ return FALSE;
+
+ status = NtSetSecurityObject( file, RequestedInformation, pSecurityDescriptor );
+ CloseHandle( file );
+ return set_ntstatus( status );
}
/******************************************************************************
More information about the wine-cvs
mailing list