21 #pragma alloc_text(PAGE, Ext2IsHandleCountZero) 22 #pragma alloc_text(PAGE, Ext2LockVcb) 23 #pragma alloc_text(PAGE, Ext2LockVolume) 24 #pragma alloc_text(PAGE, Ext2UnlockVcb) 25 #pragma alloc_text(PAGE, Ext2UnlockVolume) 26 #pragma alloc_text(PAGE, Ext2AllowExtendedDasdIo) 27 #pragma alloc_text(PAGE, Ext2GetRetrievalPointerBase) 28 #pragma alloc_text(PAGE, Ext2QueryExtentMappings) 29 #pragma alloc_text(PAGE, Ext2QueryRetrievalPointers) 30 #pragma alloc_text(PAGE, Ext2GetRetrievalPointers) 31 #pragma alloc_text(PAGE, Ext2UserFsRequest) 32 #pragma alloc_text(PAGE, Ext2IsMediaWriteProtected) 33 #pragma alloc_text(PAGE, Ext2MountVolume) 34 #pragma alloc_text(PAGE, Ext2PurgeVolume) 35 #pragma alloc_text(PAGE, Ext2PurgeFile) 36 #pragma alloc_text(PAGE, Ext2DismountVolume) 37 #pragma alloc_text(PAGE, Ext2IsVolumeMounted) 38 #pragma alloc_text(PAGE, Ext2VerifyVolume) 39 #pragma alloc_text(PAGE, Ext2FileSystemControl) 73 for (
List =
Vcb->FcbList.Flink;
82 DEBUG(
DL_INF, (
"Ext2IsHandleCountZero: Inode:%xh File:%S OpenHandleCount=%xh\n",
102 DEBUG(
DL_INF, (
"Ext2LockVolume: Volume is already locked.\n"));
108 DEBUG(
DL_INF, (
"Ext2LockVcb: There are still opened files.\n"));
115 DEBUG(
DL_INF, (
"Ext2LockVcb: Thare are still opened files.\n"));
174 #if (_WIN32_WINNT >= 0x0500) 181 VcbResourceAcquired =
TRUE;
193 if (VcbResourceAcquired) {
197 if (!IrpContext->ExceptionInProgress) {
219 DEBUG(
DL_ERR, (
": Ext2UnlockVcb: Volume is not locked.\n"));
227 DEBUG(
DL_INF, (
"Ext2UnlockVcb: Volume unlocked.\n"));
276 VcbResourceAcquired =
TRUE;
282 if (VcbResourceAcquired) {
286 if (!IrpContext->ExceptionInProgress) {
308 ULONG InputLength = 0;
317 Irp = IrpContext->Irp;
335 Parameters.FileSystemControl.InputBufferLength;
339 if (IoIs32bitProcess(
Irp)) {
340 if (InputLength !=
sizeof(
UINT32)) {
348 if (InputLength !=
sizeof(
HANDLE)) {
370 GlobalResourceAcquired =
TRUE;
376 ListEntry = ListEntry->
Flink;
378 DEBUG(
DL_DBG, (
"Ext2InvalidateVolumes: Vcb=%xh Vcb->Vpb=%xh " 379 "Blink = %p &Vcb->Next = %p\n",
384 DEBUG(
DL_DBG, (
"Ext2InvalidateVolumes: Got Vcb=%xh Vcb->Vpb=%xh " 385 "Blink = %p &Vcb->Next = %p\n",
394 if (GlobalResourceAcquired) {
398 if (!IrpContext->ExceptionInProgress) {
469 ULONG OplockCount = 0;
478 Irp = IrpContext->Irp;
538 FsCtrlCode = EIrpSp->
Parameters.FileSystemControl.FsControlCode;
540 switch (FsCtrlCode) {
546 VcbResourceAcquired =
553 FcbResourceAcquired =
571 FcbResourceAcquired =
597 IrpContext->Irp =
NULL;
601 if (FcbResourceAcquired) {
605 if (VcbResourceAcquired) {
629 Irp = IrpContext->Irp;
637 if (
Irp->AssociatedIrp.SystemBuffer !=
NULL) {
641 }
else if (
Irp->MdlAddress !=
NULL) {
660 if (!IrpContext->ExceptionInProgress) {
693 while (Vbn < RequestVbn->
QuadPart) {
696 if (RequestVbn->QuadPart <
Vbn +
Length) {
728 if (PartialRuns ==
NULL) {
742 MappedRuns = PartialRuns;
754 *pMappedRuns = MappedRuns;
802 Irp = IrpContext->Irp;
809 InputSize = EIrpSp->
Parameters.FileSystemControl.InputBufferLength;
810 OutputSize = EIrpSp->
Parameters.FileSystemControl.OutputBufferLength;
860 OutputSize !=
sizeof(
PVOID)) {
870 FcbResourceAcquired =
TRUE;
872 RequestVbn = EIrpSp->
Parameters.FileSystemControl.Type3InputBuffer;
873 pMappedRuns =
Irp->UserBuffer;
893 if (FcbResourceAcquired) {
947 Irp = IrpContext->Irp;
954 InputSize = EIrpSp->
Parameters.FileSystemControl.InputBufferLength;
955 OutputSize = EIrpSp->
Parameters.FileSystemControl.OutputBufferLength;
1011 FcbResourceAcquired =
TRUE;
1014 EIrpSp->
Parameters.FileSystemControl.Type3InputBuffer;
1035 DEBUG(
DL_DBG, (
"Ext2GetRetrievalPointers: Startin from Vbn: %I64xh\n",
1044 while (Vbn < Fcb->
Header.AllocationSize.QuadPart) {
1071 DEBUG(
DL_MAP, (
"Ext2GetRetrievalPointers: %wZ %d Vbn = %I64xh Lbn = %I64xh\n",
1117 goto exit_to_get_rps;
1120 while (MappedRuns[_i*2 + 0].
QuadPart != 0 ||
1121 MappedRuns[_i*2 + 1].
QuadPart != 0 ) {
1122 DEBUG(
DL_MAP, (
"Ext2QueryExtentMappings: %wZ %d Vbn = %I64xh Lbn = %I64xh\n",
1139 if (FcbResourceAcquired) {
1186 Irp = IrpContext->Irp;
1193 OutputSize = EIrpSp->
Parameters.FileSystemControl.OutputBufferLength;
1248 FcbResourceAcquired =
TRUE;
1268 DEBUG(
DL_DBG, (
"Ext2GetRetrievalPointerBase: FileAreaOffset is 0.\n"));
1276 if (FcbResourceAcquired) {
1320 if ((
PUCHAR)RDB->SymbolicLinkReparseBuffer.PathBuffer
1321 + RDB->SymbolicLinkReparseBuffer.SubstituteNameOffset
1322 + RDB->SymbolicLinkReparseBuffer.SubstituteNameLength
1328 if ((
PUCHAR)RDB->SymbolicLinkReparseBuffer.PathBuffer
1329 + RDB->SymbolicLinkReparseBuffer.PrintNameOffset
1330 + RDB->SymbolicLinkReparseBuffer.PrintNameLength
1353 PathBufferLength *
sizeof(
WCHAR);
1355 RDB->SymbolicLinkReparseBuffer.SubstituteNameOffset = PathBufferLength;
1356 RDB->SymbolicLinkReparseBuffer.SubstituteNameLength = PathBufferLength;
1357 RDB->SymbolicLinkReparseBuffer.PrintNameOffset = 0;
1358 RDB->SymbolicLinkReparseBuffer.PrintNameLength = PathBufferLength;
1360 RtlZeroMemory(&RDB->SymbolicLinkReparseBuffer.PathBuffer, PathBufferLength * 2);
1411 int OemNameLength = 0,
i;
1413 Ccb = IrpContext->Ccb;
1419 Mcb = IrpContext->Fcb->Mcb;
1420 Irp = IrpContext->Irp;
1444 OemNameLength = (
ULONG)
Mcb->Inode.i_size;
1450 OemName.MaximumLength = OemNameLength + 1;
1454 if (!OemNameBuffer) {
1501 if (OemNameBuffer) {
1534 if (0 ==
Mcb->Inode.i_blocks) {
1550 if (
Mcb->Inode.i_blocks) {
1599 int OemNameLength = 0,
i;
1606 Ccb = IrpContext->Ccb;
1614 Irp = IrpContext->Irp;
1618 FcbLockAcquired =
TRUE;
1620 ParentMcb =
Mcb->Parent;
1632 if (FcbLockAcquired) {
1634 FcbLockAcquired =
FALSE;
1643 MainResourceAcquired =
TRUE;
1666 OemName.MaximumLength = OemNameLength + 1;
1670 if (!OemNameBuffer) {
1712 if (FcbLockAcquired) {
1714 FcbLockAcquired =
FALSE;
1717 if (MainResourceAcquired) {
1721 if (OemNameBuffer) {
1806 Ccb = IrpContext->Ccb;
1812 Mcb = IrpContext->Fcb->Mcb;
1813 Irp = IrpContext->Irp;
1816 FcbLockAcquired =
TRUE;
1818 ParentMcb =
Mcb->Parent;
1841 if (FcbLockAcquired) {
1843 FcbLockAcquired =
FALSE;
1852 MainResourceAcquired =
TRUE;
1864 if (FcbLockAcquired) {
1868 if (MainResourceAcquired) {
1915 Irp = IrpContext->Irp;
1920 IoStackLocation->
Parameters.FileSystemControl.FsControlCode;
1923 IoStackLocation)->Parameters.FileSystemControl.FsControlCode;
1960 #if (_WIN32_WINNT >= 0x0500) 1964 #endif //(_WIN32_WINNT >= 0x0500) 2094 *((
PULONG)IrpContext->RealDevice->DeviceExtension) ==
'DSSA') {
2101 Irp = IrpContext->Irp;
2104 IoStackLocation->
Parameters.MountVolume.DeviceObject;
2126 &VolumeDeviceObject );
2135 VolumeDeviceObject->DeviceObjectExtension->PowerControlNeeded =
FALSE;
2170 Vcb->DiskGeometry = DiskGeometry;
2183 DEBUG(
DL_INF, (
"Volume of ext2 file system is found.\n"));
2190 DEBUG(
DL_DBG, (
"Ext2MountVolume: DevObject=%p Vcb=%p\n", VolumeDeviceObject,
Vcb));
2195 VolumeDeviceObject,
Vpb);
2202 GlobalDataResourceAcquired =
TRUE;
2209 OldVpb = OldVcb->Vpb;
2212 if (OldVpb ==
Vpb) {
2221 &
Vpb->VolumeLabel[0],
2222 Vpb->VolumeLabelLength)) &&
2224 &
Vcb->SuperBlock->s_uuid[0], 16)) ) {
2243 if (GlobalDataResourceAcquired) {
2261 if (VolumeDeviceObject) {
2268 if (!IrpContext->ExceptionInProgress) {
2283 ULONG ChangeCount = 0;
2296 Irp = IrpContext->Irp;
2304 dwBytes =
sizeof(
ULONG);
2306 Vcb->TargetDeviceObject,
2317 (ChangeCount !=
Vcb->ChangeCount))) {
2322 if (
Vcb->Vpb ==
Vcb->Vpb->RealDevice->Vpb) {
2358 if (
Vcb->Vpb ==
Vcb->Vpb->RealDevice->Vpb) {
2386 ULONG ChangeCount = 0;
2409 VcbResourceAcquired =
2424 dwBytes =
sizeof(
ULONG);
2426 Vcb->TargetDeviceObject,
2438 Vcb->ChangeCount = ChangeCount;
2441 Irp = IrpContext->Irp;
2462 DEBUG(
DL_INF, (
"Ext2VerifyVolume: Volume verify succeeded.\n"));
2472 DEBUG(
DL_INF, (
"Ext2VerifyVolume: Volume verify failed.\n"));
2480 if (VcbResourceAcquired) {
2484 if (!IrpContext->ExceptionInProgress) {
2558 VcbResourceAcquired =
TRUE;
2569 VcbResourceAcquired =
FALSE;
2574 DEBUG(
DL_INF, (
"Ext2Dismount: Volume dismount pending.\n"));
2579 if (VcbResourceAcquired) {
2583 if (!IrpContext->ExceptionInProgress) {
2600 ULONG UnCleanCount = 0;
2603 if (NewVpb ==
NULL) {
2604 DEBUG(
DL_ERR, (
"Ex2CheckDismount: failed to allocate NewVpb.\n"));
2607 DEBUG(
DL_DBG, (
"Ext2CheckDismount: NewVpb allocated: %p\n", NewVpb));
2620 IrpContext->RealDevice ==
Vcb->RealDevice) {
2628 DEBUG(
DL_DBG, (
"Ext2CheckDismount: Vpb %p ioctl=%d Device %p\n",
2629 Vpb,
Vpb->ReferenceCount,
Vpb->RealDevice));
2631 if (
Vpb->ReferenceCount <= UnCleanCount) {
2638 if ((
Vcb->RealDevice !=
Vpb->RealDevice) &&
2639 (
Vcb->RealDevice->Vpb ==
Vpb)) {
2648 if (
Vpb->ReferenceCount) {
2655 DEBUG(
DL_DBG, (
"Ext2CheckDismount: Vpb: %p bDeleted=%d bTearDown=%d\n",
2656 Vpb, bDeleted, bTearDown));
2659 }
else if (bForce) {
2661 DEBUG(
DL_DBG, (
"Ext2CheckDismount: New/Old Vpb %p/%p Realdevice = %p\n",
2662 NewVpb,
Vcb->Vpb,
Vpb->RealDevice));
2669 NewVpb->Size =
sizeof(
VPB);
2671 NewVpb->RealDevice =
Vpb->RealDevice;
2672 NewVpb->RealDevice->
Vpb = NewVpb;
2685 DEBUG(
DL_DBG, (
"Ext2CheckDismount: Tearing vcb %p ...\n",
Vcb));
2690 DEBUG(
DL_DBG, (
"Ext2CheckDismount: Deleting vcb %p ...\n",
Vcb));
2694 if (NewVpb !=
NULL) {
2695 DEBUG(
DL_DBG, (
"Ext2CheckDismount: freeing new Vpb %p\n", NewVpb));
2721 VcbResourceAcquired =
TRUE;
2724 FlushBeforePurge =
FALSE;
2730 FcbResourceAcquired =
TRUE;
2737 DEBUG(
DL_INF, (
"Ext2PurgeVolume: %wZ refercount=%xh\n",
2738 &
Fcb->
Mcb->FullName,
Fcb->ReferenceCount));
2753 if (
Fcb->ReferenceCount <= 1) {
2754 Fcb->TsDrop.QuadPart = 0;
2763 if (FcbResourceAcquired) {
2765 FcbResourceAcquired =
FALSE;
2770 gdResourceAcquired =
TRUE;
2775 if (FlushBeforePurge) {
2782 if (
Vcb->SectionObject.ImageSectionObject) {
2786 if (
Vcb->SectionObject.DataSectionObject) {
2790 DEBUG(
DL_INF, (
"Ext2PurgeVolume: Volume flushed and purged.\n"));
2794 if (gdResourceAcquired) {
2798 if (FcbResourceAcquired) {
2802 if (VcbResourceAcquired) {
2823 DEBUG(
DL_INF, (
"Ext2PurgeFile: CcFlushCache on %wZ.\n",
2831 if (
Fcb->SectionObject.ImageSectionObject) {
2832 DEBUG(
DL_INF, (
"Ext2PurgeFile: MmFlushImageSection on %wZ.\n",
2837 if (
Fcb->SectionObject.DataSectionObject) {
2838 DEBUG(
DL_INF, (
"Ext2PurgeFile: CcPurgeCacheSection on %wZ.\n",
2857 switch (IrpContext->MinorFunction) {
2873 DEBUG(
DL_ERR, (
"Ext2FilsSystemControl: Invalid Device Request.\n"));
#define DO_DEVICE_INITIALIZING
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
struct _EXT2_FCB * PEXT2_FCB
NTSTATUS Ext2LoadSuper(IN PEXT2_VCB Vcb, IN BOOLEAN bVerify, OUT PEXT2_SUPER_BLOCK *Sb)
BOOLEAN Ext2ReadInode(PEXT2_VOLUME_INFO Volume, ULONG Inode, PEXT2_INODE InodeBuffer)
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
#define STATUS_PRIVILEGE_NOT_HELD
#define STATUS_NO_MEDIA_IN_DEVICE
#define IsInodeSymLink(I)
NTSTATUS Ext2TruncateSymlink(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, ULONG Size)
IN PVCB IN FAT_VOLUME_STATE VolumeState
#define FSCTL_UNLOCK_VOLUME
struct STARTING_VCN_INPUT_BUFFER * PSTARTING_VCN_INPUT_BUFFER
#define IRP_CONTEXT_FLAG_WAIT
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH/sizeof(WCHAR)]
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
NTSTATUS Ext2DiskIoControl(IN PDEVICE_OBJECT DeviceOjbect, IN ULONG IoctlCode, IN PVOID InputBuffer, IN ULONG InputBufferSize, IN OUT PVOID OutputBuffer, IN OUT PULONG OutputBufferSize)
NTSTATUS Ext2QueryRetrievalPointers(IN PEXT2_IRP_CONTEXT IrpContext)
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
#define IRP_MJ_FLUSH_BUFFERS
#define CCB_DELETE_ON_CLOSE
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
#define DEC_MEM_COUNT(_i, _p, _s)
FSRTL_ADVANCED_FCB_HEADER Header
_Must_inspect_result_ __drv_aliasesMem PDEVICE_OBJECT _In_ PDEVICE_OBJECT TargetDevice
VOID Ext2InitializeReparseData(IN PREPARSE_DATA_BUFFER RDB, USHORT PathBufferLength)
NTSTATUS Ext2ReadSymlink(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN PVOID Buffer, IN ULONG Size, OUT PULONG BytesRead)
#define STATUS_INVALID_PARAMETER
struct _LIST_ENTRY * Blink
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
NTSTATUS Ext2DeleteReparsePoint(IN PEXT2_IRP_CONTEXT IrpContext)
ULONG Ext2CountExtents(IN PEXT2_EXTENT Chain)
#define IOCTL_DISK_CHECK_VERIFY
VOID Ext2ClearVpbFlag(IN PVPB Vpb, IN USHORT Flag)
NTSTATUS Ext2FileSystemControl(IN PEXT2_IRP_CONTEXT IrpContext)
#define IRP_MJ_SET_VOLUME_INFORMATION
NTSTATUS Ext2PurgeFile(IN PEXT2_FCB Fcb, IN BOOLEAN FlushBeforePurge)
BOOLEAN Ext2IsMediaWriteProtected(IN PEXT2_IRP_CONTEXT IrpContext, IN PDEVICE_OBJECT TargetDevice)
#define STATUS_INVALID_DEVICE_REQUEST
NTSTATUS Ext2VerifyVolume(IN PEXT2_IRP_CONTEXT IrpContext)
VOID Ext2DestroyVcb(IN PEXT2_VCB Vcb)
#define FSCTL_OPLOCK_BREAK_ACK_NO_2
VOID NTAPI IoAcquireVpbSpinLock(OUT PKIRQL Irql)
#define IOCTL_DISK_IS_WRITABLE
IN PVOID IN PVOID IN USHORT IN USHORT Size
struct _FCB::@709::@712 Fcb
VOID Ext2JointExtents(IN PEXT2_EXTENT Chain, IN PEXT2_EXTENT Extent)
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING
NTSTATUS Ext2FlushVolume(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bShutDown)
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
#define STATUS_WRONG_VOLUME
#define FSCTL_GET_REPARSE_POINT
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB ParentDcb
#define InsertTailList(ListHead, Entry)
#define STATUS_VERIFY_REQUIRED
struct _REPARSE_DATA_BUFFER::@303::@305 SymbolicLinkReparseBuffer
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
NTSTATUS Ext2BuildExtents(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONGLONG Offset, IN ULONG Size, IN BOOLEAN bAlloc, OUT PEXT2_EXTENT *Chain)
NTSTATUS Ext2WriteSymlink(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN PVOID Buffer, IN ULONG Size, OUT PULONG BytesWritten)
#define FSCTL_REQUEST_BATCH_OPLOCK
#define FSCTL_MARK_VOLUME_DIRTY
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
#define RtlMoveMemory(Destination, Source, Length)
#define FSCTL_GET_RETRIEVAL_POINTER_BASE
#define STATUS_BUFFER_TOO_SMALL
#define VCB_REMOVABLE_MEDIA
NTSTATUS Ext2UnlockVolume(IN PEXT2_IRP_CONTEXT IrpContext)
void ext3_dec_count(struct inode *inode)
#define STATUS_END_OF_FILE
NTSTATUS Ext2TruncateFile(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, PLARGE_INTEGER AllocationSize)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
NTSTATUS Ext2DismountVolume(IN PEXT2_IRP_CONTEXT IrpContext)
_In_ WDFREQUEST _In_ size_t OutputBufferLength
NTSTATUS NTAPI FsRtlOplockFsctrl(IN POPLOCK Oplock, IN PIRP Irp, IN ULONG OpenCount)
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
NTFSIDENTIFIER Identifier
#define IRP_MN_VERIFY_VOLUME
NTSTATUS Ext2SetReparsePoint(IN PEXT2_IRP_CONTEXT IrpContext)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
NTSTATUS Ext2QueueRequest(IN PEXT2_IRP_CONTEXT IrpContext)
#define CCB_ALLOW_EXTENDED_DASD_IO
NTSTATUS Ext2LockVolume(IN PEXT2_IRP_CONTEXT IrpContext)
#define FSCTL_OPLOCK_BREAK_NOTIFY
BOOLEAN Ext2CheckDismount(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bForce)
#define FSCTL_INVALIDATE_VOLUMES
#define STATUS_UNRECOGNIZED_VOLUME
#define Ext2BugCheck(A, B, C, D)
#define REPARSE_DATA_BUFFER_HEADER_SIZE
#define FILE_ACTION_MODIFIED
#define STATUS_INVALID_USER_BUFFER
_In_ PVOID _In_ ULONG Event
NTSTATUS Ext2IsVolumeDirty(IN PEXT2_IRP_CONTEXT IrpContext)
NTSTATUS Ext2WriteInode(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONGLONG Offset, IN PVOID Buffer, IN ULONG Size, IN BOOLEAN bDirectIo, OUT PULONG dwReturn)
VOID Ext2NotifyReportChange(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Filter, IN ULONG Action)
LARGE_INTEGER StartingVcn
NTSTATUS Ext2UnicodeToOEM(IN PEXT2_VCB Vcb, IN OUT POEM_STRING Oem, IN PUNICODE_STRING Unicode)
VOID Ext2DropBH(IN PEXT2_VCB Vcb)
#define INC_MEM_COUNT(_i, _p, _s)
#define _SEH2_AbnormalTermination()
NTSTATUS Ext2AllowExtendedDasdIo(IN PEXT2_IRP_CONTEXT IrpContext)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
NTSTATUS Ext2GetRetrievalPointerBase(IN PEXT2_IRP_CONTEXT IrpContext)
#define SL_OVERRIDE_VERIFY_VOLUME
PEXT2_FCB Ext2AllocateFcb(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb)
#define STATUS_MEDIA_WRITE_PROTECTED
NTSTATUS Ext2OplockRequest(IN PEXT2_IRP_CONTEXT IrpContext)
NTSTATUS Ext2UserFsRequest(IN PEXT2_IRP_CONTEXT IrpContext)
#define ClearLongFlag(_F, _SF)
NTSTATUS Ext2PurgeVolume(IN PEXT2_VCB Vcb, IN BOOLEAN FlushBeforePurge)
FAST_IO_POSSIBLE Ext2IsFastIoPossible(IN PEXT2_FCB Fcb)
#define VPB_REMOVE_PENDING
#define FILE_ATTRIBUTE_REPARSE_POINT
#define FsRtlAreThereCurrentFileLocks(FL)
#define STATUS_FILE_DELETED
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
ULONG Ext2OEMToUnicodeSize(IN PEXT2_VCB Vcb, IN PANSI_STRING Oem)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
#define FILE_DEVICE_DISK_FILE_SYSTEM
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
#define FSCTL_DISMOUNT_VOLUME
#define IRP_MN_MOUNT_VOLUME
NTSTATUS NTAPI CcWaitForCurrentLazyWriterActivity(VOID)
struct _LIST_ENTRY * Flink
struct RETRIEVAL_POINTERS_BUFFER::@3276 Extents[1]
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
#define IRP_MN_USER_FS_REQUEST
_Must_inspect_result_ _In_ ULONG Flags
NTSYSAPI ULONG NTAPI RtlEqualMemory(CONST VOID *Source1, CONST VOID *Source2, ULONG Length)
#define FSCTL_DELETE_REPARSE_POINT
NTSTATUS Ext2InvalidateVolumes(IN PEXT2_IRP_CONTEXT IrpContext)
#define NT_SUCCESS(StatCode)
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
#define FSCTL_REQUEST_OPLOCK_LEVEL_2
#define EXCEPTION_EXECUTE_HANDLER
#define IsVcbReadOnly(Vcb)
#define IRP_MJ_FILE_SYSTEM_CONTROL
struct _DEVICE_OBJECT * RealDevice
NTSTATUS Ext2InspectReparseData(IN PREPARSE_DATA_BUFFER RDB, IN ULONG InputBufferLength)
#define CCB_OPEN_REPARSE_POINT
#define ObDereferenceObject
struct _EXT2_VCB EXT2_VCB
ULONG Ext2UnicodeToOEMSize(IN PEXT2_VCB Vcb, IN PUNICODE_STRING Unicode)
PDEVICE_OBJECT DeviceObject
#define STATUS_ACCESS_DENIED
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
#define EXT2_LINKLEN_IN_INODE
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define FSCTL_ALLOW_EXTENDED_DASD_IO
VOID Ext2InsertVcb(PEXT2_VCB Vcb)
#define STATUS_UNSUCCESSFUL
#define VCB_WRITE_PROTECTED
#define ExAllocatePoolWithTag(hernya, size, tag)
union _LARGE_INTEGER LARGE_INTEGER
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
#define VCB_DISMOUNT_PENDING
NTSTATUS Ext2CompleteIrpContext(IN PEXT2_IRP_CONTEXT IrpContext, IN NTSTATUS Status)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
VOID Ext2TearDownStream(IN PEXT2_VCB Vcb)
#define FSCTL_GET_RETRIEVAL_POINTERS
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define FCB_FILE_MODIFIED
#define STATUS_NOT_A_REPARSE_POINT
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
_Must_inspect_result_ _In_ USHORT NewSize
#define EXT2_BUGCHK_FSCTL
#define FSCTL_REQUEST_OPLOCK_LEVEL_1
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
POBJECT_TYPE IoFileObjectType
#define SYMLINK_FLAG_RELATIVE
NTSTATUS Ext2OEMToUnicode(IN PEXT2_VCB Vcb, IN OUT PUNICODE_STRING Oem, IN POEM_STRING Unicode)
ClearFlag(Dirent->Flags, DIRENT_FLAG_NOT_PERSISTENT)
VOID Ext2RemoveVcb(PEXT2_VCB Vcb)
BOOLEAN NTAPI ExAcquireSharedStarveExclusive(IN PERESOURCE Resource, IN BOOLEAN Wait)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _DISK_GEOMETRY DISK_GEOMETRY
NTSTATUS Ext2IsVolumeMounted(IN PEXT2_IRP_CONTEXT IrpContext)
#define Ext2NormalizeAndRaiseStatus(IRPCONTEXT, STATUS)
#define KeInitializeEvent(pEvt, foo, foo2)
NTSTATUS Ext2FlushFiles(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bShutDown)
#define STATUS_BUFFER_OVERFLOW
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define Ext2RaiseStatus(IRPCONTEXT, STATUS)
NTSTATUS Ext2UnlockVcb(IN PEXT2_VCB Vcb, IN PFILE_OBJECT FileObject)
#define FILE_NOTIFY_CHANGE_ATTRIBUTES
#define InitializeListHead(ListHead)
_In_ PIO_STACK_LOCATION IrpSp
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
BOOLEAN Ext2IsHandleCountZero(IN PEXT2_VCB Vcb)
static PDEVICE_OBJECT MainDeviceObject
#define SetLongFlag(_F, _SF)
NTSTATUS Ext2UpdateGroupDirStat(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG Group)
#define FIELD_OFFSET(t, f)
NTSTATUS Ext2MountVolume(IN PEXT2_IRP_CONTEXT IrpContext)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define FSCTL_IS_VOLUME_DIRTY
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
IN PVCB IN VBO IN ULONG OUT PBCB OUT PVOID IN BOOLEAN IN BOOLEAN Zero
#define FSCTL_IS_VOLUME_MOUNTED
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG FsControlCode
#define VCB_VOLUME_LOCKED
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define EXT2_UNLOAD_PENDING
VOID Ext2ReleaseFcb(IN PEXT2_FCB Fcb)
NTSTATUS Ext2QueryExtentMappings(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_FCB Fcb, IN PLARGE_INTEGER RequestVbn, OUT PLARGE_INTEGER *pMappedRuns)
#define STATUS_VOLUME_DISMOUNTED
#define STATUS_NOT_LOCKED
#define FSCTL_LOCK_VOLUME
#define IsExt2FsDevice(DO)
USHORT SubstituteNameOffset
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
NTSTATUS Ext2InitializeVcb(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_SUPER_BLOCK Ext2Sb, PDEVICE_OBJECT TargetDevice, PDEVICE_OBJECT VolumeDevice, PVPB Vpb)
#define IRP_MJ_SET_INFORMATION
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
ERESOURCE PagingIoResource
#define MmGetSystemAddressForMdl(Mdl)
#define RtlZeroMemory(Destination, Length)
NTSTATUS Ext2GetReparsePoint(IN PEXT2_IRP_CONTEXT IrpContext)
VOID Ext2FreePool(IN PVOID P, IN ULONG Tag)
#define RtlCopyMemory(Destination, Source, Length)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
struct _EXT2_VCB * PEXT2_VCB
NTSTATUS Ext2SetFileType(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_FCB Dcb, IN PEXT2_MCB Mcb, IN umode_t mode)
#define _SEH2_EXCEPT(...)
VOID Ext2DestroyExtentChain(IN PEXT2_EXTENT Chain)
#define FSCTL_SET_REPARSE_POINT
NTSTATUS Ext2GetRetrievalPointers(IN PEXT2_IRP_CONTEXT IrpContext)
IO_STACK_LOCATION * PEXTENDED_IO_STACK_LOCATION
NTSTATUS Ext2LockVcb(IN PEXT2_VCB Vcb, IN PFILE_OBJECT FileObject)
VOID Ext2SetVpbFlag(IN PVPB Vpb, IN USHORT Flag)
IN PDCB IN POEM_STRING OemName
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
struct _EXT2_CCB * PEXT2_CCB
PVOID Ext2AllocatePool(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
#define ExFreePoolWithTag(_P, _T)
static SERVICE_STATUS status
#define IO_REPARSE_TAG_SYMLINK
VOID NTAPI IoReleaseVpbSpinLock(IN KIRQL Irql)
BOOLEAN Ext2SaveInode(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN struct inode *Inode)
union _LARGE_INTEGER * PLARGE_INTEGER
struct _REPARSE_DATA_BUFFER * PREPARSE_DATA_BUFFER
PVOID Ext2GetUserBuffer(IN PIRP Irp)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
VOID Ext2VerifyVcb(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb)
#define FSCTL_QUERY_RETRIEVAL_POINTERS
#define STATUS_DEVICE_NOT_READY