Sync with trunk (r48545)
[reactos.git] / include / xdk / iofuncs.h
index bc35d71..5116cd6 100644 (file)
@@ -2,6 +2,40 @@
  *                         I/O Manager Functions                              *
  ******************************************************************************/
 
+$if (_WDMDDK_)
+/*
+ * NTSTATUS
+ * IoAcquireRemoveLock(
+ *   IN PIO_REMOVE_LOCK  RemoveLock,
+ *   IN OPTIONAL PVOID  Tag)
+ */
+#if DBG
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+  IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
+#else
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+  IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
+#endif
+
+/*
+ * VOID
+ * IoAdjustPagingPathCount(
+ *   IN PLONG  Count,
+ *   IN BOOLEAN  Increment)
+ */
+#define IoAdjustPagingPathCount(_Count, \
+                                _Increment) \
+{ \
+  if (_Increment) \
+    { \
+      InterlockedIncrement(_Count); \
+    } \
+  else \
+    { \
+      InterlockedDecrement(_Count); \
+    } \
+}
+
 #if !defined(_M_AMD64)
 NTHALAPI
 VOID
@@ -144,9 +178,9 @@ NTKERNELAPI
 VOID
 NTAPI
 WRITE_REGISTER_BUFFER_ULONG(
-  IN PULONG  Register,
-  IN PULONG  Buffer,
-  IN ULONG  Count);
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count);
 
 NTKERNELAPI
 VOID
@@ -174,8 +208,8 @@ NTKERNELAPI
 VOID
 NTAPI
 WRITE_REGISTER_USHORT(
-  IN PUSHORT  Register,
-  IN USHORT  Value);
+  IN PUSHORT Register,
+  IN USHORT Value);
 
 #else
 
@@ -186,17 +220,17 @@ READ_PORT_BUFFER_UCHAR(
   IN PUCHAR Buffer,
   IN ULONG Count)
 {
-    __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
 VOID
 READ_PORT_BUFFER_ULONG(
-  IN PULONG  Port,
-  IN PULONG  Buffer,
-  IN ULONG  Count)
+  IN PULONG Port,
+  IN PULONG Buffer,
+  IN ULONG Count)
 {
-    __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
@@ -206,7 +240,7 @@ READ_PORT_BUFFER_USHORT(
   IN PUSHORT Buffer,
   IN ULONG Count)
 {
-    __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
@@ -214,7 +248,7 @@ UCHAR
 READ_PORT_UCHAR(
   IN PUCHAR Port)
 {
-    return __inbyte((USHORT)(ULONG_PTR)Port);
+  return __inbyte((USHORT)(ULONG_PTR)Port);
 }
 
 FORCEINLINE
@@ -222,7 +256,7 @@ ULONG
 READ_PORT_ULONG(
   IN PULONG Port)
 {
-    return __indword((USHORT)(ULONG_PTR)Port);
+  return __indword((USHORT)(ULONG_PTR)Port);
 }
 
 FORCEINLINE
@@ -230,7 +264,7 @@ USHORT
 READ_PORT_USHORT(
   IN PUSHORT Port)
 {
-    return __inword((USHORT)(ULONG_PTR)Port);
+  return __inword((USHORT)(ULONG_PTR)Port);
 }
 
 FORCEINLINE
@@ -240,27 +274,27 @@ READ_REGISTER_BUFFER_UCHAR(
   IN PUCHAR Buffer,
   IN ULONG Count)
 {
-    __movsb(Register, Buffer, Count);
+  __movsb(Register, Buffer, Count);
 }
 
 FORCEINLINE
 VOID
 READ_REGISTER_BUFFER_ULONG(
-  IN PULONG  Register,
-  IN PULONG  Buffer,
-  IN ULONG  Count)
+  IN PULONG Register,
+  IN PULONG Buffer,
+  IN ULONG Count)
 {
-    __movsd(Register, Buffer, Count);
+  __movsd(Register, Buffer, Count);
 }
 
 FORCEINLINE
 VOID
 READ_REGISTER_BUFFER_USHORT(
-  IN PUSHORT  Register,
-  IN PUSHORT  Buffer,
-  IN ULONG  Count)
+  IN PUSHORT Register,
+  IN PUSHORT Buffer,
+  IN ULONG Count)
 {
-    __movsw(Register, Buffer, Count);
+  __movsw(Register, Buffer, Count);
 }
 
 FORCEINLINE
@@ -268,7 +302,7 @@ UCHAR
 READ_REGISTER_UCHAR(
   IN volatile UCHAR *Register)
 {
-    return *Register;
+  return *Register;
 }
 
 FORCEINLINE
@@ -276,7 +310,7 @@ ULONG
 READ_REGISTER_ULONG(
   IN volatile ULONG *Register)
 {
-    return *Register;
+  return *Register;
 }
 
 FORCEINLINE
@@ -284,7 +318,7 @@ USHORT
 READ_REGISTER_USHORT(
   IN volatile USHORT *Register)
 {
-    return *Register;
+  return *Register;
 }
 
 FORCEINLINE
