<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JEDI Windows API &#187; permission</title>
	<atom:link href="http://blog.delphi-jedi.net/tag/permission/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.delphi-jedi.net</link>
	<description>Joint Endeavor of Delphi Innovators of Windows Programming</description>
	<lastBuildDate>Sat, 21 Aug 2010 05:44:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Setting Folder Security</title>
		<link>http://blog.delphi-jedi.net/2010/03/24/setting-folder-security/</link>
		<comments>http://blog.delphi-jedi.net/2010/03/24/setting-folder-security/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 18:03:38 +0000</pubDate>
		<dc:creator>Christian Wimmer</dc:creator>
				<category><![CDATA[JEDI Windows Security Code Lib]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[DACL]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[JWSCL]]></category>
		<category><![CDATA[permission]]></category>

		<guid isPermaLink="false">http://blog.delphi-jedi.net/?p=721</guid>
		<description><![CDATA[This article describes some ways how to set the security on a folder using JWSCL. Usually, we want to add some rights for a particular user to a folder so she gets access. I can say that is a heck of work to do with WinAPI. But still with JWSCL we need to consider some [...]]]></description>
			<content:encoded><![CDATA[<p>This article describes some ways how to set the security on a folder using JWSCL. Usually, we want to add some rights for a particular user to a folder so she gets access. I can say that is a heck of work to do with WinAPI. But still with JWSCL we need to consider some things. <span id="more-721"></span></p>
<p>The following code creates a folder named &#8220;JWSCLTest&#8221; and applies a DACL that allows full control to everyone. The folder will inherit its security settings to child folders and files (check the afXXX flags).</p>
<p><pre><pre class="brush:delphi">const JWSCLTestFolder = &#039;JWSCLTestFolder&#039;;

var
&nbsp;&nbsp;SD : TJwSecurityDescriptor;
&nbsp;&nbsp;pSA : PSecurityAttributes;
begin
&nbsp;&nbsp;JwInitWellKnownSIDs;

&nbsp;&nbsp;SD := TJwSecurityDescriptor.Create;
&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[afContainerInheritAce, afObjectInheritAce], FILE_ALL_ACCESS, JwWorldSID));

&nbsp;&nbsp;&nbsp;&nbsp;pSA := SD.Create_SA();
&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Win32Check(CreateDirectory(JWSCLTestFolder, pSA));
&nbsp;&nbsp;&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SD.Free_SA(pSA); //remember to free pointer
&nbsp;&nbsp;&nbsp;&nbsp;end;
&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;SD.Free;
&nbsp;&nbsp;end;
end.
</pre></pre></p>
<p>CreateDirectory receives a security attributes structure that is applied to the folder directly. However, in this way the parent security descriptor is not inherited to our folder. This is called a protected DACL because the inheritance flow is stopped. So we get a folder with only one Access Control Entry (ACE) : Everyone (aka World SID).  To remedy that we can copy the ACEs from the parent folder to our own folder:</p>
<p><pre><pre class="brush:delphi">procedure MergeParentDACL(const Location : String; TargetSD : TJwSecurityDescriptor);
var DirSD : TJwSecureFileObject;
begin
&nbsp;&nbsp;DirSD := TJwSecureFileObject.Create(Location);
&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;TargetSD.DACL.AddACEs(DirSD.DACL);
&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;DirSD.Free;
&nbsp;&nbsp;end;
end;

var
&nbsp;&nbsp;DirSD : TJwSecureFileObject;

&nbsp;&nbsp;SD, SD2 : TJwSecurityDescriptor;
&nbsp;&nbsp;pSA : PSecurityAttributes;
begin
&nbsp;&nbsp;JwInitWellKnownSIDs;

&nbsp;&nbsp;SD := TJwSecurityDescriptor.Create;

&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[afContainerInheritAce, afObjectInheritAce], FILE_ALL_ACCESS, JwWorldSID));

