105 lines
2.5 KiB
C
105 lines
2.5 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1990 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
fspdisp.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module defines the data structures and routines used for the FSP
|
|||
|
dispatching code.
|
|||
|
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Larry Osterman (LarryO) 13-Aug-1990
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
13-Aug-1990 LarryO
|
|||
|
|
|||
|
Created
|
|||
|
|
|||
|
--*/
|
|||
|
#ifndef _FSPDISP_
|
|||
|
#define _FSPDISP_
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Define communications data area between FSD and FSP. This is done through
|
|||
|
// the use of a Device Object. This model allows one device object to be
|
|||
|
// created for each volume that is/has been mounted in the system. That is,
|
|||
|
// each time a volume is mounted, the file system creates a device object to
|
|||
|
// represent it so that the I/O system can vector directly to the proper file
|
|||
|
// system. The file system then uses information in the device object and in
|
|||
|
// the file object to locate and synchronize access to its database of open
|
|||
|
// file data structures (often called File Control Blocks - or, FCBs), Volume
|
|||
|
// Control Blocks (VCBs), Map Control Blocks (MCBs), etc.
|
|||
|
//
|
|||
|
// The event and spinlock will be used to control access to the queue of IRPs.
|
|||
|
// The IRPs are passed from the FSD to the FSP by inserting them onto the work
|
|||
|
// queue in an interlocked manner and then setting the event to the Signaled
|
|||
|
// state. The event is an autoclearing type so the FSP simply wakes up when
|
|||
|
// the event is Signaled and begins processing entries in the queue.
|
|||
|
//
|
|||
|
// Other data in this record should contain any information which both the FSD
|
|||
|
// and the FSP need to share. For example, a list of all of the open files
|
|||
|
// might be something that both should be able to see. Notice that all data
|
|||
|
// placed in this area must be allocated from paged or non-paged pool.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _BOWSER_FS_DEVICE_OBJECT {
|
|||
|
DEVICE_OBJECT DeviceObject;
|
|||
|
|
|||
|
} BOWSER_FS_DEVICE_OBJECT, *PBOWSER_FS_DEVICE_OBJECT;
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
BowserpInitializeFsp(
|
|||
|
PDRIVER_OBJECT BowserDriverObject
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
BowserpUninitializeFsp (
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
BowserWorkerDispatch (
|
|||
|
PVOID Context
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
BowserFsdPostToFsp(
|
|||
|
IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
BowserFspQueryInformationFile (
|
|||
|
IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
BowserFspQueryVolumeInformationFile (
|
|||
|
IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
BowserFspDeviceIoControlFile (
|
|||
|
IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
BowserIdleTimer (
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PVOID Context
|
|||
|
);
|
|||
|
|
|||
|
#endif // _FSPDISP_
|