windows-nt/Source/XPSP1/NT/base/fs/rdr2/bowser/fspdisp.h
2020-09-26 16:20:57 +08:00

105 lines
2.5 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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_