63#define ULONG_ROUND_UP(x) ROUND_UP((x), (sizeof(ULONG)))
80 DPRINT(
"NtfsGetNamesInformation() called\n");
92 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
103 Info->NextEntryOffset = 0;
138 DPRINT(
"NtfsGetDirectoryInformation() called\n");
150 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
164 Info->NextEntryOffset = 0;
180 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
189 Info->FileIndex = MFTIndex;
211 DPRINT(
"NtfsGetFullDirectoryInformation() called\n");
223 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
237 Info->NextEntryOffset = 0;
253 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
262 Info->FileIndex = MFTIndex;
285 DPRINT(
"NtfsGetBothDirectoryInformation() called\n");
297 DPRINT1(
"No name information for file ID: %#I64x\n", MFTIndex);
312 Info->NextEntryOffset = 0;
336 Info->ShortName[0] = 0;
337 Info->ShortNameLength = 0;
341 Info->LastAccessTime.QuadPart =
FileName->LastAccessTime;
350 Info->FileIndex = MFTIndex;
381 DPRINT(
"NtfsQueryDirectory() called\n");
396 SearchPattern =
Stack->Parameters.QueryDirectory.FileName;
398 FileIndex =
Stack->Parameters.QueryDirectory.FileIndex;
402 DPRINT1(
"Compressed directory!\n");
413 if (SearchPattern !=
NULL)
415 if (!
Ccb->DirectorySearchPattern)
420 Ccb->DirectorySearchPattern = Pattern.
Buffer =
422 if (!
Ccb->DirectorySearchPattern)
429 Ccb->DirectorySearchPattern[SearchPattern->
Length /
sizeof(
WCHAR)] = 0;
432 else if (!
Ccb->DirectorySearchPattern)
436 if (!
Ccb->DirectorySearchPattern)
442 Ccb->DirectorySearchPattern[0] =
L'*';
443 Ccb->DirectorySearchPattern[1] = 0;
447 DPRINT(
"Search pattern '%S'\n",
Ccb->DirectorySearchPattern);
488 if (MFTRecord == OldMFTRecord)
490 DPRINT1(
"Ignoring duplicate MFT entry 0x%x\n", MFTRecord);
492 ExFreeToNPagedLookasideList(&DeviceExtension->FileRecLookasideList, FileRecord);
495 OldMFTRecord = MFTRecord;
559 ExFreeToNPagedLookasideList(&DeviceExtension->FileRecLookasideList, FileRecord);
594 DPRINT(
"NtfsDirectoryControl() called\n");
603 DPRINT1(
"IRP_MN_NOTIFY_CHANGE_DIRECTORY\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define NTFS_FILE_NAME_DOS
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
#define STATUS_NOT_IMPLEMENTED
#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 ExAllocatePoolWithTag(hernya, size, tag)
#define ExAcquireResourceExclusiveLite(res, wait)
#define ExAcquireResourceSharedLite(res, wait)
#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
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)
static OUT PIO_STATUS_BLOCK OUT PVOID IN ULONG IN FILE_INFORMATION_CLASS FileInformationClass
_In_ UINT _In_ UINT BytesToCopy
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
_In_ ULONG _In_ ULONG _In_ ULONG Length
ULONGLONG NtfsGetFileSize(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, PCWSTR Stream, ULONG StreamLength, PULONGLONG AllocatedSize)
#define ULONG_ROUND_UP(x)
static NTSTATUS NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_DIRECTORY_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First)
static NTSTATUS NtfsGetNamesInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_NAMES_INFORMATION Info, ULONG BufferLength, PULONG Written, BOOLEAN First)
NTSTATUS NtfsDirectoryControl(PNTFS_IRP_CONTEXT IrpContext)
NTSTATUS NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
static NTSTATUS NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, ULONGLONG MFTIndex, PFILE_BOTH_DIR_INFORMATION Info, 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)
BOOLEAN NtfsFCBIsCompressed(PNTFS_FCB Fcb)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#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
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define SL_INDEX_SPECIFIED
#define SL_RETURN_SINGLE_ENTRY
#define SL_CASE_SENSITIVE