@@ -294,7 +328,7 @@ WRITE_PORT_BUFFER_UCHAR(
   IN PUCHAR Buffer,
   IN ULONG Count)
 {
-    __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
@@ -304,7 +338,7 @@ WRITE_PORT_BUFFER_ULONG(
   IN PULONG Buffer,
   IN ULONG Count)
 {
-    __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
@@ -314,7 +348,7 @@ WRITE_PORT_BUFFER_USHORT(
   IN PUSHORT Buffer,
   IN ULONG Count)
 {
-    __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+  __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
 }
 
 FORCEINLINE
@@ -323,7 +357,7 @@ WRITE_PORT_UCHAR(
   IN PUCHAR Port,
   IN UCHAR Value)
 {
-    __outbyte((USHORT)(ULONG_PTR)Port, Value);
+  __outbyte((USHORT)(ULONG_PTR)Port, Value);
 }
 
 FORCEINLINE
@@ -332,7 +366,7 @@ WRITE_PORT_ULONG(
   IN PULONG Port,
   IN ULONG Value)
 {
-    __outdword((USHORT)(ULONG_PTR)Port, Value);
+  __outdword((USHORT)(ULONG_PTR)Port, Value);
 }
 
 FORCEINLINE
@@ -341,7 +375,7 @@ WRITE_PORT_USHORT(
   IN PUSHORT Port,
   IN USHORT Value)
 {
-    __outword((USHORT)(ULONG_PTR)Port, Value);
+  __outword((USHORT)(ULONG_PTR)Port, Value);
 }
 
 FORCEINLINE
@@ -351,9 +385,9 @@ WRITE_REGISTER_BUFFER_UCHAR(
   IN PUCHAR Buffer,
   IN ULONG Count)
 {
-    LONG Synch;
-    __movsb(Register, Buffer, Count);
-    InterlockedOr(&Synch, 1);
+  LONG Synch;
+  __movsb(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
 }
 
 FORCEINLINE
@@ -363,9 +397,9 @@ WRITE_REGISTER_BUFFER_ULONG(
   IN PULONG Buffer,
   IN ULONG Count)
 {
-    LONG Synch;
-    __movsd(Register, Buffer, Count);
-    InterlockedOr(&Synch, 1);
+  LONG Synch;
+  __movsd(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
 }
 
 FORCEINLINE
@@ -375,9 +409,9 @@ WRITE_REGISTER_BUFFER_USHORT(
   IN PUSHORT Buffer,
   IN ULONG Count)
 {
-    LONG Synch;
-    __movsw(Register, Buffer, Count);
-    InterlockedOr(&Synch, 1);
+  LONG Synch;
+  __movsw(Register, Buffer, Count);
+  InterlockedOr(&Synch, 1);
 }
 
 FORCEINLINE
@@ -386,9 +420,9 @@ WRITE_REGISTER_UCHAR(
   IN volatile UCHAR *Register,
   IN UCHAR Value)
 {
-    LONG Synch;
-    *Register = Value;
-    InterlockedOr(&Synch, 1);
+  LONG Synch;
+  *Register = Value;
+  InterlockedOr(&Synch, 1);
 }
 
 FORCEINLINE
@@ -397,9 +431,9 @@ WRITE_REGISTER_ULONG(
   IN volatile ULONG *Register,
   IN ULONG Value)
 {
-    LONG Synch;
-    *Register = Value;
-    InterlockedOr(&Synch, 1);
+  LONG Synch;
+  *Register = Value;
+  InterlockedOr(&Synch, 1);
 }
 
 FORCEINLINE
@@ -408,9 +442,9 @@ WRITE_REGISTER_USHORT(
   IN volatile USHORT *Register,
   IN USHORT Value)
 {
-    LONG Sync;
-    *Register = Value;
-    InterlockedOr(&Sync, 1);
+  LONG Sync;
+  *Register = Value;
+  InterlockedOr(&Sync, 1);
 }
 #endif
 
@@ -422,254 +456,265 @@ WRITE_REGISTER_USHORT(
 FORCEINLINE
 NTSTATUS
 IoAllocateAdapterChannel(
-    IN PDMA_ADAPTER DmaAdapter,
-    IN PDEVICE_OBJECT DeviceObject,
-    IN ULONG NumberOfMapRegisters,
-    IN PDRIVER_CONTROL ExecutionRoutine,
-    IN PVOID Context)
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG NumberOfMapRegisters,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context)
 {
-    PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
-    AllocateAdapterChannel =
-        *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
-    ASSERT(AllocateAdapterChannel);
-    return AllocateAdapterChannel(DmaAdapter,
-                                  DeviceObject,
-                                  NumberOfMapRegisters,
-                                  ExecutionRoutine,
-                                  Context );
+  PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+  AllocateAdapterChannel =
+      *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
+  ASSERT(AllocateAdapterChannel);
+  return AllocateAdapterChannel(DmaAdapter,
+                                DeviceObject,
+                                NumberOfMapRegisters,
+                                ExecutionRoutine,
+                                Context );
 }
 
 FORCEINLINE
 BOOLEAN
 NTAPI
 IoFlushAdapterBuffers(
-    IN PDMA_ADAPTER DmaAdapter,
-    IN PMDL Mdl,
-    IN PVOID MapRegisterBase,
-    IN PVOID CurrentVa,
-    IN ULONG Length,
-    IN BOOLEAN WriteToDevice)
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN ULONG Length,
+  IN BOOLEAN WriteToDevice)
 {
-    PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
-    FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
-    ASSERT(FlushAdapterBuffers);
-    return FlushAdapterBuffers(DmaAdapter,
-                               Mdl,
-                               MapRegisterBase,
-                               CurrentVa,
-                               Length,
-                               WriteToDevice);
+  PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+  FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
+  ASSERT(FlushAdapterBuffers);
+  return FlushAdapterBuffers(DmaAdapter,
+                             Mdl,
+                             MapRegisterBase,
+                             CurrentVa,
+                             Length,
+                             WriteToDevice);
 }
 
 FORCEINLINE
 VOID
 NTAPI
 IoFreeAdapterChannel(
-    IN PDMA_ADAPTER DmaAdapter)
+  IN PDMA_ADAPTER DmaAdapter)
 {
-    PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
-    FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
-    ASSERT(FreeAdapterChannel);
-    FreeAdapterChannel(DmaAdapter);
+  PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+  FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
+  ASSERT(FreeAdapterChannel);
+  FreeAdapterChannel(DmaAdapter);
 }
 
 FORCEINLINE
 VOID
 NTAPI
 IoFreeMapRegisters(
-    IN PDMA_ADAPTER DmaAdapter,
-    IN PVOID MapRegisterBase,
-    IN ULONG NumberOfMapRegisters)
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PVOID MapRegisterBase,
+  IN ULONG NumberOfMapRegisters)
 {
-    PFREE_MAP_REGISTERS FreeMapRegisters;
-    FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
-    ASSERT(FreeMapRegisters);
-    FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
+  PFREE_MAP_REGISTERS FreeMapRegisters;
+  FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
+  ASSERT(FreeMapRegisters);
+  FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
 }
 
 FORCEINLINE
 PHYSICAL_ADDRESS
 NTAPI
 IoMapTransfer(
-    IN PDMA_ADAPTER DmaAdapter,
-    IN PMDL Mdl,
-    IN PVOID MapRegisterBase,
-    IN PVOID CurrentVa,
-    IN OUT PULONG Length,
-    IN BOOLEAN WriteToDevice)
+  IN PDMA_ADAPTER DmaAdapter,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN OUT PULONG Length,
+  IN BOOLEAN WriteToDevice)
 {
-    PMAP_TRANSFER MapTransfer;
-
-    MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
-    ASSERT(MapTransfer);
-    return MapTransfer(DmaAdapter,
-                       Mdl,
-                       MapRegisterBase,
-                       CurrentVa,
-                       Length,
-                       WriteToDevice);
+  PMAP_TRANSFER MapTransfer;
+
+  MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
+  ASSERT(MapTransfer);
+  return MapTransfer(DmaAdapter,
+                     Mdl,
+                     MapRegisterBase,
+                     CurrentVa,
+                     Length,
+                     WriteToDevice);
 }
 #endif
 
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-VOID
-NTAPI
-IoAcquireCancelSpinLock(
-  OUT PKIRQL  Irql);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAcquireRemoveLockEx(
-  IN PIO_REMOVE_LOCK  RemoveLock,
-  IN PVOID  Tag  OPTIONAL,
-  IN PCSTR  File,
-  IN ULONG  Line,
-  IN ULONG  RemlockSize);
-#endif
-
+$endif (_WDMDDK_)
+$if (_NTDDK_)
 /*
- * NTSTATUS
- * IoAcquireRemoveLock(
- *   IN PIO_REMOVE_LOCK  RemoveLock,
- *   IN OPTIONAL PVOID  Tag)
+ * VOID IoAssignArcName(
+ *   IN PUNICODE_STRING  ArcName,
+ *   IN PUNICODE_STRING  DeviceName);
  */
-#if DBG
-#define IoAcquireRemoveLock(RemoveLock, Tag) \
-  IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
-#else
-#define IoAcquireRemoveLock(RemoveLock, Tag) \
-  IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
-#endif
+#define IoAssignArcName(_ArcName, _DeviceName) ( \
+  IoCreateSymbolicLink((_ArcName), (_DeviceName)))
 
 /*
  * VOID
- * IoAdjustPagingPathCount(
- *   IN PLONG  Count,
- *   IN BOOLEAN  Increment)
+ * IoDeassignArcName(
+ *   IN PUNICODE_STRING  ArcName)
  */
