diff --git a/src/launcher/launcher.c b/src/launcher/launcher.c index 4612bed9..7b60e970 100644 --- a/src/launcher/launcher.c +++ b/src/launcher/launcher.c @@ -157,8 +157,8 @@ static SVC_INSTANCE *SvcInstanceLookup(PWSTR ClassName, PWSTR InstanceName) { SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry); - if (0 == lstrcmpW(ClassName, SvcInstance->ClassName) && - 0 == lstrcmpW(InstanceName, SvcInstance->InstanceName)) + if (0 == lstrcmpiW(ClassName, SvcInstance->ClassName) && + 0 == lstrcmpiW(InstanceName, SvcInstance->InstanceName)) return SvcInstance; } diff --git a/src/sys/create.c b/src/sys/create.c index eec9a04b..647b0ce4 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -268,9 +268,7 @@ static NTSTATUS FspFsvolCreateNoLock( /* check and remove any volume prefix */ if (0 == RelatedFileObject && 0 < FsvolDeviceExtension->VolumePrefix.Length) { - if (FileNode->FileName.Length <= FsvolDeviceExtension->VolumePrefix.Length || - !RtlEqualMemory(FileNode->FileName.Buffer, FsvolDeviceExtension->VolumePrefix.Buffer, - FsvolDeviceExtension->VolumePrefix.Length) || + if (!FspFsvolDeviceVolumePrefixInString(FsvolDeviceObject, &FileNode->FileName) || '\\' != FileNode->FileName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)]) { FspFileNodeDereference(FileNode); diff --git a/src/sys/driver.h b/src/sys/driver.h index 0a9da600..725e1636 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -817,6 +817,11 @@ VOID FspFsvolDeviceGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_I BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo); VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo); VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject); +static inline +BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING String) +{ + return RtlPrefixUnicodeString(&FspFsvolDeviceExtension(DeviceObject)->VolumePrefix, String, TRUE); +} NTSTATUS FspDeviceCopyList( PDEVICE_OBJECT **PDeviceObjects, PULONG PDeviceObjectCount); VOID FspDeviceDeleteList( diff --git a/src/sys/volume.c b/src/sys/volume.c index e7de54cf..766c6025 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -505,9 +505,7 @@ NTSTATUS FspVolumeRedirQueryPathEx( if (!FspIoqStopped(FsvolDeviceExtension->Ioq)) { if (0 < FsvolDeviceExtension->VolumePrefix.Length && - QueryPathRequest->PathName.Length >= FsvolDeviceExtension->VolumePrefix.Length && - RtlEqualMemory(QueryPathRequest->PathName.Buffer, - FsvolDeviceExtension->VolumePrefix.Buffer, FsvolDeviceExtension->VolumePrefix.Length) && + FspFsvolDeviceVolumePrefixInString(FsvolDeviceObject, &QueryPathRequest->PathName) && (QueryPathRequest->PathName.Length == FsvolDeviceExtension->VolumePrefix.Length || '\\' == QueryPathRequest->PathName.Buffer[FsvolDeviceExtension->VolumePrefix.Length / sizeof(WCHAR)])) {