28 #pragma alloc_text(PAGE, Ext2DeviceControl) 29 #pragma alloc_text(PAGE, Ext2DeviceControlNormal) 30 #pragma alloc_text(PAGE, Ext2ProcessVolumeProperty) 31 #pragma alloc_text(PAGE, Ext2ProcessUserProperty) 32 #pragma alloc_text(PAGE, Ext2ProcessGlobalProperty) 33 #pragma alloc_text(PAGE, Ex2ProcessUserPerfStat) 34 #pragma alloc_text(PAGE, Ex2ProcessMountPoint) 36 #pragma alloc_text(PAGE, Ext2PrepareToUnload) 48 if (
Irp->PendingReturned) {
87 Irp = IrpContext->Irp;
121 if (!IrpContext->ExceptionInProgress) {
124 IrpContext->Irp =
NULL;
163 GlobalDataResourceAcquired =
TRUE;
166 DEBUG(
DL_ERR, (
"Ext2PrepareUnload: Already ready to unload.\n"));
182 ListEntry = ListEntry->
Flink;
184 if (
Vcb && (!
Vcb->ReferenceCount) &&
196 DEBUG(
DL_ERR, (
"Ext2PrepareUnload: Mounted volumes exists.\n"));
209 DEBUG(
DL_INF, (
"Ext2PrepareToUnload: Driver is ready to unload.\n"));
213 if (GlobalDataResourceAcquired) {
217 if (!IrpContext->ExceptionInProgress) {
293 GlobalDataResourceAcquired =
TRUE;
301 if (Property3->AutoMount)
312 Property2->sHidingPrefix,
318 Property2->sHidingSuffix,
350 if (GlobalDataResourceAcquired) {
375 VcbResourceAcquired =
TRUE;
402 if (Property3->AutoMount)
409 Vcb->uid = Property3->uid;
410 Vcb->gid = Property3->gid;
411 if (Property3->EIDS) {
412 Vcb->euid = Property3->euid;
413 Vcb->egid = Property3->egid;
416 Vcb->euid =
Vcb->egid = 0;
423 Vcb->euid =
Vcb->egid = 0;
458 if (!
Vcb->IsExt3fs) {
460 }
else if (!
Property->bExt3Writable) {
478 if (
Vcb->Codepage.PageTable) {
488 Property3->AutoMount =
TRUE;
491 Property3->AutoMount =
FALSE;
496 Property3->uid =
Vcb->uid;
497 Property3->gid =
Vcb->gid;
499 Property3->EIDS =
TRUE;
500 Property3->euid =
Vcb->euid;
501 Property3->egid =
Vcb->egid;
503 Property3->EIDS =
FALSE;
544 if (
Vcb->Codepage.PageTable) {
558 if (VcbResourceAcquired) {
602 IrpContext->Irp->IoStatus.Information =
Length;
607 if (!IrpContext->ExceptionInProgress) {
657 GlobalDataResourceAcquired =
TRUE;
681 IrpContext->Irp->IoStatus.Information =
Length;
686 if (GlobalDataResourceAcquired) {
690 if (!IrpContext->ExceptionInProgress) {
731 Buffer[12] = MountPoint->Link[0];
733 switch (MountPoint->Command) {
750 if (!IrpContext->ExceptionInProgress) {
772 Irp = IrpContext->Irp;
776 code =
irpSp->Parameters.DeviceIoControl.IoControlCode;
777 length =
irpSp->Parameters.DeviceIoControl.OutputBufferLength;
784 Irp->AssociatedIrp.SystemBuffer,
792 Irp->AssociatedIrp.SystemBuffer,
800 Irp->AssociatedIrp.SystemBuffer,
806 case IOCTL_PREPARE_TO_UNLOAD:
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define IOCTL_APP_MOUNT_POINT
#define APP_CMD_DEL_DOS_SYMLINK
NTSTATUS Ex2ProcessMountPoint(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_MOUNT_POINT MountPoint, IN ULONG Length)
static PMEM_HOOK PageTable[TOTAL_PAGES]
#define APP_CMD_SET_PROPERTY2
#define STATUS_INVALID_PARAMETER
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
VOID NTAPI IoUnregisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
#define VCB_JOURNAL_RECOVER
#define IOCTL_APP_VOLUME_PROPERTY
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
#define STATUS_INVALID_DEVICE_REQUEST
VOID Ext2DestroyVcb(IN PEXT2_VCB Vcb)
NTSTATUS Ext2ProcessVolumeProperty(IN PEXT2_VCB Vcb, IN PEXT2_VOLUME_PROPERTY3 Property3, IN ULONG Length)
#define APP_CMD_QUERY_PROPERTY3
EXT2_PERF_STATISTICS_V2 PerfStat
NTSTATUS Ext2FlushVolume(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bShutDown)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
static int Link(const char **args)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
CHAR sHidingPrefix[HIDINGPAT_LEN]
#define IOCTL_APP_QUERY_PERFSTAT
NTSTATUS Ex2ProcessUserPerfStat(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_QUERY_PERFSTAT QueryPerf, IN ULONG Length)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
CHAR sHidingPrefix[HIDINGPAT_LEN]
PDEVICE_OBJECT DiskdevObject
#define EXT2_QUERY_PERFSTAT_SZV1
#define ClearLongFlag(_F, _SF)
PDEVICE_OBJECT CdromdevObject
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)
CHAR sHidingSuffix[HIDINGPAT_LEN]
struct _LIST_ENTRY * Flink
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
struct _EXT2_GLOBAL::@670 Codepage
#define NT_SUCCESS(StatCode)
GLenum GLuint GLenum GLsizei length
#define EXT2_SUPPORT_WRITING
#define EXT2_VPROP3_USERIDS
#define APP_CMD_QUERY_PROPERTY2
NTSTATUS NTAPI Ext2DeviceControlCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
#define STATUS_ACCESS_DENIED
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS Ext2InitializeLabel(IN PEXT2_VCB Vcb, IN PEXT2_SUPER_BLOCK Sb)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
_Must_inspect_result_ typedef _In_ ULONG _In_ BOOLEAN Target
#define EXT2_QUERY_PERFSTAT_MAGIC
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_UNSUCCESSFUL
NTSTATUS Ext2ProcessUserProperty(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VOLUME_PROPERTY3 Property, IN ULONG Length)
#define VCB_FORCE_WRITING
#define VCB_DISMOUNT_PENDING
#define EXT2_APP_MOUNTPOINT_MAGIC
NTSTATUS Ext2CompleteIrpContext(IN PEXT2_IRP_CONTEXT IrpContext, IN NTSTATUS Status)
#define EXT2_QUERY_PERFSTAT_VER2
PDRIVER_UNLOAD DriverUnload
#define EXT2_VOLUME_PROPERTY_MAGIC
#define memcpy(s1, s2, n)
NTSTATUS Ext2DeviceControl(IN PEXT2_IRP_CONTEXT IrpContext)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define EXT3_FORCE_WRITING
NTSTATUS Ext2ProcessGlobalProperty(IN PDEVICE_OBJECT DeviceObject, IN PEXT2_VOLUME_PROPERTY3 Property3, IN ULONG Length)
struct _EXT2_PERF_STATISTICS_V2::@667 Irps[IRP_MJ_MAXIMUM_FUNCTION+1]
ClearFlag(Dirent->Flags, DIRENT_FLAG_NOT_PERSISTENT)
VOID Ext2RemoveVcb(PEXT2_VCB Vcb)
IN PDEVICE_OBJECT DeviceObject
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
NTSTATUS Ext2FlushFiles(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bShutDown)
#define EXT2_QUERY_PERFSTAT_SZV2
_In_ PIO_STACK_LOCATION IrpSp
static DRIVER_UNLOAD DriverUnload
#define SetLongFlag(_F, _SF)
#define FIELD_OFFSET(t, f)
#define EXT2_VPROP3_AUTOMOUNT
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS Ext2DeviceControlNormal(IN PEXT2_IRP_CONTEXT IrpContext)
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
#define APP_CMD_SET_PROPERTY
#define EXT2_UNLOAD_PENDING
#define APP_CMD_QUERY_VERSION
#define APP_CMD_ADD_DOS_SYMLINK
NTSTATUS Ext2PrepareToUnload(IN PEXT2_IRP_CONTEXT IrpContext)
#define APP_CMD_SET_PROPERTY3
#define IsExt2FsDevice(DO)
PDRIVER_OBJECT DriverObject
INT Ext2RecoverJournal(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
struct _EXT2_VCB * PEXT2_VCB
#define APP_CMD_QUERY_PROPERTY
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
CHAR sHidingSuffix[HIDINGPAT_LEN]
static SERVICE_STATUS status
struct nls_table * load_nls(char *)
VOID Ext2ClearVpbFlag(IN PVPB Vpb, IN USHORT Flag)
#define EXT2_FLAG_VP_SET_GLOBAL
struct _EXT2_VOLUME_PROPERTY_VERSION * PEXT2_VOLUME_PROPERTY_VERSION