//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: proto.h // //-------------------------------------------------------------------------- #ifndef ___REDBOOK_PROTOTYPES_H #define ___REDBOOK_PROTOTYPES_H ////////////////////////////////////////////////////////////////////// // // From redbook\pnp.c // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); NTSTATUS RedBookAddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject ); NTSTATUS RedBookPnp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS RedBookPnpRemoveDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS RedBookPnpStopDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS RedBookPnpStartDevice( IN PDEVICE_OBJECT DeviceObject ); VOID RedBookUnload( IN PDRIVER_OBJECT DriverObject ); ////////////////////////////////////////////////////////// #if DBG #define VerifyCalledByThread(D) \ ASSERT(PsGetCurrentThread() == (D)->Thread.SelfPointer) #else // !DBG #define VerifyCalledByThread(D) // Nop #endif // !DBG ////////////////////////////////////////////////////////////////////// // // From redbook\errlog.c // VOID RedBookLogError( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, IN NTSTATUS IoErrorCode, IN NTSTATUS FinalStatus ); ////////////////////////////////////////////////////////////////////// // // From redbook\wmi.c // NTSTATUS RedBookWmiUninit( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookWmiInit( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookWmiQueryDataBlock ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG InstanceCount, IN OUT PULONG InstanceLengthArray, IN ULONG OutBufferSize, OUT PUCHAR Buffer ); NTSTATUS RedBookWmiSetDataBlock( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG BufferSize, IN PUCHAR Buffer ); NTSTATUS RedBookWmiSetDataItem( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG DataItemId, IN ULONG BufferSize, IN PUCHAR Buffer ); NTSTATUS RedBookWmiSystemControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID RedBookThreadWmiHandler( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PLIST_ENTRY ListEntry ); NTSTATUS RedBookWmiQueryRegInfo( IN PDEVICE_OBJECT DeviceObject, OUT PULONG RegFlags, OUT PUNICODE_STRING InstanceName, OUT PUNICODE_STRING *RegistryPath, OUT PUNICODE_STRING MofResourceName, OUT PDEVICE_OBJECT *PhysicalDeviceObject ); VOID RedBookWmiCopyPerfInfo( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, OUT PREDBOOK_WMI_PERF_DATA Out ); ////////////////////////////////////////////////////////////////////// // // From redbook\sysaudio.c // NTSTATUS OpenSysAudio( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS CloseSysAudio( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS GetPinProperty( IN PFILE_OBJECT FileObject, IN ULONG PropertyId, IN ULONG PinId, IN ULONG PropertySize, OUT PVOID Property ); NTSTATUS GetVolumeNodeId( IN PFILE_OBJECT FileObject, OUT PULONG VolumeNodeId ); NTSTATUS UninitializeVirtualSource( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS InitializeVirtualSource( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS AttachVirtualSource( IN PFILE_OBJECT FileObject, IN ULONG MixerPinId ); VOID SetNextDeviceState( PREDBOOK_DEVICE_EXTENSION DeviceExtension, KSSTATE State ); VOID RedBookKsSetVolume( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS OpenInterfaceByGuid( IN CONST GUID * InterfaceClassGuid, OUT HANDLE * Handle, OUT PFILE_OBJECT * FileObject ); ////////////////////////////////////////////////////////////////////// // // From redbook\redbook.c // NTSTATUS RedBookRegistryRead( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookRegistryWrite( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookReadWrite( PDEVICE_OBJECT DeviceObject, PIRP Irp ); NTSTATUS RedBookSignalCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT Event ); NTSTATUS RedBookSetTransferLength( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookPower( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS RedBookDeviceControl( PDEVICE_OBJECT DeviceObject, PIRP Irp ); NTSTATUS RedBookForwardIrpSynchronous( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, IN PIRP Irp ); NTSTATUS RedBookGetDescriptor( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, IN PSTORAGE_PROPERTY_ID PropertyId, OUT PSTORAGE_DESCRIPTOR_HEADER *Descriptor ); ////////////////////////////////////////////////////////// // // from redbook\ioctl.c // VOID RedBookDCPause( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCStop( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCResume( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCPlay( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCSeek( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCReadQ( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCCheckVerify( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCSetVolume( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCGetVolume( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookDCDefault( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_THREAD_IOCTL_DATA Context ); VOID RedBookThreadIoctlHandler( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PLIST_ENTRY ListEntry ); NTSTATUS RedBookCompleteIoctl( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, IN PREDBOOK_THREAD_IOCTL_DATA Context, IN BOOLEAN SendToLowerDriver ); VOID RedBookThreadIoctlCompletionHandler( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); ////////////////////////////////////////////////////////////////////// // // From redbook\thread.c // VOID RedBookSystemThread( PVOID Context ); VOID RedBookReadRaw( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_COMPLETION_CONTEXT Context ); NTSTATUS RedBookReadRawCompletion( PVOID UnusableParameter, PIRP Irp, PREDBOOK_COMPLETION_CONTEXT Context ); VOID RedBookStream( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_COMPLETION_CONTEXT Context ); NTSTATUS RedBookStreamCompletion( PVOID UnusableParameter, PIRP Irp, PREDBOOK_COMPLETION_CONTEXT Context ); ULONG GetCdromState( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); LONG SetCdromState( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, IN LONG ExpectedOldState, IN LONG NewState ); VOID RedBookDeallocatePlayResources( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookAllocatePlayResources( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); BOOLEAN RedBookArePlayResourcesAllocated( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS RedBookCacheToc( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); ULONG WhichTrackContainsThisLBA( PCDROM_TOC Toc, ULONG Lba ); VOID RedBookThreadDigitalHandler( IN PREDBOOK_DEVICE_EXTENSION DeviceExtension, PLIST_ENTRY ListEntry ); VOID AddWmiStats( PREDBOOK_DEVICE_EXTENSION DeviceExtension, PREDBOOK_COMPLETION_CONTEXT Context ); VOID RedBookCheckForDiscChangeAndFreeResources( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); NTSTATUS SysAudioPnpNotification( PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, PREDBOOK_DEVICE_EXTENSION DeviceExtension ); VOID RedBookCheckForAudioDeviceRemoval( PREDBOOK_DEVICE_EXTENSION DeviceExtension ); ////////////////////////////////////////////////////////////////////// __inline ULONG SafeMod( IN ULONG Value, IN ULONG ModBy ) { return ((Value+ModBy)%ModBy); } __inline NTSTATUS RedBookSendToNextDriver( PDEVICE_OBJECT DeviceObject, PIRP Irp ) /*++ Routine Description: This routine is sends the Irp to the next driver in line when the Irp is not processed by this driver. This happens quite often, so should not have any debug statements. Request this as an inline operation for speed. Arguments: DeviceObject Irp Return Value: NTSTATUS --*/ { IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(((PREDBOOK_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->TargetDeviceObject,Irp); } ////////////////////////////////////////////////////////////////////// #endif // ___REDBOOK_PROTOTYPES_H