📄 strmini.h
字号:
// VMEBus
// NuBus
// PCMCIABus
// CBus
// MPIBus
// MPSABus
ULONG BusInterruptLevel; // interrupt level
ULONG BusInterruptVector; // interrupt vector
KINTERRUPT_MODE InterruptMode; // interrupt mode (latched, level)
ULONG DmaChannel; // DMA channel
//
// Specifies the number of AccessRanges elements in the array,
// described next. The OS-specific class driver always sets this
// member to the value passed in the HW_INITIALIZATION_DATA
// structure when the minidriver driver called CodecXXXInitialize.
//
ULONG NumberOfAccessRanges; // Number of access ranges
// allocated
//
// Points to the first element of an array of ACCESS_RANGE-type elements.
// The given NumberOfAccessRanges determines how many elements must be
// configured with bus-relative range values. The AccessRanges
// pointer must be NULL if NumberOfAccessRanges is zero.
//
PACCESS_RANGE AccessRanges; // Pointer to array of access range
// elements
//
// the following field is filled in by the minidriver to indicate the
// size of the buffer needed to build the HW_STREAM_DESCRIPTOR structure
// and all of its substructures.
//
ULONG StreamDescriptorSize; // size of the stream descriptor
PIRP Irp; // IRP for PNP start function, normally
// not used by the minidriver.
//
// the following field indicates the interrupt object for the adapter
// if nonzero. This field is normally not used by the minidriver.
//
PKINTERRUPT InterruptObject;
//
// the following field indicates the DMA adapter object for the adapter
// if nonzero. This field is normally not used by the minidriver.
//
PADAPTER_OBJECT DmaAdapterObject;
//
// the below field supplies a pointer to the device's "real" physical
// device object, which is supplied on the AddDevice call. Most
// minidrivers will not need to use this.
// This PDO must be used for registry access, etc. See the note above
// for the PhysicalDeviceObject, and also see WDM documentation.
//
PDEVICE_OBJECT RealPhysicalDeviceObject; // real physical device object
ULONG Reserved[1]; // Reserved for future use
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
//
// Function prototypes for minidriver routines called by the class driver
//
typedef VOID
(STREAMAPI * PHW_RECEIVE_DEVICE_SRB) ( // HwReceivePacket
// routine
IN PHW_STREAM_REQUEST_BLOCK SRB
);
typedef VOID
(STREAMAPI * PHW_CANCEL_SRB) ( // HwCancelPacket routine
IN PHW_STREAM_REQUEST_BLOCK SRB
);
typedef VOID
(STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) ( // HwRequestTimeoutHandle
//
// r routine
IN PHW_STREAM_REQUEST_BLOCK SRB
);
typedef BOOLEAN
(STREAMAPI * PHW_INTERRUPT) ( // HwInterrupt routine
IN PVOID DeviceExtension
);
typedef VOID
(STREAMAPI * PHW_TIMER_ROUTINE) ( // timer callback routine
IN PVOID Context
);
typedef VOID
(STREAMAPI * PHW_PRIORITY_ROUTINE) ( // change priority
// callback routine
IN PVOID Context
);
typedef VOID
(STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) ( // query clock
// callback routine
IN PHW_TIME_CONTEXT TimeContext
);
typedef BOOLEAN
(STREAMAPI * PHW_RESET_ADAPTER) ( // HwResetAdapter routine
IN PVOID DeviceExtension
);
//
// Minidriver stream notification types passed in to StreamClassStreamNotification
// follow.
//
typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE {
//
// indicates that the minidriver is ready for the next stream data
// request
//
ReadyForNextStreamDataRequest,
//
// indicates that the minidriver is ready for the next stream control
// request
//
ReadyForNextStreamControlRequest,
//
// indicates that the hardware is starved for data
//
HardwareStarved,
//
// indicates that the specified STREAM SRB has completed
//
StreamRequestComplete,
SignalMultipleStreamEvents,
SignalStreamEvent,
DeleteStreamEvent,
StreamNotificationMaximum
} STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
//
// Minidriver device notification types passed in to StreamClassDeviceNotification
// follow.
//
typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE {
//
// indicates that the minidriver is ready for the next device request
//
ReadyForNextDeviceRequest,
//
// indicates that the specified DEVICE SRB has completed
//
DeviceRequestComplete,
SignalMultipleDeviceEvents,
SignalDeviceEvent,
DeleteDeviceEvent,
DeviceNotificationMaximum
} STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
//
// Structure passed between minidriver initialization
// and STREAM class initialization
//
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize; // Size of this structure,
// used as version check.
//
// minidriver routines follow
//
PHW_INTERRUPT HwInterrupt;// minidriver's interrupt routine
PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
// minidriver's request routine
PHW_CANCEL_SRB HwCancelPacket;
// minidriver's cancel routine
PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
// minidriver's timeout handler routine
//
// minidriver resources follow
//
ULONG DeviceExtensionSize; // size in bytes of the
// minidrivers
// per-adapter device extension data
ULONG PerRequestExtensionSize; // size of per-request
// workspace
ULONG PerStreamExtensionSize; // size of per-stream workspace
ULONG FilterInstanceExtensionSize; // size of the filter
// instance extension
BOOLEAN BusMasterDMA; // Adapter uses bus master DMA for
// one or more streams
BOOLEAN Dma24BitAddresses; // TRUE indicates 24 bit DMA only
// (ISA)
ULONG BufferAlignment; // buffer alignment mask
//
// the following BOOLEAN should be set to FALSE unless the minidriver
// can deal with multiprocessor reentrancy issues!
//
BOOLEAN TurnOffSynchronization;
//
// size of DMA buffer needed by minidriver. The minidriver may obtain
// its DMA buffer by calling StreamClassGetDmaBuffer while or after
// SRB_INITIALIZE_DEVICE is received.
//
ULONG DmaBufferSize;
ULONG Reserved[2]; // Reserved for future use
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
//
// Execution Priorities passed in to the StreamClassChangePriority function
//
typedef enum _STREAM_PRIORITY {
High, // highest priority, IRQL equal to the
// adapter's ISR
Dispatch, // medium priority, IRQL equal to DISPATCH
// level
Low, // lowest priority, IRQL equal to PASSIVE or
// APC level
LowToHigh // go from low priority to high priority
} STREAM_PRIORITY, *PSTREAM_PRIORITY;
//
// the following are prototypes for services provided by the class driver
//
VOID STREAMAPI
StreamClassScheduleTimer(
IN OPTIONAL PHW_STREAM_OBJECT StreamObject,
IN PVOID HwDeviceExtension,
IN ULONG NumberOfMicroseconds,
IN PHW_TIMER_ROUTINE TimerRoutine,
IN PVOID Context
);
VOID STREAMAPI
StreamClassCallAtNewPriority(
IN OPTIONAL PHW_STREAM_OBJECT StreamObject,
IN PVOID HwDeviceExtension,
IN STREAM_PRIORITY Priority,
IN PHW_PRIORITY_ROUTINE PriorityRoutine,
IN PVOID Context
);
VOID STREAMAPI
StreamClassStreamNotification(
IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
IN PHW_STREAM_OBJECT StreamObject,
...
);
VOID STREAMAPI
StreamClassDeviceNotification(
IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension,
...
);
STREAM_PHYSICAL_ADDRESS STREAMAPI
StreamClassGetPhysicalAddress(
IN PVOID HwDeviceExtension,
IN PHW_STREAM_REQUEST_BLOCK HwSRB OPTIONAL,
IN PVOID VirtualAddress,
IN STREAM_BUFFER_TYPE Type,
OUT ULONG * Length
);
PVOID STREAMAPI
StreamClassGetDmaBuffer(
IN PVOID HwDeviceExtension
);
VOID
StreamClassDebugPrint(
STREAM_DEBUG_LEVEL DebugPrintLevel,
PCCHAR DebugMessage,
...
);
VOID STREAMAPI
StreamClassDebugBreakPoint(
VOID
);
VOID STREAMAPI
StreamClassDebugAssert(
IN PCHAR File,
IN ULONG Line,
IN PCHAR AssertText,
IN ULONG AssertValue
);
NTSTATUS STREAMAPI
StreamClassRegisterAdapter(
IN PVOID Argument1,
IN PVOID Argument2,
IN PHW_INITIALIZATION_DATA HwInitializationData
);
#define StreamClassRegisterMinidriver StreamClassRegisterAdapter
VOID
StreamClassAbortOutstandingRequests(
IN PVOID HwDeviceExtension,
IN PHW_STREAM_OBJECT HwStreamObject,
IN NTSTATUS Status
);
VOID
StreamClassQueryMasterClock(
IN PHW_STREAM_OBJECT HwStreamObject,
IN HANDLE MasterClockHandle,
IN TIME_FUNCTION TimeFunction,
IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
);
PKSEVENT_ENTRY
StreamClassGetNextEvent(
IN PVOID HwDeviceExtension,
IN OPTIONAL PHW_STREAM_OBJECT HwStreamObject,
IN OPTIONAL GUID * EventGuid,
IN OPTIONAL ULONG EventItem,
IN OPTIONAL PKSEVENT_ENTRY CurrentEvent
);
NTSTATUS
StreamClassRegisterFilterWithNoKSPins(
IN PDEVICE_OBJECT DeviceObject,
IN const GUID * InterfaceClassGUID,
IN ULONG PinCount,
IN BOOL * PinDirection,
IN KSPIN_MEDIUM * MediumList,
IN OPTIONAL GUID * CategoryList
);
BOOLEAN STREAMAPI
StreamClassReadWriteConfig(
IN PVOID HwDeviceExtension,
IN BOOLEAN Read,
IN PVOID Buffer,
IN ULONG Offset,
IN ULONG Length
);
VOID STREAMAPI
StreamClassQueryMasterClockSync(
IN HANDLE MasterClockHandle,
IN OUT PHW_TIME_CONTEXT TimeContext
);
VOID STREAMAPI
StreamClassCompleteRequestAndMarkQueueReady(
IN PHW_STREAM_REQUEST_BLOCK Srb
);
VOID STREAMAPI
StreamClassReenumerateStreams(
IN PVOID HwDeviceExtension,
IN ULONG StreamDescriptorSize
);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -