165 DPRINT(
"grabbing FCB at %p: %S, refCount:%d\n",
182 DPRINT(
"releasing FCB at %p: %S, refCount:%d\n",
228 DPRINT(
"Return FCB for stream file object\n");
229 Fcb =
Vcb->StreamFileObject->FsContext;
235 current_entry =
Vcb->FcbListHead.Flink;
236 while (current_entry != &
Vcb->FcbListHead)
250 current_entry = current_entry->
Flink;
320 MftRecord = ExAllocateFromNPagedLookasideList(&
Vcb->FileRecLookasideList);
321 if (MftRecord ==
NULL)
328 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, MftRecord);
335 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, MftRecord);
342 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, MftRecord);
362 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, MftRecord);
398 DPRINT(
"NtfsMakeFCBFromDirEntry(%p, %p, %wZ, %p, %p, %p)\n",
Vcb, DirectoryFCB,
Name,
Stream,
Record, fileFCB);
406 if (DirectoryFCB &&
Name)
521 PWSTR Colon, OldColon;
525 DPRINT(
"NtfsDirFindFile(%p, %p, %S, %s, %p)\n",
529 CaseSensitive ?
"TRUE" :
"FALSE",
534 CurrentDir = DirectoryFcb->
MFTIndex;
540 File.Length = (Colon - FileToFind) *
sizeof(
WCHAR);
550 File.Length = (Colon - FileToFind) *
sizeof(
WCHAR);
561 DPRINT1(
"Will now look for file '%wZ' with stream '%S'\n", &
File, Colon);
577 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
591 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
611 DPRINT(
"NtfsGetFCBForFile(%p, %p, %p, '%S', %s)\n",
616 CaseSensitive ?
"TRUE" :
"FALSE");
625 if (pFileName[0] ==
L'\0' ||
wcscmp(pFileName,
L"\\") == 0)
627 DPRINT(
"returning root FCB\n");
637 currentElement = pFileName + 1;
654 DPRINT(
"Parsing, currentElement:%S\n", currentElement);
655 DPRINT(
" parentFCB:%p FCB:%p\n", parentFCB,
FCB);
667 DPRINT(
"Element in requested path is not a directory\n");
683 DPRINT(
" pathName:%S\n", pathName);
691 DPRINT(
" elementName:%S\n", elementName);
696 *pParentFCB = parentFCB;
721 *pParentFCB = parentFCB;
742 FileRecord = ExAllocateFromNPagedLookasideList(&
Vcb->FileRecLookasideList);
743 if (FileRecord ==
NULL)
751 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
758 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
767 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
774 ExFreeToNPagedLookasideList(&
Vcb->FileRecLookasideList, FileRecord);
VOID NtfsReleaseFCB(PNTFS_VCB Vcb, PNTFS_FCB Fcb)
PFILENAME_ATTRIBUTE GetBestFileNameFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord)
#define STATUS_INSUFFICIENT_RESOURCES
PNTFS_FCB NtfsOpenRootFCB(PNTFS_VCB Vcb)
_In_ ULONG _In_ ULONG _In_ ULONG Length
BOOLEAN NtfsFCBIsReparsePoint(PNTFS_FCB Fcb)
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
NPAGED_LOOKASIDE_LIST FcbLookasideList
#define NTFS_FILE_TYPE_ENCRYPTED
#define STATUS_INVALID_PARAMETER
PFILENAME_ATTRIBUTE GetFileNameFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord, UCHAR NameType)
NTSTATUS NtfsMakeFCBFromDirEntry(PNTFS_VCB Vcb, PNTFS_FCB DirectoryFCB, PUNICODE_STRING Name, PCWSTR Stream, PFILE_RECORD_HEADER Record, ULONGLONG MFTIndex, PNTFS_FCB *fileFCB)
NTSTATUS NtfsLookupFileAt(PDEVICE_EXTENSION Vcb, PUNICODE_STRING PathName, BOOLEAN CaseSensitive, PFILE_RECORD_HEADER *FileRecord, PULONGLONG MFTIndex, ULONGLONG CurrentMFTIndex)
VOID NTAPI KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL OldIrql)
NTSTATUS ExInitializeResourceLite(PULONG res)
NTSTATUS NTAPI ExDeleteResourceLite(IN PERESOURCE Resource)
VOID NtfsAddFCBToTable(PNTFS_VCB Vcb, PNTFS_FCB Fcb)
IN PVOID IN PVOID IN USHORT IN USHORT Size
PNTFS_FCB NtfsCreateFCB(PCWSTR FileName, PCWSTR Stream, PNTFS_VCB Vcb)
PNTFS_FCB NtfsGrabFCBFromTable(PNTFS_VCB Vcb, PCWSTR FileName)
NTSTATUS FindAttribute(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER MftRecord, ULONG Type, PCWSTR Name, ULONG NameLength, PNTFS_ATTR_CONTEXT *AttrCtx, PULONG Offset)
PNTFS_FCB NtfsMakeRootFCB(PNTFS_VCB Vcb)
BOOLEAN NtfsFCBIsDirectory(PNTFS_FCB Fcb)
#define InsertTailList(ListHead, Entry)
NTSTATUS NtfsFCBInitializeCache(PNTFS_VCB Vcb, PNTFS_FCB Fcb)
NTSTATUS NtfsAttachFCBToFileObject(PNTFS_VCB Vcb, PNTFS_FCB Fcb, PFILE_OBJECT FileObject)
PSTANDARD_INFORMATION GetStandardInformationFromRecord(PDEVICE_EXTENSION Vcb, PFILE_RECORD_HEADER FileRecord)
PNTFS_GLOBAL_DATA NtfsGlobalData
#define NTFS_FILE_TYPE_DIRECTORY
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
NTSTATUS NtfsGetFCBForFile(PNTFS_VCB Vcb, PNTFS_FCB *pParentFCB, PNTFS_FCB *pFCB, PCWSTR pFileName, BOOLEAN CaseSensitive)
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record
NTFSIDENTIFIER Identifier
#define NTFS_FILE_TYPE_REPARSE
NTSTATUS NtfsReadFCBAttribute(PNTFS_VCB Vcb, PNTFS_FCB pFCB, ULONG Type, PCWSTR Name, ULONG NameLength, PVOID *Data)
VOID NtfsDestroyFCB(PNTFS_FCB Fcb)
static PCWSTR NtfsGetNextPathElement(PCWSTR FileName)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
PFILE_OBJECT NTAPI IoCreateStreamFileObject(IN PFILE_OBJECT FileObject, IN PDEVICE_OBJECT DeviceObject)
FSRTL_COMMON_FCB_HEADER RFCB
ULONGLONG NtfsGetFileSize(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, PCWSTR Stream, ULONG StreamLength, PULONGLONG AllocatedSize)
struct _LIST_ENTRY * Flink
#define NT_SUCCESS(StatCode)
PFILE_OBJECT PtrFileObject
VOID NTAPI CcInitializeCacheMap(IN PFILE_OBJECT FileObject, IN PCC_FILE_SIZES FileSizes, IN BOOLEAN PinAccess, IN PCACHE_MANAGER_CALLBACKS Callbacks, IN PVOID LazyWriteContext)
static NTSTATUS NtfsDirFindFile(PNTFS_VCB Vcb, PNTFS_FCB DirectoryFcb, PWSTR FileToFind, BOOLEAN CaseSensitive, PNTFS_FCB *FoundFCB)
#define EXCEPTION_EXECUTE_HANDLER
#define ObDereferenceObject
#define STATUS_OBJECT_PATH_NOT_FOUND
static VOID NtfsWSubString(PWCHAR pTarget, PCWSTR pSource, size_t pLength)
#define ExAllocatePoolWithTag(hernya, size, tag)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define memcpy(s1, s2, n)
NTFSIDENTIFIER Identifier
#define FCB_CACHE_INITIALIZED
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
struct _FileName FileName
#define STATUS_OBJECT_NAME_NOT_FOUND
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
NTSTATUS ReadFileRecord(PDEVICE_EXTENSION Vcb, ULONGLONG index, PFILE_RECORD_HEADER file)
VOID ReleaseAttributeContext(PNTFS_ATTR_CONTEXT Context)
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks
#define NTFS_FILE_TYPE_COMPRESSED
#define STATUS_OBJECT_NAME_INVALID
#define FIELD_OFFSET(t, f)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
ULONG ReadAttribute(PDEVICE_EXTENSION Vcb, PNTFS_ATTR_CONTEXT Context, ULONGLONG Offset, PCHAR Buffer, ULONG Length)
#define KeReleaseSpinLock(sl, irql)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
BOOLEAN NtfsFCBIsEncrypted(PNTFS_FCB Fcb)
BOOLEAN NtfsFCBIsCompressed(PNTFS_FCB Fcb)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define _SEH2_EXCEPT(...)
#define NTFS_FILE_NAME_WIN32
#define _SEH2_GetExceptionCode()
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID _In_ LONG _In_z_ PCHAR File
#define ExFreePoolWithTag(_P, _T)
ULONGLONG AttributeDataLength(PNTFS_ATTR_RECORD AttrRecord)
SECTION_OBJECT_POINTERS SectionObjectPointers
_Inout_opt_ PUNICODE_STRING _Inout_opt_ PUNICODE_STRING Stream
BOOLEAN NtfsFCBIsRoot(PNTFS_FCB Fcb)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
VOID NtfsGrabFCB(PNTFS_VCB Vcb, PNTFS_FCB Fcb)