www.pudn.com > filesys.rar > protos.h


/************************************************************************* 
* 
* File: protos.h 
* 
* Module: Sample File System Driver (Kernel mode execution only) 
* 
* Description: 
*	Contains the prototypes for functions in this sample FSD. 
* 
* Author: R. Nagar 
* 
* (c) 1996-97 Rajeev Nagar, All Rights Reserved 
* 
*************************************************************************/ 
 
#ifndef	_SFSD_PROTOS_H_ 
#define	_SFSD_PROTOS_H_ 
 
/************************************************************************* 
* Prototypes for the file sfsdinit.c 
*************************************************************************/ 
extern NTSTATUS DriverEntry( 
PDRIVER_OBJECT				DriverObject,		// created by the I/O sub-system 
PUNICODE_STRING			RegistryPath);		// path to the registry key 
 
extern void SFsdInitializeFunctionPointers( 
PDRIVER_OBJECT				DriverObject);		// created by the I/O sub-system 
 
/************************************************************************* 
* Prototypes for the file create.c 
*************************************************************************/ 
extern NTSTATUS SFsdCreate( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS SFsdCommonCreate( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern NTSTATUS SFsdOpenVolume( 
PtrSFsdVCB					PtrVCB,					// volume to be opened 
PtrSFsdIrpContext			PtrIrpContext,			// IRP context 
PIRP							PtrIrp,					// original/user IRP 
unsigned short				ShareAccess,			// share access 
PIO_SECURITY_CONTEXT		PtrSecurityContext,	// caller's context (incl access) 
PFILE_OBJECT				PtrNewFileObject);	// I/O Mgr. created file object 
 
extern void SFsdInitializeFCB( 
PtrSFsdFCB					PtrNewFCB,		// FCB structure to be initialized 
PtrSFsdVCB					PtrVCB,			// logical volume (VCB) pointer 
PtrSFsdObjectName			PtrObjectName,	// name of the object 
uint32						Flags,			// is this a file/directory, etc. 
PFILE_OBJECT				PtrFileObject);// optional file object to be initialized 
 
/************************************************************************* 
* Prototypes for the file misc.c 
*************************************************************************/ 
extern NTSTATUS SFsdInitializeZones( 
void); 
 
extern void SFsdDestroyZones( 
void); 
 
extern BOOLEAN SFsdIsIrpTopLevel( 
PIRP							Irp);					// the IRP sent to our dispatch routine 
 
extern long SFsdExceptionFilter( 
PtrSFsdIrpContext			PtrIrpContext, 
PEXCEPTION_POINTERS		PtrExceptionPointers); 
 
extern NTSTATUS SFsdExceptionHandler( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							Irp); 
 
extern void SFsdLogEvent( 
NTSTATUS						SFsdEventLogId,	// the SFsd private message id 
NTSTATUS						RC);					// any NT error code we wish to log ... 
 
extern PtrSFsdObjectName SFsdAllocateObjectName( 
void); 
 
extern void SFsdReleaseObjectName( 
PtrSFsdObjectName			PtrObjectName); 
 
extern PtrSFsdCCB SFsdAllocateCCB( 
void); 
 
extern void SFsdReleaseCCB( 
PtrSFsdCCB					PtrCCB); 
 
extern PtrSFsdFCB SFsdAllocateFCB( 
void); 
 
extern NTSTATUS SFsdCreateNewFCB( 
PtrSFsdFCB					*ReturnedFCB, 
PLARGE_INTEGER				AllocationSize, 
PLARGE_INTEGER				EndOfFile, 
PFILE_OBJECT				PtrFileObject, 
PtrSFsdVCB					PtrVCB); 
 
extern void SFsdReleaseFCB( 
PtrSFsdFCB					PtrFCB); 
 
extern PtrSFsdFileLockInfo SFsdAllocateByteLocks( 
void); 
 
extern void SFsdReleaseByteLocks( 
PtrSFsdFileLockInfo		PtrByteLocks); 
 
extern PtrSFsdIrpContext SFsdAllocateIrpContext( 
PIRP							Irp, 
PDEVICE_OBJECT				PtrTargetDeviceObject); 
 
extern void SFsdReleaseIrpContext( 
PtrSFsdIrpContext			PtrIrpContext); 
 
extern NTSTATUS SFsdPostRequest( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern void SFsdCommonDispatch( 
void							*Context);	// actually an IRPContext structure 
 
extern void SFsdInitializeVCB( 
PDEVICE_OBJECT				PtrVolumeDeviceObject, 
PDEVICE_OBJECT				PtrTargetDeviceObject, 
PVPB							PtrVPB); 
 
/************************************************************************* 
* Prototypes for the file cleanup.c 
*************************************************************************/ 
extern NTSTATUS SFsdCleanup( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonCleanup( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
/************************************************************************* 
* Prototypes for the file close.c 
*************************************************************************/ 
extern NTSTATUS SFsdClose( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonClose( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
/************************************************************************* 
* Prototypes for the file read.c 
*************************************************************************/ 
extern NTSTATUS SFsdRead( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonRead( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP				      	PtrIrp); 
 
extern void *SFsdGetCallersBuffer( 
PIRP							PtrIrp); 
 
extern NTSTATUS SFsdLockCallersBuffer( 
PIRP							PtrIrp, 
BOOLEAN						IsReadOperation, 
uint32						Length); 
 
extern void SFsdMdlComplete( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PIO_STACK_LOCATION		PtrIoStackLocation, 
BOOLEAN						ReadCompletion); 
 
/************************************************************************* 
* Prototypes for the file write.c 
*************************************************************************/ 
extern NTSTATUS SFsdWrite( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonWrite( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP				      	PtrIrp); 
 
extern void SFsdDeferredWriteCallBack ( 
void							*Context1,			// Should be PtrIrpContext 
void							*Context2);			// Should be PtrIrp 
 
/************************************************************************* 
* Prototypes for the file fileinfo.c 
*************************************************************************/ 
extern NTSTATUS SFsdFileInfo( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonFileInfo( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern NTSTATUS	SFsdGetBasicInformation( 
PtrSFsdFCB					PtrFCB, 
PFILE_BASIC_INFORMATION	PtrBuffer, 
long							*PtrReturnedLength); 
 
extern NTSTATUS	SFsdSetBasicInformation( 
PtrSFsdFCB					PtrFCB, 
PtrSFsdCCB					PtrCCB, 
PFILE_OBJECT				PtrFileObject, 
PFILE_BASIC_INFORMATION	PtrBuffer); 
 
extern NTSTATUS	SFsdSetDispositionInformation( 
PtrSFsdFCB					PtrFCB, 
PtrSFsdCCB					PtrCCB, 
PtrSFsdVCB					PtrVCB, 
PFILE_OBJECT				PtrFileObject, 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PFILE_DISPOSITION_INFORMATION	PtrBuffer); 
 
extern NTSTATUS	SFsdSetAllocationInformation( 
PtrSFsdFCB					PtrFCB, 
PtrSFsdCCB					PtrCCB, 
PtrSFsdVCB					PtrVCB, 
PFILE_OBJECT				PtrFileObject, 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PFILE_ALLOCATION_INFORMATION	PtrBuffer); 
 
/************************************************************************* 
* Prototypes for the file flush.c 
*************************************************************************/ 
extern NTSTATUS SFsdFlush( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonFlush( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern void SFsdFlushAFile( 
PtrSFsdNTRequiredFCB		PtrReqdFCB, 
PIO_STATUS_BLOCK			PtrIoStatus); 
 
extern void SFsdFlushLogicalVolume( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PtrSFsdVCB					PtrVCB); 
 
extern NTSTATUS SFsdFlushCompletion( 
PDEVICE_OBJECT				PtrDeviceObject, 
PIRP							PtrIrp, 
PVOID							Context); 
 
/************************************************************************* 
* Prototypes for the file dircntrl.c 
*************************************************************************/ 
extern NTSTATUS SFsdDirControl( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonDirControl( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern NTSTATUS	SFsdQueryDirectory( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PIO_STACK_LOCATION		PtrIoStackLocation, 
PFILE_OBJECT				PtrFileObject, 
PtrSFsdFCB					PtrFCB, 
PtrSFsdCCB					PtrCCB); 
 
extern NTSTATUS	SFsdNotifyChangeDirectory( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp, 
PIO_STACK_LOCATION		PtrIoStackLocation, 
PFILE_OBJECT				PtrFileObject, 
PtrSFsdFCB					PtrFCB, 
PtrSFsdCCB					PtrCCB); 
 
/************************************************************************* 
* Prototypes for the file devcntrl.c 
*************************************************************************/ 
extern NTSTATUS SFsdDeviceControl( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS SFsdCommonDeviceControl( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
extern NTSTATUS SFsdDevIoctlCompletion( 
PDEVICE_OBJECT				PtrDeviceObject, 
PIRP							PtrIrp, 
void							*Context); 
 
extern NTSTATUS SFsdHandleQueryPath( 
void							*BufferPointer); 
 
/************************************************************************* 
* Prototypes for the file shutdown.c 
*************************************************************************/ 
extern NTSTATUS SFsdShutdown( 
PDEVICE_OBJECT				DeviceObject,		// the logical volume device object 
PIRP							Irp);					// I/O Request Packet 
 
extern NTSTATUS	SFsdCommonShutdown( 
PtrSFsdIrpContext			PtrIrpContext, 
PIRP							PtrIrp); 
 
/************************************************************************* 
* Prototypes for the file fastio.c 
*************************************************************************/ 
extern BOOLEAN SFsdFastIoCheckIfPossible( 
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); 
 
extern BOOLEAN SFsdFastIoRead( 
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); 
 
extern BOOLEAN SFsdFastIoWrite( 
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); 
 
extern BOOLEAN SFsdFastIoQueryBasicInfo( 
IN PFILE_OBJECT					FileObject, 
IN BOOLEAN							Wait, 
OUT PFILE_BASIC_INFORMATION	Buffer, 
OUT PIO_STATUS_BLOCK 			IoStatus, 
IN PDEVICE_OBJECT					DeviceObject); 
 
extern BOOLEAN SFsdFastIoQueryStdInfo( 
IN PFILE_OBJECT						FileObject, 
IN BOOLEAN								Wait, 
OUT PFILE_STANDARD_INFORMATION 	Buffer, 
OUT PIO_STATUS_BLOCK 				IoStatus, 
IN PDEVICE_OBJECT						DeviceObject); 
 
extern BOOLEAN SFsdFastIoLock( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				FileOffset, 
IN PLARGE_INTEGER				Length, 
PEPROCESS						ProcessId, 
ULONG								Key, 
BOOLEAN							FailImmediately, 
BOOLEAN							ExclusiveLock, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoUnlockSingle( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				FileOffset, 
IN PLARGE_INTEGER				Length, 
PEPROCESS						ProcessId, 
ULONG								Key, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoUnlockAll( 
IN PFILE_OBJECT				FileObject, 
PEPROCESS						ProcessId, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoUnlockAllByKey( 
IN PFILE_OBJECT				FileObject, 
PEPROCESS						ProcessId, 
ULONG								Key, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern void SFsdFastIoAcqCreateSec( 
IN PFILE_OBJECT				FileObject); 
 
extern void SFsdFastIoRelCreateSec( 
IN PFILE_OBJECT				FileObject); 
 
extern BOOLEAN SFsdAcqLazyWrite( 
IN PVOID							Context, 
IN BOOLEAN						Wait); 
 
extern void SFsdRelLazyWrite( 
IN PVOID							Context); 
 
extern BOOLEAN SFsdAcqReadAhead( 
IN PVOID							Context, 
IN BOOLEAN						Wait); 
 
extern void SFsdRelReadAhead( 
IN PVOID							Context); 
 
// the remaining are only valid under NT Version 4.0 and later 
#if(_WIN32_WINNT >= 0x0400) 
 
extern BOOLEAN SFsdFastIoQueryNetInfo( 
IN PFILE_OBJECT									FileObject, 
IN BOOLEAN											Wait, 
OUT PFILE_NETWORK_OPEN_INFORMATION 			Buffer, 
OUT PIO_STATUS_BLOCK 							IoStatus, 
IN PDEVICE_OBJECT									DeviceObject); 
 
extern BOOLEAN SFsdFastIoMdlRead( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				FileOffset, 
IN ULONG							Length, 
IN ULONG							LockKey, 
OUT PMDL							*MdlChain, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoMdlReadComplete( 
IN PFILE_OBJECT				FileObject, 
OUT PMDL							MdlChain, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoPrepareMdlWrite( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				FileOffset, 
IN ULONG							Length, 
IN ULONG							LockKey, 
OUT PMDL							*MdlChain, 
OUT PIO_STATUS_BLOCK			IoStatus, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern BOOLEAN SFsdFastIoMdlWriteComplete( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				FileOffset, 
OUT PMDL							MdlChain, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern NTSTATUS SFsdFastIoAcqModWrite( 
IN PFILE_OBJECT				FileObject, 
IN PLARGE_INTEGER				EndingOffset, 
OUT PERESOURCE					*ResourceToRelease, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern NTSTATUS SFsdFastIoRelModWrite( 
IN PFILE_OBJECT				FileObject, 
IN PERESOURCE					ResourceToRelease, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern NTSTATUS SFsdFastIoAcqCcFlush( 
IN PFILE_OBJECT				FileObject, 
IN PDEVICE_OBJECT				DeviceObject); 
 
extern NTSTATUS SFsdFastIoRelCcFlush( 
IN PFILE_OBJECT				FileObject, 
IN PDEVICE_OBJECT				DeviceObject); 
 
#endif	// (_WIN32_WINNT >= 0x0400) 
 
#endif	// _SFSD_PROTOS_H_