Author: pschweitzer
Date: Sun Nov 9 09:55:13 2008
New Revision: 37263
URL:
http://svn.reactos.org/svn/reactos?rev=37263&view=rev
Log:
Fix pierre-fsd branch (and cdfs.sys): FsRtlIsNameInExpression needs Expression to be
uppercase if IgnoreCase is set to TRUE
Modified:
branches/pierre-fsd/drivers/filesystems/cdfs/dirctl.c
branches/pierre-fsd/drivers/filesystems/cdfs/fcb.c
Modified: branches/pierre-fsd/drivers/filesystems/cdfs/dirctl.c
URL:
http://svn.reactos.org/svn/reactos/branches/pierre-fsd/drivers/filesystems/…
==============================================================================
--- branches/pierre-fsd/drivers/filesystems/cdfs/dirctl.c [iso-8859-1] (original)
+++ branches/pierre-fsd/drivers/filesystems/cdfs/dirctl.c [iso-8859-1] Sun Nov 9 09:55:13
2008
@@ -166,6 +166,7 @@
UNICODE_STRING TempString;
UNICODE_STRING ShortName;
UNICODE_STRING LongName;
+ UNICODE_STRING FileToFindUpcase;
PVOID Block;
NTSTATUS Status;
ULONG len;
@@ -264,6 +265,14 @@
Record = (PDIR_RECORD)((ULONG_PTR)Record + Record->RecordLength);
}
+ /* FsRtlIsNameInExpression need the searched string to be upcase,
+ * even if IgnoreCase is specified */
+ Status = RtlUpcaseUnicodeString(&FileToFindUpcase, FileToFind, TRUE);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+
while(TRUE)
{
DPRINT("RecordLength %u ExtAttrRecordLength %u NameLength %u\n",
@@ -309,8 +318,8 @@
_SEH_TRY
{
- Found = FsRtlIsNameInExpression(FileToFind, &LongName, TRUE, NULL) ||
- FsRtlIsNameInExpression(FileToFind, &ShortName, TRUE, NULL);
+ Found = FsRtlIsNameInExpression(&FileToFindUpcase, &LongName, TRUE, NULL)
||
+ FsRtlIsNameInExpression(&FileToFindUpcase, &ShortName, TRUE,
NULL);
}
_SEH_HANDLE
{
@@ -319,6 +328,7 @@
_SEH_END;
if (!NT_SUCCESS(Status))
{
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
return Status;
}
@@ -361,6 +371,7 @@
DPRINT("FindFile: new Pathname %S, new Objectname %S, DirIndex %d\n",
Fcb->PathName, Fcb->ObjectName, DirIndex);
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
return STATUS_SUCCESS;
@@ -371,6 +382,7 @@
DirIndex++;
}
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
if (pDirIndex)
Modified: branches/pierre-fsd/drivers/filesystems/cdfs/fcb.c
URL:
http://svn.reactos.org/svn/reactos/branches/pierre-fsd/drivers/filesystems/…
==============================================================================
--- branches/pierre-fsd/drivers/filesystems/cdfs/fcb.c [iso-8859-1] (original)
+++ branches/pierre-fsd/drivers/filesystems/cdfs/fcb.c [iso-8859-1] Sun Nov 9 09:55:13
2008
@@ -463,6 +463,7 @@
WCHAR ShortNameBuffer[13];
UNICODE_STRING ShortName;
UNICODE_STRING LongName;
+ UNICODE_STRING FileToFindUpcase;
GENERATE_NAME_CONTEXT NameContext;
@@ -500,6 +501,15 @@
Offset = 0;
BlockOffset = 0;
Record = (PDIR_RECORD)Block;
+
+ /* FsRtlIsNameInExpression need the searched string to be upcase,
+ * even if IgnoreCase is specified */
+ Status = RtlUpcaseUnicodeString(&FileToFindUpcase, FileToFind, TRUE);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+
while(TRUE)
{
if (Record->RecordLength == 0)
@@ -542,8 +552,8 @@
_SEH_TRY
{
- Found = FsRtlIsNameInExpression(FileToFind, &LongName, TRUE, NULL) ||
- FsRtlIsNameInExpression(FileToFind, &ShortName, TRUE, NULL);
+ Found = FsRtlIsNameInExpression(&FileToFindUpcase, &LongName, TRUE,
NULL) ||
+ FsRtlIsNameInExpression(&FileToFindUpcase, &ShortName, TRUE,
NULL);
}
_SEH_HANDLE
{
@@ -552,6 +562,7 @@
_SEH_END;
if (!NT_SUCCESS(Status))
{
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
return Status;
}
@@ -567,6 +578,7 @@
Offset,
FoundFCB);
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
return(Status);
@@ -589,6 +601,7 @@
&Context, &Block))
{
DPRINT("CcMapData() failed\n");
+ RtlFreeUnicodeString(&FileToFindUpcase);
return(STATUS_UNSUCCESSFUL);
}
Record = (PDIR_RECORD)((ULONG_PTR)Block + BlockOffset);
@@ -598,6 +611,7 @@
break;
}
+ RtlFreeUnicodeString(&FileToFindUpcase);
CcUnpinData(Context);
return Status;