Windows: OpenAFS reparse points are surrogates

OpenAFS reparse points represent mount points, symlinks, and dfs
referrals.  All of which are file system objects that represent
another named entity in the system.  As a result the reparse tag
field must include the Reparse Tag Surrogate bit (0x20000000) set.

This permits the IsReparseTagNameSurrogate() macro provided in
winnt.h to be used to determine if the reparse point is a surrogate
or not.

See
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365197%28v=vs.85%29.aspx

Change-Id: I2561823e23371c2fdf01941da99fe848ca1fa11d
Reviewed-on: http://gerrit.openafs.org/6668
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
This commit is contained in:
Jeffrey Altman 2012-02-06 12:00:58 -05:00 committed by Jeffrey Altman
parent 5815967253
commit 8bc139b4ac
3 changed files with 8 additions and 4 deletions

View File

@ -548,7 +548,7 @@ AFSProcessUserFsRequest( IN PIRP Irp)
ulRemainingLen -= pReparseBuffer->ReparseDataLength;
pReparseBuffer->ReparseTag = IO_REPARSE_TAG_OPENAFS_DFS;
pReparseBuffer->ReparseTag = IO_REPARSE_TAG_SURROGATE|IO_REPARSE_TAG_OPENAFS_DFS;
RtlCopyMemory( &pReparseBuffer->ReparseGuid,
&GUID_AFS_REPARSE_GUID,
@ -595,7 +595,7 @@ AFSProcessUserFsRequest( IN PIRP Irp)
break;
}
if( pReparseBuffer->ReparseTag != IO_REPARSE_TAG_OPENAFS_DFS)
if( (pReparseBuffer->ReparseTag & 0x0000FFFF) != IO_REPARSE_TAG_OPENAFS_DFS)
{
ntStatus = STATUS_IO_REPARSE_TAG_MISMATCH;
@ -654,7 +654,7 @@ AFSProcessUserFsRequest( IN PIRP Irp)
break;
}
if( pReparseBuffer->ReparseTag != IO_REPARSE_TAG_OPENAFS_DFS)
if( (pReparseBuffer->ReparseTag & 0x0000FFFF) != IO_REPARSE_TAG_OPENAFS_DFS)
{
ntStatus = STATUS_IO_REPARSE_TAG_MISMATCH;

View File

@ -1622,7 +1622,7 @@ AFSQueryAttribTagInfo( IN PIRP Irp,
if( BooleanFlagOn( DirectoryCB->ObjectInformation->FileAttributes, FILE_ATTRIBUTE_REPARSE_POINT))
{
Buffer->ReparseTag = IO_REPARSE_TAG_OPENAFS_DFS;
Buffer->ReparseTag = IO_REPARSE_TAG_SURROGATE|IO_REPARSE_TAG_OPENAFS_DFS;
}
*Length -= sizeof( FILE_ATTRIBUTE_TAG_INFORMATION);

View File

@ -434,6 +434,10 @@ DEFINE_GUID (GUID_SD_AFS_REDIRECTOR_CONTROL_OBJECT,
#define IO_REPARSE_TAG_OPENAFS_DFS 0x00000037L
#endif
#ifndef IO_REPARSE_TAG_SURROGATE
#define IO_REPARSE_TAG_SURROGATE 0x20000000L
#endif
// {EF21A155-5C92-4470-AB3B-370403D96369}
DEFINE_GUID (GUID_AFS_REPARSE_GUID,
0xEF21A155, 0x5C92, 0x4470, 0xAB, 0x3B, 0x37, 0x04, 0x03, 0xD9, 0x63, 0x69);