NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
UNICODE_STRING uniReparseName;
UNICODE_STRING uniMUPDeviceName;
+ UNICODE_STRING uniIOMgrDeviceName;
AFSDirEnumEntry *pDirEntry = NULL;
__Enter
RtlInitUnicodeString( &uniMUPDeviceName,
L"\\Device\\MUP");
+ RtlInitUnicodeString( &uniIOMgrDeviceName,
+ L"\\??\\");
+
uniReparseName.Length = 0;
uniReparseName.Buffer = NULL;
// Start building the name
//
- RtlCopyMemory( uniReparseName.Buffer,
- uniMUPDeviceName.Buffer,
- uniMUPDeviceName.Length);
+ if ( DirEntry->NameInformation.TargetName.Buffer[ 0] != L'\\' &&
+ DirEntry->NameInformation.TargetName.Buffer[ 1] == L':')
+ {
- uniReparseName.Length = uniMUPDeviceName.Length;
+ RtlCopyMemory( uniReparseName.Buffer,
+ uniIOMgrDeviceName.Buffer,
+ uniIOMgrDeviceName.Length);
- if( DirEntry->NameInformation.TargetName.Buffer[ 0] != L'\\')
+ uniReparseName.Length = uniIOMgrDeviceName.Length;
+ }
+ else
{
- uniReparseName.Buffer[ uniReparseName.Length/sizeof( WCHAR)] = L'\\';
+ RtlCopyMemory( uniReparseName.Buffer,
+ uniMUPDeviceName.Buffer,
+ uniMUPDeviceName.Length);
+
+ uniReparseName.Length = uniMUPDeviceName.Length;
- uniReparseName.Length += sizeof( WCHAR);
+ if( DirEntry->NameInformation.TargetName.Buffer[ 0] != L'\\')
+ {
+
+ uniReparseName.Buffer[ uniReparseName.Length/sizeof( WCHAR)] = L'\\';
+
+ uniReparseName.Length += sizeof( WCHAR);
+ }
}
RtlCopyMemory( &uniReparseName.Buffer[ uniReparseName.Length/sizeof( WCHAR)],