136 lines
2.0 KiB
C
136 lines
2.0 KiB
C
/*++
|
||
|
||
Copyright (c) 1990 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
workque.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 _WORKQUE_
|
||
#define _WORKQUE_
|
||
|
||
|
||
typedef struct _IRP_QUEUE {
|
||
LIST_ENTRY Queue; // Queue itself.
|
||
} IRP_QUEUE, *PIRP_QUEUE;
|
||
|
||
|
||
struct _BOWSER_FS_DEVICE_OBJECT;
|
||
|
||
//
|
||
// IRP Context.
|
||
//
|
||
// The IRP context is a wrapper that used when passing an IRP from the
|
||
// redirectors FSD to its FSP.
|
||
//
|
||
|
||
typedef
|
||
struct _IRP_CONTEXT {
|
||
WORK_QUEUE_ITEM WorkHeader;
|
||
PIRP Irp;
|
||
struct _BOWSER_FS_DEVICE_OBJECT *DeviceObject;
|
||
} IRP_CONTEXT, *PIRP_CONTEXT;
|
||
|
||
VOID
|
||
BowserQueueCriticalWorkItem (
|
||
IN PWORK_QUEUE_ITEM WorkItem
|
||
);
|
||
|
||
PIRP_CONTEXT
|
||
BowserAllocateIrpContext(
|
||
VOID
|
||
);
|
||
|
||
VOID
|
||
BowserFreeIrpContext(
|
||
PIRP_CONTEXT IrpContext
|
||
);
|
||
|
||
VOID
|
||
BowserInitializeIrpQueue(
|
||
PIRP_QUEUE Queue
|
||
);
|
||
|
||
VOID
|
||
BowserUninitializeIrpQueue(
|
||
PIRP_QUEUE Queue
|
||
);
|
||
|
||
VOID
|
||
BowserCancelQueuedRequest(
|
||
IN PDEVICE_OBJECT DeviceObject OPTIONAL,
|
||
IN PIRP Irp
|
||
);
|
||
|
||
VOID
|
||
BowserCancelQueuedIoForFile(
|
||
IN PIRP_QUEUE Queue,
|
||
IN PFILE_OBJECT FileObject
|
||
);
|
||
|
||
NTSTATUS
|
||
BowserQueueNonBufferRequest(
|
||
IN PIRP Irp,
|
||
IN PIRP_QUEUE Queue,
|
||
IN PDRIVER_CANCEL CancelRoutine
|
||
);
|
||
|
||
NTSTATUS
|
||
BowserQueueNonBufferRequestReferenced(
|
||
IN PIRP Irp,
|
||
IN PIRP_QUEUE Queue,
|
||
IN PDRIVER_CANCEL CancelRoutine
|
||
);
|
||
|
||
VOID
|
||
BowserTimeoutQueuedIrp(
|
||
IN PIRP_QUEUE Queue,
|
||
IN ULONG NumberOfSecondsToTimeOut
|
||
);
|
||
|
||
PIRP
|
||
BowserDequeueQueuedIrp(
|
||
IN PIRP_QUEUE Queue
|
||
);
|
||
|
||
VOID
|
||
BowserInitializeIrpContext(
|
||
VOID
|
||
);
|
||
|
||
VOID
|
||
BowserpUninitializeIrpContext(
|
||
VOID
|
||
);
|
||
|
||
VOID
|
||
BowserpInitializeIrpQueue(
|
||
VOID
|
||
);
|
||
|
||
//
|
||
// Returns TRUE if there are no entries in the IRP queue.
|
||
//
|
||
|
||
#define BowserIsIrpQueueEmpty(IrpQueue) IsListEmpty(&(IrpQueue)->Queue)
|
||
|
||
|
||
#endif // _WORKQUE_
|