-#define IoAdjustPagingPathCount(_Count, \
-                                _Increment) \
-{ \
-  if (_Increment) \
-    { \
-      InterlockedIncrement(_Count); \
-    } \
-  else \
-    { \
-      InterlockedDecrement(_Count); \
-    } \
+#define IoDeassignArcName IoDeleteSymbolicLink
+
+FORCEINLINE
+VOID
+NTAPI
+IoInitializeDriverCreateContext(
+  PIO_DRIVER_CREATE_CONTEXT DriverContext)
+{
+  RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
+  DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
 }
 
+$endif (_NTDDK_)
+$if (_NTIFS_)
+#define IoIsFileOpenedExclusively(FileObject) ( \
+    (BOOLEAN) !(                                \
+    (FileObject)->SharedRead ||                 \
+    (FileObject)->SharedWrite ||                \
+    (FileObject)->SharedDelete                  \
+    )                                           \
+)
+
+#if (NTDDI_VERSION == NTDDI_WIN2K)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterFsRegistrationChangeEx(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
+#endif
+$endif (_NTIFS_)
 #if (NTDDI_VERSION >= NTDDI_WIN2K)
 
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+IoAcquireCancelSpinLock(
+  OUT PKIRQL Irql);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAcquireRemoveLockEx(
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN PCSTR File,
+  IN ULONG Line,
+  IN ULONG RemlockSize);
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoAllocateDriverObjectExtension(
-  IN PDRIVER_OBJECT  DriverObject,
-  IN PVOID  ClientIdentificationAddress,
-  IN ULONG  DriverObjectExtensionSize,
-  OUT PVOID  *DriverObjectExtension);
+  IN PDRIVER_OBJECT DriverObject,
+  IN PVOID ClientIdentificationAddress,
+  IN ULONG DriverObjectExtensionSize,
+  OUT PVOID *DriverObjectExtension);
 
 NTKERNELAPI
 PVOID
 NTAPI
 IoAllocateErrorLogEntry(
-  IN PVOID  IoObject,
-  IN UCHAR  EntrySize);
+  IN PVOID IoObject,
+  IN UCHAR EntrySize);
 
 NTKERNELAPI
 PIRP
 NTAPI
 IoAllocateIrp(
-  IN CCHAR  StackSize,
-  IN BOOLEAN  ChargeQuota);
+  IN CCHAR StackSize,
+  IN BOOLEAN ChargeQuota);
 
 NTKERNELAPI
 PMDL
 NTAPI
 IoAllocateMdl(
-  IN PVOID  VirtualAddress OPTIONAL,
-  IN ULONG  Length,
-  IN BOOLEAN  SecondaryBuffer,
-  IN BOOLEAN  ChargeQuota,
-  IN OUT PIRP  Irp  OPTIONAL);
+  IN PVOID VirtualAddress OPTIONAL,
+  IN ULONG Length,
+  IN BOOLEAN SecondaryBuffer,
+  IN BOOLEAN ChargeQuota,
+  IN OUT PIRP Irp OPTIONAL);
 
 NTKERNELAPI
 PIO_WORKITEM
 NTAPI
 IoAllocateWorkItem(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoAttachDevice(
-  IN PDEVICE_OBJECT  SourceDevice,
-  IN PUNICODE_STRING  TargetDevice,
-  OUT PDEVICE_OBJECT  *AttachedDevice);
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PUNICODE_STRING TargetDevice,
+  OUT PDEVICE_OBJECT *AttachedDevice);
 
 NTKERNELAPI
 PDEVICE_OBJECT
 NTAPI
 IoAttachDeviceToDeviceStack(
-  IN PDEVICE_OBJECT  SourceDevice,
-  IN PDEVICE_OBJECT  TargetDevice);
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice);
 
 NTKERNELAPI
 PIRP
 NTAPI
 IoBuildAsynchronousFsdRequest(
-  IN ULONG  MajorFunction,
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN OUT PVOID  Buffer  OPTIONAL,
-  IN ULONG  Length  OPTIONAL,
-  IN PLARGE_INTEGER  StartingOffset  OPTIONAL,
-  IN PIO_STATUS_BLOCK  IoStatusBlock  OPTIONAL);
+  IN ULONG MajorFunction,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG Length OPTIONAL,
+  IN PLARGE_INTEGER StartingOffset OPTIONAL,
+  IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
 
 NTKERNELAPI
 PIRP
 NTAPI
 IoBuildDeviceIoControlRequest(
-  IN ULONG  IoControlCode,
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PVOID  InputBuffer  OPTIONAL,
-  IN ULONG  InputBufferLength,
-  OUT PVOID  OutputBuffer  OPTIONAL,
-  IN ULONG  OutputBufferLength,
-  IN BOOLEAN  InternalDeviceIoControl,
-  IN PKEVENT  Event,
-  OUT PIO_STATUS_BLOCK  IoStatusBlock);
+  IN ULONG IoControlCode,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID InputBuffer OPTIONAL,
+  IN ULONG InputBufferLength,
+  OUT PVOID OutputBuffer OPTIONAL,
+  IN ULONG OutputBufferLength,
+  IN BOOLEAN InternalDeviceIoControl,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoBuildPartialMdl(
-  IN PMDL  SourceMdl,
-  IN OUT PMDL  TargetMdl,
-  IN PVOID  VirtualAddress,
-  IN ULONG  Length);
+  IN PMDL SourceMdl,
+  IN OUT PMDL TargetMdl,
+  IN PVOID VirtualAddress,
+  IN ULONG Length);
 
 NTKERNELAPI
 PIRP
 NTAPI
 IoBuildSynchronousFsdRequest(
-  IN ULONG  MajorFunction,
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN OUT PVOID  Buffer  OPTIONAL,
-  IN ULONG  Length  OPTIONAL,
-  IN PLARGE_INTEGER  StartingOffset  OPTIONAL,
-  IN PKEVENT  Event,
-  OUT PIO_STATUS_BLOCK  IoStatusBlock);
+  IN ULONG MajorFunction,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG Length OPTIONAL,
+  IN PLARGE_INTEGER StartingOffset OPTIONAL,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
 NTKERNELAPI
 NTSTATUS
 FASTCALL
 IofCallDriver(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN OUT PIRP  Irp);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN OUT PIRP Irp);
 #define IoCallDriver IofCallDriver
 
 NTKERNELAPI
@@ -684,52 +729,52 @@ NTKERNELAPI
 BOOLEAN
 NTAPI
 IoCancelIrp(
-  IN PIRP  Irp);
+  IN PIRP Irp);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoCheckShareAccess(
-  IN ACCESS_MASK  DesiredAccess,
-  IN ULONG  DesiredShareAccess,
-  IN OUT PFILE_OBJECT  FileObject,
-  IN OUT PSHARE_ACCESS  ShareAccess,
-  IN BOOLEAN  Update);
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess,
+  IN BOOLEAN Update);
 
 NTKERNELAPI
 VOID
 FASTCALL
 IofCompleteRequest(
-  IN PIRP  Irp,
-  IN CCHAR  PriorityBoost);
+  IN PIRP Irp,
+  IN CCHAR PriorityBoost);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoConnectInterrupt(
-  OUT PKINTERRUPT  *InterruptObject,
-  IN PKSERVICE_ROUTINE  ServiceRoutine,
-  IN PVOID  ServiceContext OPTIONAL,
-  IN PKSPIN_LOCK  SpinLock  OPTIONAL,
-  IN ULONG  Vector,
-  IN KIRQL  Irql,
-  IN KIRQL  SynchronizeIrql,
-  IN KINTERRUPT_MODE    InterruptMode,
-  IN BOOLEAN  ShareVector,
-  IN KAFFINITY  ProcessorEnableMask,
-  IN BOOLEAN  FloatingSave);
+  OUT PKINTERRUPT *InterruptObject,
+  IN PKSERVICE_ROUTINE ServiceRoutine,
+  IN PVOID ServiceContext OPTIONAL,
+  IN PKSPIN_LOCK SpinLock OPTIONAL,
+  IN ULONG Vector,
+  IN KIRQL Irql,
+  IN KIRQL SynchronizeIrql,
+  IN KINTERRUPT_MODE InterruptMode,
+  IN BOOLEAN ShareVector,
+  IN KAFFINITY ProcessorEnableMask,
+  IN BOOLEAN FloatingSave);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoCreateDevice(
-  IN PDRIVER_OBJECT  DriverObject,
-  IN ULONG  DeviceExtensionSize,
-  IN PUNICODE_STRING  DeviceName  OPTIONAL,
-  IN DEVICE_TYPE  DeviceType,
-  IN ULONG  DeviceCharacteristics,
-  IN BOOLEAN  Exclusive,
-  OUT PDEVICE_OBJECT  *DeviceObject);
+  IN PDRIVER_OBJECT DriverObject,
+  IN ULONG DeviceExtensionSize,
+  IN PUNICODE_STRING DeviceName OPTIONAL,
+  IN DEVICE_TYPE DeviceType,
+  IN ULONG DeviceCharacteristics,
+  IN BOOLEAN Exclusive,
+  OUT PDEVICE_OBJECT *DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
@@ -754,53 +799,53 @@ NTKERNELAPI
 PKEVENT
 NTAPI
 IoCreateNotificationEvent(
-  IN PUNICODE_STRING  EventName,
-  OUT PHANDLE  EventHandle);
+  IN PUNICODE_STRING EventName,
+  OUT PHANDLE EventHandle);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoCreateSymbolicLink(
-  IN PUNICODE_STRING  SymbolicLinkName,
-  IN PUNICODE_STRING  DeviceName);
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN PUNICODE_STRING DeviceName);
 
 NTKERNELAPI
 PKEVENT
 NTAPI
 IoCreateSynchronizationEvent(
-  IN PUNICODE_STRING  EventName,
-  OUT PHANDLE  EventHandle);
+  IN PUNICODE_STRING EventName,
+  OUT PHANDLE EventHandle);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoCreateUnprotectedSymbolicLink(
-  IN PUNICODE_STRING  SymbolicLinkName,
-  IN PUNICODE_STRING  DeviceName);
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN PUNICODE_STRING DeviceName);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoDeleteDevice(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoDeleteSymbolicLink(
-  IN PUNICODE_STRING  SymbolicLinkName);
+  IN PUNICODE_STRING SymbolicLinkName);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoDetachDevice(
-  IN OUT PDEVICE_OBJECT  TargetDevice);
+  IN OUT PDEVICE_OBJECT TargetDevice);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoDisconnectInterrupt(
-  IN PKINTERRUPT  InterruptObject);
+  IN PKINTERRUPT InterruptObject);
 
 NTKERNELAPI
 VOID
