Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygeniofuncs.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
1.7.6.1
|