ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

iofuncs.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  *                         I/O Manager Functions                              *
00003  ******************************************************************************/
00004 
00005 $if (_WDMDDK_)
00006 /*
00007  * NTSTATUS
00008  * IoAcquireRemoveLock(
00009  *   IN PIO_REMOVE_LOCK  RemoveLock,
00010  *   IN OPTIONAL PVOID  Tag)
00011  */
00012 #if DBG
00013 #define IoAcquireRemoveLock(RemoveLock, Tag) \
00014   IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
00015 #else
00016 #define IoAcquireRemoveLock(RemoveLock, Tag) \
00017   IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
00018 #endif
00019 
00020 /*
00021  * VOID
00022  * IoAdjustPagingPathCount(
00023  *   IN PLONG  Count,
00024  *   IN BOOLEAN  Increment)
00025  */
00026 #define IoAdjustPagingPathCount(_Count, \
00027                                 _Increment) \
00028 { \
00029   if (_Increment) \
00030     { \
00031       InterlockedIncrement(_Count); \
00032     } \
00033   else \
00034     { \
00035       InterlockedDecrement(_Count); \
00036     } \
00037 }
00038 
00039 #if !defined(_M_AMD64)
00040 NTHALAPI
00041 VOID
00042 NTAPI
00043 READ_PORT_BUFFER_UCHAR(
00044   IN PUCHAR Port,
00045   IN PUCHAR Buffer,
00046   IN ULONG Count);
00047 
00048 NTHALAPI
00049 VOID
00050 NTAPI
00051 READ_PORT_BUFFER_ULONG(
00052   IN PULONG Port,
00053   IN PULONG Buffer,
00054   IN ULONG Count);
00055 
00056 NTHALAPI
00057 VOID
00058 NTAPI
00059 READ_PORT_BUFFER_USHORT(
00060   IN PUSHORT Port,
00061   IN PUSHORT Buffer,
00062   IN ULONG Count);
00063 
00064 NTHALAPI
00065 UCHAR
00066 NTAPI
00067 READ_PORT_UCHAR(
00068   IN PUCHAR Port);
00069 
00070 NTHALAPI
00071 ULONG
00072 NTAPI
00073 READ_PORT_ULONG(
00074   IN PULONG Port);
00075 
00076 NTHALAPI
00077 USHORT
00078 NTAPI
00079 READ_PORT_USHORT(
00080   IN PUSHORT Port);
00081 
00082 NTKERNELAPI
00083 VOID
00084 NTAPI
00085 READ_REGISTER_BUFFER_UCHAR(
00086   IN PUCHAR Register,
00087   IN PUCHAR Buffer,
00088   IN ULONG Count);
00089 
00090 NTKERNELAPI
00091 VOID
00092 NTAPI
00093 READ_REGISTER_BUFFER_ULONG(
00094   IN PULONG Register,
00095   IN PULONG Buffer,
00096   IN ULONG Count);
00097 
00098 NTKERNELAPI
00099 VOID
00100 NTAPI
00101 READ_REGISTER_BUFFER_USHORT(
00102   IN PUSHORT Register,
00103   IN PUSHORT Buffer,
00104   IN ULONG Count);
00105 
00106 NTKERNELAPI
00107 UCHAR
00108 NTAPI
00109 READ_REGISTER_UCHAR(
00110   IN PUCHAR Register);
00111 
00112 NTKERNELAPI
00113 ULONG
00114 NTAPI
00115 READ_REGISTER_ULONG(
00116   IN PULONG Register);
00117 
00118 NTKERNELAPI
00119 USHORT
00120 NTAPI
00121 READ_REGISTER_USHORT(
00122   IN PUSHORT Register);
00123 
00124 NTHALAPI
00125 VOID
00126 NTAPI
00127 WRITE_PORT_BUFFER_UCHAR(
00128   IN PUCHAR Port,
00129   IN PUCHAR Buffer,
00130   IN ULONG Count);
00131 
00132 NTHALAPI
00133 VOID
00134 NTAPI
00135 WRITE_PORT_BUFFER_ULONG(
00136   IN PULONG Port,
00137   IN PULONG Buffer,
00138   IN ULONG Count);
00139 
00140 NTHALAPI
00141 VOID
00142 NTAPI
00143 WRITE_PORT_BUFFER_USHORT(
00144   IN PUSHORT Port,
00145   IN PUSHORT Buffer,
00146   IN ULONG Count);
00147 
00148 NTHALAPI
00149 VOID
00150 NTAPI
00151 WRITE_PORT_UCHAR(
00152   IN PUCHAR Port,
00153   IN UCHAR Value);
00154 
00155 NTHALAPI
00156 VOID
00157 NTAPI
00158 WRITE_PORT_ULONG(
00159   IN PULONG Port,
00160   IN ULONG Value);
00161 
00162 NTHALAPI
00163 VOID
00164 NTAPI
00165 WRITE_PORT_USHORT(
00166   IN PUSHORT Port,
00167   IN USHORT Value);
00168 
00169 NTKERNELAPI
00170 VOID
00171 NTAPI
00172 WRITE_REGISTER_BUFFER_UCHAR(
00173   IN PUCHAR Register,
00174   IN PUCHAR Buffer,
00175   IN ULONG Count);
00176 
00177 NTKERNELAPI
00178 VOID
00179 NTAPI
00180 WRITE_REGISTER_BUFFER_ULONG(
00181   IN PULONG Register,
00182   IN PULONG Buffer,
00183   IN ULONG Count);
00184 
00185 NTKERNELAPI
00186 VOID
00187 NTAPI
00188 WRITE_REGISTER_BUFFER_USHORT(
00189   IN PUSHORT Register,
00190   IN PUSHORT Buffer,
00191   IN ULONG Count);
00192 
00193 NTKERNELAPI
00194 VOID
00195 NTAPI
00196 WRITE_REGISTER_UCHAR(
00197   IN PUCHAR Register,
00198   IN UCHAR Value);
00199 
00200 NTKERNELAPI
00201 VOID
00202 NTAPI
00203 WRITE_REGISTER_ULONG(
00204   IN PULONG Register,
00205   IN ULONG Value);
00206 
00207 NTKERNELAPI
00208 VOID
00209 NTAPI
00210 WRITE_REGISTER_USHORT(
00211   IN PUSHORT Register,
00212   IN USHORT Value);
00213 
00214 #else
00215 
00216 FORCEINLINE
00217 VOID
00218 READ_PORT_BUFFER_UCHAR(
00219   IN PUCHAR Port,
00220   IN PUCHAR Buffer,
00221   IN ULONG Count)
00222 {
00223   __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00224 }
00225 
00226 FORCEINLINE
00227 VOID
00228 READ_PORT_BUFFER_ULONG(
00229   IN PULONG Port,
00230   IN PULONG Buffer,
00231   IN ULONG Count)
00232 {
00233   __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00234 }
00235 
00236 FORCEINLINE
00237 VOID
00238 READ_PORT_BUFFER_USHORT(
00239   IN PUSHORT Port,
00240   IN PUSHORT Buffer,
00241   IN ULONG Count)
00242 {
00243   __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00244 }
00245 
00246 FORCEINLINE
00247 UCHAR
00248 READ_PORT_UCHAR(
00249   IN PUCHAR Port)
00250 {
00251   return __inbyte((USHORT)(ULONG_PTR)Port);
00252 }
00253 
00254 FORCEINLINE
00255 ULONG
00256 READ_PORT_ULONG(
00257   IN PULONG Port)
00258 {
00259   return __indword((USHORT)(ULONG_PTR)Port);
00260 }
00261 
00262 FORCEINLINE
00263 USHORT
00264 READ_PORT_USHORT(
00265   IN PUSHORT Port)
00266 {
00267   return __inword((USHORT)(ULONG_PTR)Port);
00268 }
00269 
00270 FORCEINLINE
00271 VOID
00272 READ_REGISTER_BUFFER_UCHAR(
00273   IN PUCHAR Register,
00274   IN PUCHAR Buffer,
00275   IN ULONG Count)
00276 {
00277   __movsb(Register, Buffer, Count);
00278 }
00279 
00280 FORCEINLINE
00281 VOID
00282 READ_REGISTER_BUFFER_ULONG(
00283   IN PULONG Register,
00284   IN PULONG Buffer,
00285   IN ULONG Count)
00286 {
00287   __movsd(Register, Buffer, Count);
00288 }
00289 
00290 FORCEINLINE
00291 VOID
00292 READ_REGISTER_BUFFER_USHORT(
00293   IN PUSHORT Register,
00294   IN PUSHORT Buffer,
00295   IN ULONG Count)
00296 {
00297   __movsw(Register, Buffer, Count);
00298 }
00299 
00300 FORCEINLINE
00301 UCHAR
00302 READ_REGISTER_UCHAR(
00303   IN volatile UCHAR *Register)
00304 {
00305   return *Register;
00306 }
00307 
00308 FORCEINLINE
00309 ULONG
00310 READ_REGISTER_ULONG(
00311   IN volatile ULONG *Register)
00312 {
00313   return *Register;
00314 }
00315 
00316 FORCEINLINE
00317 USHORT
00318 READ_REGISTER_USHORT(
00319   IN volatile USHORT *Register)
00320 {
00321   return *Register;
00322 }
00323 
00324 FORCEINLINE
00325 VOID
00326 WRITE_PORT_BUFFER_UCHAR(
00327   IN PUCHAR Port,
00328   IN PUCHAR Buffer,
00329   IN ULONG Count)
00330 {
00331   __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00332 }
00333 
00334 FORCEINLINE
00335 VOID
00336 WRITE_PORT_BUFFER_ULONG(
00337   IN PULONG Port,
00338   IN PULONG Buffer,
00339   IN ULONG Count)
00340 {
00341   __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00342 }
00343 
00344 FORCEINLINE
00345 VOID
00346 WRITE_PORT_BUFFER_USHORT(
00347   IN PUSHORT Port,
00348   IN PUSHORT Buffer,
00349   IN ULONG Count)
00350 {
00351   __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
00352 }
00353 
00354 FORCEINLINE
00355 VOID
00356 WRITE_PORT_UCHAR(
00357   IN PUCHAR Port,
00358   IN UCHAR Value)
00359 {
00360   __outbyte((USHORT)(ULONG_PTR)Port, Value);
00361 }
00362 
00363 FORCEINLINE
00364 VOID
00365 WRITE_PORT_ULONG(
00366   IN PULONG Port,
00367   IN ULONG Value)
00368 {
00369   __outdword((USHORT)(ULONG_PTR)Port, Value);
00370 }
00371 
00372 FORCEINLINE
00373 VOID
00374 WRITE_PORT_USHORT(
00375   IN PUSHORT Port,
00376   IN USHORT Value)
00377 {
00378   __outword((USHORT)(ULONG_PTR)Port, Value);
00379 }
00380 
00381 FORCEINLINE
00382 VOID
00383 WRITE_REGISTER_BUFFER_UCHAR(
00384   IN PUCHAR Register,
00385   IN PUCHAR Buffer,
00386   IN ULONG Count)
00387 {
00388   LONG Synch;
00389   __movsb(Register, Buffer, Count);
00390   InterlockedOr(&Synch, 1);
00391 }
00392 
00393 FORCEINLINE
00394 VOID
00395 WRITE_REGISTER_BUFFER_ULONG(
00396   IN PULONG Register,
00397   IN PULONG Buffer,
00398   IN ULONG Count)
00399 {
00400   LONG Synch;
00401   __movsd(Register, Buffer, Count);
00402   InterlockedOr(&Synch, 1);
00403 }
00404 
00405 FORCEINLINE
00406 VOID
00407 WRITE_REGISTER_BUFFER_USHORT(
00408   IN PUSHORT Register,
00409   IN PUSHORT Buffer,
00410   IN ULONG Count)
00411 {
00412   LONG Synch;
00413   __movsw(Register, Buffer, Count);
00414   InterlockedOr(&Synch, 1);
00415 }
00416 
00417 FORCEINLINE
00418 VOID
00419 WRITE_REGISTER_UCHAR(
00420   IN volatile UCHAR *Register,
00421   IN UCHAR Value)
00422 {
00423   LONG Synch;
00424   *Register = Value;
00425   InterlockedOr(&Synch, 1);
00426 }
00427 
00428 FORCEINLINE
00429 VOID
00430 WRITE_REGISTER_ULONG(
00431   IN volatile ULONG *Register,
00432   IN ULONG Value)
00433 {
00434   LONG Synch;
00435   *Register = Value;
00436   InterlockedOr(&Synch, 1);
00437 }
00438 
00439 FORCEINLINE
00440 VOID
00441 WRITE_REGISTER_USHORT(
00442   IN volatile USHORT *Register,
00443   IN USHORT Value)
00444 {
00445   LONG Sync;
00446   *Register = Value;
00447   InterlockedOr(&Sync, 1);
00448 }
00449 #endif
00450 
00451 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
00452    (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
00453 
00454 #define DMA_MACROS_DEFINED
00455 
00456 _IRQL_requires_max_(DISPATCH_LEVEL)
00457 _IRQL_requires_min_(DISPATCH_LEVEL)
00458 FORCEINLINE
00459 NTSTATUS
00460 IoAllocateAdapterChannel(
00461   _In_ PDMA_ADAPTER DmaAdapter,
00462   _In_ PDEVICE_OBJECT DeviceObject,
00463   _In_ ULONG NumberOfMapRegisters,
00464   _In_ PDRIVER_CONTROL ExecutionRoutine,
00465   _In_ PVOID Context)
00466 {
00467   PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
00468   AllocateAdapterChannel =
00469       *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
00470   ASSERT(AllocateAdapterChannel);
00471   return AllocateAdapterChannel(DmaAdapter,
00472                                 DeviceObject,
00473                                 NumberOfMapRegisters,
00474                                 ExecutionRoutine,
00475                                 Context);
00476 }
00477 
00478 FORCEINLINE
00479 BOOLEAN
00480 NTAPI
00481 IoFlushAdapterBuffers(
00482   _In_ PDMA_ADAPTER DmaAdapter,
00483   _In_ PMDL Mdl,
00484   _In_ PVOID MapRegisterBase,
00485   _In_ PVOID CurrentVa,
00486   _In_ ULONG Length,
00487   _In_ BOOLEAN WriteToDevice)
00488 {
00489   PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
00490   FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
00491   ASSERT(FlushAdapterBuffers);
00492   return FlushAdapterBuffers(DmaAdapter,
00493                              Mdl,
00494                              MapRegisterBase,
00495                              CurrentVa,
00496                              Length,
00497                              WriteToDevice);
00498 }
00499 
00500 FORCEINLINE
00501 VOID
00502 NTAPI
00503 IoFreeAdapterChannel(
00504   _In_ PDMA_ADAPTER DmaAdapter)
00505 {
00506   PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
00507   FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
00508   ASSERT(FreeAdapterChannel);
00509   FreeAdapterChannel(DmaAdapter);
00510 }
00511 
00512 FORCEINLINE
00513 VOID
00514 NTAPI
00515 IoFreeMapRegisters(
00516   _In_ PDMA_ADAPTER DmaAdapter,
00517   _In_ PVOID MapRegisterBase,
00518   _In_ ULONG NumberOfMapRegisters)
00519 {
00520   PFREE_MAP_REGISTERS FreeMapRegisters;
00521   FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
00522   ASSERT(FreeMapRegisters);
00523   FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
00524 }
00525 
00526 FORCEINLINE
00527 PHYSICAL_ADDRESS
00528 NTAPI
00529 IoMapTransfer(
00530   _In_ PDMA_ADAPTER DmaAdapter,
00531   _In_ PMDL Mdl,
00532   _In_ PVOID MapRegisterBase,
00533   _In_ PVOID CurrentVa,
00534   _Inout_ PULONG Length,
00535   _In_ BOOLEAN WriteToDevice)
00536 {
00537   PMAP_TRANSFER MapTransfer;
00538 
00539   MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
00540   ASSERT(MapTransfer);
00541   return MapTransfer(DmaAdapter,
00542                      Mdl,
00543                      MapRegisterBase,
00544                      CurrentVa,
00545                      Length,
00546                      WriteToDevice);
00547 }
00548 #endif
00549 
00550 $endif (_WDMDDK_)
00551 $if (_NTDDK_)
00552 /*
00553  * VOID IoAssignArcName(
00554  *   IN PUNICODE_STRING  ArcName,
00555  *   IN PUNICODE_STRING  DeviceName);
00556  */
00557 #define IoAssignArcName(_ArcName, _DeviceName) ( \
00558   IoCreateSymbolicLink((_ArcName), (_DeviceName)))
00559 
00560 /*
00561  * VOID
00562  * IoDeassignArcName(
00563  *   IN PUNICODE_STRING  ArcName)
00564  */
00565 #define IoDeassignArcName IoDeleteSymbolicLink
00566 
00567 FORCEINLINE
00568 VOID
00569 NTAPI
00570 IoInitializeDriverCreateContext(
00571   PIO_DRIVER_CREATE_CONTEXT DriverContext)
00572 {
00573   RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
00574   DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
00575 }
00576 
00577 $endif (_NTDDK_)
00578 $if (_NTIFS_)
00579 #define IoIsFileOpenedExclusively(FileObject) ( \
00580     (BOOLEAN) !(                                \
00581     (FileObject)->SharedRead ||                 \
00582     (FileObject)->SharedWrite ||                \
00583     (FileObject)->SharedDelete                  \
00584     )                                           \
00585 )
00586 
00587 #if (NTDDI_VERSION == NTDDI_WIN2K)
00588 NTKERNELAPI
00589 NTSTATUS
00590 NTAPI
00591 IoRegisterFsRegistrationChangeEx(
00592   _In_ PDRIVER_OBJECT DriverObject,
00593   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
00594 #endif
00595 $endif (_NTIFS_)
00596 #if (NTDDI_VERSION >= NTDDI_WIN2K)
00597 
00598 $if (_WDMDDK_)
00599 _Acquires_lock_(_Global_cancel_spin_lock_)
00600 _Requires_lock_not_held_(_Global_cancel_spin_lock_)
00601 _IRQL_requires_max_(DISPATCH_LEVEL)
00602 _IRQL_raises_(DISPATCH_LEVEL)
00603 NTKERNELAPI
00604 VOID
00605 NTAPI
00606 IoAcquireCancelSpinLock(
00607   _Out_ _At_(*Irql, _IRQL_saves_) PKIRQL Irql);
00608 
00609 _IRQL_requires_max_(DISPATCH_LEVEL)
00610 NTKERNELAPI
00611 NTSTATUS
00612 NTAPI
00613 IoAcquireRemoveLockEx(
00614   _Inout_ PIO_REMOVE_LOCK RemoveLock,
00615   _In_opt_ PVOID Tag,
00616   _In_ PCSTR File,
00617   _In_ ULONG Line,
00618   _In_ ULONG RemlockSize);
00619 
00620 _IRQL_requires_max_(DISPATCH_LEVEL)
00621 _Ret_range_(<=, 0)
00622 NTKERNELAPI
00623 NTSTATUS
00624 NTAPI
00625 IoAllocateDriverObjectExtension(
00626   _In_ PDRIVER_OBJECT DriverObject,
00627   _In_ PVOID ClientIdentificationAddress,
00628   _In_ ULONG DriverObjectExtensionSize,
00629   _Post_ _At_(*DriverObjectExtension, _When_(return==0,
00630     __drv_aliasesMem __drv_allocatesMem(Mem) _Post_notnull_))
00631   _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize))
00632     PVOID *DriverObjectExtension);
00633 
00634 _IRQL_requires_max_(DISPATCH_LEVEL)
00635 NTKERNELAPI
00636 PVOID
00637 NTAPI
00638 IoAllocateErrorLogEntry(
00639   _In_ PVOID IoObject,
00640   _In_ UCHAR EntrySize);
00641 
00642 _Must_inspect_result_
00643 _IRQL_requires_max_(DISPATCH_LEVEL)
00644 NTKERNELAPI
00645 PIRP
00646 NTAPI
00647 IoAllocateIrp(
00648   _In_ CCHAR StackSize,
00649   _In_ BOOLEAN ChargeQuota);
00650 
00651 _IRQL_requires_max_(DISPATCH_LEVEL)
00652 NTKERNELAPI
00653 PMDL
00654 NTAPI
00655 IoAllocateMdl(
00656   _In_opt_ __drv_aliasesMem PVOID VirtualAddress,
00657   _In_ ULONG Length,
00658   _In_ BOOLEAN SecondaryBuffer,
00659   _In_ BOOLEAN ChargeQuota,
00660   _Inout_opt_ PIRP Irp);
00661 
00662 __drv_allocatesMem(Mem)
00663 _IRQL_requires_max_(DISPATCH_LEVEL)
00664 NTKERNELAPI
00665 PIO_WORKITEM
00666 NTAPI
00667 IoAllocateWorkItem(
00668   _In_ PDEVICE_OBJECT DeviceObject);
00669 
00670 _IRQL_requires_max_(APC_LEVEL)
00671 _Ret_range_(<=, 0)
00672 NTKERNELAPI
00673 NTSTATUS
00674 NTAPI
00675 IoAttachDevice(
00676   _In_ _Kernel_requires_resource_held_(Memory) _When_(return==0, __drv_aliasesMem)
00677     PDEVICE_OBJECT SourceDevice,
00678   _In_ PUNICODE_STRING TargetDevice,
00679   _Out_ PDEVICE_OBJECT *AttachedDevice);
00680 
00681 _Must_inspect_result_
00682 _IRQL_requires_max_(DISPATCH_LEVEL)
00683 NTKERNELAPI
00684 PDEVICE_OBJECT
00685 NTAPI
00686 IoAttachDeviceToDeviceStack(
00687   _In_ _Kernel_requires_resource_held_(Memory) _When_(return!=0, __drv_aliasesMem)
00688     PDEVICE_OBJECT SourceDevice,
00689   _In_ PDEVICE_OBJECT TargetDevice);
00690 
00691 _Must_inspect_result_
00692 __drv_aliasesMem
00693 _IRQL_requires_max_(DISPATCH_LEVEL)
00694 NTKERNELAPI
00695 PIRP
00696 NTAPI
00697 IoBuildAsynchronousFsdRequest(
00698   _In_ ULONG MajorFunction,
00699   _In_ PDEVICE_OBJECT DeviceObject,
00700   _Inout_opt_ PVOID Buffer,
00701   _In_opt_ ULONG Length,
00702   _In_opt_ PLARGE_INTEGER StartingOffset,
00703   _In_opt_ PIO_STATUS_BLOCK IoStatusBlock);
00704 
00705 _Must_inspect_result_
00706 __drv_aliasesMem
00707 _IRQL_requires_max_(PASSIVE_LEVEL)
00708 NTKERNELAPI
00709 PIRP
00710 NTAPI
00711 IoBuildDeviceIoControlRequest(
00712   _In_ ULONG IoControlCode,
00713   _In_ PDEVICE_OBJECT DeviceObject,
00714   _In_opt_ PVOID InputBuffer,
00715   _In_ ULONG InputBufferLength,
00716   _Out_opt_ PVOID OutputBuffer,
00717   _In_ ULONG OutputBufferLength,
00718   _In_ BOOLEAN InternalDeviceIoControl,
00719   _In_ PKEVENT Event,
00720   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
00721 
00722 _IRQL_requires_max_(DISPATCH_LEVEL)
00723 NTKERNELAPI
00724 VOID
00725 NTAPI
00726 IoBuildPartialMdl(
00727   _In_ PMDL SourceMdl,
00728   _Inout_ PMDL TargetMdl,
00729   _In_ PVOID VirtualAddress,
00730   _In_ ULONG Length);
00731 
00732 _Must_inspect_result_
00733 __drv_aliasesMem
00734 _IRQL_requires_max_(PASSIVE_LEVEL)
00735 NTKERNELAPI
00736 PIRP
00737 NTAPI
00738 IoBuildSynchronousFsdRequest(
00739   _In_ ULONG MajorFunction,
00740   _In_ PDEVICE_OBJECT DeviceObject,
00741   _Inout_opt_ PVOID Buffer,
00742   _In_opt_ ULONG Length,
00743   _In_opt_ PLARGE_INTEGER StartingOffset,
00744   _In_ PKEVENT Event,
00745   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
00746 
00747 _IRQL_requires_max_(DISPATCH_LEVEL)
00748 _Success_(TRUE)
00749 NTKERNELAPI
00750 NTSTATUS
00751 FASTCALL
00752 IofCallDriver(
00753   _In_ PDEVICE_OBJECT DeviceObject,
00754   _Inout_ __drv_aliasesMem PIRP Irp);
00755 #define IoCallDriver IofCallDriver
00756 
00757 _IRQL_requires_max_(DISPATCH_LEVEL)
00758 NTKERNELAPI
00759 VOID
00760 FASTCALL
00761 IofCompleteRequest(
00762   _In_ PIRP Irp,
00763   _In_ CCHAR PriorityBoost);
00764 #define IoCompleteRequest IofCompleteRequest
00765 
00766 _IRQL_requires_max_(DISPATCH_LEVEL)
00767 NTKERNELAPI
00768 BOOLEAN
00769 NTAPI
00770 IoCancelIrp(
00771   _In_ PIRP Irp);
00772 
00773 _IRQL_requires_max_(PASSIVE_LEVEL)
00774 NTKERNELAPI
00775 NTSTATUS
00776 NTAPI
00777 IoCheckShareAccess(
00778   _In_ ACCESS_MASK DesiredAccess,
00779   _In_ ULONG DesiredShareAccess,
00780   _Inout_ PFILE_OBJECT FileObject,
00781   _Inout_ PSHARE_ACCESS ShareAccess,
00782   _In_ BOOLEAN Update);
00783 
00784 _IRQL_requires_max_(DISPATCH_LEVEL)
00785 NTKERNELAPI
00786 VOID
00787 FASTCALL
00788 IofCompleteRequest(
00789   _In_ PIRP Irp,
00790   _In_ CCHAR PriorityBoost);
00791 
00792 _IRQL_requires_max_(PASSIVE_LEVEL)
00793 NTKERNELAPI
00794 NTSTATUS
00795 NTAPI
00796 IoConnectInterrupt(
00797   _Out_ PKINTERRUPT *InterruptObject,
00798   _In_ PKSERVICE_ROUTINE ServiceRoutine,
00799   _In_opt_ PVOID ServiceContext,
00800   _In_opt_ PKSPIN_LOCK SpinLock,
00801   _In_ ULONG Vector,
00802   _In_ KIRQL Irql,
00803   _In_ KIRQL SynchronizeIrql,
00804   _In_ KINTERRUPT_MODE InterruptMode,
00805   _In_ BOOLEAN ShareVector,
00806   _In_ KAFFINITY ProcessorEnableMask,
00807   _In_ BOOLEAN FloatingSave);
00808 
00809 _IRQL_requires_max_(APC_LEVEL)
00810 _Ret_range_(<=, 0)
00811 NTKERNELAPI
00812 NTSTATUS
00813 NTAPI
00814 IoCreateDevice(
00815   _In_ PDRIVER_OBJECT DriverObject,
00816   _In_ ULONG DeviceExtensionSize,
00817   _In_opt_ PUNICODE_STRING DeviceName,
00818   _In_ DEVICE_TYPE DeviceType,
00819   _In_ ULONG DeviceCharacteristics,
00820   _In_ BOOLEAN Exclusive,
00821   _Outptr_result_nullonfailure_
00822   _At_(*DeviceObject,
00823     __drv_allocatesMem(Mem)
00824     _When_((((_In_function_class_(DRIVER_INITIALIZE))
00825       ||(_In_function_class_(DRIVER_DISPATCH)))),
00826       __drv_aliasesMem))
00827     PDEVICE_OBJECT *DeviceObject);
00828 
00829 _IRQL_requires_max_(PASSIVE_LEVEL)
00830 NTKERNELAPI
00831 NTSTATUS
00832 NTAPI
00833 IoCreateFile(
00834   _Out_ PHANDLE FileHandle,
00835   _In_ ACCESS_MASK DesiredAccess,
00836   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
00837   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
00838   _In_opt_ PLARGE_INTEGER AllocationSize,
00839   _In_ ULONG FileAttributes,
00840   _In_ ULONG ShareAccess,
00841   _In_ ULONG Disposition,
00842   _In_ ULONG CreateOptions,
00843   _In_opt_ PVOID EaBuffer,
00844   _In_ ULONG EaLength,
00845   _In_ CREATE_FILE_TYPE CreateFileType,
00846   _In_opt_ PVOID InternalParameters,
00847   _In_ ULONG Options);
00848 
00849 _IRQL_requires_max_(PASSIVE_LEVEL)
00850 NTKERNELAPI
00851 PKEVENT
00852 NTAPI
00853 IoCreateNotificationEvent(
00854   _In_ PUNICODE_STRING EventName,
00855   _Out_ PHANDLE EventHandle);
00856 
00857 _IRQL_requires_max_(PASSIVE_LEVEL)
00858 NTKERNELAPI
00859 NTSTATUS
00860 NTAPI
00861 IoCreateSymbolicLink(
00862   _In_ PUNICODE_STRING SymbolicLinkName,
00863   _In_ PUNICODE_STRING DeviceName);
00864 
00865 _IRQL_requires_max_(PASSIVE_LEVEL)
00866 NTKERNELAPI
00867 PKEVENT
00868 NTAPI
00869 IoCreateSynchronizationEvent(
00870   _In_ PUNICODE_STRING EventName,
00871   _Out_ PHANDLE EventHandle);
00872 
00873 _IRQL_requires_max_(PASSIVE_LEVEL)
00874 NTKERNELAPI
00875 NTSTATUS
00876 NTAPI
00877 IoCreateUnprotectedSymbolicLink(
00878   _In_ PUNICODE_STRING SymbolicLinkName,
00879   _In_ PUNICODE_STRING DeviceName);
00880 
00881 _IRQL_requires_max_(APC_LEVEL)
00882 _Kernel_clear_do_init_(__yes)
00883 NTKERNELAPI
00884 VOID
00885 NTAPI
00886 IoDeleteDevice(
00887   _In_ _Kernel_requires_resource_held_(Memory) __drv_freesMem(Mem)
00888     PDEVICE_OBJECT DeviceObject);
00889 
00890 _IRQL_requires_max_(PASSIVE_LEVEL)
00891 NTKERNELAPI
00892 NTSTATUS
00893 NTAPI
00894 IoDeleteSymbolicLink(
00895   _In_ PUNICODE_STRING SymbolicLinkName);
00896 
00897 _IRQL_requires_max_(PASSIVE_LEVEL)
00898 NTKERNELAPI
00899 VOID
00900 NTAPI
00901 IoDetachDevice(
00902   _Inout_ PDEVICE_OBJECT TargetDevice);
00903 
00904 _IRQL_requires_max_(PASSIVE_LEVEL)
00905 NTKERNELAPI
00906 VOID
00907 NTAPI
00908 IoDisconnectInterrupt(
00909   _In_ PKINTERRUPT InterruptObject);
00910 
00911 __drv_freesMem(Mem)
00912 _IRQL_requires_max_(DISPATCH_LEVEL)
00913 NTKERNELAPI
00914 VOID
00915 NTAPI
00916 IoFreeIrp(
00917   _In_ PIRP Irp);
00918 
00919 _IRQL_requires_max_(DISPATCH_LEVEL)
00920 NTKERNELAPI
00921 VOID
00922 NTAPI
00923 IoFreeMdl(
00924   PMDL Mdl);
00925 
00926 _IRQL_requires_max_(DISPATCH_LEVEL)
00927 NTKERNELAPI
00928 VOID
00929 NTAPI
00930 IoFreeWorkItem(
00931   _In_ __drv_freesMem(Mem) PIO_WORKITEM IoWorkItem);
00932 
00933 NTKERNELAPI
00934 PDEVICE_OBJECT
00935 NTAPI
00936 IoGetAttachedDevice(
00937   IN PDEVICE_OBJECT DeviceObject);
00938 
00939 _IRQL_requires_max_(DISPATCH_LEVEL)
00940 NTKERNELAPI
00941 PDEVICE_OBJECT
00942 NTAPI
00943 IoGetAttachedDeviceReference(
00944   _In_ PDEVICE_OBJECT DeviceObject);
00945 
00946 NTKERNELAPI
00947 NTSTATUS
00948 NTAPI
00949 IoGetBootDiskInformation(
00950   _Inout_ PBOOTDISK_INFORMATION BootDiskInformation,
00951   _In_ ULONG Size);
00952 
00953 _IRQL_requires_max_(PASSIVE_LEVEL)
00954 _Must_inspect_result_
00955 NTKERNELAPI
00956 NTSTATUS
00957 NTAPI
00958 IoGetDeviceInterfaceAlias(
00959   _In_ PUNICODE_STRING SymbolicLinkName,
00960   _In_ CONST GUID *AliasInterfaceClassGuid,
00961   _Out_
00962   _When_(return==0, _At_(AliasSymbolicLinkName->Buffer, __drv_allocatesMem(Mem)))
00963     PUNICODE_STRING AliasSymbolicLinkName);
00964 
00965 NTKERNELAPI
00966 PEPROCESS
00967 NTAPI
00968 IoGetCurrentProcess(VOID);
00969 
00970 _IRQL_requires_max_(PASSIVE_LEVEL)
00971 _Must_inspect_result_
00972 NTKERNELAPI
00973 NTSTATUS
00974 NTAPI
00975 IoGetDeviceInterfaces(
00976   _In_ CONST GUID *InterfaceClassGuid,
00977   _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject,
00978   _In_ ULONG Flags,
00979   _Outptr_result_nullonfailure_
00980   _At_(*SymbolicLinkList, _When_(return==0, __drv_allocatesMem(Mem)))
00981     PZZWSTR *SymbolicLinkList);
00982 
00983 _IRQL_requires_max_(PASSIVE_LEVEL)
00984 NTKERNELAPI
00985 NTSTATUS
00986 NTAPI
00987 IoGetDeviceObjectPointer(
00988   _In_ PUNICODE_STRING ObjectName,
00989   _In_ ACCESS_MASK DesiredAccess,
00990   _Out_ PFILE_OBJECT *FileObject,
00991   _Out_ PDEVICE_OBJECT *DeviceObject);
00992 
00993 _IRQL_requires_max_(PASSIVE_LEVEL)
00994 _When_((DeviceProperty & __string_type),
00995   _At_(PropertyBuffer, _Post_z_))
00996 _When_((DeviceProperty & __multiString_type),
00997   _At_(PropertyBuffer, _Post_ _NullNull_terminated_))
00998 NTKERNELAPI
00999 NTSTATUS
01000 NTAPI
01001 IoGetDeviceProperty(
01002   _In_ PDEVICE_OBJECT DeviceObject,
01003   _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty,
01004   _In_ ULONG BufferLength,
01005   _Out_writes_bytes_opt_(BufferLength) PVOID PropertyBuffer,
01006   _Deref_out_range_(<=, BufferLength) PULONG ResultLength);
01007 
01008 _Must_inspect_result_
01009 _IRQL_requires_max_(PASSIVE_LEVEL)
01010 NTKERNELAPI
01011 PDMA_ADAPTER
01012 NTAPI
01013 IoGetDmaAdapter(
01014   _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject,
01015   _In_ PDEVICE_DESCRIPTION DeviceDescription,
01016   _Out_ _When_(return!=0, _Kernel_IoGetDmaAdapter_ _At_(*NumberOfMapRegisters, _Must_inspect_result_))
01017     PULONG NumberOfMapRegisters);
01018 
01019 __drv_aliasesMem
01020 _IRQL_requires_max_(DISPATCH_LEVEL)
01021 NTKERNELAPI
01022 PVOID
01023 NTAPI
01024 IoGetDriverObjectExtension(
01025   _In_ PDRIVER_OBJECT DriverObject,
01026   _In_ PVOID ClientIdentificationAddress);
01027 
01028 _IRQL_requires_max_(APC_LEVEL)
01029 NTKERNELAPI
01030 PVOID
01031 NTAPI
01032 IoGetInitialStack(VOID);
01033 
01034 NTKERNELAPI
01035 PDEVICE_OBJECT
01036 NTAPI
01037 IoGetRelatedDeviceObject(
01038   _In_ PFILE_OBJECT FileObject);
01039 
01040 _IRQL_requires_max_(DISPATCH_LEVEL)
01041 NTKERNELAPI
01042 VOID
01043 NTAPI
01044 IoQueueWorkItem(
01045   _Inout_ PIO_WORKITEM IoWorkItem,
01046   _In_ PIO_WORKITEM_ROUTINE WorkerRoutine,
01047   _In_ WORK_QUEUE_TYPE QueueType,
01048   _In_opt_ __drv_aliasesMem PVOID Context);
01049 
01050 _IRQL_requires_max_(DISPATCH_LEVEL)
01051 NTKERNELAPI
01052 VOID
01053 NTAPI
01054 IoInitializeIrp(
01055   _Inout_ PIRP Irp,
01056   _In_ USHORT PacketSize,
01057   _In_ CCHAR StackSize);
01058 
01059 _IRQL_requires_max_(PASSIVE_LEVEL)
01060 NTKERNELAPI
01061 VOID
01062 NTAPI
01063 IoInitializeRemoveLockEx(
01064   _Out_ PIO_REMOVE_LOCK Lock,
01065   _In_ ULONG AllocateTag,
01066   _In_ ULONG MaxLockedMinutes,
01067   _In_ ULONG HighWatermark,
01068   _In_ ULONG RemlockSize);
01069 
01070 _IRQL_requires_max_(PASSIVE_LEVEL)
01071 NTKERNELAPI
01072 NTSTATUS
01073 NTAPI
01074 IoInitializeTimer(
01075   _In_ PDEVICE_OBJECT DeviceObject,
01076   _In_ PIO_TIMER_ROUTINE TimerRoutine,
01077   _In_opt_ __drv_aliasesMem PVOID Context);
01078 
01079 _IRQL_requires_max_(DISPATCH_LEVEL)
01080 NTKERNELAPI
01081 VOID
01082 NTAPI
01083 IoInvalidateDeviceRelations(
01084   _In_ PDEVICE_OBJECT DeviceObject,
01085   _In_ DEVICE_RELATION_TYPE Type);
01086 
01087 _IRQL_requires_max_(DISPATCH_LEVEL)
01088 NTKERNELAPI
01089 VOID
01090 NTAPI
01091 IoInvalidateDeviceState(
01092   _In_ PDEVICE_OBJECT PhysicalDeviceObject);
01093 
01094 _IRQL_requires_max_(PASSIVE_LEVEL)
01095 NTKERNELAPI
01096 BOOLEAN
01097 NTAPI
01098 IoIsWdmVersionAvailable(
01099   _When_(MajorVersion!=1&&MajorVersion!=6, _In_ __drv_reportError("MajorVersion must be 1 or 6"))
01100     UCHAR MajorVersion,
01101   _In_ _When_(MinorVersion!=0 && MinorVersion!=5 &&
01102               MinorVersion!=16 && MinorVersion!=32 &&
01103               MinorVersion!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30"))
01104     UCHAR MinorVersion);
01105 
01106 _IRQL_requires_max_(PASSIVE_LEVEL)
01107 _Must_inspect_result_
01108 NTKERNELAPI
01109 NTSTATUS
01110 NTAPI
01111 IoOpenDeviceInterfaceRegistryKey(
01112   _In_ PUNICODE_STRING SymbolicLinkName,
01113   _In_ ACCESS_MASK DesiredAccess,
01114   _Out_ PHANDLE DeviceInterfaceKey);
01115 
01116 _IRQL_requires_max_(PASSIVE_LEVEL)
01117 _Must_inspect_result_
01118 NTKERNELAPI
01119 NTSTATUS
01120 NTAPI
01121 IoOpenDeviceRegistryKey(
01122   _In_ PDEVICE_OBJECT DeviceObject,
01123   _In_ ULONG DevInstKeyType,
01124   _In_ ACCESS_MASK DesiredAccess,
01125   _Out_ PHANDLE DevInstRegKey);
01126 
01127 _IRQL_requires_max_(PASSIVE_LEVEL)
01128 _Must_inspect_result_
01129 NTKERNELAPI
01130 NTSTATUS
01131 NTAPI
01132 IoRegisterDeviceInterface(
01133   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
01134   _In_ CONST GUID *InterfaceClassGuid,
01135   _In_opt_ PUNICODE_STRING ReferenceString,
01136   _Out_ _When_(return==0, _At_(SymbolicLinkName->Buffer, __drv_allocatesMem(Mem)))
01137     PUNICODE_STRING SymbolicLinkName);
01138 
01139 _IRQL_requires_max_(PASSIVE_LEVEL)
01140 _Must_inspect_result_
01141 NTKERNELAPI
01142 NTSTATUS
01143 NTAPI
01144 IoRegisterPlugPlayNotification(
01145   _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
01146   _In_ ULONG EventCategoryFlags,
01147   _In_opt_ PVOID EventCategoryData,
01148   _In_ PDRIVER_OBJECT DriverObject,
01149   _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
01150   _Inout_opt_ __drv_aliasesMem PVOID Context,
01151   _Outptr_result_nullonfailure_
01152   _At_(*NotificationEntry, _When_(return==0, __drv_allocatesMem(Mem)))
01153     PVOID *NotificationEntry);
01154 
01155 _IRQL_requires_max_(PASSIVE_LEVEL)
01156 NTKERNELAPI
01157 NTSTATUS
01158 NTAPI
01159 IoRegisterShutdownNotification(
01160   _In_ PDEVICE_OBJECT DeviceObject);
01161 
01162 _Requires_lock_held_(_Global_cancel_spin_lock_)
01163 _Releases_lock_(_Global_cancel_spin_lock_)
01164 _IRQL_requires_max_(DISPATCH_LEVEL)
01165 _IRQL_requires_min_(DISPATCH_LEVEL)
01166 NTKERNELAPI
01167 VOID
01168 NTAPI
01169 IoReleaseCancelSpinLock(
01170   _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql);
01171 
01172 _IRQL_requires_max_(PASSIVE_LEVEL)
01173 NTKERNELAPI
01174 VOID
01175 NTAPI
01176 IoReleaseRemoveLockAndWaitEx(
01177   _Inout_ PIO_REMOVE_LOCK RemoveLock,
01178   _In_opt_ PVOID Tag,
01179   _In_ ULONG RemlockSize);
01180 
01181 NTKERNELAPI
01182 VOID
01183 NTAPI
01184 IoReleaseRemoveLockEx(
01185   _Inout_ PIO_REMOVE_LOCK RemoveLock,
01186   _In_opt_ PVOID Tag,
01187   _In_ ULONG RemlockSize);
01188 
01189 _IRQL_requires_max_(PASSIVE_LEVEL)
01190 NTKERNELAPI
01191 VOID
01192 NTAPI
01193 IoRemoveShareAccess(
01194   _In_ PFILE_OBJECT FileObject,
01195   _Inout_ PSHARE_ACCESS ShareAccess);
01196 
01197 _IRQL_requires_max_(PASSIVE_LEVEL)
01198 NTKERNELAPI
01199 NTSTATUS
01200 NTAPI
01201 IoReportTargetDeviceChange(
01202   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
01203   _In_ PVOID NotificationStructure);
01204 
01205 _IRQL_requires_max_(DISPATCH_LEVEL)
01206 NTKERNELAPI
01207 NTSTATUS
01208 NTAPI
01209 IoReportTargetDeviceChangeAsynchronous(
01210   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
01211   _In_ PVOID NotificationStructure,
01212   _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback,
01213   _In_opt_ PVOID Context);
01214 
01215 _IRQL_requires_max_(DISPATCH_LEVEL)
01216 NTKERNELAPI
01217 VOID
01218 NTAPI
01219 IoRequestDeviceEject(
01220   _In_ PDEVICE_OBJECT PhysicalDeviceObject);
01221 
01222 _IRQL_requires_max_(DISPATCH_LEVEL)
01223 NTKERNELAPI
01224 VOID
01225 NTAPI
01226 IoReuseIrp(
01227   _Inout_ PIRP Irp,
01228   _In_ NTSTATUS Status);
01229 
01230 _IRQL_requires_max_(PASSIVE_LEVEL)
01231 _Must_inspect_result_
01232 NTKERNELAPI
01233 NTSTATUS
01234 NTAPI
01235 IoSetDeviceInterfaceState(
01236   _In_ PUNICODE_STRING SymbolicLinkName,
01237   _In_ BOOLEAN Enable);
01238 
01239 NTKERNELAPI
01240 VOID
01241 NTAPI
01242 IoSetShareAccess(
01243   _In_ ACCESS_MASK DesiredAccess,
01244   _In_ ULONG DesiredShareAccess,
01245   _Inout_ PFILE_OBJECT FileObject,
01246   _Out_ PSHARE_ACCESS ShareAccess);
01247 
01248 _IRQL_requires_max_(DISPATCH_LEVEL)
01249 _IRQL_requires_min_(DISPATCH_LEVEL)
01250 NTKERNELAPI
01251 VOID
01252 NTAPI
01253 IoStartNextPacket(
01254   _In_ PDEVICE_OBJECT DeviceObject,
01255   _In_ BOOLEAN Cancelable);
01256 
01257 _IRQL_requires_max_(DISPATCH_LEVEL)
01258 NTKERNELAPI
01259 VOID
01260 NTAPI
01261 IoStartNextPacketByKey(
01262   _In_ PDEVICE_OBJECT DeviceObject,
01263   _In_ BOOLEAN Cancelable,
01264   _In_ ULONG Key);
01265 
01266 _IRQL_requires_max_(DISPATCH_LEVEL)
01267 NTKERNELAPI
01268 VOID
01269 NTAPI
01270 IoStartPacket(
01271   _In_ PDEVICE_OBJECT DeviceObject,
01272   _In_ PIRP Irp,
01273   _In_opt_ PULONG Key,
01274   _In_opt_ PDRIVER_CANCEL CancelFunction);
01275 
01276 _IRQL_requires_max_(DISPATCH_LEVEL)
01277 NTKERNELAPI
01278 VOID
01279 NTAPI
01280 IoStartTimer(
01281   _In_ PDEVICE_OBJECT DeviceObject);
01282 
01283 _IRQL_requires_max_(DISPATCH_LEVEL)
01284 NTKERNELAPI
01285 VOID
01286 NTAPI
01287 IoStopTimer(
01288   _In_ PDEVICE_OBJECT DeviceObject);
01289 
01290 _IRQL_requires_max_(PASSIVE_LEVEL)
01291 __drv_freesMem(Pool)
01292 NTKERNELAPI
01293 NTSTATUS
01294 NTAPI
01295 IoUnregisterPlugPlayNotification(
01296   _In_ PVOID NotificationEntry);
01297 
01298 _IRQL_requires_max_(PASSIVE_LEVEL)
01299 NTKERNELAPI
01300 VOID
01301 NTAPI
01302 IoUnregisterShutdownNotification(
01303   _In_ PDEVICE_OBJECT DeviceObject);
01304 
01305 _IRQL_requires_max_(PASSIVE_LEVEL)
01306 NTKERNELAPI
01307 VOID
01308 NTAPI
01309 IoUpdateShareAccess(
01310   _In_ PFILE_OBJECT FileObject,
01311   _Inout_ PSHARE_ACCESS ShareAccess);
01312 
01313 _IRQL_requires_max_(PASSIVE_LEVEL)
01314 NTKERNELAPI
01315 NTSTATUS
01316 NTAPI
01317 IoWMIAllocateInstanceIds(
01318   _In_ GUID *Guid,
01319   _In_ ULONG InstanceCount,
01320   _Out_ ULONG *FirstInstanceId);
01321 
01322 NTKERNELAPI
01323 NTSTATUS
01324 NTAPI
01325 IoWMIQuerySingleInstanceMultiple(
01326   _In_reads_(ObjectCount) PVOID *DataBlockObjectList,
01327   _In_reads_(ObjectCount) PUNICODE_STRING InstanceNames,
01328   _In_ ULONG ObjectCount,
01329   _Inout_ ULONG *InOutBufferSize,
01330   _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer);
01331 
01332 _IRQL_requires_max_(PASSIVE_LEVEL)
01333 NTKERNELAPI
01334 NTSTATUS
01335 NTAPI
01336 IoWMIRegistrationControl(
01337   _In_ PDEVICE_OBJECT DeviceObject,
01338   _In_ ULONG Action);
01339 
01340 NTKERNELAPI
01341 NTSTATUS
01342 NTAPI
01343 IoWMISuggestInstanceName(
01344   _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject,
01345   _In_opt_ PUNICODE_STRING SymbolicLinkName,
01346   _In_ BOOLEAN CombineNames,
01347   _Out_ PUNICODE_STRING SuggestedInstanceName);
01348 
01349 _Must_inspect_result_
01350 _IRQL_requires_max_(DISPATCH_LEVEL)
01351 _Ret_range_(<=, 0)
01352 NTKERNELAPI
01353 NTSTATUS
01354 NTAPI
01355 IoWMIWriteEvent(
01356   _Inout_ _When_(return==0, __drv_aliasesMem) PVOID WnodeEventItem);
01357 
01358 _IRQL_requires_max_(DISPATCH_LEVEL)
01359 NTKERNELAPI
01360 VOID
01361 NTAPI
01362 IoWriteErrorLogEntry(
01363   _In_ PVOID ElEntry);
01364 
01365 NTKERNELAPI
01366 PIRP
01367 NTAPI
01368 IoGetTopLevelIrp(VOID);
01369 
01370 _IRQL_requires_max_(PASSIVE_LEVEL)
01371 NTKERNELAPI
01372 NTSTATUS
01373 NTAPI
01374 IoRegisterLastChanceShutdownNotification(
01375   _In_ PDEVICE_OBJECT DeviceObject);
01376 
01377 NTKERNELAPI
01378 VOID
01379 NTAPI
01380 IoSetTopLevelIrp(
01381   _In_opt_ PIRP Irp);
01382 
01383 $endif (_WDMDDK_)
01384 $if (_NTDDK_)
01385 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
01386 _IRQL_requires_max_(DISPATCH_LEVEL)
01387 _IRQL_requires_min_(DISPATCH_LEVEL)
01388 NTKERNELAPI
01389 NTSTATUS
01390 NTAPI
01391 IoAllocateAdapterChannel(
01392   _In_ PADAPTER_OBJECT AdapterObject,
01393   _In_ PDEVICE_OBJECT DeviceObject,
01394   _In_ ULONG NumberOfMapRegisters,
01395   _In_ PDRIVER_CONTROL ExecutionRoutine,
01396   _In_ PVOID Context);
01397 #endif
01398 
01399 #if !defined(DMA_MACROS_DEFINED)
01400 //DECLSPEC_DEPRECATED_DDK
01401 NTHALAPI
01402 PHYSICAL_ADDRESS
01403 NTAPI
01404 IoMapTransfer(
01405   _In_ PADAPTER_OBJECT AdapterObject,
01406   _In_ PMDL Mdl,
01407   _In_ PVOID MapRegisterBase,
01408   _In_ PVOID CurrentVa,
01409   _Inout_ PULONG Length,
01410   _In_ BOOLEAN WriteToDevice);
01411 #endif
01412 
01413 _IRQL_requires_max_(DISPATCH_LEVEL)
01414 _IRQL_requires_min_(DISPATCH_LEVEL)
01415 NTKERNELAPI
01416 VOID
01417 NTAPI
01418 IoAllocateController(
01419   _In_ PCONTROLLER_OBJECT ControllerObject,
01420   _In_ PDEVICE_OBJECT DeviceObject,
01421   _In_ PDRIVER_CONTROL ExecutionRoutine,
01422   _In_opt_ PVOID Context);
01423 
01424 _IRQL_requires_max_(PASSIVE_LEVEL)
01425 NTKERNELAPI
01426 PCONTROLLER_OBJECT
01427 NTAPI
01428 IoCreateController(
01429   _In_ ULONG Size);
01430 
01431 _IRQL_requires_max_(PASSIVE_LEVEL)
01432 NTKERNELAPI
01433 VOID
01434 NTAPI
01435 IoDeleteController(
01436   _In_ PCONTROLLER_OBJECT ControllerObject);
01437 
01438 _IRQL_requires_max_(DISPATCH_LEVEL)
01439 _IRQL_requires_min_(DISPATCH_LEVEL)
01440 NTKERNELAPI
01441 VOID
01442 NTAPI
01443 IoFreeController(
01444   _In_ PCONTROLLER_OBJECT ControllerObject);
01445 
01446 _IRQL_requires_max_(PASSIVE_LEVEL)
01447 NTKERNELAPI
01448 PCONFIGURATION_INFORMATION
01449 NTAPI
01450 IoGetConfigurationInformation(VOID);
01451 
01452 _IRQL_requires_max_(PASSIVE_LEVEL)
01453 NTKERNELAPI
01454 PDEVICE_OBJECT
01455 NTAPI
01456 IoGetDeviceToVerify(
01457   _In_ PETHREAD Thread);
01458 
01459 NTKERNELAPI
01460 VOID
01461 NTAPI
01462 IoCancelFileOpen(
01463   _In_ PDEVICE_OBJECT DeviceObject,
01464   _In_ PFILE_OBJECT FileObject);
01465 
01466 _IRQL_requires_max_(PASSIVE_LEVEL)
01467 NTKERNELAPI
01468 PGENERIC_MAPPING
01469 NTAPI
01470 IoGetFileObjectGenericMapping(VOID);
01471 
01472 _IRQL_requires_max_(DISPATCH_LEVEL)
01473 NTKERNELAPI
01474 PIRP
01475 NTAPI
01476 IoMakeAssociatedIrp(
01477   _In_ PIRP Irp,
01478   _In_ CCHAR StackSize);
01479 
01480 NTKERNELAPI
01481 NTSTATUS
01482 NTAPI
01483 IoQueryDeviceDescription(
01484   _In_opt_ PINTERFACE_TYPE BusType,
01485   _In_opt_ PULONG BusNumber,
01486   _In_opt_ PCONFIGURATION_TYPE ControllerType,
01487   _In_opt_ PULONG ControllerNumber,
01488   _In_opt_ PCONFIGURATION_TYPE PeripheralType,
01489   _In_opt_ PULONG PeripheralNumber,
01490   _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
01491   _Inout_opt_ PVOID Context);
01492 
01493 _IRQL_requires_max_(APC_LEVEL)
01494 NTKERNELAPI
01495 VOID
01496 NTAPI
01497 IoRaiseHardError(
01498   _In_ PIRP Irp,
01499   _In_opt_ PVPB Vpb,
01500   _In_ PDEVICE_OBJECT RealDeviceObject);
01501 
01502 _IRQL_requires_max_(APC_LEVEL)
01503 NTKERNELAPI
01504 BOOLEAN
01505 NTAPI
01506 IoRaiseInformationalHardError(
01507   _In_ NTSTATUS ErrorStatus,
01508   _In_opt_ PUNICODE_STRING String,
01509   _In_opt_ PKTHREAD Thread);
01510 
01511 _IRQL_requires_max_(PASSIVE_LEVEL)
01512 NTKERNELAPI
01513 VOID
01514 NTAPI
01515 IoRegisterBootDriverReinitialization(
01516   _In_ PDRIVER_OBJECT DriverObject,
01517   _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
01518   _In_opt_ PVOID Context);
01519 
01520 _IRQL_requires_max_(PASSIVE_LEVEL)
01521 NTKERNELAPI
01522 VOID
01523 NTAPI
01524 IoRegisterDriverReinitialization(
01525   _In_ PDRIVER_OBJECT DriverObject,
01526   _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
01527   _In_opt_ PVOID Context);
01528 
01529 NTKERNELAPI
01530 NTSTATUS
01531 NTAPI
01532 IoAttachDeviceByPointer(
01533   _In_ PDEVICE_OBJECT SourceDevice,
01534   _In_ PDEVICE_OBJECT TargetDevice);
01535 
01536 _IRQL_requires_max_(PASSIVE_LEVEL)
01537 _Must_inspect_result_
01538 NTKERNELAPI
01539 NTSTATUS
01540 NTAPI
01541 IoReportDetectedDevice(
01542   _In_ PDRIVER_OBJECT DriverObject,
01543   _In_ INTERFACE_TYPE LegacyBusType,
01544   _In_ ULONG BusNumber,
01545   _In_ ULONG SlotNumber,
01546   _In_opt_ PCM_RESOURCE_LIST ResourceList,
01547   _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements,
01548   _In_ BOOLEAN ResourceAssigned,
01549   _Inout_ PDEVICE_OBJECT *DeviceObject);
01550 
01551 NTKERNELAPI
01552 NTSTATUS
01553 NTAPI
01554 IoReportResourceForDetection(
01555   _In_ PDRIVER_OBJECT DriverObject,
01556   _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList,
01557   _In_opt_ ULONG DriverListSize,
01558   _In_opt_ PDEVICE_OBJECT DeviceObject,
01559   _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList,
01560   _In_opt_ ULONG DeviceListSize,
01561   _Out_ PBOOLEAN ConflictDetected);
01562 
01563 NTKERNELAPI
01564 NTSTATUS
01565 NTAPI
01566 IoReportResourceUsage(
01567   _In_opt_ PUNICODE_STRING DriverClassName,
01568   _In_ PDRIVER_OBJECT DriverObject,
01569   _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList,
01570   _In_opt_ ULONG DriverListSize,
01571   _In_opt_ PDEVICE_OBJECT DeviceObject,
01572   _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList,
01573   _In_opt_ ULONG DeviceListSize,
01574   _In_ BOOLEAN OverrideConflict,
01575   _Out_ PBOOLEAN ConflictDetected);
01576 
01577 _IRQL_requires_max_(DISPATCH_LEVEL)
01578 NTKERNELAPI
01579 VOID
01580 NTAPI
01581 IoSetHardErrorOrVerifyDevice(
01582   _In_ PIRP Irp,
01583   _In_ PDEVICE_OBJECT DeviceObject);
01584 
01585 NTKERNELAPI
01586 NTSTATUS
01587 NTAPI
01588 IoAssignResources(
01589   _In_ PUNICODE_STRING RegistryPath,
01590   _In_opt_ PUNICODE_STRING DriverClassName,
01591   _In_ PDRIVER_OBJECT DriverObject,
01592   _In_opt_ PDEVICE_OBJECT DeviceObject,
01593   _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
01594   _Inout_ PCM_RESOURCE_LIST *AllocatedResources);
01595 
01596 _IRQL_requires_max_(DISPATCH_LEVEL)
01597 NTKERNELAPI
01598 BOOLEAN
01599 NTAPI
01600 IoSetThreadHardErrorMode(
01601   _In_ BOOLEAN EnableHardErrors);
01602 
01603 $endif (_NTDDK_)
01604 $if (_NTIFS_)
01605 
01606 NTKERNELAPI
01607 VOID
01608 NTAPI
01609 IoAcquireVpbSpinLock(
01610   _Out_ PKIRQL Irql);
01611 
01612 NTKERNELAPI
01613 NTSTATUS
01614 NTAPI
01615 IoCheckDesiredAccess(
01616   _Inout_ PACCESS_MASK DesiredAccess,
01617   _In_ ACCESS_MASK GrantedAccess);
01618 
01619 NTKERNELAPI
01620 NTSTATUS
01621 NTAPI
01622 IoCheckEaBufferValidity(
01623   _In_ PFILE_FULL_EA_INFORMATION EaBuffer,
01624   _In_ ULONG EaLength,
01625   _Out_ PULONG ErrorOffset);
01626 
01627 NTKERNELAPI
01628 NTSTATUS
01629 NTAPI
01630 IoCheckFunctionAccess(
01631   _In_ ACCESS_MASK GrantedAccess,
01632   _In_ UCHAR MajorFunction,
01633   _In_ UCHAR MinorFunction,
01634   _In_ ULONG IoControlCode,
01635   _In_opt_ PVOID Argument1,
01636   _In_opt_ PVOID Argument2);
01637 
01638 NTKERNELAPI
01639 NTSTATUS
01640 NTAPI
01641 IoCheckQuerySetFileInformation(
01642   _In_ FILE_INFORMATION_CLASS FileInformationClass,
01643   _In_ ULONG Length,
01644   _In_ BOOLEAN SetOperation);
01645 
01646 NTKERNELAPI
01647 NTSTATUS
01648 NTAPI
01649 IoCheckQuerySetVolumeInformation(
01650   _In_ FS_INFORMATION_CLASS FsInformationClass,
01651   _In_ ULONG Length,
01652   _In_ BOOLEAN SetOperation);
01653 
01654 NTKERNELAPI
01655 NTSTATUS
01656 NTAPI
01657 IoCheckQuotaBufferValidity(
01658   _In_ PFILE_QUOTA_INFORMATION QuotaBuffer,
01659   _In_ ULONG QuotaLength,
01660   _Out_ PULONG ErrorOffset);
01661 
01662 NTKERNELAPI
01663 PFILE_OBJECT
01664 NTAPI
01665 IoCreateStreamFileObject(
01666   _In_opt_ PFILE_OBJECT FileObject,
01667   _In_opt_ PDEVICE_OBJECT DeviceObject);
01668 
01669 NTKERNELAPI
01670 PFILE_OBJECT
01671 NTAPI
01672 IoCreateStreamFileObjectLite(
01673   _In_opt_ PFILE_OBJECT FileObject,
01674   _In_opt_ PDEVICE_OBJECT DeviceObject);
01675 
01676 NTKERNELAPI
01677 BOOLEAN
01678 NTAPI
01679 IoFastQueryNetworkAttributes(
01680   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
01681   _In_ ACCESS_MASK DesiredAccess,
01682   _In_ ULONG OpenOptions,
01683   _Out_ PIO_STATUS_BLOCK IoStatus,
01684   _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer);
01685 
01686 NTKERNELAPI
01687 NTSTATUS
01688 NTAPI
01689 IoPageRead(
01690   _In_ PFILE_OBJECT FileObject,
01691   _In_ PMDL Mdl,
01692   _In_ PLARGE_INTEGER Offset,
01693   _In_ PKEVENT Event,
01694   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
01695 
01696 NTKERNELAPI
01697 PDEVICE_OBJECT
01698 NTAPI
01699 IoGetBaseFileSystemDeviceObject(
01700   _In_ PFILE_OBJECT FileObject);
01701 
01702 _IRQL_requires_max_(PASSIVE_LEVEL)
01703 NTKERNELAPI
01704 PCONFIGURATION_INFORMATION
01705 NTAPI
01706 IoGetConfigurationInformation(VOID);
01707 
01708 NTKERNELAPI
01709 ULONG
01710 NTAPI
01711 IoGetRequestorProcessId(
01712   _In_ PIRP Irp);
01713 
01714 NTKERNELAPI
01715 PEPROCESS
01716 NTAPI
01717 IoGetRequestorProcess(
01718   _In_ PIRP Irp);
01719 
01720 NTKERNELAPI
01721 PIRP
01722 NTAPI
01723 IoGetTopLevelIrp(VOID);
01724 
01725 NTKERNELAPI
01726 BOOLEAN
01727 NTAPI
01728 IoIsOperationSynchronous(
01729   _In_ PIRP Irp);
01730 
01731 NTKERNELAPI
01732 BOOLEAN
01733 NTAPI
01734 IoIsSystemThread(
01735   _In_ PETHREAD Thread);
01736 
01737 NTKERNELAPI
01738 BOOLEAN
01739 NTAPI
01740 IoIsValidNameGraftingBuffer(
01741   _In_ PIRP Irp,
01742   _In_ PREPARSE_DATA_BUFFER ReparseBuffer);
01743 
01744 NTKERNELAPI
01745 NTSTATUS
01746 NTAPI
01747 IoQueryFileInformation(
01748   _In_ PFILE_OBJECT FileObject,
01749   _In_ FILE_INFORMATION_CLASS FileInformationClass,
01750   _In_ ULONG Length,
01751   _Out_ PVOID FileInformation,
01752   _Out_ PULONG ReturnedLength);
01753 
01754 NTKERNELAPI
01755 NTSTATUS
01756 NTAPI
01757 IoQueryVolumeInformation(
01758   _In_ PFILE_OBJECT FileObject,
01759   _In_ FS_INFORMATION_CLASS FsInformationClass,
01760   _In_ ULONG Length,
01761   _Out_ PVOID FsInformation,
01762   _Out_ PULONG ReturnedLength);
01763 
01764 NTKERNELAPI
01765 VOID
01766 NTAPI
01767 IoQueueThreadIrp(
01768   _In_ PIRP Irp);
01769 
01770 NTKERNELAPI
01771 VOID
01772 NTAPI
01773 IoRegisterFileSystem(
01774   _In_ __drv_aliasesMem PDEVICE_OBJECT DeviceObject);
01775 
01776 NTKERNELAPI
01777 NTSTATUS
01778 NTAPI
01779 IoRegisterFsRegistrationChange(
01780   _In_ PDRIVER_OBJECT DriverObject,
01781   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
01782 
01783 NTKERNELAPI
01784 VOID
01785 NTAPI
01786 IoReleaseVpbSpinLock(
01787   _In_ KIRQL Irql);
01788 
01789 NTKERNELAPI
01790 VOID
01791 NTAPI
01792 IoSetDeviceToVerify(
01793   _In_ PETHREAD Thread,
01794   _In_opt_ PDEVICE_OBJECT DeviceObject);
01795 
01796 NTKERNELAPI
01797 NTSTATUS
01798 NTAPI
01799 IoSetInformation(
01800   _In_ PFILE_OBJECT FileObject,
01801   _In_ FILE_INFORMATION_CLASS FileInformationClass,
01802   _In_ ULONG Length,
01803   _In_ PVOID FileInformation);
01804 
01805 NTKERNELAPI
01806 VOID
01807 NTAPI
01808 IoSetTopLevelIrp(
01809   _In_opt_ PIRP Irp);
01810 
01811 NTKERNELAPI
01812 NTSTATUS
01813 NTAPI
01814 IoSynchronousPageWrite(
01815   _In_ PFILE_OBJECT FileObject,
01816   _In_ PMDL Mdl,
01817   _In_ PLARGE_INTEGER FileOffset,
01818   _In_ PKEVENT Event,
01819   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
01820 
01821 NTKERNELAPI
01822 PEPROCESS
01823 NTAPI
01824 IoThreadToProcess(
01825   _In_ PETHREAD Thread);
01826 
01827 NTKERNELAPI
01828 VOID
01829 NTAPI
01830 IoUnregisterFileSystem(
01831   _In_ PDEVICE_OBJECT DeviceObject);
01832 
01833 NTKERNELAPI
01834 VOID
01835 NTAPI
01836 IoUnregisterFsRegistrationChange(
01837   _In_ PDRIVER_OBJECT DriverObject,
01838   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
01839 
01840 NTKERNELAPI
01841 NTSTATUS
01842 NTAPI
01843 IoVerifyVolume(
01844   _In_ PDEVICE_OBJECT DeviceObject,
01845   _In_ BOOLEAN AllowRawMount);
01846 
01847 NTKERNELAPI
01848 NTSTATUS
01849 NTAPI
01850 IoGetRequestorSessionId(
01851   _In_ PIRP Irp,
01852   _Out_ PULONG pSessionId);
01853 $endif (_NTIFS_)
01854 
01855 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
01856 
01857 $if (_NTDDK_)
01858 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
01859 
01860 NTKERNELAPI
01861 BOOLEAN
01862 NTAPI
01863 IoIsFileOriginRemote(
01864   _In_ PFILE_OBJECT FileObject);
01865 
01866 NTKERNELAPI
01867 NTSTATUS
01868 NTAPI
01869 IoSetFileOrigin(
01870   _In_ PFILE_OBJECT FileObject,
01871   _In_ BOOLEAN Remote);
01872 
01873 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
01874 $endif (_NTDDK_)
01875 
01876 #if (NTDDI_VERSION >= NTDDI_WINXP)
01877 
01878 $if (_WDMDDK_)
01879 NTKERNELAPI
01880 NTSTATUS
01881 NTAPI
01882 IoCsqInitialize(
01883   _Out_ PIO_CSQ Csq,
01884   _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp,
01885   _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
01886   _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
01887   _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
01888   _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
01889   _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
01890 
01891 NTKERNELAPI
01892 VOID
01893 NTAPI
01894 IoCsqInsertIrp(
01895   _Inout_ PIO_CSQ Csq,
01896   _Inout_ PIRP Irp,
01897   _Out_opt_ PIO_CSQ_IRP_CONTEXT Context);
01898 
01899 NTKERNELAPI
01900 PIRP
01901 NTAPI
01902 IoCsqRemoveIrp(
01903   _Inout_ PIO_CSQ Csq,
01904   _Inout_ PIO_CSQ_IRP_CONTEXT Context);
01905 
01906 NTKERNELAPI
01907 PIRP
01908 NTAPI
01909 IoCsqRemoveNextIrp(
01910   _Inout_ PIO_CSQ Csq,
01911   _In_opt_ PVOID PeekContext);
01912 
01913 NTKERNELAPI
01914 BOOLEAN
01915 NTAPI
01916 IoForwardIrpSynchronously(
01917   _In_ PDEVICE_OBJECT DeviceObject,
01918   _In_ PIRP Irp);
01919 
01920 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
01921 
01922 NTKERNELAPI
01923 VOID
01924 NTAPI
01925 IoFreeErrorLogEntry(
01926   _In_ PVOID ElEntry);
01927 
01928 _IRQL_requires_max_(DISPATCH_LEVEL)
01929 _Must_inspect_result_
01930 NTKERNELAPI
01931 NTSTATUS
01932 NTAPI
01933 IoSetCompletionRoutineEx(
01934   _In_ PDEVICE_OBJECT DeviceObject,
01935   _In_ PIRP Irp,
01936   _In_ PIO_COMPLETION_ROUTINE CompletionRoutine,
01937   _In_opt_ PVOID Context,
01938   _In_ BOOLEAN InvokeOnSuccess,
01939   _In_ BOOLEAN InvokeOnError,
01940   _In_ BOOLEAN InvokeOnCancel);
01941 
01942 VOID
01943 NTAPI
01944 IoSetStartIoAttributes(
01945   _In_ PDEVICE_OBJECT DeviceObject,
01946   _In_ BOOLEAN DeferredStartIo,
01947   _In_ BOOLEAN NonCancelable);
01948 
01949 NTKERNELAPI
01950 NTSTATUS
01951 NTAPI
01952 IoWMIDeviceObjectToInstanceName(
01953   _In_ PVOID DataBlockObject,
01954   _In_ PDEVICE_OBJECT DeviceObject,
01955   _Out_ PUNICODE_STRING InstanceName);
01956 
01957 NTKERNELAPI
01958 NTSTATUS
01959 NTAPI
01960 IoWMIExecuteMethod(
01961   _In_ PVOID DataBlockObject,
01962   _In_ PUNICODE_STRING InstanceName,
01963   _In_ ULONG MethodId,
01964   _In_ ULONG InBufferSize,
01965   _Inout_ PULONG OutBufferSize,
01966   _Inout_updates_bytes_to_opt_(*OutBufferSize, InBufferSize) PUCHAR InOutBuffer);
01967 
01968 NTKERNELAPI
01969 NTSTATUS
01970 NTAPI
01971 IoWMIHandleToInstanceName(
01972   _In_ PVOID DataBlockObject,
01973   _In_ HANDLE FileHandle,
01974   _Out_ PUNICODE_STRING InstanceName);
01975 
01976 NTKERNELAPI
01977 NTSTATUS
01978 NTAPI
01979 IoWMIOpenBlock(
01980   _In_ GUID *DataBlockGuid,
01981   _In_ ULONG DesiredAccess,
01982   _Out_ PVOID *DataBlockObject);
01983 
01984 NTKERNELAPI
01985 NTSTATUS
01986 NTAPI
01987 IoWMIQueryAllData(
01988   _In_ PVOID DataBlockObject,
01989   _Inout_ ULONG *InOutBufferSize,
01990   _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer);
01991 
01992 NTKERNELAPI
01993 NTSTATUS
01994 NTAPI
01995 IoWMIQueryAllDataMultiple(
01996   _In_reads_(ObjectCount) PVOID *DataBlockObjectList,
01997   _In_ ULONG ObjectCount,
01998   _Inout_ ULONG *InOutBufferSize,
01999   _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer);
02000 
02001 NTKERNELAPI
02002 NTSTATUS
02003 NTAPI
02004 IoWMIQuerySingleInstance(
02005   _In_ PVOID DataBlockObject,
02006   _In_ PUNICODE_STRING InstanceName,
02007   _Inout_ ULONG *InOutBufferSize,
02008   _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer);
02009 
02010 NTKERNELAPI
02011 NTSTATUS
02012 NTAPI
02013 IoWMISetNotificationCallback(
02014   _Inout_ PVOID Object,
02015   _In_ WMI_NOTIFICATION_CALLBACK Callback,
02016   _In_opt_ PVOID Context);
02017 
02018 NTKERNELAPI
02019 NTSTATUS
02020 NTAPI
02021 IoWMISetSingleInstance(
02022   _In_ PVOID DataBlockObject,
02023   _In_ PUNICODE_STRING InstanceName,
02024   _In_ ULONG Version,
02025   _In_ ULONG ValueBufferSize,
02026   _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer);
02027 
02028 NTKERNELAPI
02029 NTSTATUS
02030 NTAPI
02031 IoWMISetSingleItem(
02032   _In_ PVOID DataBlockObject,
02033   _In_ PUNICODE_STRING InstanceName,
02034   _In_ ULONG DataItemId,
02035   _In_ ULONG Version,
02036   _In_ ULONG ValueBufferSize,
02037   _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer);
02038 $endif (_WDMDDK_)
02039 $if (_NTDDK_)
02040 _IRQL_requires_max_(PASSIVE_LEVEL)
02041 NTKERNELAPI
02042 NTSTATUS
02043 FASTCALL
02044 IoReadPartitionTable(
02045   _In_ PDEVICE_OBJECT DeviceObject,
02046   _In_ ULONG SectorSize,
02047   _In_ BOOLEAN ReturnRecognizedPartitions,
02048   _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
02049 
02050 _IRQL_requires_max_(PASSIVE_LEVEL)
02051 NTKERNELAPI
02052 NTSTATUS
02053 FASTCALL
02054 IoSetPartitionInformation(
02055   _In_ PDEVICE_OBJECT DeviceObject,
02056   _In_ ULONG SectorSize,
02057   _In_ ULONG PartitionNumber,
02058   _In_ ULONG PartitionType);
02059 
02060 _IRQL_requires_max_(PASSIVE_LEVEL)
02061 NTKERNELAPI
02062 NTSTATUS
02063 FASTCALL
02064 IoWritePartitionTable(
02065   _In_ PDEVICE_OBJECT DeviceObject,
02066   _In_ ULONG SectorSize,
02067   _In_ ULONG SectorsPerTrack,
02068   _In_ ULONG NumberOfHeads,
02069   _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
02070 
02071 NTKERNELAPI
02072 NTSTATUS
02073 NTAPI
02074 IoCreateDisk(
02075   _In_ PDEVICE_OBJECT DeviceObject,
02076   _In_opt_ struct _CREATE_DISK* Disk);
02077 
02078 NTKERNELAPI
02079 NTSTATUS
02080 NTAPI
02081 IoReadDiskSignature(
02082   _In_ PDEVICE_OBJECT DeviceObject,
02083   _In_ ULONG BytesPerSector,
02084   _Out_ PDISK_SIGNATURE Signature);
02085 
02086 _IRQL_requires_max_(PASSIVE_LEVEL)
02087 NTKERNELAPI
02088 NTSTATUS
02089 NTAPI
02090 IoReadPartitionTableEx(
02091   _In_ PDEVICE_OBJECT DeviceObject,
02092   _Out_ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
02093 
02094 _IRQL_requires_max_(PASSIVE_LEVEL)
02095 NTKERNELAPI
02096 NTSTATUS
02097 NTAPI
02098 IoSetPartitionInformationEx(
02099   _In_ PDEVICE_OBJECT DeviceObject,
02100   _In_ ULONG PartitionNumber,
02101   _In_ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
02102 
02103 NTKERNELAPI
02104 NTSTATUS
02105 NTAPI
02106 IoSetSystemPartition(
02107   _In_ PUNICODE_STRING VolumeNameString);
02108 
02109 NTKERNELAPI
02110 NTSTATUS
02111 NTAPI
02112 IoVerifyPartitionTable(
02113   _In_ PDEVICE_OBJECT DeviceObject,
02114   _In_ BOOLEAN FixErrors);
02115 
02116 NTKERNELAPI
02117 NTSTATUS
02118 NTAPI
02119 IoVolumeDeviceToDosName(
02120   _In_ PVOID VolumeDeviceObject,
02121   _Out_ _When_(return==0,
02122     _At_(DosName->Buffer, __drv_allocatesMem(Mem)))
02123     PUNICODE_STRING DosName);
02124 
02125 _IRQL_requires_max_(PASSIVE_LEVEL)
02126 NTKERNELAPI
02127 NTSTATUS
02128 NTAPI
02129 IoWritePartitionTableEx(
02130   _In_ PDEVICE_OBJECT DeviceObject,
02131   _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX, PartitionEntry[0])))
02132     struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
02133 
02134 NTKERNELAPI
02135 NTSTATUS
02136 NTAPI
02137 IoCreateFileSpecifyDeviceObjectHint(
02138   _Out_ PHANDLE FileHandle,
02139   _In_ ACCESS_MASK DesiredAccess,
02140   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02141   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02142   _In_opt_ PLARGE_INTEGER AllocationSize,
02143   _In_ ULONG FileAttributes,
02144   _In_ ULONG ShareAccess,
02145   _In_ ULONG Disposition,
02146   _In_ ULONG CreateOptions,
02147   _In_opt_ PVOID EaBuffer,
02148   _In_ ULONG EaLength,
02149   _In_ CREATE_FILE_TYPE CreateFileType,
02150   _In_opt_ PVOID InternalParameters,
02151   _In_ ULONG Options,
02152   _In_opt_ PVOID DeviceObject);
02153 
02154 NTKERNELAPI
02155 NTSTATUS
02156 NTAPI
02157 IoAttachDeviceToDeviceStackSafe(
02158   _In_ PDEVICE_OBJECT SourceDevice,
02159   _In_ PDEVICE_OBJECT TargetDevice,
02160   _Outptr_ PDEVICE_OBJECT *AttachedToDeviceObject);
02161 
02162 $endif (_NTDDK_)
02163 $if (_NTIFS_)
02164 
02165 NTKERNELAPI
02166 PFILE_OBJECT
02167 NTAPI
02168 IoCreateStreamFileObjectEx(
02169   _In_opt_ PFILE_OBJECT FileObject,
02170   _In_opt_ PDEVICE_OBJECT DeviceObject,
02171   _Out_opt_ PHANDLE FileObjectHandle);
02172 
02173 NTKERNELAPI
02174 NTSTATUS
02175 NTAPI
02176 IoQueryFileDosDeviceName(
02177   _In_ PFILE_OBJECT FileObject,
02178   _Out_ POBJECT_NAME_INFORMATION *ObjectNameInformation);
02179 
02180 NTKERNELAPI
02181 NTSTATUS
02182 NTAPI
02183 IoEnumerateDeviceObjectList(
02184   _In_ PDRIVER_OBJECT DriverObject,
02185   _Out_writes_bytes_to_opt_(DeviceObjectListSize,(*ActualNumberDeviceObjects)*sizeof(PDEVICE_OBJECT))
02186     PDEVICE_OBJECT *DeviceObjectList,
02187   _In_ ULONG DeviceObjectListSize,
02188   _Out_ PULONG ActualNumberDeviceObjects);
02189 
02190 NTKERNELAPI
02191 PDEVICE_OBJECT
02192 NTAPI
02193 IoGetLowerDeviceObject(
02194   _In_ PDEVICE_OBJECT DeviceObject);
02195 
02196 NTKERNELAPI
02197 PDEVICE_OBJECT
02198 NTAPI
02199 IoGetDeviceAttachmentBaseRef(
02200   _In_ PDEVICE_OBJECT DeviceObject);
02201 
02202 NTKERNELAPI
02203 NTSTATUS
02204 NTAPI
02205 IoGetDiskDeviceObject(
02206   _In_ PDEVICE_OBJECT FileSystemDeviceObject,
02207   _Out_ PDEVICE_OBJECT *DiskDeviceObject);
02208 $endif (_NTIFS_)
02209 
02210 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
02211 
02212 $if (_WDMDDK_)
02213 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
02214 NTKERNELAPI
02215 NTSTATUS
02216 NTAPI
02217 IoValidateDeviceIoControlAccess(
02218   _In_ PIRP Irp,
02219   _In_ ULONG RequiredAccess);
02220 #endif
02221 
02222 $endif (_WDMDDK_)
02223 $if (_WDMDDK_ || _NTDDK_)
02224 #if (NTDDI_VERSION >= NTDDI_WS03)
02225 $endif (_WDMDDK_ || _NTDDK_)
02226 $if (_NTDDK_)
02227 NTKERNELAPI
02228 IO_PAGING_PRIORITY
02229 FASTCALL
02230 IoGetPagingIoPriority(
02231   _In_ PIRP Irp);
02232 
02233 $endif (_NTDDK_)
02234 $if (_WDMDDK_)
02235 NTKERNELAPI
02236 NTSTATUS
02237 NTAPI
02238 IoCsqInitializeEx(
02239   _Out_ PIO_CSQ Csq,
02240   _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp,
02241   _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
02242   _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
02243   _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
02244   _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
02245   _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
02246 
02247 NTKERNELAPI
02248 NTSTATUS
02249 NTAPI
02250 IoCsqInsertIrpEx(
02251   _Inout_ PIO_CSQ Csq,
02252   _Inout_ PIRP Irp,
02253   _Out_opt_ PIO_CSQ_IRP_CONTEXT Context,
02254   _In_opt_ PVOID InsertContext);
02255 $endif (_WDMDDK_)
02256 $if (_WDMDDK_ || _NTDDK_)
02257 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
02258 $endif (_WDMDDK_ || _NTDDK_)
02259 $if (_NTDDK_ || _NTIFS_)
02260 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
02261 $endif (_NTDDK_ || _NTIFS_)
02262 
02263 $if (_NTDDK_)
02264 BOOLEAN
02265 NTAPI
02266 IoTranslateBusAddress(
02267   _In_ INTERFACE_TYPE InterfaceType,
02268   _In_ ULONG BusNumber,
02269   _In_ PHYSICAL_ADDRESS BusAddress,
02270   _Inout_ PULONG AddressSpace,
02271   _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
02272 $endif (_NTDDK_)
02273 $if (_NTIFS_)
02274 
02275 NTKERNELAPI
02276 NTSTATUS
02277 NTAPI
02278 IoEnumerateRegisteredFiltersList(
02279   _Out_writes_bytes_to_opt_(DriverObjectListSize,(*ActualNumberDriverObjects)*sizeof(PDRIVER_OBJECT))
02280     PDRIVER_OBJECT *DriverObjectList,
02281   _In_ ULONG DriverObjectListSize,
02282   _Out_ PULONG ActualNumberDriverObjects);
02283 $endif (_NTIFS_)
02284 $if (_NTDDK_ || _NTIFS_)
02285 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
02286 $endif (_NTDDK_ || _NTIFS_)
02287 
02288 #if (NTDDI_VERSION >= NTDDI_VISTA)
02289 $if (_WDMDDK_)
02290 NTKERNELAPI
02291 NTSTATUS
02292 NTAPI
02293 IoGetBootDiskInformationLite(
02294   _Outptr_ PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
02295 
02296 NTKERNELAPI
02297 NTSTATUS
02298 NTAPI
02299 IoCheckShareAccessEx(
02300   _In_ ACCESS_MASK DesiredAccess,
02301   _In_ ULONG DesiredShareAccess,
02302   _Inout_ PFILE_OBJECT FileObject,
02303   _Inout_ PSHARE_ACCESS ShareAccess,
02304   _In_ BOOLEAN Update,
02305   _In_ PBOOLEAN WritePermission);
02306 
02307 NTKERNELAPI
02308 NTSTATUS
02309 NTAPI
02310 IoConnectInterruptEx(
02311   _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
02312 
02313 NTKERNELAPI
02314 VOID
02315 NTAPI
02316 IoDisconnectInterruptEx(
02317   _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
02318 
02319 LOGICAL
02320 NTAPI
02321 IoWithinStackLimits(
02322   _In_ ULONG_PTR RegionStart,
02323   _In_ SIZE_T RegionSize);
02324 
02325 NTKERNELAPI
02326 VOID
02327 NTAPI
02328 IoSetShareAccessEx(
02329   _In_ ACCESS_MASK DesiredAccess,
02330   _In_ ULONG DesiredShareAccess,
02331   _Inout_ PFILE_OBJECT FileObject,
02332   _Out_ PSHARE_ACCESS ShareAccess,
02333   _In_ PBOOLEAN WritePermission);
02334 
02335 ULONG
02336 NTAPI
02337 IoSizeofWorkItem(VOID);
02338 
02339 VOID
02340 NTAPI
02341 IoInitializeWorkItem(
02342   _In_ PVOID IoObject,
02343   _Out_ PIO_WORKITEM IoWorkItem);
02344 
02345 VOID
02346 NTAPI
02347 IoUninitializeWorkItem(
02348   _Inout_ PIO_WORKITEM IoWorkItem);
02349 
02350 _IRQL_requires_max_(DISPATCH_LEVEL)
02351 VOID
02352 NTAPI
02353 IoQueueWorkItemEx(
02354   _Inout_ PIO_WORKITEM IoWorkItem,
02355   _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine,
02356   _In_ WORK_QUEUE_TYPE QueueType,
02357   _In_opt_ __drv_aliasesMem PVOID Context);
02358 
02359 IO_PRIORITY_HINT
02360 NTAPI
02361 IoGetIoPriorityHint(
02362   _In_ PIRP Irp);
02363 
02364 NTSTATUS
02365 NTAPI
02366 IoSetIoPriorityHint(
02367   _In_ PIRP Irp,
02368   _In_ IO_PRIORITY_HINT PriorityHint);
02369 
02370 NTSTATUS
02371 NTAPI
02372 IoAllocateSfioStreamIdentifier(
02373   _In_ PFILE_OBJECT FileObject,
02374   _In_ ULONG Length,
02375   _In_ PVOID Signature,
02376   _Out_ PVOID *StreamIdentifier);
02377 
02378 PVOID
02379 NTAPI
02380 IoGetSfioStreamIdentifier(
02381   _In_ PFILE_OBJECT FileObject,
02382   _In_ PVOID Signature);
02383 
02384 NTSTATUS
02385 NTAPI
02386 IoFreeSfioStreamIdentifier(
02387   _In_ PFILE_OBJECT FileObject,
02388   _In_ PVOID Signature);
02389 
02390 _IRQL_requires_max_(DISPATCH_LEVEL)
02391 _Must_inspect_result_
02392 NTKERNELAPI
02393 NTSTATUS
02394 NTAPI
02395 IoRequestDeviceEjectEx(
02396   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
02397   _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback,
02398   _In_opt_ PVOID Context,
02399   _In_opt_ PDRIVER_OBJECT DriverObject);
02400 
02401 _IRQL_requires_max_(PASSIVE_LEVEL)
02402 _Must_inspect_result_
02403 NTKERNELAPI
02404 NTSTATUS
02405 NTAPI
02406 IoSetDevicePropertyData(
02407   _In_ PDEVICE_OBJECT Pdo,
02408   _In_ CONST DEVPROPKEY *PropertyKey,
02409   _In_ LCID Lcid,
02410   _In_ ULONG Flags,
02411   _In_ DEVPROPTYPE Type,
02412   _In_ ULONG Size,
02413   _In_opt_ PVOID Data);
02414 
02415 _IRQL_requires_max_(PASSIVE_LEVEL)
02416 _Must_inspect_result_
02417 NTKERNELAPI
02418 NTSTATUS
02419 NTAPI
02420 IoGetDevicePropertyData(
02421   _In_ PDEVICE_OBJECT Pdo,
02422   _In_ CONST DEVPROPKEY *PropertyKey,
02423   _In_ LCID Lcid,
02424   _Reserved_ ULONG Flags,
02425   _In_ ULONG Size,
02426   _Out_ PVOID Data,
02427   _Out_ PULONG RequiredSize,
02428   _Out_ PDEVPROPTYPE Type);
02429 
02430 $endif (_WDMDDK_)
02431 $if (_NTDDK_)
02432 NTKERNELAPI
02433 NTSTATUS
02434 NTAPI
02435 IoUpdateDiskGeometry(
02436   _In_ PDEVICE_OBJECT DeviceObject,
02437   _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry,
02438   _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry);
02439 
02440 PTXN_PARAMETER_BLOCK
02441 NTAPI
02442 IoGetTransactionParameterBlock(
02443   _In_ PFILE_OBJECT FileObject);
02444 
02445 NTKERNELAPI
02446 NTSTATUS
02447 NTAPI
02448 IoCreateFileEx(
02449   _Out_ PHANDLE FileHandle,
02450   _In_ ACCESS_MASK DesiredAccess,
02451   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02452   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02453   _In_opt_ PLARGE_INTEGER AllocationSize,
02454   _In_ ULONG FileAttributes,
02455   _In_ ULONG ShareAccess,
02456   _In_ ULONG Disposition,
02457   _In_ ULONG CreateOptions,
02458   _In_opt_ PVOID EaBuffer,
02459   _In_ ULONG EaLength,
02460   _In_ CREATE_FILE_TYPE CreateFileType,
02461   _In_opt_ PVOID InternalParameters,
02462   _In_ ULONG Options,
02463   _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
02464 
02465 NTSTATUS
02466 NTAPI
02467 IoSetIrpExtraCreateParameter(
02468   _Inout_ PIRP Irp,
02469   _In_ struct _ECP_LIST *ExtraCreateParameter);
02470 
02471 VOID
02472 NTAPI
02473 IoClearIrpExtraCreateParameter(
02474   _Inout_ PIRP Irp);
02475 
02476 NTSTATUS
02477 NTAPI
02478 IoGetIrpExtraCreateParameter(
02479   _In_ PIRP Irp,
02480   _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter);
02481 
02482 BOOLEAN
02483 NTAPI
02484 IoIsFileObjectIgnoringSharing(
02485   _In_ PFILE_OBJECT FileObject);
02486 
02487 $endif (_NTDDK_)
02488 $if (_NTIFS_)
02489 
02490 FORCEINLINE
02491 VOID
02492 NTAPI
02493 IoInitializePriorityInfo(
02494     _In_ PIO_PRIORITY_INFO PriorityInfo)
02495 {
02496     PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
02497     PriorityInfo->ThreadPriority = 0xffff;
02498     PriorityInfo->IoPriority = IoPriorityNormal;
02499     PriorityInfo->PagePriority = 0;
02500 }
02501 $endif (_NTIFS_)
02502 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
02503 
02504 $if (_WDMDDK_)
02505 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
02506 
02507 #if (NTDDI_VERSION >= NTDDI_WS08)
02508 _IRQL_requires_max_(PASSIVE_LEVEL)
02509 _Must_inspect_result_
02510 NTKERNELAPI
02511 NTSTATUS
02512 NTAPI
02513 IoReplacePartitionUnit(
02514   _In_ PDEVICE_OBJECT TargetPdo,
02515   _In_ PDEVICE_OBJECT SparePdo,
02516   _In_ ULONG Flags);
02517 #endif
02518 
02519 $endif (_WDMDDK_)
02520 #if (NTDDI_VERSION >= NTDDI_WIN7)
02521 
02522 $if (_WDMDDK_)
02523 NTKERNELAPI
02524 NTSTATUS
02525 NTAPI
02526 IoGetAffinityInterrupt(
02527   _In_ PKINTERRUPT InterruptObject,
02528   _Out_ PGROUP_AFFINITY GroupAffinity);
02529 
02530 NTSTATUS
02531 NTAPI
02532 IoGetContainerInformation(
02533   _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass,
02534   _In_opt_ PVOID ContainerObject,
02535   _Inout_updates_bytes_opt_(BufferLength) PVOID Buffer,
02536   _In_ ULONG BufferLength);
02537 
02538 NTSTATUS
02539 NTAPI
02540 IoRegisterContainerNotification(
02541   _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
02542   _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
02543   _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation,
02544   _In_ ULONG NotificationInformationLength,
02545   _Out_ PVOID CallbackRegistration);
02546 
02547 VOID
02548 NTAPI
02549 IoUnregisterContainerNotification(
02550   _In_ PVOID CallbackRegistration);
02551 
02552 _IRQL_requires_max_(PASSIVE_LEVEL)
02553 __drv_freesMem(Pool)
02554 NTKERNELAPI
02555 NTSTATUS
02556 NTAPI
02557 IoUnregisterPlugPlayNotificationEx(
02558   _In_ PVOID NotificationEntry);
02559 
02560 _IRQL_requires_max_(PASSIVE_LEVEL)
02561 _Must_inspect_result_
02562 NTKERNELAPI
02563 NTSTATUS
02564 NTAPI
02565 IoGetDeviceNumaNode(
02566   _In_ PDEVICE_OBJECT Pdo,
02567   _Out_ PUSHORT NodeNumber);
02568 
02569 $endif (_WDMDDK_)
02570 $if (_NTDDK_)
02571 NTSTATUS
02572 NTAPI
02573 IoSetFileObjectIgnoreSharing(
02574   _In_ PFILE_OBJECT FileObject);
02575 
02576 $endif (_NTDDK_)
02577 $if (_NTIFS_)
02578 
02579 NTKERNELAPI
02580 NTSTATUS
02581 NTAPI
02582 IoRegisterFsRegistrationChangeMountAware(
02583   _In_ PDRIVER_OBJECT DriverObject,
02584   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
02585   _In_ BOOLEAN SynchronizeWithMounts);
02586 
02587 NTKERNELAPI
02588 NTSTATUS
02589 NTAPI
02590 IoReplaceFileObjectName(
02591   _In_ PFILE_OBJECT FileObject,
02592   _In_reads_bytes_(FileNameLength) PWSTR NewFileName,
02593   _In_ USHORT FileNameLength);
02594 $endif (_NTIFS_)
02595 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
02596 
02597 $if (_WDMDDK_)
02598 #if defined(_WIN64)
02599 NTKERNELAPI
02600 ULONG
02601 NTAPI
02602 IoWMIDeviceObjectToProviderId(
02603   _In_ PDEVICE_OBJECT DeviceObject);
02604 #else
02605 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
02606 #endif
02607 
02608 /*
02609  * USHORT
02610  * IoSizeOfIrp(
02611  *   IN CCHAR  StackSize)
02612  */
02613 #define IoSizeOfIrp(_StackSize) \
02614   ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
02615 
02616 FORCEINLINE
02617 VOID
02618 IoSkipCurrentIrpStackLocation(
02619   _Inout_ PIRP Irp)
02620 {
02621   ASSERT(Irp->CurrentLocation <= Irp->StackCount);
02622   Irp->CurrentLocation++;
02623 #ifdef NONAMELESSUNION
02624   Irp->Tail.Overlay.s.u.CurrentStackLocation++;
02625 #else
02626   Irp->Tail.Overlay.CurrentStackLocation++;
02627 #endif
02628 }
02629 
02630 FORCEINLINE
02631 VOID
02632 IoSetNextIrpStackLocation(
02633   _Inout_ PIRP Irp)
02634 {
02635   ASSERT(Irp->CurrentLocation > 0);
02636   Irp->CurrentLocation--;
02637 #ifdef NONAMELESSUNION
02638   Irp->Tail.Overlay.s.u.CurrentStackLocation--;
02639 #else
02640   Irp->Tail.Overlay.CurrentStackLocation--;
02641 #endif
02642 }
02643 
02644 __drv_aliasesMem
02645 FORCEINLINE
02646 PIO_STACK_LOCATION
02647 IoGetNextIrpStackLocation(
02648   _In_ PIRP Irp)
02649 {
02650   ASSERT(Irp->CurrentLocation > 0);
02651 #ifdef NONAMELESSUNION
02652   return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 );
02653 #else
02654   return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
02655 #endif
02656 }
02657 
02658 _IRQL_requires_max_(DISPATCH_LEVEL)
02659 FORCEINLINE
02660 VOID
02661 IoSetCompletionRoutine(
02662   _In_ PIRP Irp,
02663   _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine,
02664   _In_opt_ __drv_aliasesMem PVOID Context,
02665   _In_ BOOLEAN InvokeOnSuccess,
02666   _In_ BOOLEAN InvokeOnError,
02667   _In_ BOOLEAN InvokeOnCancel)
02668 {
02669   PIO_STACK_LOCATION irpSp;
02670   ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
02671   irpSp = IoGetNextIrpStackLocation(Irp);
02672   irpSp->CompletionRoutine = CompletionRoutine;
02673   irpSp->Context = Context;
02674   irpSp->Control = 0;
02675 
02676   if (InvokeOnSuccess) {
02677     irpSp->Control = SL_INVOKE_ON_SUCCESS;
02678   }
02679 
02680   if (InvokeOnError) {
02681     irpSp->Control |= SL_INVOKE_ON_ERROR;
02682   }
02683 
02684   if (InvokeOnCancel) {
02685     irpSp->Control |= SL_INVOKE_ON_CANCEL;
02686   }
02687 }
02688 
02689 _IRQL_requires_max_(DISPATCH_LEVEL)
02690 _Ret_maybenull_
02691 FORCEINLINE
02692 PDRIVER_CANCEL
02693 IoSetCancelRoutine(
02694     _Inout_ PIRP Irp,
02695     _In_opt_ PDRIVER_CANCEL CancelRoutine)
02696 {
02697     return (PDRIVER_CANCEL)(ULONG_PTR) InterlockedExchangePointer((PVOID *)&(Irp)->CancelRoutine, (PVOID)(ULONG_PTR)(CancelRoutine));
02698 }
02699 
02700 FORCEINLINE
02701 VOID
02702 IoRequestDpc(
02703     _Inout_ PDEVICE_OBJECT DeviceObject,
02704     _In_opt_ PIRP Irp,
02705     _In_opt_ __drv_aliasesMem PVOID Context)
02706 {
02707     KeInsertQueueDpc(&DeviceObject->Dpc, Irp, Context);
02708 }
02709 
02710 /*
02711  * VOID
02712  * IoReleaseRemoveLock(
02713  *   IN PIO_REMOVE_LOCK  RemoveLock,
02714  *   IN PVOID  Tag)
02715  */
02716 #define IoReleaseRemoveLock(_RemoveLock, \
02717                             _Tag) \
02718   IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
02719 
02720 /*
02721  * VOID
02722  * IoReleaseRemoveLockAndWait(
02723  *   IN PIO_REMOVE_LOCK  RemoveLock,
02724  *   IN PVOID  Tag)
02725  */
02726 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
02727                                    _Tag) \
02728   IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
02729 
02730 #if defined(_WIN64)
02731 _IRQL_requires_max_(DISPATCH_LEVEL)
02732 NTKERNELAPI
02733 BOOLEAN
02734 IoIs32bitProcess(
02735   _In_opt_ PIRP Irp);
02736 #endif
02737 
02738 #define PLUGPLAY_REGKEY_DEVICE                            1
02739 #define PLUGPLAY_REGKEY_DRIVER                            2
02740 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE                 4
02741 
02742 __drv_aliasesMem
02743 FORCEINLINE
02744 PIO_STACK_LOCATION
02745 IoGetCurrentIrpStackLocation(
02746   _In_ PIRP Irp)
02747 {
02748   ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
02749 #ifdef NONAMELESSUNION
02750   return Irp->Tail.Overlay.s.u.CurrentStackLocation;
02751 #else
02752   return Irp->Tail.Overlay.CurrentStackLocation;
02753 #endif
02754 }
02755 
02756 FORCEINLINE
02757 VOID
02758 IoMarkIrpPending(
02759   _Inout_ PIRP Irp)
02760 {
02761     IoGetCurrentIrpStackLocation((Irp))->Control |= SL_PENDING_RETURNED;
02762 }
02763 
02764 /*
02765  * BOOLEAN
02766  * IoIsErrorUserInduced(
02767  *   IN NTSTATUS  Status);
02768  */
02769 #define IoIsErrorUserInduced(Status) \
02770    ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
02771    ((Status) == STATUS_IO_TIMEOUT) || \
02772    ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
02773    ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
02774    ((Status) == STATUS_VERIFY_REQUIRED) || \
02775    ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
02776    ((Status) == STATUS_WRONG_VOLUME)))
02777 
02778 /* VOID
02779  * IoInitializeRemoveLock(
02780  *   IN PIO_REMOVE_LOCK  Lock,
02781  *   IN ULONG  AllocateTag,
02782  *   IN ULONG  MaxLockedMinutes,
02783  *   IN ULONG  HighWatermark)
02784  */
02785 #define IoInitializeRemoveLock( \
02786   Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
02787   IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
02788     HighWatermark, sizeof(IO_REMOVE_LOCK))
02789 
02790 FORCEINLINE
02791 VOID
02792 IoInitializeDpcRequest(
02793   _In_ PDEVICE_OBJECT DeviceObject,
02794   _In_ PIO_DPC_ROUTINE DpcRoutine)
02795 {
02796 #ifdef _MSC_VER
02797 #pragma warning(push)
02798 #pragma warning(disable:28024)
02799 #endif
02800   KeInitializeDpc(&DeviceObject->Dpc,
02801                   (PKDEFERRED_ROUTINE) DpcRoutine,
02802                   DeviceObject);
02803 #ifdef _MSC_VER
02804 #pragma warning(pop)
02805 #endif
02806 }
02807 
02808 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
02809 
02810 /*
02811  * ULONG
02812  * IoGetFunctionCodeFromCtlCode(
02813  *   IN ULONG  ControlCode)
02814  */
02815 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
02816   (((_ControlCode) >> 2) & 0x00000FFF)
02817 
02818 FORCEINLINE
02819 VOID
02820 IoCopyCurrentIrpStackLocationToNext(
02821     _Inout_ PIRP Irp)
02822 {
02823     PIO_STACK_LOCATION irpSp;
02824     PIO_STACK_LOCATION nextIrpSp;
02825     irpSp = IoGetCurrentIrpStackLocation(Irp);
02826     nextIrpSp = IoGetNextIrpStackLocation(Irp);
02827     RtlCopyMemory(nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
02828     nextIrpSp->Control = 0;
02829 }
02830 
02831 _IRQL_requires_max_(APC_LEVEL)
02832 NTKERNELAPI
02833 VOID
02834 NTAPI
02835 IoGetStackLimits(
02836   _Out_ PULONG_PTR LowLimit,
02837   _Out_ PULONG_PTR HighLimit);
02838 
02839 _IRQL_requires_max_(APC_LEVEL)
02840 FORCEINLINE
02841 ULONG_PTR
02842 IoGetRemainingStackSize(VOID)
02843 {
02844     ULONG_PTR End, Begin;
02845     ULONG_PTR Result;
02846 
02847     IoGetStackLimits(&Begin, &End);
02848     Result = (ULONG_PTR)(&End) - Begin;
02849     return Result;
02850 }
02851 
02852 #if (NTDDI_VERSION >= NTDDI_WS03)
02853 FORCEINLINE
02854 VOID
02855 IoInitializeThreadedDpcRequest(
02856     _In_ PDEVICE_OBJECT DeviceObject,
02857     _In_ PIO_DPC_ROUTINE DpcRoutine)
02858 {
02859 #ifdef _MSC_VER
02860 #pragma warning(push)
02861 #pragma warning(disable:28024)
02862 #pragma warning(disable:28128)
02863 #endif
02864     KeInitializeThreadedDpc(&DeviceObject->Dpc,
02865                             (PKDEFERRED_ROUTINE) DpcRoutine,
02866                             DeviceObject );
02867 #ifdef _MSC_VER
02868 #pragma warning(pop)
02869 #endif
02870 }
02871 #endif
02872 
02873 $endif (_WDMDDK_)

Generated on Fri May 25 2012 04:29:23 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.