&nbsp;&nbsp;&nbsp;&nbsp;MergeParentDACL(&#039;.&#039;, SD);

&nbsp;&nbsp;&nbsp;&nbsp;pSA := SD.Create_SA();
&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Win32Check(CreateDirectory(JWSCLTestFolder, pSA));
&nbsp;&nbsp;&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SD.Free_SA(pSA);
&nbsp;&nbsp;&nbsp;&nbsp;end;
&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;SD.Free;
&nbsp;&nbsp;end;
end.
</pre></pre></p>
<p>The function <em>MergeParentDACL</em> receives the location of the parent folder and retrieves its security settings. Then its DACL is copied to the target security descriptor. JWSCL with <em>TargetSD.DACL.AddACEs</em> makes sure that the order of the ACEs are still correct (first deny then allow entries) by moving them accordingly.</p>
<p>In addition, there is a second, much easier way to achieve the same result.</p>
<p><pre><pre class="brush:delphi">var
&nbsp;&nbsp;SD : TJwSecurityDescriptor;
&nbsp;&nbsp;DirSD : TJwSecureFileObject;
begin
&nbsp;&nbsp;JwInitWellKnownSIDs;

&nbsp;&nbsp;Win32Check(CreateDirectory(JWSCLTestFolder, nil));

&nbsp;&nbsp;DirSD := TJwSecureFileObject.Create(JWSCLTestFolder);
&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;SD := DirSD.GetSecurityDescriptor([siDaclSecurityInformation]);
&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[afContainerInheritAce, afObjectInheritAce], FILE_ALL_ACCESS, JwWorldSID));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirSD.SetSecurityDescriptor(SD, [siDaclSecurityInformation]);
&nbsp;&nbsp;&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SD.Free;
&nbsp;&nbsp;&nbsp;&nbsp;end;
&nbsp;&nbsp;finally
&nbsp;&nbsp;&nbsp;&nbsp;DirSD.Free;
&nbsp;&nbsp;end;
</pre></pre></p>
<p>In this way we didn&#8217;t set the security descriptor directly when the folder was created. Nevertheless we get a combination of inheritace ACEs plus the explicit one (JwWorldSID).</p>
<h3>Note</h3>
<p>It is always a good idea to check whether SD.DACL (in above codes) is nil and if so ignore it or create a new and empty one to be used instead. It is always possible that a file or folder comes with a nil DACL which means either no access at all (flag DACLpresent) or everyone has full access (flag DACLpresent not available).</p>
<h3>I used the following JEDI units:</h3>
<p><pre><pre class="brush:delphi">uses
&nbsp;&nbsp;JwaWindows,

