- Remove duplicate definition of RTL_RANGE_LIST_SHARED_OK and
[reactos.git] / reactos / w32api / include / ddk / winddk.h
index eea2a4c..8e82e7c 100644 (file)
@@ -178,6 +178,9 @@ typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
 #define FILE_EXISTS                       0x00000004
 #define FILE_DOES_NOT_EXIST               0x00000005
 
+#define FILE_USE_FILE_POINTER_POSITION    0xfffffffe
+#define FILE_WRITE_TO_END_OF_FILE         0xffffffff
+
 /* also in winnt.h */
 #define FILE_LIST_DIRECTORY               0x00000001
 #define FILE_READ_DATA                    0x00000001
@@ -737,7 +740,6 @@ typedef VOID DDKAPI
   IN PVOID Context);
 
 
-
 /*
 ** System structures
 */
@@ -867,6 +869,13 @@ typedef struct _KDPC {
   PULONG_PTR  Lock;
 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
 
+typedef struct _KDPC_DATA {
+  LIST_ENTRY  DpcListHead;
+  ULONG  DpcLock;
+  ULONG  DpcQueueDepth;
+  ULONG  DpcCount;
+} KDPC_DATA, *PKDPC_DATA;
+
 typedef struct _WAIT_CONTEXT_BLOCK {
   KDEVICE_QUEUE_ENTRY  WaitQueueEntry;
   struct _DRIVER_CONTROL  *DeviceRoutine;
@@ -1715,8 +1724,7 @@ typedef struct _DEVICE_OBJECT {
   USHORT  Spare1;
   struct _DEVOBJ_EXTENSION  *DeviceObjectExtension;
   PVOID  Reserved;
-} DEVICE_OBJECT;
-typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+} DEVICE_OBJECT, *PDEVICE_OBJECT;
 
 typedef enum _DEVICE_RELATION_TYPE {
   BusRelations,
@@ -1913,6 +1921,150 @@ typedef struct _DMA_ADAPTER {
   PDMA_OPERATIONS  DmaOperations;
 } DMA_ADAPTER;
 
+
+typedef enum _ARBITER_REQUEST_SOURCE {
+  ArbiterRequestUndefined = -1,
+  ArbiterRequestLegacyReported,
+  ArbiterRequestHalReported,
+  ArbiterRequestLegacyAssigned,
+  ArbiterRequestPnpDetected,
+  ArbiterRequestPnpEnumerated
+} ARBITER_REQUEST_SOURCE;
+
+typedef enum _ARBITER_RESULT {
+  ArbiterResultUndefined = -1,
+  ArbiterResultSuccess,
+  ArbiterResultExternalConflict,
+  ArbiterResultNullRequest
+} ARBITER_RESULT;
+
+typedef enum _ARBITER_ACTION {
+  ArbiterActionTestAllocation,
+  ArbiterActionRetestAllocation,
+  ArbiterActionCommitAllocation,
+  ArbiterActionRollbackAllocation,
+  ArbiterActionQueryAllocatedResources,
+  ArbiterActionWriteReservedResources,
+  ArbiterActionQueryConflict,
+  ArbiterActionQueryArbitrate,
+  ArbiterActionAddReserved,
+  ArbiterActionBootAllocation
+} ARBITER_ACTION, *PARBITER_ACTION;
+
+typedef struct _ARBITER_CONFLICT_INFO {
+  PDEVICE_OBJECT  OwningObject;
+  ULONGLONG  Start;
+  ULONGLONG  End;
+} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
+
+typedef struct _ARBITER_PARAMETERS {
+  union {
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+      IN ULONG  AllocateFromCount;
+      IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  AllocateFrom;
+    } TestAllocation;
+
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+      IN ULONG  AllocateFromCount;
+      IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  AllocateFrom;
+    } RetestAllocation;
+
+    struct {
+      IN OUT PLIST_ENTRY  ArbitrationList;
+    } BootAllocation;
+
+    struct {
+      OUT PCM_PARTIAL_RESOURCE_LIST  *AllocatedResources;
+    } QueryAllocatedResources;
+
+    struct {
+      IN PDEVICE_OBJECT  PhysicalDeviceObject;
+      IN PIO_RESOURCE_DESCRIPTOR  ConflictingResource;
+      OUT PULONG  ConflictCount;
+      OUT PARBITER_CONFLICT_INFO  *Conflicts;
+    } QueryConflict;
+
+    struct {
+      IN PLIST_ENTRY  ArbitrationList;
+    } QueryArbitrate;
+
+    struct {
+      IN PDEVICE_OBJECT  ReserveDevice;
+    } AddReserved;
+  } Parameters;
+} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
+
+#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
+
+typedef struct _ARBITER_LIST_ENTRY {
+  LIST_ENTRY  ListEntry;
+  ULONG  AlternativeCount;
+  PIO_RESOURCE_DESCRIPTOR  Alternatives;
+  PDEVICE_OBJECT  PhysicalDeviceObject;
+  ARBITER_REQUEST_SOURCE  RequestSource;
+  ULONG  Flags;
+  LONG_PTR  WorkSpace;
+  INTERFACE_TYPE  InterfaceType;
+  ULONG  SlotNumber;
+  ULONG  BusNumber;
+  PCM_PARTIAL_RESOURCE_DESCRIPTOR  Assignment;
+  PIO_RESOURCE_DESCRIPTOR  SelectedAlternative;
+  ARBITER_RESULT  Result;
+} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
+
+typedef NTSTATUS
+(DDKAPI *PARBITER_HANDLER)(
+  IN PVOID  Context,
+  IN ARBITER_ACTION  Action,
+  IN OUT PARBITER_PARAMETERS  Parameters);
+
+#define ARBITER_PARTIAL 0x00000001
+
+typedef struct _ARBITER_INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PARBITER_HANDLER  ArbiterHandler;
+  ULONG  Flags;
+} ARBITER_INTERFACE, *PARBITER_INTERFACE;
+
+typedef enum _RESOURCE_TRANSLATION_DIRECTION {
+  TranslateChildToParent,
+  TranslateParentToChild
+} RESOURCE_TRANSLATION_DIRECTION;
+
+typedef NTSTATUS
+(DDKAPI *PTRANSLATE_RESOURCE_HANDLER)(
+  IN PVOID  Context,
+  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR  Source,
+  IN RESOURCE_TRANSLATION_DIRECTION  Direction,
+  IN ULONG  AlternativesCount,
+  IN IO_RESOURCE_DESCRIPTOR  Alternatives[],
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR  Target);
+
+typedef NTSTATUS
+(DDKAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
+  IN PVOID  Context,
+  IN PIO_RESOURCE_DESCRIPTOR  Source,
+  IN PDEVICE_OBJECT  PhysicalDeviceObject,
+  OUT PULONG  TargetCount,
+  OUT PIO_RESOURCE_DESCRIPTOR  *Target);
+
+typedef struct _TRANSLATOR_INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PTRANSLATE_RESOURCE_HANDLER  TranslateResources;
+  PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER  TranslateResourceRequirements;
+} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
+
 typedef enum _FILE_INFORMATION_CLASS {
   FileDirectoryInformation = 1,
   FileFullDirectoryInformation,
@@ -2002,7 +2154,7 @@ typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
 
 typedef struct _FILE_DISPOSITION_INFORMATION {                  
-  BOOLEAN  DoDeleteFile;                                         
+  BOOLEAN  DeleteFile;                                         
 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 
                                                                 
 typedef struct _FILE_END_OF_FILE_INFORMATION {                  
@@ -2165,7 +2317,7 @@ typedef BOOLEAN DDKAPI
 typedef BOOLEAN DDKAPI
 (*PFAST_IO_UNLOCK_ALL_BY_KEY)(
   IN struct _FILE_OBJECT  *FileObject,
-  PVOID  ProcessId,
+  PEPROCESS  ProcessId,
   ULONG  Key,
   OUT PIO_STATUS_BLOCK  IoStatus,
   IN struct _DEVICE_OBJECT  *DeviceObject);
@@ -2810,47 +2962,47 @@ typedef struct _PCI_COMMON_CONFIG {
       UCHAR  MinimumGrant;
       UCHAR  MaximumLatency;
     } type0;
-      struct _PCI_HEADER_TYPE_1 {
-        ULONG  BaseAddresses[PCI_TYPE1_ADDRESSES];
-        UCHAR  PrimaryBus;
-        UCHAR  SecondaryBus;
-        UCHAR  SubordinateBus;
-        UCHAR  SecondaryLatency;
-        UCHAR  IOBase;
-        UCHAR  IOLimit;
-        USHORT  SecondaryStatus;
-        USHORT  MemoryBase;
-        USHORT  MemoryLimit;
-        USHORT  PrefetchBase;
-        USHORT  PrefetchLimit;
-        ULONG  PrefetchBaseUpper32;
-        ULONG  PrefetchLimitUpper32;
-        USHORT  IOBaseUpper16;
-        USHORT  IOLimitUpper16;
-        UCHAR  CapabilitiesPtr;
-        UCHAR  Reserved1[3];
-        ULONG  ROMBaseAddress;
-        UCHAR  InterruptLine;
-        UCHAR  InterruptPin;
-        USHORT  BridgeControl;
-      } type1;
-      struct _PCI_HEADER_TYPE_2 {
-        ULONG  SocketRegistersBaseAddress;
-        UCHAR  CapabilitiesPtr;
-        UCHAR  Reserved;
-        USHORT  SecondaryStatus;
-        UCHAR  PrimaryBus;
-        UCHAR  SecondaryBus;
-        UCHAR  SubordinateBus;
-        UCHAR  SecondaryLatency;
-        struct {
-          ULONG  Base;
-          ULONG  Limit;
-        } Range[PCI_TYPE2_ADDRESSES - 1];
-        UCHAR  InterruptLine;
-        UCHAR  InterruptPin;
-        USHORT  BridgeControl;
-      } type2;
+    struct _PCI_HEADER_TYPE_1 {
+      ULONG  BaseAddresses[PCI_TYPE1_ADDRESSES];
+      UCHAR  PrimaryBus;
+      UCHAR  SecondaryBus;
+      UCHAR  SubordinateBus;
+      UCHAR  SecondaryLatency;
+      UCHAR  IOBase;
+      UCHAR  IOLimit;
+      USHORT  SecondaryStatus;
+      USHORT  MemoryBase;
+      USHORT  MemoryLimit;
+      USHORT  PrefetchBase;
+      USHORT  PrefetchLimit;
+      ULONG  PrefetchBaseUpper32;
+      ULONG  PrefetchLimitUpper32;
+      USHORT  IOBaseUpper16;
+      USHORT  IOLimitUpper16;
+      UCHAR  CapabilitiesPtr;
+      UCHAR  Reserved1[3];
+      ULONG  ROMBaseAddress;
+      UCHAR  InterruptLine;
+      UCHAR  InterruptPin;
+      USHORT  BridgeControl;
+    } type1;
+    struct _PCI_HEADER_TYPE_2 {
+      ULONG  SocketRegistersBaseAddress;
+      UCHAR  CapabilitiesPtr;
+      UCHAR  Reserved;
+      USHORT  SecondaryStatus;
+      UCHAR  PrimaryBus;
+      UCHAR  SecondaryBus;
+      UCHAR  SubordinateBus;
+      UCHAR  SecondaryLatency;
+      struct {
+        ULONG  Base;
+        ULONG  Limit;
+      } Range[PCI_TYPE2_ADDRESSES - 1];
+      UCHAR  InterruptLine;
+      UCHAR  InterruptPin;
+      USHORT  BridgeControl;
+    } type2;
   } u;
   UCHAR  DeviceSpecific[192];
 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
@@ -3106,6 +3258,11 @@ typedef struct _PAGED_LOOKASIDE_LIST {
   FAST_MUTEX  Obsoleted;
 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
 
+typedef struct _PP_LOOKASIDE_LIST {
+   struct _GENERAL_LOOKASIDE *P;
+   struct _GENERAL_LOOKASIDE *L;
+} PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
+
 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
 
 typedef VOID DDKAPI (*PCALLBACK_FUNCTION)(
@@ -3625,9 +3782,6 @@ typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
 #define RTL_RANGE_LIST_SHARED_OK          0x00000001
 #define RTL_RANGE_LIST_NULL_CONFLICT_OK   0x00000002
 
-#define RTL_RANGE_LIST_SHARED_OK          0x00000001
-#define RTL_RANGE_LIST_NULL_CONFLICT_OK   0x00000002
-
 #define RTL_RANGE_LIST_MERGE_IF_CONFLICT  RTL_RANGE_LIST_ADD_IF_CONFLICT
 
 typedef struct _RTL_RANGE {
@@ -3657,7 +3811,7 @@ typedef struct _RANGE_LIST_ITERATOR {
 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
 
 typedef BOOLEAN
-(*PRTL_CONFLICT_RANGE_CALLBACK)(
+(DDKAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
   IN PVOID  Context,
   IN PRTL_RANGE  Range);
 
@@ -4333,7 +4487,7 @@ RtlConvertUlongToLuid(
  */
 #ifndef RtlCopyMemory
 #define RtlCopyMemory(Destination, Source, Length) \
-  memcpy(Destination, Source, Length);
+  memcpy(Destination, Source, Length)
 #endif
 
 #ifndef RtlCopyBytes
@@ -4410,12 +4564,12 @@ RtlDeleteRegistryValue(
 /*
  * BOOLEAN
  * RtlEqualLuid( 
- *   IN LUID  Luid1,
- *   IN LUID  Luid2)
+ *   IN PLUID  Luid1,
+ *   IN PLUID  Luid2)
  */
-#define RtlEqualLuid(_Luid1, \
-                     _Luid2) \
-  ((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart))
+#define RtlEqualLuid(Luid1, \
+                     Luid2) \
+  (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
 
 /*
  * ULONG
@@ -5328,7 +5482,7 @@ ExInterlockedAddLargeStatistic(
 
 NTOSAPI
 ULONG
-DDKFASTAPI
+DDKAPI
 ExInterlockedAddUlong(
   IN PULONG  Addend,
   IN ULONG  Increment,
@@ -5351,7 +5505,7 @@ ExInterlockedFlushSList(
 
 NTOSAPI
 PLIST_ENTRY
-DDKFASTAPI
+DDKAPI
 ExInterlockedInsertHeadList(
   IN PLIST_ENTRY  ListHead,
   IN PLIST_ENTRY  ListEntry,
@@ -5359,7 +5513,7 @@ ExInterlockedInsertHeadList(
 
 NTOSAPI
 PLIST_ENTRY
-DDKFASTAPI
+DDKAPI
 ExInterlockedInsertTailList(
   IN PLIST_ENTRY  ListHead,
   IN PLIST_ENTRY  ListEntry,
@@ -5367,7 +5521,7 @@ ExInterlockedInsertTailList(
 
 NTOSAPI
 PSINGLE_LIST_ENTRY
-DDKFASTAPI
+DDKAPI
 ExInterlockedPopEntryList(
   IN PSINGLE_LIST_ENTRY  ListHead,
   IN PKSPIN_LOCK  Lock);
@@ -5384,7 +5538,7 @@ ExInterlockedPopEntryList(
 
 NTOSAPI
 PSINGLE_LIST_ENTRY
-DDKFASTAPI
+DDKAPI
 ExInterlockedPushEntryList(
   IN PSINGLE_LIST_ENTRY  ListHead,
   IN PSINGLE_LIST_ENTRY  ListEntry,
@@ -5404,7 +5558,7 @@ ExInterlockedPushEntryList(
 
 NTOSAPI
 PLIST_ENTRY
-DDKFASTAPI
+DDKAPI
 ExInterlockedRemoveHeadList(
   IN PLIST_ENTRY  ListHead,
   IN PKSPIN_LOCK  Lock);
@@ -6513,6 +6667,10 @@ IoOpenDeviceInterfaceRegistryKey(
   IN ACCESS_MASK  DesiredAccess,
   OUT PHANDLE  DeviceInterfaceKey);
 
+#define PLUGPLAY_REGKEY_DEVICE                            1
+#define PLUGPLAY_REGKEY_DRIVER                            2
+#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
+
 NTOSAPI
 NTSTATUS
 DDKAPI
@@ -6648,6 +6806,16 @@ IoReleaseRemoveLockEx(
   IN PVOID  Tag,
   IN ULONG  RemlockSize);
 
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN PVOID  Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+                            _Tag) \
+  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
 /*
  * VOID
  * IoReleaseRemoveLockAndWait(
@@ -6656,7 +6824,7 @@ IoReleaseRemoveLockEx(
  */
 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
                                    _Tag) \
-  IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+  IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
 
 NTOSAPI
 VOID
@@ -8490,8 +8658,8 @@ DDKAPI
 NtCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes,
-  IN BOOLEAN  ManualReset,
+  IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
+  IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
 NTOSAPI
@@ -8500,8 +8668,8 @@ DDKAPI
 ZwCreateEvent(
   OUT PHANDLE  EventHandle,
   IN ACCESS_MASK  DesiredAccess,
-  IN POBJECT_ATTRIBUTES  ObjectAttributes,
-  IN BOOLEAN  ManualReset,
+  IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
+  IN EVENT_TYPE  EventType,
   IN BOOLEAN  InitialState);
 
 NTOSAPI
@@ -8774,14 +8942,14 @@ NTSTATUS
 DDKAPI
 NtSetEvent(
   IN HANDLE  EventHandle,
-  IN PULONG  NumberOfThreadsReleased);
+  OUT PLONG  PreviousState  OPTIONAL);
 
 NTOSAPI
 NTSTATUS
 DDKAPI
 ZwSetEvent(
   IN HANDLE  EventHandle,
-  IN PULONG  NumberOfThreadsReleased);
+  OUT PLONG  PreviousState  OPTIONAL);
 
 NTOSAPI
 NTSTATUS