Skip to content

Commit 109f5ad

Browse files
committed
FIXED
1 parent f04f0eb commit 109f5ad

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

src/Files.App/NativeMethods.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,5 @@ GetComputerName
8787
AddAccessAllowedAceEx
8888
LocalAlloc
8989
InitializeAcl
90-
AddAce
90+
AddAce
91+
LocalFree

src/Files.App/Services/Storage/StorageSecurityService.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public unsafe WIN32_ERROR GetAcl(string path, bool isFolder, out AccessControlLi
169169
public unsafe WIN32_ERROR AddAce(string szPath, bool isFolder, string szSid)
170170
{
171171
ACL* pDACL = default;
172-
//ACL* pNewDACL = default;
172+
ACL* pNewDACL = default;
173173
PSID pSid = default;
174174
ACL_SIZE_INFORMATION aclSizeInfo = default;
175175
ACCESS_ALLOWED_ACE* pTempAce = default;
@@ -190,28 +190,28 @@ public unsafe WIN32_ERROR AddAce(string szPath, bool isFolder, string szSid)
190190

191191
// Get ACL size info
192192
bool bResult = PInvoke.GetAclInformation(
193-
*pDACL,
193+
pDACL,
194194
&aclSizeInfo,
195195
(uint)Marshal.SizeOf<ACL_SIZE_INFORMATION>(),
196196
ACL_INFORMATION_CLASS.AclSizeInformation);
197197

198198
if (!bResult)
199199
return (WIN32_ERROR)Marshal.GetLastPInvokeError();
200200

201-
var cbNewDACL = aclSizeInfo.AclBytesInUse + aclSizeInfo.AclBytesFree + Marshal.SizeOf<ACCESS_ALLOWED_ACE>();
202-
uint dwAclCount = aclSizeInfo.AceCount;
201+
var cbNewDACL = aclSizeInfo.AclBytesInUse + aclSizeInfo.AclBytesFree + Marshal.SizeOf<ACCESS_ALLOWED_ACE>() * 2;
203202

204-
//// Allocate space for the new DACL that contains the new ACE
205-
//PInvoke.LocalAlloc(LOCAL_ALLOC_FLAGS.LPTR, (nuint)cbNewDACL);
203+
pNewDACL = (ACL*)PInvoke.LocalAlloc(LOCAL_ALLOC_FLAGS.LPTR, (nuint)cbNewDACL);
204+
if (pNewDACL == default)
205+
return (WIN32_ERROR)Marshal.GetLastPInvokeError();
206206

207207
// Initialize the new DACL
208-
PInvoke.InitializeAcl(out ACL pNewDACL, (uint)cbNewDACL, ACE_REVISION.ACL_REVISION);
208+
PInvoke.InitializeAcl(pNewDACL, (uint)cbNewDACL, ACE_REVISION.ACL_REVISION);
209209

210210
// Copy ACEs from the old DACL
211-
for (uint dwAceIndex = 0u; dwAceIndex < dwAclCount; dwAceIndex++)
211+
for (uint dwAceIndex = 0u; dwAceIndex < aclSizeInfo.AceCount; dwAceIndex++)
212212
{
213213
bResult = PInvoke.GetAce(pDACL, dwAceIndex, (void**)&pTempAce);
214-
PInvoke.AddAce(&pNewDACL, ACE_REVISION.ACL_REVISION, uint.MaxValue, (void*)pTempAce, pTempAce->Header.AceSize);
214+
PInvoke.AddAce(pNewDACL, ACE_REVISION.ACL_REVISION, uint.MaxValue, pTempAce, pTempAce->Header.AceSize);
215215
}
216216

217217
// Get the principal's SID of the new ACE
@@ -237,7 +237,7 @@ public unsafe WIN32_ERROR AddAce(string szPath, bool isFolder, string szSid)
237237
OBJECT_SECURITY_INFORMATION.DACL_SECURITY_INFORMATION | OBJECT_SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION,
238238
new PSID((void*)0),
239239
new PSID((void*)0),
240-
&pNewDACL);
240+
pNewDACL);
241241
}
242242

243243
if (result is not WIN32_ERROR.ERROR_SUCCESS)

0 commit comments

Comments
 (0)