&nbsp;&nbsp;JwsclDescriptor,
&nbsp;&nbsp;JwsclTypes,
&nbsp;&nbsp;JwsclConstants,
&nbsp;&nbsp;JwsclKnownSid,
&nbsp;&nbsp;JwsclAcl,
&nbsp;&nbsp;JwsclMapping,
&nbsp;&nbsp;JwsclSecureObjects,
&nbsp;&nbsp;JwsclSid,
</pre></pre></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.delphi-jedi.net/2010/03/24/setting-folder-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to use a Security Attribute structure Part #2</title>
		<link>http://blog.delphi-jedi.net/2008/03/22/how-to-use-a-security-attribute-structure-part-2/</link>
		<comments>http://blog.delphi-jedi.net/2008/03/22/how-to-use-a-security-attribute-structure-part-2/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 16:40:55 +0000</pubDate>
		<dc:creator>Christian Wimmer</dc:creator>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[DACL]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[JWSCL]]></category>
		<category><![CDATA[permission]]></category>

		<guid isPermaLink="false">http://blog.delphi-jedi.net/2008/03/22/how-to-use-a-security-attribute-structure-part-2/</guid>
		<description><![CDATA[This discussion continues How to use a SecurityAttribute structure. Last time we used the SecurityAttribute parameter in CreateFile to change the security descriptor of the newly created file. However this approach did not add inherited access control elements from the parent folder. We are about to change that. Filesystem and Registry-key inheritance is implemented since [...]]]></description>
			<content:encoded><![CDATA[<p>This discussion continues <a href="http://blog.delphi-jedi.net/2008/03/04/how-to-use-a-security-attribute-structure" title="Go to blog.">How to use a SecurityAttribute structure</a>.</p>
<p>Last time we used the SecurityAttribute parameter in CreateFile to change the security descriptor of the newly created file. However this approach did not add inherited access control elements from the parent folder. We are about to change that.</p>
<p>Filesystem and Registry-key inheritance is implemented since Windows 2000 and also can be added to Windows NT 4 by installing an update. It is a really convenient way to set security over many files in a complex folder tree.</p>
<p>So what did we last time?</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">var</span> SD : TJwSecurityDescriptor;<br />
&nbsp; &nbsp; &nbsp;AliceSid : TJwSecurityId;<br />
&nbsp; &nbsp; &nbsp;SecAttrPtr : PSecurityAttributes;<br />
&nbsp; &nbsp; &nbsp;Handle : <span class="kw4">THandle</span>;<br />
<span class="kw1">begin</span><br />
&nbsp; <span class="kw3">DeleteFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span><span class="br0">&#41;</span>; </p>
<p>&nbsp; SD := TJwSecurityDescriptor.<span class="me1">CreateDefaultByToken</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; AliceSid := TJwSecurityId.<span class="me1">Create</span><span class="br0">&#40;</span><span class="st0">&#8221;</span>,<span class="st0">&#8216;Alice&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; SD.<span class="me1">DACL</span>.<span class="me1">Add</span><span class="br0">&#40;</span>TJwDiscretionaryAccessControlEntryAllow.<span class="me1">Create</span><span class="br0">&#40;</span><span class="kw2">nil</span>, <span class="br0">&#91;</span><span class="br0">&#93;</span>, GENERIC_READ, AliceSid, <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span>; </p>
<p>&nbsp; SecAttrPtr := SD.<span class="me1">Create_SA</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; </p>
<p>&nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; Handle := jwaWindows.<span class="me1">CreateFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span>, FILE_ALL_ACCESS, <span class="nu0">0</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">Pointer</span><span class="br0">&#40;</span>SecAttrPtr<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CREATE_NEW, FILE_ATTRIBUTE_NORMAL,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span> handle = ERROR_INVALID_HANDLE <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">RaiseLastOSError</span>;<br />
&nbsp; <span class="kw1">finally</span><br />
&nbsp; &nbsp; SD.<span class="me1">Free</span>;<br />
&nbsp; <span class="kw1">end</span>;<br />
&#8230;</div>
<p>This code assigns a simple security descriptor. In my tests there was no way to let CreateFile add the inherited elements to the DACL. Luckily there are several ways to do so.</p>
<ol>
<li>Get the inherited access elements from the parent and add them to our DACL by hand</li>
<li>Let the system handle inheritance</li>
<li>Do the second way much faster</li>
</ol>
<p><u>1. Get the inherited access elements from the parent and add them to our DACL by hand</u></p>
<p>The first choice needs a lot of work to do. First we need all the inheritable access control elements from the parent folders. This would become very nasty if we had to recursively go up to all parent folders to get the elements. However we are lucky because all inherited ACEs are always available through the direct parent container (if they are not blocked).<br />
Because I will need more time to describe this approach. I&#8217;m going to skip this part for now and discuss it in a separate blog entry.</p>
<p><u>2. Let the system handle inheritance</u></p>
<p><strong>JWSCL </strong>supports inheritance of file, folder and registry keys with the classes <em><a href="http://jwscldoc.delphi-jedi.net/JwsclSecureObjects.TJwSecureFileObject.html">TJwSecureFileObject</a> </em>and <a href="http://jwscldoc.delphi-jedi.net/JwsclSecureObjects.TJwSecureRegistryKey.html"><em>TJwSecureRegistryKey</em></a>. We are going to use only <em>TJwSecureFileObject </em>for our task. However changing permissons and inheritance of a registry key is straight forward and is much the same job as it is with files and folders.</p>
<p><em>TJwSecureFileObject </em>offers three ways to adapt security of a file or folder. You can use a file/folder handle (retrieved by <em>CreateFile</em>), a file or folder name or you use the VCL class <em>TFileStream</em>. However the last variant has some disadvantages like not being able to work with folders.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">var</span> SD : TJwSecurityDescriptor;<br />
&nbsp; &nbsp; AliceSid : TJwSecurityId;<br />
&nbsp; &nbsp; SecAttrPtr : PSecurityAttributes;<br />
&nbsp; &nbsp; Handle : <span class="kw4">THandle</span>;<br />
&nbsp; &nbsp; <span class="kw3">Sec</span> : TJwSecureFileObject;<br />
&nbsp; &nbsp; DACL : TJwDAccessControlList;<br />
<span class="kw1">begin</span> </p>
<p>&nbsp; &#8230;<br />
&nbsp; <span class="me1">SecAttrPtr</span> := SD.<span class="me1">Create_SA</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; </p>
<p>&nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; Handle := jwaWindows.<span class="me1">CreateFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span>, FILE_ALL_ACCESS, <span class="nu0">0</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">Pointer</span><span class="br0">&#40;</span>SecAttrPtr<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CREATE_NEW, FILE_ATTRIBUTE_NORMAL,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span> handle = ERROR_INVALID_HANDLE <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">RaiseLastOSError</span>;<br />
&nbsp; <span class="kw1">finally</span><br />
&nbsp; &nbsp; SD.<span class="me1">Free</span>;<br />
&nbsp; <span class="kw1">end</span>; </p>
<p>&nbsp; CloseHandle<span class="br0">&#40;</span>Handle<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw3">Sec</span> := TJwSecureFileObject.<span class="me1">Create</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; DACL := <span class="kw3">Sec</span>.<span class="me1">GetDACL</span>;<br />
&nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; <span class="kw3">Sec</span>.<span class="me1">SetDACL</span><span class="br0">&#40;</span>DACL,apUnprotected<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">finally</span><br />
&nbsp; &nbsp; DACL.<span class="me1">Free</span>;<br />
&nbsp; &nbsp; <span class="kw3">Sec</span>.<span class="me1">Free</span>;<br />
&nbsp; <span class="kw1">end</span>;<br />
&#8230;</div>
<p><em>TJwSecureFileObject </em>retrieves the DACL of the file after newly created file was opened. The method <em>SetDACL </em>sets the DACL back but also removes the protection flag from security descriptor control. Thus all the inherited access elements flow to the file&#8217;s access control list.</p>
<p><u>3. Do the second way which is much less to write<br />
</u></p>
<p><em>TJwSecureFileObject </em>offers class methods to act with file or folders much faster. We can either restore the inheritance flow by using the file/folder name&#8230;</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">begin</span><br />
&nbsp; <span class="kw3">DeleteFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &#8230;<br />
&nbsp; <span class="me1">TJwSecureFileObject</span>.<span class="me1">RestoreInheritanceFlow</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &#8230;</div>
<p>or reestablish the inheritance flow by using a file handle.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">begin</span><br />
&nbsp; <span class="kw3">DeleteFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; Handle := jwaWindows.<span class="me1">CreateFile</span><span class="br0">&#40;</span><span class="st0">&#8216;testfile&#8217;</span>, FILE_ALL_ACCESS, <span class="nu0">0</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">Pointer</span><span class="br0">&#40;</span>SecAttrPtr<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CREATE_NEW, FILE_ATTRIBUTE_NORMAL,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="kw1">if</span> handle = ERROR_INVALID_HANDLE <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">RaiseLastOSError</span>;<br />
&nbsp; &nbsp; TJwSecureFileObject.<span class="me1">RestoreInheritanceFlow</span><span class="br0">&#40;</span>Handle<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">finally</span> &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; SD.<span class="me1">Free</span>; &nbsp; <br />
&nbsp; <span class="kw1">end</span>;</div>
<p>You can use one way or the other.</p>
<p><strong>Tell me how you liked this blog entry by adding a comment.</strong></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.delphi-jedi.net/2008/03/22/how-to-use-a-security-attribute-structure-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving a file does not recalculate inherited permissions</title>
		<link>http://blog.delphi-jedi.net/2008/03/11/moving-a-file-does-not-recalculate-inherited-permissions/</link>
		<comments>http://blog.delphi-jedi.net/2008/03/11/moving-a-file-does-not-recalculate-inherited-permissions/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 14:15:34 +0000</pubDate>
		<dc:creator>Christian Wimmer</dc:creator>
				<category><![CDATA[JEDI Windows Security Code Lib]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[permission]]></category>
		<category><![CDATA[Raymond]]></category>

		<guid isPermaLink="false">http://blog.delphi-jedi.net/2008/03/11/moving-a-file-does-not-recalculate-inherited-permissions/</guid>
		<description><![CDATA[Are you interested in security attributes of a file? If yes, you should read Raymond Chen&#8217;s article about how permissions are handled when moving a file. Cite: Inherited permissions on an object are established when it is created. Once the object has been created, you can change the permissions of the parent and it won&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Are you interested in security attributes of a file? If yes, you should read Raymond Chen&#8217;s article about how permissions are handled when moving a file.</p>
<blockquote><p>Cite:<br />
Inherited permissions on an object are established when it is created. Once the object has been created, you can change the permissions of the parent and it won&#8217;t have any effect unless you explicitly ask for the inheritable properties to be re-propagated to the child objects.</p></blockquote>
<p>Read more about it at <a href="http://blogs.msdn.com/oldnewthing/archive/2006/08/24/717181.aspx" title="Go to Raymond's Blog">Raymond&#8217;s blog</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.delphi-jedi.net/2008/03/11/moving-a-file-does-not-recalculate-inherited-permissions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
