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=48861&view=auto
==============================================================================
--- 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


Reply via email to