From c0e90cf2dd95867f1708f121697c50c68b789103 Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Sat, 25 Sep 2010 05:15:47 +0000 Subject: [PATCH] [PSDK/DDK]: Add more missing definitions. Fix classpnp.h. svn path=/trunk/; revision=48864 --- reactos/include/ddk/classpnp.h | 79 +++++++++++++++++++--- reactos/include/psdk/ntdef.h | 6 ++ reactos/include/psdk/wmistr.h | 117 +++++++++++++++++++++++++++++++++ 3 files changed, 193 insertions(+), 9 deletions(-) diff --git a/reactos/include/ddk/classpnp.h b/reactos/include/ddk/classpnp.h index 0c66113e3e6..b6bbc9dbe8e 100644 --- a/reactos/include/ddk/classpnp.h +++ b/reactos/include/ddk/classpnp.h @@ -41,6 +41,42 @@ #define IS_SCSIOP_READWRITE(opCode) (IS_SCSIOP_READ(opCode) || IS_SCSIOP_WRITE(opCode)) +#define ADJUST_FUA_FLAG(fdoExt) { \ + if (TEST_FLAG(fdoExt->DeviceFlags, DEV_WRITE_CACHE) && \ + !TEST_FLAG(fdoExt->DeviceFlags, DEV_POWER_PROTECTED) && \ + !TEST_FLAG(fdoExt->ScanForSpecialFlags, CLASS_SPECIAL_FUA_NOT_SUPPORTED) ) { \ + fdoExt->CdbForceUnitAccess = TRUE; \ + } else { \ + fdoExt->CdbForceUnitAccess = FALSE; \ + } \ +} + +#define FREE_POOL(_PoolPtr) \ + if (_PoolPtr != NULL) { \ + ExFreePool(_PoolPtr); \ + _PoolPtr = NULL; \ + } + +#ifdef POOL_TAGGING +#undef ExAllocatePool +#undef ExAllocatePoolWithQuota +#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'nUcS') +//#define ExAllocatePool(a,b) #assert(0) +#define ExAllocatePoolWithQuota(a,b) ExAllocatePoolWithQuotaTag(a,b,'nUcS') +#endif + +#define CLASS_TAG_AUTORUN_DISABLE 'ALcS' +#define CLASS_TAG_FILE_OBJECT_EXTENSION 'FLcS' +#define CLASS_TAG_MEDIA_CHANGE_DETECTION 'MLcS' +#define CLASS_TAG_MOUNT 'mLcS' +#define CLASS_TAG_RELEASE_QUEUE 'qLcS' +#define CLASS_TAG_POWER 'WLcS' +#define CLASS_TAG_WMI 'wLcS' +#define CLASS_TAG_FAILURE_PREDICT 'fLcS' +#define CLASS_TAG_DEVICE_CONTROL 'OIcS' +#define CLASS_TAG_MODE_DATA 'oLcS' +#define CLASS_TAG_MULTIPATH 'mPcS' + #define MAXIMUM_RETRIES 4 #define CLASS_DRIVER_EXTENSION_KEY ((PVOID) ClassInitialize) @@ -217,12 +253,9 @@ typedef struct _CLASS_PRIVATE_COMMON_DATA CLASS_PRIVATE_COMMON_DATA, *PCLASS_PRI 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; + struct _DICTIONARY_HEADER* List; KSPIN_LOCK SpinLock; } DICTIONARY, *PDICTIONARY; @@ -558,9 +591,6 @@ typedef struct _PHYSICAL_DEVICE_EXTENSION { 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; @@ -652,7 +682,7 @@ typedef struct _FUNCTIONAL_DEVICE_EXTENSION { BOOLEAN ReleaseQueueIrpFromPool; BOOLEAN FailurePredicted; ULONG FailureReason; - PFAILURE_PREDICTION_INFO FailurePredictionInfo; + struct _FAILURE_PREDICTION_INFO* FailurePredictionInfo; BOOLEAN PowerDownInProgress; ULONG EnumerationInterlock; KEVENT ChildLock; @@ -733,6 +763,14 @@ ClassDeviceControl( PDEVICE_OBJECT DeviceObject, PIRP Irp); +SCSIPORTAPI +NTSTATUS +NTAPI +ClassIoComplete( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PVOID Context); + SCSIPORTAPI BOOLEAN NTAPI @@ -848,7 +886,7 @@ NTAPI ClassGetDescriptor( PDEVICE_OBJECT DeviceObject, PSTORAGE_PROPERTY_ID PropertyId, - PVOID *Descriptor); + PSTORAGE_DESCRIPTOR_HEADER *Descriptor); SCSIPORTAPI VOID @@ -1007,6 +1045,13 @@ NTAPI ClassReleaseChildLock( PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); +NTSTATUS +NTAPI +ClassSignalCompletion( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PKEVENT Event); + VOID NTAPI ClassSendStartUnit( @@ -1019,12 +1064,28 @@ ClassRemoveDevice( PDEVICE_OBJECT DeviceObject, UCHAR RemoveType); +SCSIPORTAPI +NTSTATUS +NTAPI +ClassAsynchronousCompletion( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PVOID Event); + SCSIPORTAPI VOID NTAPI ClassCheckMediaState( PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); +SCSIPORTAPI +NTSTATUS +NTAPI +ClassCheckVerifyComplete( + PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PVOID Context); + SCSIPORTAPI VOID NTAPI diff --git a/reactos/include/psdk/ntdef.h b/reactos/include/psdk/ntdef.h index be71648f18b..634294a33d4 100644 --- a/reactos/include/psdk/ntdef.h +++ b/reactos/include/psdk/ntdef.h @@ -617,6 +617,12 @@ typedef struct _GROUP_AFFINITY { #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) +#define RTL_SIZEOF_THROUGH_FIELD(type, field) \ + (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field)) + +#define RTL_CONTAINS_FIELD(Struct, Size, Field) \ + ( (((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)) ) + #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0])) #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A) #ifdef ENABLE_RTL_NUMBER_OF_V2 diff --git a/reactos/include/psdk/wmistr.h b/reactos/include/psdk/wmistr.h index 7136245d055..8cb13c7defa 100644 --- a/reactos/include/psdk/wmistr.h +++ b/reactos/include/psdk/wmistr.h @@ -25,6 +25,123 @@ typedef struct _WNODE_HEADER ULONG Flags; } WNODE_HEADER, *PWNODE_HEADER; +#define WNODE_FLAG_ALL_DATA 0x00000001 +#define WNODE_FLAG_SINGLE_INSTANCE 0x00000002 +#define WNODE_FLAG_SINGLE_ITEM 0x00000004 +#define WNODE_FLAG_EVENT_ITEM 0x00000008 +#define WNODE_FLAG_FIXED_INSTANCE_SIZE 0x00000010 +#define WNODE_FLAG_TOO_SMALL 0x00000020 +#define WNODE_FLAG_INSTANCES_SAME 0x00000040 +#define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080 +#define WNODE_FLAG_INTERNAL 0x00000100 +#define WNODE_FLAG_USE_TIMESTAMP 0x00000200 +#define WNODE_FLAG_PERSIST_EVENT 0x00000400 +#define WNODE_FLAG_EVENT_REFERENCE 0x00002000 +#define WNODE_FLAG_ANSI_INSTANCENAMES 0x00004000 +#define WNODE_FLAG_METHOD_ITEM 0x00008000 +#define WNODE_FLAG_PDO_INSTANCE_NAMES 0x00010000 +#define WNODE_FLAG_TRACED_GUID 0x00020000 +#define WNODE_FLAG_LOG_WNODE 0x00040000 +#define WNODE_FLAG_USE_GUID_PTR 0x00080000 +#define WNODE_FLAG_USE_MOF_PTR 0x00100000 +#define WNODE_FLAG_NO_HEADER 0x00200000 +#define WNODE_FLAG_SEVERITY_MASK 0xff000000 + +typedef struct tagWNODE_TOO_SMALL +{ + struct _WNODE_HEADER WnodeHeader; + ULONG SizeNeeded; +} WNODE_TOO_SMALL, *PWNODE_TOO_SMALL; + +typedef struct tagWNODE_SINGLE_INSTANCE +{ + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG DataBlockOffset; + ULONG SizeDataBlock; + UCHAR VariableData[]; +} WNODE_SINGLE_INSTANCE, *PWNODE_SINGLE_INSTANCE; + +#define WMIREG_FLAG_EXPENSIVE 0x00000001 +#define WMIREG_FLAG_INSTANCE_LIST 0x00000004 +#define WMIREG_FLAG_INSTANCE_BASENAME 0x00000008 +#define WMIREG_FLAG_INSTANCE_PDO 0x00000020 +#define WMIREG_FLAG_REMOVE_GUID 0x00010000 +#define WMIREG_FLAG_RESERVED1 0x00020000 +#define WMIREG_FLAG_RESERVED2 0x00040000 +#define WMIREG_FLAG_TRACED_GUID 0x00080000 +#define WMIREG_FLAG_TRACE_CONTROL_GUID 0x00001000 +#define WMIREG_FLAG_EVENT_ONLY_GUID 0x00000040 + +typedef struct +{ + GUID Guid; + ULONG Flags; + ULONG InstanceCount; + union + { + ULONG InstanceNameList; + ULONG BaseNameOffset; + ULONG_PTR Pdo; + ULONG_PTR InstanceInfo; + }; +} WMIREGGUIDW, *PWMIREGGUIDW; + +typedef struct +{ + ULONG BufferSize; + ULONG NextWmiRegInfo; + ULONG RegistryPath; + ULONG MofResourceName; + ULONG GuidCount; + WMIREGGUIDW WmiRegGuid[]; +} WMIREGINFOW, *PWMIREGINFOW; + +typedef WMIREGINFOW WMIREGINFO; +typedef PWMIREGINFOW PWMIREGINFO; + +typedef struct +{ + ULONG OffsetInstanceData; + ULONG LengthInstanceData; +} OFFSETINSTANCEDATAANDLENGTH, *POFFSETINSTANCEDATAANDLENGTH; + +typedef struct tagWNODE_ALL_DATA +{ + struct _WNODE_HEADER WnodeHeader; + ULONG DataBlockOffset; + ULONG InstanceCount; + ULONG OffsetInstanceNameOffsets; + union + { + ULONG FixedInstanceSize; + OFFSETINSTANCEDATAANDLENGTH OffsetInstanceDataAndLength[0]; + }; +} WNODE_ALL_DATA, *PWNODE_ALL_DATA; + +typedef struct tagWNODE_SINGLE_ITEM +{ + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG ItemId; + ULONG DataBlockOffset; + ULONG SizeDataItem; + UCHAR VariableData[]; +} WNODE_SINGLE_ITEM, *PWNODE_SINGLE_ITEM; + +typedef struct tagWNODE_METHOD_ITEM +{ + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG MethodId; + ULONG DataBlockOffset; + ULONG SizeDataBlock; + UCHAR VariableData[]; +} WNODE_METHOD_ITEM, *PWNODE_METHOD_ITEM; + typedef enum { WMI_GET_ALL_DATA = 0, -- 2.17.1