- Arch, don't assume the driver you see in the backtrace is one that needs fixing. CDFS is the one who's a file system driver here...
svn path=/trunk/; revision=67496
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =
CdfsDeviceControl;
+ CdfsGlobalData->FastIoDispatch.FastIoRead = CdfsFastIoRead;
+ CdfsGlobalData->FastIoDispatch.FastIoWrite = CdfsFastIoWrite;
+ DriverObject->FastIoDispatch = &CdfsGlobalData->FastIoDispatch;
+
DriverObject->DriverUnload = NULL;
/* Cache manager */
ExReleaseResourceLite(&(Fcb->MainResource));
}
+
+BOOLEAN
+NTAPI
+CdfsFastIoRead(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _Out_ PVOID Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject)
+{
+ DBG_UNREFERENCED_PARAMETER(FileObject);
+ DBG_UNREFERENCED_PARAMETER(FileOffset);
+ DBG_UNREFERENCED_PARAMETER(Length);
+ DBG_UNREFERENCED_PARAMETER(Wait);
+ DBG_UNREFERENCED_PARAMETER(LockKey);
+ DBG_UNREFERENCED_PARAMETER(Buffer);
+ DBG_UNREFERENCED_PARAMETER(IoStatus);
+ DBG_UNREFERENCED_PARAMETER(DeviceObject);
+ return FALSE;
+}
+
+BOOLEAN
+NTAPI
+CdfsFastIoWrite(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _In_ PVOID Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject)
+{
+ DBG_UNREFERENCED_PARAMETER(FileObject);
+ DBG_UNREFERENCED_PARAMETER(FileOffset);
+ DBG_UNREFERENCED_PARAMETER(Length);
+ DBG_UNREFERENCED_PARAMETER(Wait);
+ DBG_UNREFERENCED_PARAMETER(LockKey);
+ DBG_UNREFERENCED_PARAMETER(Buffer);
+ DBG_UNREFERENCED_PARAMETER(IoStatus);
+ DBG_UNREFERENCED_PARAMETER(DeviceObject);
+ return FALSE;
+}
#define MAX_PATH 260
-typedef struct _CDFS_SHORT_NAME
+typedef struct _CDFS_SHORT_NAME
{
LIST_ENTRY Entry;
LARGE_INTEGER StreamOffset;
PDEVICE_OBJECT DeviceObject;
ULONG Flags;
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
+ FAST_IO_DISPATCH FastIoDispatch;
} CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
extern PCDFS_GLOBAL_DATA CdfsGlobalData;
VOID
CdfsShortNameCacheGet
-(PFCB DirectoryFcb,
- PLARGE_INTEGER StreamOffset,
- PUNICODE_STRING LongName,
+(PFCB DirectoryFcb,
+ PLARGE_INTEGER StreamOffset,
+ PUNICODE_STRING LongName,
PUNICODE_STRING ShortName);
/* rw.c */
VOID NTAPI
CdfsReleaseFromLazyWrite(IN PVOID Context);
+FAST_IO_READ CdfsFastIoRead;
+FAST_IO_WRITE CdfsFastIoWrite;
+
#endif /* CDFS_H */
0xFF, 0xFF, 0xFF
};
-static FAST_IO_DISPATCH ScrFastIoDispatch;
-
/* FUNCTIONS **************************************************************/
static VOID FASTCALL
return Status;
}
-static DRIVER_DISPATCH ScrDispatch;
-static NTSTATUS NTAPI
-ScrDispatch(PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
-{
- PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation(Irp);
- NTSTATUS Status;
-
- switch (stk->MajorFunction)
- {
- case IRP_MJ_CLOSE:
- Status = STATUS_SUCCESS;
- break;
-
- default:
- Status = STATUS_NOT_IMPLEMENTED;
- break;
- }
-
-
- Irp->IoStatus.Status = Status;
- IoCompleteRequest (Irp, IO_NO_INCREMENT);
-
- return (Status);
-}
-
-static FAST_IO_READ ScrFastIoRead;
-static
-BOOLEAN
-NTAPI
-ScrFastIoRead(
- _In_ PFILE_OBJECT FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ BOOLEAN Wait,
- _In_ ULONG LockKey,
- _Out_ PVOID Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ PDEVICE_OBJECT DeviceObject)
-{
- DBG_UNREFERENCED_PARAMETER(FileObject);
- DBG_UNREFERENCED_PARAMETER(FileOffset);
- DBG_UNREFERENCED_PARAMETER(Length);
- DBG_UNREFERENCED_PARAMETER(Wait);
- DBG_UNREFERENCED_PARAMETER(LockKey);
- DBG_UNREFERENCED_PARAMETER(Buffer);
- DBG_UNREFERENCED_PARAMETER(IoStatus);
- DBG_UNREFERENCED_PARAMETER(DeviceObject);
- return FALSE;
-}
-
-static FAST_IO_WRITE ScrFastIoWrite;
-static
-BOOLEAN
-NTAPI
-ScrFastIoWrite(
- _In_ PFILE_OBJECT FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ BOOLEAN Wait,
- _In_ ULONG LockKey,
- _In_ PVOID Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ PDEVICE_OBJECT DeviceObject)
-{
- DBG_UNREFERENCED_PARAMETER(FileObject);
- DBG_UNREFERENCED_PARAMETER(FileOffset);
- DBG_UNREFERENCED_PARAMETER(Length);
- DBG_UNREFERENCED_PARAMETER(Wait);
- DBG_UNREFERENCED_PARAMETER(LockKey);
- DBG_UNREFERENCED_PARAMETER(Buffer);
- DBG_UNREFERENCED_PARAMETER(IoStatus);
- DBG_UNREFERENCED_PARAMETER(DeviceObject);
- return FALSE;
-}
-
/*
* Module entry point
*/
DriverObject->MajorFunction[IRP_MJ_WRITE] = ScrWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL ] = ScrIoControl;
- ScrFastIoDispatch.FastIoRead = ScrFastIoRead;
- ScrFastIoDispatch.FastIoWrite = ScrFastIoWrite;
- DriverObject->FastIoDispatch = &ScrFastIoDispatch;
-
Status = IoCreateDevice (DriverObject,
sizeof(DEVICE_EXTENSION),
&DeviceName,