Fcb->Header.FileSize.QuadPart = 1004;
Fcb->Header.ValidDataLength.QuadPart = 1004;
}
+ else if (IoStack->FileObject->FileName.Length >= 2 * sizeof(WCHAR) &&
+ IoStack->FileObject->FileName.Buffer[1] == 'R')
+ {
+ Fcb->Header.AllocationSize.QuadPart = 62;
+ Fcb->Header.FileSize.QuadPart = 62;
+ Fcb->Header.ValidDataLength.QuadPart = 62;
+ }
else
{
Fcb->Header.AllocationSize.QuadPart = 512;
}
else
{
- ok(Offset.QuadPart % PAGE_SIZE == 0, "Offset is not aligned: %I64i\n", Offset.QuadPart);
+ ok((Offset.QuadPart % PAGE_SIZE == 0 || Offset.QuadPart == 0), "Offset is not aligned: %I64i\n", Offset.QuadPart);
ok(Length % PAGE_SIZE == 0, "Length is not aligned: %I64i\n", Length);
ok(Irp->AssociatedIrp.SystemBuffer == NULL, "A SystemBuffer was allocated!\n");
PVOID Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, 1024);
UNICODE_STRING BigAlignmentTest = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\BigAlignmentTest");
UNICODE_STRING SmallAlignmentTest = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\SmallAlignmentTest");
+ UNICODE_STRING ReallySmallAlignmentTest = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\ReallySmallAlignmentTest");
KmtLoadDriver(L"CcCopyRead", FALSE);
KmtOpenDriver();
NtClose(Handle);
+ InitializeObjectAttributes(&ObjectAttributes, &ReallySmallAlignmentTest, OBJ_CASE_INSENSITIVE, NULL, NULL);
+ Status = NtOpenFile(&Handle, FILE_ALL_ACCESS, &ObjectAttributes, &IoStatusBlock, 0, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT);
+ ok_eq_hex(Status, STATUS_SUCCESS);
+
+ ByteOffset.QuadPart = 1;
+ Status = NtReadFile(Handle, NULL, NULL, NULL, &IoStatusBlock, Buffer, 61, &ByteOffset, NULL);
+ ok_eq_hex(Status, STATUS_SUCCESS);
+ ok_eq_hex(((USHORT *)Buffer)[0], 0xBABA);
+
+ NtClose(Handle);
+
RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
KmtCloseDriver();
KmtUnloadDriver();