return ntStatus;
}
+
+BOOLEAN
+AFSIsShareName( IN UNICODE_STRING *FileName)
+{
+
+ BOOLEAN bIsShareName = TRUE;
+ USHORT usIndex = 1; // Skip the first \
+
+ //
+ // A share name will be of the form \Share so only a single \ at the beginning
+ //
+
+ while( usIndex < FileName->Length/sizeof( WCHAR))
+ {
+
+ if( FileName->Buffer[ usIndex] == L'\\')
+ {
+ bIsShareName = FALSE;
+ break;
+ }
+
+ usIndex++;
+ }
+
+ return bIsShareName;
+}
\ No newline at end of file
ULONG ulCopyLength = 0;
ULONG cchCopied = 0;
BOOLEAN bAddTrailingSlash = FALSE;
- BOOLEAN bAddLeadingSlash = FALSE;
USHORT usFullNameLength = 0;
__Enter
// Add a trailing slash for anything which is of the form \server\share
//
- if( Ccb->FullFileName.Length == 0 ||
- Ccb->FullFileName.Buffer[ 0] != L'\\')
- {
- bAddLeadingSlash = TRUE;
- }
-
- if( Fcb->ObjectInformation->FileType == AFS_FILE_TYPE_DIRECTORY &&
- Ccb->FullFileName.Length > 0 &&
- Ccb->FullFileName.Buffer[ (Ccb->FullFileName.Length/sizeof( WCHAR)) - 1] != L'\\')
+ if( ( Fcb->ObjectInformation->FileType == AFS_FILE_TYPE_DIRECTORY ||
+ Fcb->ObjectInformation->FileType == AFS_FILE_TYPE_MOUNTPOINT) &&
+ Ccb->FullFileName.Length > sizeof( WCHAR) &&
+ Ccb->FullFileName.Buffer[ (Ccb->FullFileName.Length/sizeof( WCHAR)) - 1] != L'\\' &&
+ AFSIsShareName( &Ccb->FullFileName))
{
bAddTrailingSlash = TRUE;
}
AFSServerName.Length +
Ccb->FullFileName.Length;
- if( bAddLeadingSlash)
- {
- usFullNameLength += sizeof( WCHAR);
- }
-
if( bAddTrailingSlash)
{
usFullNameLength += sizeof( WCHAR);
*RemainingLength -= AFSServerName.Length;
cchCopied += AFSServerName.Length/sizeof( WCHAR);
- if ( ulCopyLength > 0 &&
- bAddLeadingSlash)
- {
-
- FileName[ cchCopied] = L'\\';
-
- ulCopyLength -= sizeof( WCHAR);
- *RemainingLength -= sizeof( WCHAR);
- cchCopied++;
- }
-
if( ulCopyLength >= Ccb->FullFileName.Length)
{