@@ -830,558 +875,1585 @@ NTKERNELAPI
 PDEVICE_OBJECT
 NTAPI
 IoGetAttachedDeviceReference(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoGetBootDiskInformation(
-  IN OUT PBOOTDISK_INFORMATION  BootDiskInformation,
-  IN ULONG  Size);
+  IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
+  IN ULONG Size);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoGetDeviceInterfaceAlias(
-  IN PUNICODE_STRING  SymbolicLinkName,
-  IN CONST GUID  *AliasInterfaceClassGuid,
-  OUT PUNICODE_STRING  AliasSymbolicLinkName);
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN CONST GUID *AliasInterfaceClassGuid,
+  OUT PUNICODE_STRING AliasSymbolicLinkName);
 
 NTKERNELAPI
 PEPROCESS
 NTAPI
-IoGetCurrentProcess(
-  VOID);
+IoGetCurrentProcess(VOID);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoGetDeviceInterfaces(
-  IN CONST GUID  *InterfaceClassGuid,
-  IN PDEVICE_OBJECT  PhysicalDeviceObject  OPTIONAL,
-  IN ULONG  Flags,
-  OUT PWSTR  *SymbolicLinkList);
+  IN CONST GUID *InterfaceClassGuid,
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN ULONG Flags,
+  OUT PWSTR *SymbolicLinkList);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoGetDeviceObjectPointer(
-  IN PUNICODE_STRING  ObjectName,
-  IN ACCESS_MASK  DesiredAccess,
-  OUT PFILE_OBJECT  *FileObject,
-  OUT PDEVICE_OBJECT  *DeviceObject);
+  IN PUNICODE_STRING ObjectName,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PFILE_OBJECT *FileObject,
+  OUT PDEVICE_OBJECT *DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoGetDeviceProperty(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN DEVICE_REGISTRY_PROPERTY  DeviceProperty,
-  IN ULONG  BufferLength,
-  OUT PVOID  PropertyBuffer,
-  OUT PULONG  ResultLength);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
+  IN ULONG BufferLength,
+  OUT PVOID PropertyBuffer,
+  OUT PULONG ResultLength);
 
 NTKERNELAPI
 PDMA_ADAPTER
 NTAPI
 IoGetDmaAdapter(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject OPTIONAL,
-  IN PDEVICE_DESCRIPTION  DeviceDescription,
-  IN OUT PULONG  NumberOfMapRegisters);
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN PDEVICE_DESCRIPTION DeviceDescription,
+  IN OUT PULONG NumberOfMapRegisters);
 
 NTKERNELAPI
 PVOID
 NTAPI
 IoGetDriverObjectExtension(
-  IN PDRIVER_OBJECT  DriverObject,
-  IN PVOID  ClientIdentificationAddress);
+  IN PDRIVER_OBJECT DriverObject,
+  IN PVOID ClientIdentificationAddress);
 
 NTKERNELAPI
 PVOID
 NTAPI
-IoGetInitialStack(
-  VOID);
+IoGetInitialStack(VOID);
 
 NTKERNELAPI
 PDEVICE_OBJECT
 NTAPI
 IoGetRelatedDeviceObject(
-  IN PFILE_OBJECT  FileObject);
+  IN PFILE_OBJECT FileObject);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoQueueWorkItem(
-  IN PIO_WORKITEM  IoWorkItem,
-  IN PIO_WORKITEM_ROUTINE  WorkerRoutine,
-  IN WORK_QUEUE_TYPE  QueueType,
-  IN PVOID  Context OPTIONAL);
+  IN PIO_WORKITEM IoWorkItem,
+  IN PIO_WORKITEM_ROUTINE WorkerRoutine,
+  IN WORK_QUEUE_TYPE QueueType,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoInitializeIrp(
-  IN OUT PIRP  Irp,
-  IN USHORT  PacketSize,
-  IN CCHAR  StackSize);
+  IN OUT PIRP Irp,
+  IN USHORT PacketSize,
+  IN CCHAR StackSize);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoInitializeRemoveLockEx(
-  IN  PIO_REMOVE_LOCK Lock,
-  IN  ULONG   AllocateTag,
-  IN  ULONG   MaxLockedMinutes,
-  IN  ULONG   HighWatermark,
-  IN  ULONG   RemlockSize);
+  IN PIO_REMOVE_LOCK Lock,
+  IN ULONG AllocateTag,
+  IN ULONG MaxLockedMinutes,
+  IN ULONG HighWatermark,
+  IN ULONG RemlockSize);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoInitializeTimer(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIO_TIMER_ROUTINE  TimerRoutine,
-  IN PVOID  Context OPTIONAL);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_TIMER_ROUTINE TimerRoutine,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoInvalidateDeviceRelations(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN DEVICE_RELATION_TYPE  Type);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN DEVICE_RELATION_TYPE Type);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoInvalidateDeviceState(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject);
+  IN PDEVICE_OBJECT PhysicalDeviceObject);
 
 NTKERNELAPI
 BOOLEAN
 NTAPI
 IoIsWdmVersionAvailable(
-  IN UCHAR  MajorVersion,
-  IN UCHAR  MinorVersion);
+  IN UCHAR MajorVersion,
+  IN UCHAR MinorVersion);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoOpenDeviceInterfaceRegistryKey(
-  IN PUNICODE_STRING  SymbolicLinkName,
-  IN ACCESS_MASK  DesiredAccess,
-  OUT PHANDLE  DeviceInterfaceKey);
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PHANDLE DeviceInterfaceKey);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoOpenDeviceRegistryKey(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN ULONG  DevInstKeyType,
-  IN ACCESS_MASK  DesiredAccess,
-  OUT PHANDLE  DevInstRegKey);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG DevInstKeyType,
+  IN ACCESS_MASK DesiredAccess,
+  OUT PHANDLE DevInstRegKey);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoRegisterDeviceInterface(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject,
-  IN CONST GUID  *InterfaceClassGuid,
-  IN PUNICODE_STRING  ReferenceString  OPTIONAL,
-  OUT PUNICODE_STRING  SymbolicLinkName);
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN CONST GUID *InterfaceClassGuid,
+  IN PUNICODE_STRING ReferenceString OPTIONAL,
+  OUT PUNICODE_STRING SymbolicLinkName);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoRegisterPlugPlayNotification(
-  IN IO_NOTIFICATION_EVENT_CATEGORY  EventCategory,
-  IN ULONG  EventCategoryFlags,
-  IN PVOID  EventCategoryData  OPTIONAL,
-  IN PDRIVER_OBJECT  DriverObject,
-  IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE  CallbackRoutine,
-  IN OUT PVOID  Context OPTIONAL,
-  OUT PVOID  *NotificationEntry);
+  IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
+  IN ULONG EventCategoryFlags,
+  IN PVOID EventCategoryData OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
+  IN OUT PVOID Context OPTIONAL,
+  OUT PVOID *NotificationEntry);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoRegisterShutdownNotification(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoReleaseCancelSpinLock(
-  IN KIRQL  Irql);
+  IN KIRQL Irql);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoReleaseRemoveLockAndWaitEx(
-  IN PIO_REMOVE_LOCK  RemoveLock,
-  IN PVOID  Tag OPTIONAL,
-  IN ULONG  RemlockSize);
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN ULONG RemlockSize);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoReleaseRemoveLockEx(
-  IN PIO_REMOVE_LOCK  RemoveLock,
-  IN PVOID  Tag OPTIONAL,
-  IN ULONG  RemlockSize);
+  IN PIO_REMOVE_LOCK RemoveLock,
+  IN PVOID Tag OPTIONAL,
+  IN ULONG RemlockSize);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoRemoveShareAccess(
-  IN PFILE_OBJECT  FileObject,
-  IN OUT PSHARE_ACCESS  ShareAccess);
+  IN PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoReportTargetDeviceChange(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject,
-  IN PVOID  NotificationStructure);
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PVOID NotificationStructure);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoReportTargetDeviceChangeAsynchronous(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject,
-  IN PVOID  NotificationStructure,
-  IN PDEVICE_CHANGE_COMPLETE_CALLBACK  Callback  OPTIONAL,
-  IN PVOID  Context  OPTIONAL);
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PVOID NotificationStructure,
+  IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoRequestDeviceEject(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject);
+  IN PDEVICE_OBJECT PhysicalDeviceObject);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoReuseIrp(
-  IN OUT PIRP  Irp,
-  IN NTSTATUS  Status);
+  IN OUT PIRP Irp,
+  IN NTSTATUS Status);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoSetDeviceInterfaceState(
-  IN PUNICODE_STRING  SymbolicLinkName,
-  IN BOOLEAN  Enable);
+  IN PUNICODE_STRING SymbolicLinkName,
+  IN BOOLEAN Enable);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoSetShareAccess(
-  IN ACCESS_MASK  DesiredAccess,
-  IN ULONG  DesiredShareAccess,
-  IN OUT PFILE_OBJECT  FileObject,
-  OUT PSHARE_ACCESS  ShareAccess);
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  OUT PSHARE_ACCESS ShareAccess);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoStartNextPacket(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN BOOLEAN  Cancelable);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN Cancelable);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoStartNextPacketByKey(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN BOOLEAN  Cancelable,
-  IN ULONG  Key);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN Cancelable,
+  IN ULONG Key);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoStartPacket(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIRP  Irp,
-  IN PULONG  Key  OPTIONAL,
-  IN PDRIVER_CANCEL  CancelFunction  OPTIONAL);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp,
+  IN PULONG Key OPTIONAL,
+  IN PDRIVER_CANCEL CancelFunction OPTIONAL);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoStartTimer(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoStopTimer(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoUnregisterPlugPlayNotification(
-  IN PVOID  NotificationEntry);
+  IN PVOID NotificationEntry);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoUnregisterShutdownNotification(
-  IN PDEVICE_OBJECT  DeviceObject);
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoUpdateShareAccess(
-  IN PFILE_OBJECT  FileObject,
-  IN OUT PSHARE_ACCESS  ShareAccess);
+  IN PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoWMIAllocateInstanceIds(
-  IN GUID  *Guid,
-  IN ULONG  InstanceCount,
-  OUT ULONG  *FirstInstanceId);
+  IN GUID *Guid,
+  IN ULONG InstanceCount,
+  OUT ULONG *FirstInstanceId);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoWMIQuerySingleInstanceMultiple(
-  IN PVOID  *DataBlockObjectList,
-  IN PUNICODE_STRING  InstanceNames,
-  IN ULONG  ObjectCount,
-  IN OUT ULONG  *InOutBufferSize,
-  OUT PVOID  OutBuffer);
+  IN PVOID *DataBlockObjectList,
+  IN PUNICODE_STRING InstanceNames,
+  IN ULONG ObjectCount,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoWMIRegistrationControl(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN ULONG  Action);
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG Action);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoWMISuggestInstanceName(
-  IN PDEVICE_OBJECT  PhysicalDeviceObject OPTIONAL,
-  IN PUNICODE_STRING  SymbolicLinkName OPTIONAL,
-  IN BOOLEAN  CombineNames,
-  OUT PUNICODE_STRING  SuggestedInstanceName);
+  IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+  IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
+  IN BOOLEAN CombineNames,
+  OUT PUNICODE_STRING SuggestedInstanceName);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
 IoWMIWriteEvent(
-  IN PVOID  WnodeEventItem);
+  IN OUT PVOID WnodeEventItem);
 
 NTKERNELAPI
 VOID
 NTAPI
 IoWriteErrorLogEntry(
-  IN PVOID  ElEntry);
+  IN PVOID ElEntry);
 
