Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (C) Microsoft Corporation, 1994 - 1999
Module Name :
parsimp.h
Abstract:
Type definitions and data for a simple parallel class driver.
Author:
Norbert P. Kusters 4-Feb-1994
Revision History:
--*/
#ifdef POOL_TAGGING
#ifdef ExAllocatePool
#undef ExAllocatePool
#endif
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'ParV')
#endif
#define PARALLEL_DATA_OFFSET 0
#define PARALLEL_STATUS_OFFSET 1
#define PARALLEL_CONTROL_OFFSET 2
#define PARALLEL_REGISTER_SPAN 3
typedef struct _DEVICE_EXTENSION {
//
// Points to the device object that contains
// this device extension.
//
PDEVICE_OBJECT DeviceObject;
//
// Points to the port device object that this class device is
// connected to.
//
PDEVICE_OBJECT PortDeviceObject;
//
// Keeps track of whether or not we actually own the
// parallel hardware
//
BOOLEAN PortOwned;
BOOLEAN spare[3]; // force to DWORD alignment
//
// Enforce exclusive Create/Open - 1 == either handle open or Create/Open in process
// 0 == no handle open to device
//
ULONG CreateOpenLock;
//
// This holds the result of the get parallel port info
// request to the port driver.
//
PHYSICAL_ADDRESS OriginalController; PUCHAR Controller; ULONG SpanOfController; PPARALLEL_FREE_ROUTINE FreePort; PVOID FreePortContext;
//
// Records whether we actually created the symbolic link name
// at driver load time and the symbolic link itself. If we didn't
// create it, we won't try to destroy it when we unload.
//
BOOLEAN CreatedSymbolicLink; UNICODE_STRING SymbolicLinkName;
#ifdef INTERRUPT_NEEDED
//
// Set 'IgnoreInterrupts' to TRUE unless the port is owned by
// this device.
//
BOOLEAN IgnoreInterrupts; PKINTERRUPT InterruptObject;
//
// Keep the interrupt level alloc and free routines.
//
PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePortAtInterruptLevel; PVOID TryAllocateContext;
#endif
#ifdef TIMEOUT_ALLOCS
//
// This timer is used to timeout allocate requests that are sent
// to the port device.
//
KTIMER AllocTimer; KDPC AllocTimerDpc; LARGE_INTEGER AllocTimeout;
//
// This variable is used to indicate outstanding references
// to the current irp. This solves the contention problem between
// the timer DPC and the completion routine. Access using
// 'ControlLock'.
//
#define IRP_REF_TIMER 1
#define IRP_REF_COMPLETION_ROUTINE 2
LONG CurrentIrpRefCount; KSPIN_LOCK ControlLock;
//
// Indicates that the current request timed out.
//
BOOLEAN TimedOut;
#endif
//
// Name of the parport device that we use when opening a FILE
//
UNICODE_STRING ParPortName; PFILE_OBJECT ParPortFileObject;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
#ifdef INTERRUPT_NEEDED
BOOLEAN ParInterruptService( IN PKINTERRUPT Interrupt, IN OUT PVOID Extension );
VOID ParDpcForIsr( IN PKDPC Dpc, IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Extension );
VOID ParDeferredPortCheck( IN PVOID Extension );
#endif
#ifdef TIMEOUT_ALLOCS
VOID ParAllocTimerDpc( IN PKDPC Dpc, IN PVOID Extension, IN PVOID SystemArgument1, IN PVOID SystemArgument2 );
#endif
NTSTATUS ParCreateOpen( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS ParClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS ParDeviceControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
VOID ParUnload( IN PDRIVER_OBJECT DriverObject );
|