63#define ULONG_ROUND_UP(x) ROUND_UP((x), (sizeof(ULONG)))
82 DPRINT(
"NtfsGetNamesInformation() called\n");
94 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
99 if (OverrideName !=
NULL)
101 NameBuffer = OverrideName->
Buffer;
115 Info->NextEntryOffset = 0;
152 DPRINT(
"NtfsGetDirectoryInformation() called\n");
164 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
172 if (OverrideName !=
NULL)
174 NameBuffer = OverrideName->
Buffer;
188 Info->NextEntryOffset = 0;
204 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
213 Info->FileIndex = MFTIndex;
237 DPRINT(
"NtfsGetFullDirectoryInformation() called\n");
249 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
257 if (OverrideName !=
NULL)
259 NameBuffer = OverrideName->
Buffer;
273 Info->NextEntryOffset = 0;
289 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
298 Info->FileIndex = MFTIndex;
323 DPRINT(
"NtfsGetBothDirectoryInformation() called\n");
335 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
344 if (OverrideName !=
NULL)
346 NameBuffer = OverrideName->
Buffer;
360 Info->NextEntryOffset = 0;
375 if (ShortFileName && OverrideName ==
NULL)
384 Info->ShortName[0] = 0;
385 Info->ShortNameLength = 0;
389 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
398 Info->FileIndex = MFTIndex;
437 Ret = FsRtlIsNameInExpression(&Upcased,
Name,
TRUE,
NULL);
496 FileRecord = ExAllocateFromNPagedLookasideList(&DeviceExt->FileRecLookasideList);
497 if (FileRecord ==
NULL)
510 ExFreeToNPagedLookasideList(&DeviceExt->FileRecLookasideList, FileRecord);
523 FileRecord = ExAllocateFromNPagedLookasideList(&DeviceExt->FileRecLookasideList);
524 if (FileRecord ==
NULL)
538 ExFreeToNPagedLookasideList(&DeviceExt->FileRecLookasideList, FileRecord);
566 DPRINT(
"NtfsQueryDirectory() called\n");
581 SearchPattern =
Stack->Parameters.QueryDirectory.FileName;
583 FileIndex =
Stack->Parameters.QueryDirectory.FileIndex;
587 DPRINT1(
"Compressed directory!\n");
598 if (SearchPattern !=
NULL)
600 if (!
Ccb->DirectorySearchPattern)
605 Ccb->DirectorySearchPattern = Pattern.
Buffer =
607 if (!
Ccb->DirectorySearchPattern)
614 Ccb->DirectorySearchPattern[SearchPattern->
Length /
sizeof(
WCHAR)] = 0;
617 else if (!
Ccb->DirectorySearchPattern)
621 if (!
Ccb->DirectorySearchPattern)
627 Ccb->DirectorySearchPattern[0] =
L'*';
628 Ccb->DirectorySearchPattern[1] = 0;
632 DPRINT(
"Search pattern '%S'\n",
Ccb->DirectorySearchPattern);
683 &Written, Buffer0 ==
NULL);
727 if (MFTRecord == OldMFTRecord)
729 DPRINT1(
"Ignoring duplicate MFT entry 0x%x\n", MFTRecord);
731 ExFreeToNPagedLookasideList(&DeviceExtension->FileRecLookasideList, FileRecord);
734 OldMFTRecord = MFTRecord;
762 ExFreeToNPagedLookasideList(&DeviceExtension->FileRecLookasideList, FileRecord);
797 DPRINT(
"NtfsDirectoryControl() called\n");
809 DPRINT1(
"IRP_MN_NOTIFY_CHANGE_DIRECTORY\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
#define NTFS_FILE_NAME_DOS
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
#define STATUS_NOT_IMPLEMENTED
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
#define NT_SUCCESS(StatCode)
PSTANDARD_INFORMATION GetStandardInformationFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord)
PFILENAME_ATTRIBUTE GetFileNameFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord, UCHAR NameType)
VOID NtfsDumpFileAttributes(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord)
PFILENAME_ATTRIBUTE GetBestFileNameFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord)
VOID NtfsFileFlagsToAttributes(ULONG NtfsAttributes, PULONG FileAttributes)
PVOID NtfsGetUserBuffer(PIRP Irp, BOOLEAN Paging)
FORCEINLINE NTSTATUS NtfsMarkIrpContextForQueue(PNTFS_IRP_CONTEXT IrpContext)
#define IRPCONTEXT_COMPLETE
struct NTFS_CCB * PNTFS_CCB
#define IRPCONTEXT_CANWAIT
#define CCB_RETURNED_DOTDOT
#define ExAllocatePoolWithTag(hernya, size, tag)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
#define ExAcquireResourceExclusiveLite(res, wait)
#define ExAcquireResourceSharedLite(res, wait)
#define ClearFlag(_F, _SF)
#define BooleanFlagOn(F, SF)
IN PFCB IN VBO OUT PLBO OUT PULONG OUT PBOOLEAN Allocated
struct _FileName FileName
@ FileDirectoryInformation
@ FileFullDirectoryInformation
@ FileBothDirectoryInformation
enum _FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS
struct _FILE_NAMES_INFORMATION * PFILE_NAMES_INFORMATION
NTSTATUS ReadFileRecord(PDEVICE_EXTENSION Vcb, ULONGLONG index, PFILE_RECORD_HEADER file)
VOID ReleaseAttributeContext(PNTFS_ATTR_CONTEXT Context)
ULONGLONG AttributeDataLength(PNTFS_ATTR_RECORD AttrRecord)
NTSTATUS FindAttribute(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER MftRecord, ULONG Type, PCWSTR Name, ULONG NameLength, PNTFS_ATTR_CONTEXT *AttrCtx, PULONG Offset)
ULONGLONG AttributeAllocatedLength(PNTFS_ATTR_RECORD AttrRecord)
NTSTATUS NtfsFindFileAt(PDEVICE_EXTENSION Vcb, PUNICODE_STRING SearchPattern, PULONG FirstEntry, PFILE_RECORD_HEADER *FileRecord, PULONGLONG MFTIndex, ULONGLONG CurrentMFTIndex, BOOLEAN CaseSensitive)
#define memcpy(s1, s2, n)
_In_ UINT _In_ UINT BytesToCopy
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
_In_ ULONG _In_ ULONG _In_ ULONG Length
static OUT PIO_STATUS_BLOCK OUT PVOID IN ULONG IN FILE_INFORMATION_CLASS FileInformationClass
static NTSTATUS NtfsGetDirEntryInformation(PDEVICE_EXTENSION DeviceExt, FILE_INFORMATION_CLASS FileInformationClass, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PCUNICODE_STRING OverrideName, PVOID Buffer, ULONG BufferLength, PULONG Written, BOOLEAN First)
ULONGLONG NtfsGetFileSize(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, PCWSTR Stream, ULONG StreamLength, PULONGLONG AllocatedSize)
#define ULONG_ROUND_UP(x)
static NTSTATUS NtfsGetDotEntry(PDEVICE_EXTENSION DeviceExt, ULONGLONG MFTIndex, PCUNICODE_STRING Name, FILE_INFORMATION_CLASS FileInformationClass, PVOID Buffer, ULONG BufferLength, PULONG Written, BOOLEAN First)
static NTSTATUS NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_FULL_DIRECTORY_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First, PCUNICODE_STRING OverrideName)
static NTSTATUS NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_DIRECTORY_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First, PCUNICODE_STRING OverrideName)
static NTSTATUS NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_BOTH_DIR_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First, PCUNICODE_STRING OverrideName)
static NTSTATUS NtfsGetNamesInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_NAMES_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First, PCUNICODE_STRING OverrideName)
NTSTATUS NtfsDirectoryControl(PNTFS_IRP_CONTEXT IrpContext)
static BOOLEAN NtfsDotNameMatches(PUNICODE_STRING Pattern, PUNICODE_STRING Name, BOOLEAN CaseSensitive)
NTSTATUS NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
static ULONGLONG NtfsGetParentMftIndex(PDEVICE_EXTENSION DeviceExt, ULONGLONG MFTIndex)
BOOLEAN NtfsFCBIsCompressed(PNTFS_FCB Fcb)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
BOOLEAN NTAPI FsRtlDoesNameContainWildCards(IN PUNICODE_STRING Name)
#define STATUS_INVALID_INFO_CLASS
#define IRP_MN_QUERY_DIRECTORY
#define IRP_MN_NOTIFY_CHANGE_DIRECTORY
#define STATUS_BUFFER_OVERFLOW
PDEVICE_OBJECT DeviceObject
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_UNSUCCESSFUL
#define STATUS_NO_SUCH_FILE
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
#define STATUS_NO_MORE_FILES
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define SL_INDEX_SPECIFIED
#define SL_RETURN_SINGLE_ENTRY
#define SL_CASE_SENSITIVE