You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
2.2 KiB
140 lines
2.2 KiB
/*++
|
|
|
|
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
|
|
);
|
|
|
|
VOID
|
|
BowserQueueDelayedWorkItem (
|
|
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_
|