Author: akhaldi Date: Fri Sep 24 23:42:30 2010 New Revision: 48861
URL: http://svn.reactos.org/svn/reactos?rev=48861&view=rev Log: [DDK] - Add missing classpnp.h
Added: trunk/reactos/include/ddk/classpnp.h (with props)
Added: trunk/reactos/include/ddk/classpnp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/classpnp.h?rev=... ============================================================================== --- trunk/reactos/include/ddk/classpnp.h (added) +++ trunk/reactos/include/ddk/classpnp.h [iso-8859-1] Fri Sep 24 23:42:30 2010 @@ -1,0 +1,1015 @@ + +#pragma once + +#define _CLASS_ + +#include <ntdddisk.h> +#include <ntddcdrm.h> +#include <ntddtape.h> +#include <ntddscsi.h> +#include <ntddstor.h> + +#include <stdio.h> + +#include <scsi.h> + +#define DEBUG_BUFFER_LENGTH 256 + +#define SRB_CLASS_FLAGS_LOW_PRIORITY 0x10000000 +#define SRB_CLASS_FLAGS_PERSISTANT 0x20000000 +#define SRB_CLASS_FLAGS_PAGING 0x40000000 +#define SRB_CLASS_FLAGS_FREE_MDL 0x80000000 + +#define IS_CLEANUP_REQUEST(majorFunction) \ + ((majorFunction == IRP_MJ_CLOSE) || \ + (majorFunction == IRP_MJ_CLEANUP) || \ + (majorFunction == IRP_MJ_SHUTDOWN)) + +#define DO_MCD(fdoExtension) \ + (((fdoExtension)->MediaChangeDetectionInfo != NULL) && \ + ((fdoExtension)->MediaChangeDetectionInfo->MediaChangeDetectionDisableCount == 0)) + +#define IS_SCSIOP_READ(opCode) \ + ((opCode == SCSIOP_READ6) || \ + (opCode == SCSIOP_READ) || \ + (opCode == SCSIOP_READ12) || \ + (opCode == SCSIOP_READ16)) + +#define IS_SCSIOP_WRITE(opCode) \ + ((opCode == SCSIOP_WRITE6) || \ + (opCode == SCSIOP_WRITE) || \ + (opCode == SCSIOP_WRITE12) || \ + (opCode == SCSIOP_WRITE16)) + +#define IS_SCSIOP_READWRITE(opCode) (IS_SCSIOP_READ(opCode) || IS_SCSIOP_WRITE(opCode)) + +#define MAXIMUM_RETRIES 4 + +#define CLASS_DRIVER_EXTENSION_KEY ((PVOID) ClassInitialize) + +#define NO_REMOVE 0 +#define REMOVE_PENDING 1 +#define REMOVE_COMPLETE 2 + +#define ClassAcquireRemoveLock(devobj, tag) \ + ClassAcquireRemoveLockEx(devobj, tag, __FILE__, __LINE__) + +#define START_UNIT_TIMEOUT (60 * 4) + +#define MEDIA_CHANGE_DEFAULT_TIME 1 +#define MEDIA_CHANGE_TIMEOUT_TIME 300 + +#define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS 0x3b9aca00 + +#ifdef ALLOCATE_SRB_FROM_POOL + +#define ClasspAllocateSrb(ext) + ExAllocatePoolWithTag(NonPagedPool, \ + sizeof(SCSI_REQUEST_BLOCK), \ + 'sBRS') + +#define ClasspFreeSrb(ext, srb) ExFreePool((srb)); + +#else /* ALLOCATE_SRB_FROM_POOL */ + +#define ClasspAllocateSrb(ext) \ + ExAllocateFromNPagedLookasideList( \ + &((ext)->CommonExtension.SrbLookasideList)) + +#define ClasspFreeSrb(ext, srb) \ + ExFreeToNPagedLookasideList( \ + &((ext)->CommonExtension.SrbLookasideList), \ + (srb)) + +#endif /* ALLOCATE_SRB_FROM_POOL */ + +#define CLASS_WORKING_SET_MAXIMUM 2048 + +#define CLASS_INTERPRET_SENSE_INFO2_MAXIMUM_HISTORY_COUNT 30000 + +#define CLASS_SPECIAL_DISABLE_SPIN_DOWN 0x00000001 +#define CLASS_SPECIAL_DISABLE_SPIN_UP 0x00000002 +#define CLASS_SPECIAL_NO_QUEUE_LOCK 0x00000008 +#define CLASS_SPECIAL_DISABLE_WRITE_CACHE 0x00000010 +#define CLASS_SPECIAL_CAUSE_NOT_REPORTABLE_HACK 0x00000020 +#if ((NTDDI_VERSION == NTDDI_WIN2KSP3) || (OSVER(NTDDI_VERSION) == NTDDI_WINXP)) +#define CLASS_SPECIAL_DISABLE_WRITE_CACHE_NOT_SUPPORTED 0x00000040 +#endif +#define CLASS_SPECIAL_MODIFY_CACHE_UNSUCCESSFUL 0x00000040 +#define CLASS_SPECIAL_FUA_NOT_SUPPORTED 0x00000080 +#define CLASS_SPECIAL_VALID_MASK 0x000000FB +#define CLASS_SPECIAL_RESERVED (~CLASS_SPECIAL_VALID_MASK) + +#define DEV_WRITE_CACHE 0x00000001 +#define DEV_USE_SCSI1 0x00000002 +#define DEV_SAFE_START_UNIT 0x00000004 +#define DEV_NO_12BYTE_CDB 0x00000008 +#define DEV_POWER_PROTECTED 0x00000010 +#define DEV_USE_16BYTE_CDB 0x00000020 + +#define GUID_CLASSPNP_QUERY_REGINFOEX {0x00e34b11, 0x2444, 0x4745, {0xa5, 0x3d, 0x62, 0x01, 0x00, 0xcd, 0x82, 0xf7}} +#define GUID_CLASSPNP_SENSEINFO2 {0x509a8c5f, 0x71d7, 0x48f6, {0x82, 0x1e, 0x17, 0x3c, 0x49, 0xbf, 0x2f, 0x18}} +#define GUID_CLASSPNP_WORKING_SET {0x105701b0, 0x9e9b, 0x47cb, {0x97, 0x80, 0x81, 0x19, 0x8a, 0xf7, 0xb5, 0x24}} + +#define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1 + +typedef enum _MEDIA_CHANGE_DETECTION_STATE { + MediaUnknown, + MediaPresent, + MediaNotPresent, + MediaUnavailable +} MEDIA_CHANGE_DETECTION_STATE, *PMEDIA_CHANGE_DETECTION_STATE; + +typedef enum _CLASS_DEBUG_LEVEL { + ClassDebugError = 0, + ClassDebugWarning = 1, + ClassDebugTrace = 2, + ClassDebugInfo = 3, + ClassDebugMediaLocks = 8, + ClassDebugMCN = 9, + ClassDebugDelayedRetry = 10, + ClassDebugSenseInfo = 11, + ClassDebugRemoveLock = 12, + ClassDebugExternal4 = 13, + ClassDebugExternal3 = 14, + ClassDebugExternal2 = 15, + ClassDebugExternal1 = 16 +} CLASS_DEBUG_LEVEL, *PCLASS_DEBUG_LEVEL; + +typedef enum { + EventGeneration, + DataBlockCollection +} CLASSENABLEDISABLEFUNCTION; + +typedef enum { + FailurePredictionNone = 0, + FailurePredictionIoctl, + FailurePredictionSmart, + FailurePredictionSense +} FAILURE_PREDICTION_METHOD, *PFAILURE_PREDICTION_METHOD; + +typedef enum { + PowerDownDeviceInitial, + PowerDownDeviceLocked, + PowerDownDeviceStopped, + PowerDownDeviceOff, + PowerDownDeviceUnlocked +} CLASS_POWER_DOWN_STATE; + +typedef enum { + PowerDownDeviceInitial2, + PowerDownDeviceLocked2, + PowerDownDeviceFlushed2, + PowerDownDeviceStopped2, + PowerDownDeviceOff2, + PowerDownDeviceUnlocked2 +} CLASS_POWER_DOWN_STATE2; + +typedef enum { + PowerUpDeviceInitial, + PowerUpDeviceLocked, + PowerUpDeviceOn, + PowerUpDeviceStarted, + PowerUpDeviceUnlocked +} CLASS_POWER_UP_STATE; + +struct _CLASS_INIT_DATA; +typedef struct _CLASS_INIT_DATA CLASS_INIT_DATA, *PCLASS_INIT_DATA; + +struct _CLASS_PRIVATE_FDO_DATA; +typedef struct _CLASS_PRIVATE_FDO_DATA CLASS_PRIVATE_FDO_DATA, *PCLASS_PRIVATE_FDO_DATA; + +struct _CLASS_PRIVATE_PDO_DATA; +typedef struct _CLASS_PRIVATE_PDO_DATA CLASS_PRIVATE_PDO_DATA, *PCLASS_PRIVATE_PDO_DATA; + +struct _CLASS_PRIVATE_COMMON_DATA; +typedef struct _CLASS_PRIVATE_COMMON_DATA CLASS_PRIVATE_COMMON_DATA, *PCLASS_PRIVATE_COMMON_DATA; + +struct _MEDIA_CHANGE_DETECTION_INFO; +typedef struct _MEDIA_CHANGE_DETECTION_INFO MEDIA_CHANGE_DETECTION_INFO, *PMEDIA_CHANGE_DETECTION_INFO; + +struct _DICTIONARY_HEADER; +typedef struct _DICTIONARY_HEADER DICTIONARY_HEADER, *PDICTIONARY_HEADER; + +typedef struct _DICTIONARY { + ULONGLONG Signature; + PDICTIONARY_HEADER List; + KSPIN_LOCK SpinLock; +} DICTIONARY, *PDICTIONARY; + +typedef struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO { + PCHAR VendorId; + PCHAR ProductId; + PCHAR ProductRevision; + ULONG_PTR Data; +} CLASSPNP_SCAN_FOR_SPECIAL_INFO, *PCLASSPNP_SCAN_FOR_SPECIAL_INFO; + +typedef VOID +(NTAPI *PCLASS_ERROR)( + PDEVICE_OBJECT DeviceObject, + PSCSI_REQUEST_BLOCK Srb, + NTSTATUS *Status, + BOOLEAN *Retry); + +typedef NTSTATUS +(NTAPI *PCLASS_ADD_DEVICE)( + PDRIVER_OBJECT DriverObject, + PDEVICE_OBJECT Pdo); + +typedef NTSTATUS +(NTAPI *PCLASS_POWER_DEVICE)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +typedef NTSTATUS +(NTAPI *PCLASS_START_DEVICE)( + PDEVICE_OBJECT DeviceObject); + +typedef NTSTATUS +(NTAPI *PCLASS_STOP_DEVICE)( + PDEVICE_OBJECT DeviceObject, + UCHAR Type); + +typedef NTSTATUS +(NTAPI *PCLASS_INIT_DEVICE)( + PDEVICE_OBJECT DeviceObject); + +typedef NTSTATUS +(NTAPI *PCLASS_ENUM_DEVICE)( + PDEVICE_OBJECT DeviceObject); + +typedef NTSTATUS +(NTAPI *PCLASS_READ_WRITE)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +typedef NTSTATUS +(NTAPI *PCLASS_DEVICE_CONTROL)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +typedef NTSTATUS +(NTAPI *PCLASS_SHUTDOWN_FLUSH)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +typedef NTSTATUS +(NTAPI *PCLASS_CREATE_CLOSE)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +typedef NTSTATUS +(NTAPI *PCLASS_QUERY_ID)( + PDEVICE_OBJECT DeviceObject, + BUS_QUERY_ID_TYPE IdType, + PUNICODE_STRING IdString); + +typedef NTSTATUS +(NTAPI *PCLASS_REMOVE_DEVICE)( + PDEVICE_OBJECT DeviceObject, + UCHAR Type); + +typedef VOID +(NTAPI *PCLASS_UNLOAD)( + PDRIVER_OBJECT DriverObject); + +typedef NTSTATUS +(NTAPI *PCLASS_QUERY_PNP_CAPABILITIES)( + PDEVICE_OBJECT PhysicalDeviceObject, + PDEVICE_CAPABILITIES Capabilities); + +typedef VOID +(NTAPI *PCLASS_TICK)( + PDEVICE_OBJECT DeviceObject); + +typedef NTSTATUS +(NTAPI *PCLASS_QUERY_WMI_REGINFO_EX)( + PDEVICE_OBJECT DeviceObject, + ULONG *RegFlags, + PUNICODE_STRING Name, + PUNICODE_STRING MofResouceName); + +typedef NTSTATUS +(NTAPI *PCLASS_QUERY_WMI_REGINFO)( + PDEVICE_OBJECT DeviceObject, + ULONG *RegFlags, + PUNICODE_STRING Name); + +typedef NTSTATUS +(NTAPI *PCLASS_QUERY_WMI_DATABLOCK)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG BufferAvail, + PUCHAR Buffer); + +typedef NTSTATUS +(NTAPI *PCLASS_SET_WMI_DATABLOCK)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG BufferSize, + PUCHAR Buffer); + +typedef NTSTATUS +(NTAPI *PCLASS_SET_WMI_DATAITEM)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG DataItemId, + ULONG BufferSize, + PUCHAR Buffer); + +typedef NTSTATUS +(NTAPI *PCLASS_EXECUTE_WMI_METHOD)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG MethodId, + ULONG InBufferSize, + ULONG OutBufferSize, + PUCHAR Buffer); + +typedef NTSTATUS +(NTAPI *PCLASS_WMI_FUNCTION_CONTROL)( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + CLASSENABLEDISABLEFUNCTION Function, + BOOLEAN Enable); + +typedef struct _SRB_HISTORY_ITEM { + LARGE_INTEGER TickCountSent; + LARGE_INTEGER TickCountCompleted; + ULONG MillisecondsDelayOnRetry; + SENSE_DATA NormalizedSenseData; + UCHAR SrbStatus; + UCHAR ClassDriverUse; +} SRB_HISTORY_ITEM, *PSRB_HISTORY_ITEM; + +typedef struct _SRB_HISTORY { + ULONG_PTR ClassDriverUse[4]; + ULONG TotalHistoryCount; + ULONG UsedHistoryCount; + SRB_HISTORY_ITEM History[1]; +} SRB_HISTORY, *PSRB_HISTORY; + +typedef BOOLEAN +(NTAPI *PCLASS_INTERPRET_SENSE_INFO)( + PDEVICE_OBJECT Fdo, + PIRP OriginalRequest, + PSCSI_REQUEST_BLOCK Srb, + UCHAR MajorFunctionCode, + ULONG IoDeviceCode, + ULONG PreviousRetryCount, + SRB_HISTORY *RequestHistory, + NTSTATUS *Status, + LONGLONG *RetryIn100nsUnits); + +typedef VOID +(NTAPI *PCLASS_COMPRESS_RETRY_HISTORY_DATA)( + PDEVICE_OBJECT DeviceObject, + PSRB_HISTORY RequestHistory); + +typedef struct { + GUID Guid; + ULONG InstanceCount; + ULONG Flags; +} GUIDREGINFO, *PGUIDREGINFO; + +typedef struct _CLASS_WMI_INFO { + ULONG GuidCount; + PGUIDREGINFO GuidRegInfo; + PCLASS_QUERY_WMI_REGINFO ClassQueryWmiRegInfo; + PCLASS_QUERY_WMI_DATABLOCK ClassQueryWmiDataBlock; + PCLASS_SET_WMI_DATABLOCK ClassSetWmiDataBlock; + PCLASS_SET_WMI_DATAITEM ClassSetWmiDataItem; + PCLASS_EXECUTE_WMI_METHOD ClassExecuteWmiMethod; + PCLASS_WMI_FUNCTION_CONTROL ClassWmiFunctionControl; +} CLASS_WMI_INFO, *PCLASS_WMI_INFO; + +typedef struct _CLASS_DEV_INFO { + ULONG DeviceExtensionSize; + DEVICE_TYPE DeviceType; + UCHAR StackSize; + ULONG DeviceCharacteristics; + PCLASS_ERROR ClassError; + PCLASS_READ_WRITE ClassReadWriteVerification; + PCLASS_DEVICE_CONTROL ClassDeviceControl; + PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush; + PCLASS_CREATE_CLOSE ClassCreateClose; + PCLASS_INIT_DEVICE ClassInitDevice; + PCLASS_START_DEVICE ClassStartDevice; + PCLASS_POWER_DEVICE ClassPowerDevice; + PCLASS_STOP_DEVICE ClassStopDevice; + PCLASS_REMOVE_DEVICE ClassRemoveDevice; + PCLASS_QUERY_PNP_CAPABILITIES ClassQueryPnpCapabilities; + CLASS_WMI_INFO ClassWmiInfo; +} CLASS_DEV_INFO, *PCLASS_DEV_INFO; + +struct _CLASS_INIT_DATA { + ULONG InitializationDataSize; + CLASS_DEV_INFO FdoData; + CLASS_DEV_INFO PdoData; + PCLASS_ADD_DEVICE ClassAddDevice; + PCLASS_ENUM_DEVICE ClassEnumerateDevice; + PCLASS_QUERY_ID ClassQueryId; + PDRIVER_STARTIO ClassStartIo; + PCLASS_UNLOAD ClassUnload; + PCLASS_TICK ClassTick; +}; + +typedef struct _FILE_OBJECT_EXTENSION { + PFILE_OBJECT FileObject; + PDEVICE_OBJECT DeviceObject; + ULONG LockCount; + ULONG McnDisableCount; +} FILE_OBJECT_EXTENSION, *PFILE_OBJECT_EXTENSION; + +typedef struct _CLASS_WORKING_SET { + ULONG Size; + ULONG XferPacketsWorkingSetMaximum; + ULONG XferPacketsWorkingSetMinimum; +} CLASS_WORKING_SET, *PCLASS_WORKING_SET; + +typedef struct _CLASS_INTERPRET_SENSE_INFO2 { + ULONG Size; + ULONG HistoryCount; + PCLASS_COMPRESS_RETRY_HISTORY_DATA Compress; + PCLASS_INTERPRET_SENSE_INFO Interpret; +} CLASS_INTERPRET_SENSE_INFO2, *PCLASS_INTERPRET_SENSE_INFO2; + +C_ASSERT((MAXULONG - sizeof(SRB_HISTORY)) / 30000 >= sizeof(SRB_HISTORY_ITEM)); + +typedef struct _CLASS_DRIVER_EXTENSION { + UNICODE_STRING RegistryPath; + CLASS_INIT_DATA InitData; + ULONG DeviceCount; +#if (NTDDI_VERSION >= NTDDI_WINXP) + PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx; + PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx; +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) + REGHANDLE EtwHandle; + PDRIVER_DISPATCH DeviceMajorFunctionTable[IRP_MJ_MAXIMUM_FUNCTION + 1]; + PDRIVER_DISPATCH MpDeviceMajorFunctionTable[IRP_MJ_MAXIMUM_FUNCTION + 1]; + PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo; + PCLASS_WORKING_SET WorkingSet; +#endif +} CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION; + +typedef struct _COMMON_DEVICE_EXTENSION { + ULONG Version; + PDEVICE_OBJECT DeviceObject; + PDEVICE_OBJECT LowerDeviceObject; + struct _FUNCTIONAL_DEVICE_EXTENSION *PartitionZeroExtension; + PCLASS_DRIVER_EXTENSION DriverExtension; + LONG RemoveLock; + KEVENT RemoveEvent; + KSPIN_LOCK RemoveTrackingSpinlock; + PVOID RemoveTrackingList; + LONG RemoveTrackingUntrackedCount; + PVOID DriverData; + _ANONYMOUS_STRUCT struct { + BOOLEAN IsFdo:1; + BOOLEAN IsInitialized:1; + BOOLEAN IsSrbLookasideListInitialized:1; + } DUMMYSTRUCTNAME; + UCHAR PreviousState; + UCHAR CurrentState; + ULONG IsRemoved; + UNICODE_STRING DeviceName; + struct _PHYSICAL_DEVICE_EXTENSION *ChildList; + ULONG PartitionNumber; + LARGE_INTEGER PartitionLength; + LARGE_INTEGER StartingOffset; + PCLASS_DEV_INFO DevInfo; + ULONG PagingPathCount; + ULONG DumpPathCount; + ULONG HibernationPathCount; + KEVENT PathCountEvent; +#ifndef ALLOCATE_SRB_FROM_POOL + NPAGED_LOOKASIDE_LIST SrbLookasideList; +#endif + UNICODE_STRING MountedDeviceInterfaceName; + ULONG GuidCount; + PGUIDREGINFO GuidRegInfo; + DICTIONARY FileObjectDictionary; +#if (NTDDI_VERSION >= NTDDI_WINXP) + PCLASS_PRIVATE_COMMON_DATA PrivateCommonData; +#else + ULONG_PTR Reserved1; +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) + PDRIVER_DISPATCH *DispatchTable; +#else + ULONG_PTR Reserved2; +#endif + ULONG_PTR Reserved3; + ULONG_PTR Reserved4; +} COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION; + +typedef struct _PHYSICAL_DEVICE_EXTENSION { + _ANONYMOUS_UNION union { + _ANONYMOUS_STRUCT struct { + ULONG Version; + PDEVICE_OBJECT DeviceObject; + } DUMMYSTRUCTNAME; + COMMON_DEVICE_EXTENSION CommonExtension; + } DUMMYUNIONNAME; + BOOLEAN IsMissing; + BOOLEAN IsEnumerated; +#if (NTDDI_VERSION >= NTDDI_WINXP) + PCLASS_PRIVATE_PDO_DATA PrivatePdoData; +#else + ULONG_PTR Reserved1; +#endif + ULONG_PTR Reserved2; + ULONG_PTR Reserved3; + ULONG_PTR Reserved4; +} PHYSICAL_DEVICE_EXTENSION, *PPHYSICAL_DEVICE_EXTENSION; + +struct _FAILURE_PREDICTION_INFO; +typedef struct _FAILURE_PREDICTION_INFO *PFAILURE_PREDICTION_INFO; + +typedef struct _CLASS_POWER_OPTIONS { + ULONG PowerDown:1; + ULONG LockQueue:1; + ULONG HandleSpinDown:1; + ULONG HandleSpinUp:1; + ULONG Reserved:27; +} CLASS_POWER_OPTIONS, *PCLASS_POWER_OPTIONS; + +typedef struct _CLASS_POWER_CONTEXT { + union { + CLASS_POWER_DOWN_STATE PowerDown; + CLASS_POWER_DOWN_STATE2 PowerDown2; + CLASS_POWER_UP_STATE PowerUp; + } PowerChangeState; + CLASS_POWER_OPTIONS Options; + BOOLEAN InUse; + BOOLEAN QueueLocked; + NTSTATUS FinalStatus; + ULONG RetryCount; + ULONG RetryInterval; + PIO_COMPLETION_ROUTINE CompletionRoutine; + PDEVICE_OBJECT DeviceObject; + PIRP Irp; + SCSI_REQUEST_BLOCK Srb; +} CLASS_POWER_CONTEXT, *PCLASS_POWER_CONTEXT; + +typedef struct _COMPLETION_CONTEXT { + PDEVICE_OBJECT DeviceObject; + SCSI_REQUEST_BLOCK Srb; +} COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT; + +SCSIPORTAPI +ULONG +NTAPI +ClassInitialize( + PVOID Argument1, + PVOID Argument2, + PCLASS_INIT_DATA InitializationData); + +typedef struct _CLASS_QUERY_WMI_REGINFO_EX_LIST { + ULONG Size; + PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx; + PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx; +} CLASS_QUERY_WMI_REGINFO_EX_LIST, *PCLASS_QUERY_WMI_REGINFO_EX_LIST; + +SCSIPORTAPI +ULONG +NTAPI +ClassInitializeEx( + PDRIVER_OBJECT DriverObject, + LPGUID Guid, + PVOID Data); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassCreateDeviceObject( + PDRIVER_OBJECT DriverObject, + PCCHAR ObjectNameBuffer, + PDEVICE_OBJECT LowerDeviceObject, + BOOLEAN IsFdo, + PDEVICE_OBJECT *DeviceObject); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassReadDriveCapacity( + PDEVICE_OBJECT DeviceObject); + +SCSIPORTAPI +VOID +NTAPI +ClassReleaseQueue( + PDEVICE_OBJECT DeviceObject); + +SCSIPORTAPI +VOID +NTAPI +ClassSplitRequest( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG MaximumBytes); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassDeviceControl( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +SCSIPORTAPI +BOOLEAN +NTAPI +ClassInterpretSenseInfo( + PDEVICE_OBJECT DeviceObject, + PSCSI_REQUEST_BLOCK Srb, + UCHAR MajorFunctionCode, + ULONG IoDeviceCode, + ULONG RetryCount, + NTSTATUS *Status, + ULONG *RetryInterval); + +VOID +NTAPI +ClassSendDeviceIoControlSynchronous( + ULONG IoControlCode, + PDEVICE_OBJECT TargetDeviceObject, + PVOID Buffer, + ULONG InputBufferLength, + ULONG OutputBufferLength, + BOOLEAN InternalDeviceIoControl, + PIO_STATUS_BLOCK IoStatus); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassSendIrpSynchronous( + PDEVICE_OBJECT TargetDeviceObject, + PIRP Irp); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassForwardIrpSynchronous( + PCOMMON_DEVICE_EXTENSION CommonExtension, + PIRP Irp); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassSendSrbSynchronous( + PDEVICE_OBJECT DeviceObject, + PSCSI_REQUEST_BLOCK Srb, + PVOID BufferAddress, + ULONG BufferLength, + BOOLEAN WriteToDevice); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassSendSrbAsynchronous( + PDEVICE_OBJECT DeviceObject, + PSCSI_REQUEST_BLOCK Srb, + PIRP Irp, + PVOID BufferAddress, + ULONG BufferLength, + BOOLEAN WriteToDevice); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassBuildRequest( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +SCSIPORTAPI +ULONG +NTAPI +ClassModeSense( + PDEVICE_OBJECT DeviceObject, + PCHAR ModeSenseBuffer, + ULONG Length, + UCHAR PageMode); + +SCSIPORTAPI +PVOID +NTAPI +ClassFindModePage( + PCHAR ModeSenseBuffer, + ULONG Length, + UCHAR PageMode, + BOOLEAN Use6Byte); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassClaimDevice( + PDEVICE_OBJECT LowerDeviceObject, + BOOLEAN Release); + +SCSIPORTAPI +VOID +NTAPI +ClassInitializeSrbLookasideList( + PCOMMON_DEVICE_EXTENSION CommonExtension, + ULONG NumberElements); + +SCSIPORTAPI +VOID +NTAPI +ClassDeleteSrbLookasideList( + PCOMMON_DEVICE_EXTENSION CommonExtension); + +SCSIPORTAPI +ULONG +NTAPI +ClassQueryTimeOutRegistryValue( + PDEVICE_OBJECT DeviceObject); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassGetDescriptor( + PDEVICE_OBJECT DeviceObject, + PSTORAGE_PROPERTY_ID PropertyId, + PVOID *Descriptor); + +SCSIPORTAPI +VOID +NTAPI +ClassInvalidateBusRelations( + PDEVICE_OBJECT Fdo); + +SCSIPORTAPI +VOID +NTAPI +ClassMarkChildrenMissing( + PFUNCTIONAL_DEVICE_EXTENSION Fdo); + +SCSIPORTAPI +BOOLEAN +NTAPI +ClassMarkChildMissing( + PPHYSICAL_DEVICE_EXTENSION PdoExtension, + BOOLEAN AcquireChildLock); + +SCSIPORTAPI +VOID +NTAPI +ClassDebugPrint( + CLASS_DEBUG_LEVEL DebugPrintLevel, + PCCHAR DebugMessage, + ...); + +SCSIPORTAPI +PCLASS_DRIVER_EXTENSION +NTAPI +ClassGetDriverExtension( + PDRIVER_OBJECT DriverObject); + +SCSIPORTAPI +VOID +NTAPI +ClassCompleteRequest( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + CCHAR PriorityBoost); + +SCSIPORTAPI +VOID +NTAPI +ClassReleaseRemoveLock( + PDEVICE_OBJECT DeviceObject, + PIRP Tag); + +SCSIPORTAPI +ULONG +NTAPI +ClassAcquireRemoveLockEx( + PDEVICE_OBJECT DeviceObject, + PVOID Tag, + PCSTR File, + ULONG Line); + +SCSIPORTAPI +VOID +NTAPI +ClassUpdateInformationInRegistry( + PDEVICE_OBJECT Fdo, + PCHAR DeviceName, + ULONG DeviceNumber, + PINQUIRYDATA InquiryData, + ULONG InquiryDataLength); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassWmiCompleteRequest( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + NTSTATUS Status, + ULONG BufferUsed, + CCHAR PriorityBoost); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassWmiFireEvent( + PDEVICE_OBJECT DeviceObject, + LPGUID Guid, + ULONG InstanceIndex, + ULONG EventDataSize, + PVOID EventData); + +SCSIPORTAPI +VOID +NTAPI +ClassResetMediaChangeTimer( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +SCSIPORTAPI +VOID +NTAPI +ClassInitializeMediaChangeDetection( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PUCHAR EventPrefix); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassInitializeTestUnitPolling( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + BOOLEAN AllowDriveToSleep); + +SCSIPORTAPI +PVPB +NTAPI +ClassGetVpb( + PDEVICE_OBJECT DeviceObject); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassSpinDownPowerHandler( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +NTSTATUS +NTAPI +ClassStopUnitPowerHandler( + PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +NTSTATUS +NTAPI +ClassSetFailurePredictionPoll( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + FAILURE_PREDICTION_METHOD FailurePredictionMethod, + ULONG PollingPeriod); + +VOID +NTAPI +ClassNotifyFailurePredicted( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PUCHAR Buffer, + ULONG BufferSize, + BOOLEAN LogError, + ULONG UniqueErrorValue, + UCHAR PathId, + UCHAR TargetId, + UCHAR Lun); + +SCSIPORTAPI +VOID +NTAPI +ClassAcquireChildLock( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +SCSIPORTAPI +VOID +NTAPI +ClassReleaseChildLock( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +VOID +NTAPI +ClassSendStartUnit( + PDEVICE_OBJECT DeviceObject); + +SCSIPORTAPI +NTSTATUS +NTAPI +ClassRemoveDevice( + PDEVICE_OBJECT DeviceObject, + UCHAR RemoveType); + +SCSIPORTAPI +VOID +NTAPI +ClassCheckMediaState( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +SCSIPORTAPI +VOID +NTAPI +ClassSetMediaChangeState( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + MEDIA_CHANGE_DETECTION_STATE State, + BOOLEAN Wait); + +SCSIPORTAPI +VOID +NTAPI +ClassEnableMediaChangeDetection( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +SCSIPORTAPI +VOID +NTAPI +ClassDisableMediaChangeDetection( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +SCSIPORTAPI +VOID +NTAPI +ClassCleanupMediaChangeDetection( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); + +VOID +NTAPI +ClassGetDeviceParameter( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PWSTR SubkeyName, + PWSTR ParameterName, + PULONG ParameterValue); + +NTSTATUS +NTAPI +ClassSetDeviceParameter( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PWSTR SubkeyName, + PWSTR ParameterName, + ULONG ParameterValue); + +#if (NTDDI_VERSION >= NTDDI_VISTA) + +PFILE_OBJECT_EXTENSION +NTAPI +ClassGetFsContext( + PCOMMON_DEVICE_EXTENSION CommonExtension, + PFILE_OBJECT FileObject); + +VOID +NTAPI +ClassSendNotification( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + const GUID *Guid, + ULONG ExtraDataSize, + PVOID ExtraData); + +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ + +static __inline +BOOLEAN +PORT_ALLOCATED_SENSE( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PSCSI_REQUEST_BLOCK Srb) +{ + return ((BOOLEAN)((TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE) && + TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER)) && + (Srb->SenseInfoBuffer != FdoExtension->SenseData))); +} + +static __inline +VOID +FREE_PORT_ALLOCATED_SENSE_BUFFER( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + PSCSI_REQUEST_BLOCK Srb) +{ + ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE)); + ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER)); + ASSERT(Srb->SenseInfoBuffer != FdoExtension->SenseData); + + ExFreePool(Srb->SenseInfoBuffer); + Srb->SenseInfoBuffer = FdoExtension->SenseData; + Srb->SenseInfoBufferLength = SENSE_BUFFER_SIZE; + CLEAR_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER); + return; +} + +typedef VOID +(NTAPI *PCLASS_SCAN_FOR_SPECIAL_HANDLER)( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + ULONG_PTR Data); + +VOID +NTAPI +ClassScanForSpecial( + PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, + CLASSPNP_SCAN_FOR_SPECIAL_INFO DeviceList[], + PCLASS_SCAN_FOR_SPECIAL_HANDLER Function);
Propchange: trunk/reactos/include/ddk/classpnp.h ------------------------------------------------------------------------------ svn:eol-style = native