-#endif
+NTKERNELAPI
+PIRP
+NTAPI
+IoGetTopLevelIrp(VOID);
 
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterLastChanceShutdownNotification(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetTopLevelIrp(
+  IN PIRP Irp OPTIONAL);
 
+$endif (_WDMDDK_)
+$if (_NTDDK_)
+#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoCsqInitialize(
-  IN PIO_CSQ Csq,
-  IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
-  IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
-  IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
-  IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
-  IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
-  IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+IoAllocateAdapterChannel(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG NumberOfMapRegisters,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context);
+#endif
+
+#if !defined(DMA_MACROS_DEFINED)
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+  IN PADAPTER_OBJECT AdapterObject,
+  IN PMDL Mdl,
+  IN PVOID MapRegisterBase,
+  IN PVOID CurrentVa,
+  IN OUT PULONG Length,
+  IN BOOLEAN WriteToDevice);
+#endif
 
 NTKERNELAPI
 VOID
 NTAPI
-IoCsqInsertIrp(
-  IN PIO_CSQ Csq,
-  IN PIRP Irp,
-  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+IoAllocateController(
+  IN PCONTROLLER_OBJECT ControllerObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PDRIVER_CONTROL ExecutionRoutine,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
-PIRP
+PCONTROLLER_OBJECT
 NTAPI
-IoCsqRemoveIrp(
-  IN PIO_CSQ Csq,
-  IN PIO_CSQ_IRP_CONTEXT Context);
+IoCreateController(
+  IN ULONG Size);
 
 NTKERNELAPI
-PIRP
+VOID
 NTAPI
-IoCsqRemoveNextIrp(
-  IN PIO_CSQ  Csq,
-  IN PVOID  PeekContext);
+IoDeleteController(
+  IN PCONTROLLER_OBJECT ControllerObject);
 
 NTKERNELAPI
-BOOLEAN
+VOID
 NTAPI
-IoForwardIrpSynchronously(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIRP  Irp);
+IoFreeController(
+  IN PCONTROLLER_OBJECT ControllerObject);
 
-#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+NTKERNELAPI
+PCONFIGURATION_INFORMATION
+NTAPI
+IoGetConfigurationInformation(VOID);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetDeviceToVerify(
+  IN PETHREAD Thread);
 
 NTKERNELAPI
 VOID
 NTAPI
-IoFreeErrorLogEntry(
-  PVOID  ElEntry);
+IoCancelFileOpen(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+PGENERIC_MAPPING
+NTAPI
+IoGetFileObjectGenericMapping(VOID);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoMakeAssociatedIrp(
+  IN PIRP Irp,
+  IN CCHAR StackSize);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoSetCompletionRoutineEx(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN PIRP  Irp,
-  IN PIO_COMPLETION_ROUTINE  CompletionRoutine,
-  IN PVOID  Context,
-  IN BOOLEAN  InvokeOnSuccess,
-  IN BOOLEAN  InvokeOnError,
-  IN BOOLEAN  InvokeOnCancel);
+IoQueryDeviceDescription(
+  IN PINTERFACE_TYPE BusType OPTIONAL,
+  IN PULONG BusNumber OPTIONAL,
+  IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
+  IN PULONG ControllerNumber OPTIONAL,
+  IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
+  IN PULONG PeripheralNumber OPTIONAL,
+  IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+  IN OUT PVOID Context OPTIONAL);
 
+NTKERNELAPI
 VOID
 NTAPI
-IoSetStartIoAttributes(
-  IN PDEVICE_OBJECT  DeviceObject,
-  IN BOOLEAN  DeferredStartIo,
-  IN BOOLEAN  NonCancelable);
+IoRaiseHardError(
+  IN PIRP Irp,
+  IN PVPB Vpb OPTIONAL,
+  IN PDEVICE_OBJECT RealDeviceObject);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoRaiseInformationalHardError(
+  IN NTSTATUS ErrorStatus,
+  IN PUNICODE_STRING String OPTIONAL,
+  IN PKTHREAD Thread OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterBootDriverReinitialization(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterDriverReinitialization(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+  IN PVOID Context OPTIONAL);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIDeviceObjectToInstanceName(
-  IN PVOID  DataBlockObject,
-  IN PDEVICE_OBJECT  DeviceObject,
-  OUT PUNICODE_STRING  InstanceName);
+IoAttachDeviceByPointer(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIExecuteMethod(
-  IN PVOID  DataBlockObject,
-  IN PUNICODE_STRING  InstanceName,
-  IN ULONG  MethodId,
-  IN ULONG  InBufferSize,
-  IN OUT PULONG  OutBufferSize,
-  IN OUT  PUCHAR  InOutBuffer);
+IoReportDetectedDevice(
+  IN PDRIVER_OBJECT DriverObject,
+  IN INTERFACE_TYPE LegacyBusType,
+  IN ULONG BusNumber,
+  IN ULONG SlotNumber,
+  IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
+  IN BOOLEAN ResourceAssigned,
+  IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIHandleToInstanceName(
-  IN PVOID  DataBlockObject,
-  IN HANDLE  FileHandle,
-  OUT PUNICODE_STRING  InstanceName);
+IoReportResourceForDetection(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+  IN ULONG DriverListSize OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+  IN ULONG DeviceListSize OPTIONAL,
+  OUT PBOOLEAN ConflictDetected);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIOpenBlock(
-  IN GUID  *DataBlockGuid,
-  IN ULONG  DesiredAccess,
-  OUT PVOID  *DataBlockObject);
+IoReportResourceUsage(
+  IN PUNICODE_STRING DriverClassName OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+  IN ULONG DriverListSize OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+  IN ULONG DeviceListSize OPTIONAL,
+  IN BOOLEAN OverrideConflict,
+  OUT PBOOLEAN ConflictDetected);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetHardErrorOrVerifyDevice(
+  IN PIRP Irp,
+  IN PDEVICE_OBJECT DeviceObject);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIQueryAllData(
-  IN PVOID  DataBlockObject,
-  IN OUT ULONG  *InOutBufferSize,
-  OUT PVOID  OutBuffer);
+IoAssignResources(
+  IN PUNICODE_STRING RegistryPath,
+  IN PUNICODE_STRING DriverClassName OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
+  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoSetThreadHardErrorMode(
+  IN BOOLEAN EnableHardErrors);
+
+$endif (_NTDDK_)
+$if (_NTIFS_)
+
+NTKERNELAPI
+VOID
+NTAPI
+IoAcquireVpbSpinLock(
+  OUT PKIRQL Irql);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIQueryAllDataMultiple(
-  IN PVOID  *DataBlockObjectList,
-  IN ULONG  ObjectCount,
-  IN OUT ULONG  *InOutBufferSize,
-  OUT PVOID  OutBuffer);
+IoCheckDesiredAccess(
+  IN OUT PACCESS_MASK DesiredAccess,
+  IN ACCESS_MASK GrantedAccess);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMIQuerySingleInstance(
-  IN PVOID  DataBlockObject,
-  IN PUNICODE_STRING  InstanceName,
-  IN OUT ULONG  *InOutBufferSize,
-  OUT PVOID OutBuffer);
+IoCheckEaBufferValidity(
+  IN PFILE_FULL_EA_INFORMATION EaBuffer,
+  IN ULONG EaLength,
+  OUT PULONG ErrorOffset);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMISetNotificationCallback(
-  IN OUT PVOID  Object,
-  IN WMI_NOTIFICATION_CALLBACK  Callback,
-  IN PVOID  Context OPTIONAL);
+IoCheckFunctionAccess(
+  IN ACCESS_MASK GrantedAccess,
+  IN UCHAR MajorFunction,
+  IN UCHAR MinorFunction,
+  IN ULONG IoControlCode,
+  IN PVOID Argument1 OPTIONAL,
+  IN PVOID Argument2 OPTIONAL);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMISetSingleInstance(
-  IN PVOID  DataBlockObject,
-  IN PUNICODE_STRING  InstanceName,
-  IN ULONG  Version,
-  IN ULONG  ValueBufferSize,
-  IN PVOID  ValueBuffer);
+IoCheckQuerySetFileInformation(
+  IN FILE_INFORMATION_CLASS FileInformationClass,
+  IN ULONG Length,
+  IN BOOLEAN SetOperation);
 
 NTKERNELAPI
 NTSTATUS
 NTAPI
-IoWMISetSingleItem(
-  IN PVOID  DataBlockObject,
-  IN PUNICODE_STRING  InstanceName,
-  IN ULONG  DataItemId,
-  IN ULONG  Version,
-  IN ULONG  ValueBufferSize,
-  IN PVOID  ValueBuffer);
+IoCheckQuerySetVolumeInformation(
+  IN FS_INFORMATION_CLASS FsInformationClass,
+  IN ULONG Length,
+  IN BOOLEAN SetOperation);
 
-#endif
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckQuotaBufferValidity(
+  IN PFILE_QUOTA_INFORMATION QuotaBuffer,
+  IN ULONG QuotaLength,
+  OUT PULONG ErrorOffset);
 
-#if defined(_WIN64)
 NTKERNELAPI
-ULONG
+PFILE_OBJECT
 NTAPI
-IoWMIDeviceObjectToProviderId(
-  IN PDEVICE_OBJECT DeviceObject);
-#else
-#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
-#endif
+IoCreateStreamFileObject(
+  IN PFILE_OBJECT FileObject OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
-/*
- * USHORT
- * IoSizeOfIrp(
- *   IN CCHAR  StackSize)
- */
-#define IoSizeOfIrp(_StackSize) \
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+IoCreateStreamFileObjectLite(
+  IN PFILE_OBJECT FileObject OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoFastQueryNetworkAttributes(
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG OpenOptions,
+  OUT PIO_STATUS_BLOCK IoStatus,
+  OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoPageRead(
+  IN PFILE_OBJECT FileObject,
+  IN PMDL Mdl,
+  IN PLARGE_INTEGER Offset,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetBaseFileSystemDeviceObject(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+PCONFIGURATION_INFORMATION
+NTAPI
+IoGetConfigurationInformation(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+IoGetRequestorProcessId(
+  IN PIRP Irp);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoGetRequestorProcess(
+  IN PIRP Irp);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoGetTopLevelIrp(VOID);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsOperationSynchronous(
+  IN PIRP Irp);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsSystemThread(
+  IN PETHREAD Thread);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsValidNameGraftingBuffer(
+  IN PIRP Irp,
+  IN PREPARSE_DATA_BUFFER ReparseBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryFileInformation(
+  IN PFILE_OBJECT FileObject,
+  IN FILE_INFORMATION_CLASS FileInformationClass,
+  IN ULONG Length,
+  OUT PVOID FileInformation,
+  OUT PULONG ReturnedLength);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryVolumeInformation(
+  IN PFILE_OBJECT FileObject,
+  IN FS_INFORMATION_CLASS FsInformationClass,
+  IN ULONG Length,
+  OUT PVOID FsInformation,
+  OUT PULONG ReturnedLength);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoQueueThreadIrp(
+  IN PIRP Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterFileSystem(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterFsRegistrationChange(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseVpbSpinLock(
+  IN KIRQL Irql);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetDeviceToVerify(
+  IN PETHREAD Thread,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetInformation(
+  IN PFILE_OBJECT FileObject,
+  IN FILE_INFORMATION_CLASS FileInformationClass,
+  IN ULONG Length,
+  IN PVOID FileInformation);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetTopLevelIrp(
+  IN PIRP Irp OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSynchronousPageWrite(
+  IN PFILE_OBJECT FileObject,
+  IN PMDL Mdl,
+  IN PLARGE_INTEGER FileOffset,
+  IN PKEVENT Event,
+  OUT PIO_STATUS_BLOCK IoStatusBlock);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoThreadToProcess(
+  IN PETHREAD Thread);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterFileSystem(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterFsRegistrationChange(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVerifyVolume(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN AllowRawMount);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetRequestorSessionId(
+  IN PIRP Irp,
+  OUT PULONG pSessionId);
+$endif (_NTIFS_)
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsFileOriginRemote(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetFileOrigin(
+  IN PFILE_OBJECT FileObject,
+  IN BOOLEAN Remote);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
+$endif (_NTDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitialize(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
+  IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+  IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+  IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+  IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+  IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoCsqInsertIrp(
+  IN PIO_CSQ Csq,
+  IN PIRP Irp,
+  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveIrp(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_IRP_CONTEXT Context);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveNextIrp(
+  IN PIO_CSQ Csq,
+  IN PVOID PeekContext OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoForwardIrpSynchronously(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp);
+
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeErrorLogEntry(
+  PVOID ElEntry);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetCompletionRoutineEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIRP Irp,
+  IN PIO_COMPLETION_ROUTINE CompletionRoutine,
+  IN PVOID Context,
+  IN BOOLEAN InvokeOnSuccess,
+  IN BOOLEAN InvokeOnError,
+  IN BOOLEAN InvokeOnCancel);
+
+VOID
+NTAPI
+IoSetStartIoAttributes(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN DeferredStartIo,
+  IN BOOLEAN NonCancelable);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIDeviceObjectToInstanceName(
+  IN PVOID DataBlockObject,
+  IN PDEVICE_OBJECT DeviceObject,
+  OUT PUNICODE_STRING InstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIExecuteMethod(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG MethodId,
+  IN ULONG InBufferSize,
+  IN OUT PULONG OutBufferSize,
+  IN OUT  PUCHAR InOutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIHandleToInstanceName(
+  IN PVOID DataBlockObject,
+  IN HANDLE FileHandle,
+  OUT PUNICODE_STRING InstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIOpenBlock(
+  IN GUID *DataBlockGuid,
+  IN ULONG DesiredAccess,
+  OUT PVOID *DataBlockObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQueryAllData(
+  IN PVOID DataBlockObject,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQueryAllDataMultiple(
+  IN PVOID *DataBlockObjectList,
+  IN ULONG ObjectCount,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQuerySingleInstance(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN OUT ULONG *InOutBufferSize,
+  OUT PVOID OutBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetNotificationCallback(
+  IN OUT PVOID Object,
+  IN WMI_NOTIFICATION_CALLBACK Callback,
+  IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetSingleInstance(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG Version,
+  IN ULONG ValueBufferSize,
+  IN PVOID ValueBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetSingleItem(
+  IN PVOID DataBlockObject,
+  IN PUNICODE_STRING InstanceName,
+  IN ULONG DataItemId,
+  IN ULONG Version,
+  IN ULONG ValueBufferSize,
+  IN PVOID ValueBuffer);
+$endif (_WDMDDK_)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN BOOLEAN ReturnRecognizedPartitions,
+  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG PartitionNumber,
+  IN ULONG PartitionType);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG SectorSize,
+  IN ULONG SectorsPerTrack,
+  IN ULONG NumberOfHeads,
+  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateDisk(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _CREATE_DISK* Disk OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadDiskSignature(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG BytesPerSector,
+  OUT PDISK_SIGNATURE Signature);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadPartitionTableEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetPartitionInformationEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN ULONG PartitionNumber,
+  IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetSystemPartition(
+  IN PUNICODE_STRING VolumeNameString);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVerifyPartitionTable(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN BOOLEAN FixErrors);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVolumeDeviceToDosName(
+  IN PVOID VolumeDeviceObject,
+  OUT PUNICODE_STRING DosName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWritePartitionTableEx(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFileSpecifyDeviceObjectHint(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG Disposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength,
+  IN CREATE_FILE_TYPE CreateFileType,
+  IN PVOID InternalParameters OPTIONAL,
+  IN ULONG Options,
+  IN PVOID DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceToDeviceStackSafe(
+  IN PDEVICE_OBJECT SourceDevice,
+  IN PDEVICE_OBJECT TargetDevice,
+  OUT PDEVICE_OBJECT *AttachedToDeviceObject);
+
+$endif (_NTDDK_)
+$if (_NTIFS_)
+
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+IoCreateStreamFileObjectEx(
+  IN PFILE_OBJECT FileObject OPTIONAL,
+  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+  OUT PHANDLE FileObjectHandle OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryFileDosDeviceName(
+  IN PFILE_OBJECT FileObject,
+  OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoEnumerateDeviceObjectList(
+  IN PDRIVER_OBJECT DriverObject,
+  OUT PDEVICE_OBJECT *DeviceObjectList,
+  IN ULONG DeviceObjectListSize,
+  OUT PULONG ActualNumberDeviceObjects);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetLowerDeviceObject(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetDeviceAttachmentBaseRef(
+  IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDiskDeviceObject(
+  IN PDEVICE_OBJECT FileSystemDeviceObject,
+  OUT PDEVICE_OBJECT *DiskDeviceObject);
+$endif (_NTIFS_)
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoValidateDeviceIoControlAccess(
+  IN PIRP Irp,
+  IN ULONG RequiredAccess);
+#endif
+
+$endif (_WDMDDK_)
+$if (_WDMDDK_ || _NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03)
+$endif
+$if (_NTDDK_)
+NTKERNELAPI
+IO_PAGING_PRIORITY
+FASTCALL
+IoGetPagingIoPriority(
+  IN PIRP Irp);
+
+$endif (_NTDDK_)
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitializeEx(
+  IN PIO_CSQ Csq,
+  IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp,
+  IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+  IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+  IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+  IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+  IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInsertIrpEx(
+  IN PIO_CSQ Csq,
+  IN PIRP Irp,
+  IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL,
+  IN PVOID InsertContext OPTIONAL);
+$endif (_WDMDDK_)
+$if (_WDMDDK_ || _NTDDK_)
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+$endif
+$if (_NTDDK_ || _NTIFS_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+$endif
+
+$if (_NTDDK_)
+BOOLEAN
+NTAPI
+IoTranslateBusAddress(
+  IN INTERFACE_TYPE InterfaceType,
+  IN ULONG BusNumber,
+  IN PHYSICAL_ADDRESS BusAddress,
+  IN OUT PULONG AddressSpace,
+  OUT PPHYSICAL_ADDRESS TranslatedAddress);
+$endif (_NTDDK_)
+$if (_NTIFS_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoEnumerateRegisteredFiltersList(
+  OUT PDRIVER_OBJECT *DriverObjectList,
+  IN ULONG DriverObjectListSize,
+  OUT PULONG ActualNumberDriverObjects);
+$endif (_NTIFS_)
+$if (_NTDDK_ || _NTIFS_)
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetBootDiskInformationLite(
+  OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckShareAccessEx(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  IN OUT PSHARE_ACCESS ShareAccess,
+  IN BOOLEAN Update,
+  IN PBOOLEAN WritePermission);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoConnectInterruptEx(
+  IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDisconnectInterruptEx(
+  IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
+
+LOGICAL
+NTAPI
+IoWithinStackLimits(
+  IN ULONG_PTR RegionStart,
+  IN SIZE_T RegionSize);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetShareAccessEx(
+  IN ACCESS_MASK DesiredAccess,
+  IN ULONG DesiredShareAccess,
+  IN OUT PFILE_OBJECT FileObject,
+  OUT PSHARE_ACCESS ShareAccess,
+  IN PBOOLEAN WritePermission);
+
+ULONG
+NTAPI
+IoSizeofWorkItem(VOID);
+
+VOID
+NTAPI
+IoInitializeWorkItem(
+  IN PVOID IoObject,
+  IN PIO_WORKITEM IoWorkItem);
+
+VOID
+NTAPI
+IoUninitializeWorkItem(
+  IN PIO_WORKITEM IoWorkItem);
+
+VOID
+NTAPI
+IoQueueWorkItemEx(
+  IN PIO_WORKITEM IoWorkItem,
+  IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine,
+  IN WORK_QUEUE_TYPE QueueType,
+  IN PVOID Context OPTIONAL);
+
+IO_PRIORITY_HINT
+NTAPI
+IoGetIoPriorityHint(
+  IN PIRP Irp);
+
+NTSTATUS
+NTAPI
+IoSetIoPriorityHint(
+  IN PIRP Irp,
+  IN IO_PRIORITY_HINT PriorityHint);
+
+NTSTATUS
+NTAPI
+IoAllocateSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN ULONG Length,
+  IN PVOID Signature,
+  OUT PVOID *StreamIdentifier);
+
+PVOID
+NTAPI
+IoGetSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN PVOID Signature);
+
+NTSTATUS
+NTAPI
+IoFreeSfioStreamIdentifier(
+  IN PFILE_OBJECT FileObject,
+  IN PVOID Signature);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRequestDeviceEjectEx(
+  IN PDEVICE_OBJECT PhysicalDeviceObject,
+  IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL,
+  IN PVOID Context OPTIONAL,
+  IN PDRIVER_OBJECT DriverObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetDevicePropertyData(
+  IN PDEVICE_OBJECT     Pdo,
+  IN CONST DEVPROPKEY   *PropertyKey,
+  IN LCID               Lcid,
+  IN ULONG              Flags,
+  IN DEVPROPTYPE        Type,
+  IN ULONG              Size,
+  IN PVOID          Data OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDevicePropertyData(
+  PDEVICE_OBJECT Pdo,
+  CONST DEVPROPKEY *PropertyKey,
+  LCID Lcid,
+  ULONG Flags,
+  ULONG Size,
+  PVOID Data,
+  PULONG RequiredSize,
+  PDEVPROPTYPE Type);
+
+$endif (_WDMDDK_)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUpdateDiskGeometry(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN struct _DISK_GEOMETRY_EX* OldDiskGeometry,
+  IN struct _DISK_GEOMETRY_EX* NewDiskGeometry);
+
+PTXN_PARAMETER_BLOCK
+NTAPI
+IoGetTransactionParameterBlock(
+  IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFileEx(
+  OUT PHANDLE FileHandle,
+  IN ACCESS_MASK DesiredAccess,
+  IN POBJECT_ATTRIBUTES ObjectAttributes,
+  OUT PIO_STATUS_BLOCK IoStatusBlock,
+  IN PLARGE_INTEGER AllocationSize OPTIONAL,
+  IN ULONG FileAttributes,
+  IN ULONG ShareAccess,
+  IN ULONG Disposition,
+  IN ULONG CreateOptions,
+  IN PVOID EaBuffer OPTIONAL,
+  IN ULONG EaLength,
+  IN CREATE_FILE_TYPE CreateFileType,
+  IN PVOID InternalParameters OPTIONAL,
+  IN ULONG Options,
+  IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL);
+
+NTSTATUS
+NTAPI
+IoSetIrpExtraCreateParameter(
+  IN OUT PIRP Irp,
+  IN struct _ECP_LIST *ExtraCreateParameter);
+
+VOID
+NTAPI
+IoClearIrpExtraCreateParameter(
+  IN OUT PIRP Irp);
+
+NTSTATUS
+NTAPI
+IoGetIrpExtraCreateParameter(
+  IN PIRP Irp,
+  OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL);
+
+BOOLEAN
+NTAPI
+IoIsFileObjectIgnoringSharing(
+  IN PFILE_OBJECT FileObject);
+
+$endif (_NTDDK_)
+$if (_NTIFS_)
+
+FORCEINLINE
+VOID
+NTAPI
+IoInitializePriorityInfo(
+  IN PIO_PRIORITY_INFO PriorityInfo)
+{
+  PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
+  PriorityInfo->ThreadPriority = 0xffff;
+  PriorityInfo->IoPriority = IoPriorityNormal;
+  PriorityInfo->PagePriority = 0;
+}
+$endif (_NTIFS_)
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$if (_WDMDDK_)
+#define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
+
+#if (NTDDI_VERSION >= NTDDI_WS08)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReplacePartitionUnit(
+  IN PDEVICE_OBJECT TargetPdo,
+  IN PDEVICE_OBJECT SparePdo,
+  IN ULONG Flags);
+#endif
+
+$endif (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetAffinityInterrupt(
+  IN PKINTERRUPT InterruptObject,
+  OUT PGROUP_AFFINITY GroupAffinity);
+
+NTSTATUS
+NTAPI
+IoGetContainerInformation(
+  IN IO_CONTAINER_INFORMATION_CLASS InformationClass,
+  IN PVOID ContainerObject OPTIONAL,
+  IN OUT PVOID Buffer OPTIONAL,
+  IN ULONG BufferLength);
+
+NTSTATUS
+NTAPI
+IoRegisterContainerNotification(
+  IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
+  IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
+  IN PVOID NotificationInformation OPTIONAL,
+  IN ULONG NotificationInformationLength,
+  OUT PVOID CallbackRegistration);
+
+VOID
+NTAPI
+IoUnregisterContainerNotification(
+  IN PVOID CallbackRegistration);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterPlugPlayNotificationEx(
+  IN PVOID NotificationEntry);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceNumaNode(
+  IN PDEVICE_OBJECT Pdo,
+  OUT PUSHORT NodeNumber);
+
+$endif (_WDMDDK_)
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+IoSetFileObjectIgnoreSharing(
+  IN PFILE_OBJECT FileObject);
+
+$endif (_NTDDK_)
+$if (_NTIFS_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterFsRegistrationChangeMountAware(
+  IN PDRIVER_OBJECT DriverObject,
+  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
+  IN BOOLEAN SynchronizeWithMounts);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReplaceFileObjectName(
+  IN PFILE_OBJECT FileObject,
+  IN PWSTR NewFileName,
+  IN USHORT FileNameLength);
+$endif (_NTIFS_)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+#if defined(_WIN64)
+NTKERNELAPI
+ULONG
+NTAPI
+IoWMIDeviceObjectToProviderId(
+  IN PDEVICE_OBJECT DeviceObject);
+#else
+#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
+#endif
+
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ *   IN CCHAR  StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
   ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
 
 FORCEINLINE
 VOID
-IoSkipCurrentIrpStackLocation (
+IoSkipCurrentIrpStackLocation(
   IN OUT PIRP Irp)
 {
   ASSERT(Irp->CurrentLocation <= Irp->StackCount);
   Irp->CurrentLocation++;
+#ifdef NONAMELESSUNION
+  Irp->Tail.Overlay.s.u.CurrentStackLocation++;
+#else
   Irp->Tail.Overlay.CurrentStackLocation++;
+#endif
 }
 
 FORCEINLINE
 VOID
-IoSetNextIrpStackLocation (
+IoSetNextIrpStackLocation(
   IN OUT PIRP Irp)
 {
   ASSERT(Irp->CurrentLocation > 0);
   Irp->CurrentLocation--;
+#ifdef NONAMELESSUNION
+  Irp->Tail.Overlay.s.u.CurrentStackLocation--;
+#else
   Irp->Tail.Overlay.CurrentStackLocation--;
+#endif
 }
 
 FORCEINLINE
@@ -1390,7 +2462,11 @@ IoGetNextIrpStackLocation(
   IN PIRP Irp)
 {
   ASSERT(Irp->CurrentLocation > 0);
+#ifdef NONAMELESSUNION
+  return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 );
+#else
   return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+#endif
 }
 
 FORCEINLINE
@@ -1465,12 +2541,10 @@ IoSetCompletionRoutine(
   IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
 
 #if defined(_WIN64)
-
 NTKERNELAPI
 BOOLEAN
 IoIs32bitProcess(
-  IN PIRP  Irp  OPTIONAL);
-
+  IN PIRP Irp OPTIONAL);
 #endif
 
 #define PLUGPLAY_REGKEY_DEVICE                            1
@@ -1483,7 +2557,11 @@ IoGetCurrentIrpStackLocation(
   IN PIRP Irp)
 {
   ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+#ifdef NONAMELESSUNION
+  return Irp->Tail.Overlay.s.u.CurrentStackLocation;
+#else
   return Irp->Tail.Overlay.CurrentStackLocation;
+#endif
 }
 
 FORCEINLINE
@@ -1520,8 +2598,8 @@ IoMarkIrpPending(
   IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
     HighWatermark, sizeof(IO_REMOVE_LOCK))
 
-VOID
 FORCEINLINE
+VOID
 IoInitializeDpcRequest(
   IN PDEVICE_OBJECT DeviceObject,
   IN PIO_DPC_ROUTINE DpcRoutine)
@@ -1544,7 +2622,7 @@ IoInitializeDpcRequest(
 FORCEINLINE
 VOID
 IoCopyCurrentIrpStackLocationToNext(
-  IN PIRP Irp)
+  IN OUT PIRP Irp)
 {
   PIO_STACK_LOCATION irpSp;
   PIO_STACK_LOCATION nextIrpSp;
@@ -1558,13 +2636,12 @@ NTKERNELAPI
 VOID
 NTAPI
 IoGetStackLimits(
-  OUT PULONG_PTR  LowLimit,
-  OUT PULONG_PTR  HighLimit);
+  OUT PULONG_PTR LowLimit,
+  OUT PULONG_PTR HighLimit);
 
 FORCEINLINE
 ULONG_PTR
-IoGetRemainingStackSize(
-  VOID)
+IoGetRemainingStackSize(VOID)
 {
   ULONG_PTR End, Begin;
   ULONG_PTR Result;
@@ -1574,3 +2651,17 @@ IoGetRemainingStackSize(
   return Result;
 }
 
+#if (NTDDI_VERSION >= NTDDI_WS03)
+FORCEINLINE
+VOID
+IoInitializeThreadedDpcRequest(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PIO_DPC_ROUTINE DpcRoutine)
+{
+  KeInitializeThreadedDpc(&DeviceObject->Dpc,
+                          (PKDEFERRED_ROUTINE) DpcRoutine,
+                          DeviceObject );
+}
+#endif
+
+$endif (_WDMDDK_)