sys,launcher: MUP volume prefixes (share names) are now case insensitive

This commit is contained in:
Bill Zissimopoulos 2016-09-11 14:35:56 -07:00
parent f89c91cd10
commit 997476f015
4 changed files with 9 additions and 8 deletions

View File

@ -157,8 +157,8 @@ static SVC_INSTANCE *SvcInstanceLookup(PWSTR ClassName, PWSTR InstanceName)
{ {
SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry); SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry);
if (0 == lstrcmpW(ClassName, SvcInstance->ClassName) && if (0 == lstrcmpiW(ClassName, SvcInstance->ClassName) &&
0 == lstrcmpW(InstanceName, SvcInstance->InstanceName)) 0 == lstrcmpiW(InstanceName, SvcInstance->InstanceName))
return SvcInstance; return SvcInstance;
} }

View File

@ -268,9 +268,7 @@ static NTSTATUS FspFsvolCreateNoLock(
/* check and remove any volume prefix */ /* check and remove any volume prefix */
if (0 == RelatedFileObject && 0 < FsvolDeviceExtension->VolumePrefix.Length) if (0 == RelatedFileObject && 0 < FsvolDeviceExtension->VolumePrefix.Length)
{ {
if (FileNode->FileName.Length <= FsvolDeviceExtension->VolumePrefix.Length || if (!FspFsvolDeviceVolumePrefixInString(FsvolDeviceObject, &FileNode->FileName) ||
!RtlEqualMemory(FileNode->FileName.Buffer, FsvolDeviceExtension->VolumePrefix.Buffer,
FsvolDeviceExtension->VolumePrefix.Length) ||
'\\' != FileNode->FileName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)]) '\\' != FileNode->FileName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)])
{ {
FspFileNodeDereference(FileNode); FspFileNodeDereference(FileNode);

View File

@ -817,6 +817,11 @@ VOID FspFsvolDeviceGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_I
BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo); BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo);
VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo); VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo);
VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject); VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject);
static inline
BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING String)
{
return RtlPrefixUnicodeString(&FspFsvolDeviceExtension(DeviceObject)->VolumePrefix, String, TRUE);
}
NTSTATUS FspDeviceCopyList( NTSTATUS FspDeviceCopyList(
PDEVICE_OBJECT **PDeviceObjects, PULONG PDeviceObjectCount); PDEVICE_OBJECT **PDeviceObjects, PULONG PDeviceObjectCount);
VOID FspDeviceDeleteList( VOID FspDeviceDeleteList(

View File

@ -505,9 +505,7 @@ NTSTATUS FspVolumeRedirQueryPathEx(
if (!FspIoqStopped(FsvolDeviceExtension->Ioq)) if (!FspIoqStopped(FsvolDeviceExtension->Ioq))
{ {
if (0 < FsvolDeviceExtension->VolumePrefix.Length && if (0 < FsvolDeviceExtension->VolumePrefix.Length &&
QueryPathRequest->PathName.Length >= FsvolDeviceExtension->VolumePrefix.Length && FspFsvolDeviceVolumePrefixInString(FsvolDeviceObject, &QueryPathRequest->PathName) &&
RtlEqualMemory(QueryPathRequest->PathName.Buffer,
FsvolDeviceExtension->VolumePrefix.Buffer, FsvolDeviceExtension->VolumePrefix.Length) &&
(QueryPathRequest->PathName.Length == FsvolDeviceExtension->VolumePrefix.Length || (QueryPathRequest->PathName.Length == FsvolDeviceExtension->VolumePrefix.Length ||
'\\' == QueryPathRequest->PathName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)])) '\\' == QueryPathRequest->PathName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)]))
{ {