|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
Ntdisp.h
Abstract:
This module prototypes the upper level routines used in dispatching to the implementations
Author:
Joe Linn [JoeLinn] 24-aug-1994
Revision History:
--*/
#ifndef _DISPATCH_STUFF_DEFINED_
#define _DISPATCH_STUFF_DEFINED_
VOID RxInitializeDispatchVectors ( OUT PDRIVER_OBJECT DriverObject );
//
// The global structure used to contain our fast I/O callbacks; this is
// exposed because it's needed in read/write; we could use a wrapper....probably should. but since
// ccinitializecachemap will be macro'd differently for win9x; we'll just doit there.
//
extern FAST_IO_DISPATCH RxFastIoDispatch;
//
// The following funcs are implemented in DevFCB.c
//
NTSTATUS RxCommonDevFCBCleanup ( IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDevFCBClose ( IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDevFCBIoCtl ( IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDevFCBFsCtl ( IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDevFCBQueryVolInfo ( IN PRX_CONTEXT RxContext, IN PIRP Irp ); //
// contained here are the fastio dispatch routines and the fsrtl callback routines
//
//
// The following macro is used to determine if an FSD thread can block
// for I/O or wait for a resource. It returns TRUE if the thread can
// block and FALSE otherwise. This attribute can then be used to call
// the FSD & FSP common work routine with the proper wait value.
//
#define CanFsdWait(IRP) IoIsOperationSynchronous(IRP)
//
// The FSP level dispatch/main routine. This is the routine that takes
// IRP's off of the work queue and calls the appropriate FSP level
// work routine.
//
VOID RxFspDispatch ( // implemented in FspDisp.c
IN PVOID Context );
//
// The following routines are the FSP work routines that are called
// by the preceding RxFspDispath routine. Each takes as input a pointer
// to the IRP, perform the function, and return a pointer to the volume
// device object that they just finished servicing (if any). The return
// pointer is then used by the main Fsp dispatch routine to check for
// additional IRPs in the volume's overflow queue.
//
// Each of the following routines is also responsible for completing the IRP.
// We moved this responsibility from the main loop to the individual routines
// to allow them the ability to complete the IRP and continue post processing
// actions.
//
NTSTATUS RxCommonCleanup ( // implemented in Cleanup.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonClose ( // implemented in Close.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
VOID RxFspClose ( IN PVCB Vcb OPTIONAL );
NTSTATUS RxCommonCreate ( // implemented in Create.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDirectoryControl ( // implemented in DirCtrl.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonDeviceControl ( // implemented in DevCtrl.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonQueryEa ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonSetEa ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonQuerySecurity ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonSetSecurity ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonQueryInformation ( // implemented in FileInfo.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonSetInformation ( // implemented in FileInfo.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonFlushBuffers ( // implemented in Flush.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonFileSystemControl ( // implemented in FsCtrl.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonLockControl ( // implemented in LockCtrl.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonShutdown ( // implemented in Shutdown.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonRead ( // implemented in Read.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonQueryVolumeInformation ( // implemented in VolInfo.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonSetVolumeInformation ( // implemented in VolInfo.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonWrite ( // implemented in Write.c
IN PRX_CONTEXT RxContext, IN PIRP Irp ); NTSTATUS RxCommonQueryQuotaInformation ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
NTSTATUS RxCommonSetQuotaInformation ( // implemented in Ea.c
IN PRX_CONTEXT RxContext, IN PIRP Irp );
// Here are the callbacks used by the I/O system for checking for fast I/O or
// doing a fast query info call, or doing fast lock calls.
//
BOOLEAN RxFastIoRead ( 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 );
BOOLEAN RxFastIoWrite ( 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 );
BOOLEAN RxFastIoCheckIfPossible ( IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, IN BOOLEAN CheckForReadOperation, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject );
BOOLEAN RxFastIoDeviceControl ( IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN ULONG IoControlCode, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject );
//
// The following macro is used to set the is fast i/o possible field in
// the common part of the nonpaged fcb
//
//
// BOOLEAN
// RxIsFastIoPossible (
// IN PFCB Fcb
// );
//
//
// Instead of RxIsFastIoPossible...we set the state to questionable.....this will cause us to be consulted on every call via out
// CheckIfFastIoIsPossibleCallOut. in this way, we don't have to be continually setting and resetting this
//
VOID RxAcquireFileForNtCreateSection ( IN PFILE_OBJECT FileObject );
VOID RxReleaseFileForNtCreateSection ( IN PFILE_OBJECT FileObject );
//
#endif // _DISPATCH_STUFF_DEFINED_
|