1 /******************************************************************************
2 * I/O Manager Functions *
3 ******************************************************************************/
9 * IN PIO_REMOVE_LOCK RemoveLock,
10 * IN OPTIONAL PVOID Tag)
13 #define IoAcquireRemoveLock(RemoveLock, Tag) \
14 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
16 #define IoAcquireRemoveLock(RemoveLock, Tag) \
17 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
22 * IoAdjustPagingPathCount(
24 * IN BOOLEAN Increment)
26 #define IoAdjustPagingPathCount(_Count, \
31 InterlockedIncrement(_Count); \
35 InterlockedDecrement(_Count); \
39 #if !defined(_M_AMD64)
43 READ_PORT_BUFFER_UCHAR(
51 READ_PORT_BUFFER_ULONG(
59 READ_PORT_BUFFER_USHORT(
85 READ_REGISTER_BUFFER_UCHAR(
93 READ_REGISTER_BUFFER_ULONG(
101 READ_REGISTER_BUFFER_USHORT(
121 READ_REGISTER_USHORT(
122 IN PUSHORT Register
);
127 WRITE_PORT_BUFFER_UCHAR(
135 WRITE_PORT_BUFFER_ULONG(
143 WRITE_PORT_BUFFER_USHORT(
172 WRITE_REGISTER_BUFFER_UCHAR(
180 WRITE_REGISTER_BUFFER_ULONG(
188 WRITE_REGISTER_BUFFER_USHORT(
196 WRITE_REGISTER_UCHAR(
203 WRITE_REGISTER_ULONG(
210 WRITE_REGISTER_USHORT(
218 READ_PORT_BUFFER_UCHAR(
223 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
228 READ_PORT_BUFFER_ULONG(
233 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
238 READ_PORT_BUFFER_USHORT(
243 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
251 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
259 return __indword((USHORT
)(ULONG_PTR
)Port
);
267 return __inword((USHORT
)(ULONG_PTR
)Port
);
272 READ_REGISTER_BUFFER_UCHAR(
277 __movsb(Register
, Buffer
, Count
);
282 READ_REGISTER_BUFFER_ULONG(
287 __movsd(Register
, Buffer
, Count
);
292 READ_REGISTER_BUFFER_USHORT(
297 __movsw(Register
, Buffer
, Count
);
303 IN
volatile UCHAR
*Register
)
311 IN
volatile ULONG
*Register
)
318 READ_REGISTER_USHORT(
319 IN
volatile USHORT
*Register
)
326 WRITE_PORT_BUFFER_UCHAR(
331 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
336 WRITE_PORT_BUFFER_ULONG(
341 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
346 WRITE_PORT_BUFFER_USHORT(
351 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
360 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
369 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
378 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
383 WRITE_REGISTER_BUFFER_UCHAR(
389 __movsb(Register
, Buffer
, Count
);
390 InterlockedOr(&Synch
, 1);
395 WRITE_REGISTER_BUFFER_ULONG(
401 __movsd(Register
, Buffer
, Count
);
402 InterlockedOr(&Synch
, 1);
407 WRITE_REGISTER_BUFFER_USHORT(
413 __movsw(Register
, Buffer
, Count
);
414 InterlockedOr(&Synch
, 1);
419 WRITE_REGISTER_UCHAR(
420 IN
volatile UCHAR
*Register
,
425 InterlockedOr(&Synch
, 1);
430 WRITE_REGISTER_ULONG(
431 IN
volatile ULONG
*Register
,
436 InterlockedOr(&Synch
, 1);
441 WRITE_REGISTER_USHORT(
442 IN
volatile USHORT
*Register
,
447 InterlockedOr(&Sync
, 1);
451 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
452 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
454 #define DMA_MACROS_DEFINED
458 IoAllocateAdapterChannel(
459 IN PDMA_ADAPTER DmaAdapter
,
460 IN PDEVICE_OBJECT DeviceObject
,
461 IN ULONG NumberOfMapRegisters
,
462 IN PDRIVER_CONTROL ExecutionRoutine
,
465 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
466 AllocateAdapterChannel
=
467 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
468 ASSERT(AllocateAdapterChannel
);
469 return AllocateAdapterChannel(DmaAdapter
,
471 NumberOfMapRegisters
,
479 IoFlushAdapterBuffers(
480 IN PDMA_ADAPTER DmaAdapter
,
482 IN PVOID MapRegisterBase
,
485 IN BOOLEAN WriteToDevice
)
487 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
488 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
489 ASSERT(FlushAdapterBuffers
);
490 return FlushAdapterBuffers(DmaAdapter
,
501 IoFreeAdapterChannel(
502 IN PDMA_ADAPTER DmaAdapter
)
504 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
505 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
506 ASSERT(FreeAdapterChannel
);
507 FreeAdapterChannel(DmaAdapter
);
514 IN PDMA_ADAPTER DmaAdapter
,
515 IN PVOID MapRegisterBase
,
516 IN ULONG NumberOfMapRegisters
)
518 PFREE_MAP_REGISTERS FreeMapRegisters
;
519 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
520 ASSERT(FreeMapRegisters
);
521 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
528 IN PDMA_ADAPTER DmaAdapter
,
530 IN PVOID MapRegisterBase
,
532 IN OUT PULONG Length
,
533 IN BOOLEAN WriteToDevice
)
535 PMAP_TRANSFER MapTransfer
;
537 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
539 return MapTransfer(DmaAdapter
,
551 * VOID IoAssignArcName(
552 * IN PUNICODE_STRING ArcName,
553 * IN PUNICODE_STRING DeviceName);
555 #define IoAssignArcName(_ArcName, _DeviceName) ( \
556 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
561 * IN PUNICODE_STRING ArcName)
563 #define IoDeassignArcName IoDeleteSymbolicLink
568 IoInitializeDriverCreateContext(
569 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
571 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
572 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
577 #define IoIsFileOpenedExclusively(FileObject) ( \
579 (FileObject)->SharedRead || \
580 (FileObject)->SharedWrite || \
581 (FileObject)->SharedDelete \
585 #if (NTDDI_VERSION == NTDDI_WIN2K)
589 IoRegisterFsRegistrationChangeEx(
590 IN PDRIVER_OBJECT DriverObject
,
591 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
594 #if (NTDDI_VERSION >= NTDDI_WIN2K)
600 IoAcquireCancelSpinLock(
606 IoAcquireRemoveLockEx(
607 IN PIO_REMOVE_LOCK RemoveLock
,
608 IN PVOID Tag OPTIONAL
,
611 IN ULONG RemlockSize
);
615 IoAllocateDriverObjectExtension(
616 IN PDRIVER_OBJECT DriverObject
,
617 IN PVOID ClientIdentificationAddress
,
618 IN ULONG DriverObjectExtensionSize
,
619 OUT PVOID
*DriverObjectExtension
);
624 IoAllocateErrorLogEntry(
633 IN BOOLEAN ChargeQuota
);
639 IN PVOID VirtualAddress OPTIONAL
,
641 IN BOOLEAN SecondaryBuffer
,
642 IN BOOLEAN ChargeQuota
,
643 IN OUT PIRP Irp OPTIONAL
);
649 IN PDEVICE_OBJECT DeviceObject
);
655 IN PDEVICE_OBJECT SourceDevice
,
656 IN PUNICODE_STRING TargetDevice
,
657 OUT PDEVICE_OBJECT
*AttachedDevice
);
662 IoAttachDeviceToDeviceStack(
663 IN PDEVICE_OBJECT SourceDevice
,
664 IN PDEVICE_OBJECT TargetDevice
);
669 IoBuildAsynchronousFsdRequest(
670 IN ULONG MajorFunction
,
671 IN PDEVICE_OBJECT DeviceObject
,
672 IN OUT PVOID Buffer OPTIONAL
,
673 IN ULONG Length OPTIONAL
,
674 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
675 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
680 IoBuildDeviceIoControlRequest(
681 IN ULONG IoControlCode
,
682 IN PDEVICE_OBJECT DeviceObject
,
683 IN PVOID InputBuffer OPTIONAL
,
684 IN ULONG InputBufferLength
,
685 OUT PVOID OutputBuffer OPTIONAL
,
686 IN ULONG OutputBufferLength
,
687 IN BOOLEAN InternalDeviceIoControl
,
689 OUT PIO_STATUS_BLOCK IoStatusBlock
);
696 IN OUT PMDL TargetMdl
,
697 IN PVOID VirtualAddress
,
703 IoBuildSynchronousFsdRequest(
704 IN ULONG MajorFunction
,
705 IN PDEVICE_OBJECT DeviceObject
,
706 IN OUT PVOID Buffer OPTIONAL
,
707 IN ULONG Length OPTIONAL
,
708 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
710 OUT PIO_STATUS_BLOCK IoStatusBlock
);
716 IN PDEVICE_OBJECT DeviceObject
,
718 #define IoCallDriver IofCallDriver
725 IN CCHAR PriorityBoost
);
726 #define IoCompleteRequest IofCompleteRequest
738 IN ACCESS_MASK DesiredAccess
,
739 IN ULONG DesiredShareAccess
,
740 IN OUT PFILE_OBJECT FileObject
,
741 IN OUT PSHARE_ACCESS ShareAccess
,
749 IN CCHAR PriorityBoost
);
755 OUT PKINTERRUPT
*InterruptObject
,
756 IN PKSERVICE_ROUTINE ServiceRoutine
,
757 IN PVOID ServiceContext OPTIONAL
,
758 IN PKSPIN_LOCK SpinLock OPTIONAL
,
761 IN KIRQL SynchronizeIrql
,
762 IN KINTERRUPT_MODE InterruptMode
,
763 IN BOOLEAN ShareVector
,
764 IN KAFFINITY ProcessorEnableMask
,
765 IN BOOLEAN FloatingSave
);
771 IN PDRIVER_OBJECT DriverObject
,
772 IN ULONG DeviceExtensionSize
,
773 IN PUNICODE_STRING DeviceName OPTIONAL
,
774 IN DEVICE_TYPE DeviceType
,
775 IN ULONG DeviceCharacteristics
,
776 IN BOOLEAN Exclusive
,
777 OUT PDEVICE_OBJECT
*DeviceObject
);
783 OUT PHANDLE FileHandle
,
784 IN ACCESS_MASK DesiredAccess
,
785 IN POBJECT_ATTRIBUTES ObjectAttributes
,
786 OUT PIO_STATUS_BLOCK IoStatusBlock
,
787 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
788 IN ULONG FileAttributes
,
789 IN ULONG ShareAccess
,
790 IN ULONG Disposition
,
791 IN ULONG CreateOptions
,
792 IN PVOID EaBuffer OPTIONAL
,
794 IN CREATE_FILE_TYPE CreateFileType
,
795 IN PVOID InternalParameters OPTIONAL
,
801 IoCreateNotificationEvent(
802 IN PUNICODE_STRING EventName
,
803 OUT PHANDLE EventHandle
);
808 IoCreateSymbolicLink(
809 IN PUNICODE_STRING SymbolicLinkName
,
810 IN PUNICODE_STRING DeviceName
);
815 IoCreateSynchronizationEvent(
816 IN PUNICODE_STRING EventName
,
817 OUT PHANDLE EventHandle
);
822 IoCreateUnprotectedSymbolicLink(
823 IN PUNICODE_STRING SymbolicLinkName
,
824 IN PUNICODE_STRING DeviceName
);
830 IN PDEVICE_OBJECT DeviceObject
);
835 IoDeleteSymbolicLink(
836 IN PUNICODE_STRING SymbolicLinkName
);
842 IN OUT PDEVICE_OBJECT TargetDevice
);
847 IoDisconnectInterrupt(
848 IN PKINTERRUPT InterruptObject
);
866 IN PIO_WORKITEM IoWorkItem
);
872 IN PDEVICE_OBJECT DeviceObject
);
877 IoGetAttachedDeviceReference(
878 IN PDEVICE_OBJECT DeviceObject
);
883 IoGetBootDiskInformation(
884 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
890 IoGetDeviceInterfaceAlias(
891 IN PUNICODE_STRING SymbolicLinkName
,
892 IN CONST GUID
*AliasInterfaceClassGuid
,
893 OUT PUNICODE_STRING AliasSymbolicLinkName
);
898 IoGetCurrentProcess(VOID
);
903 IoGetDeviceInterfaces(
904 IN CONST GUID
*InterfaceClassGuid
,
905 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
907 OUT PWSTR
*SymbolicLinkList
);
912 IoGetDeviceObjectPointer(
913 IN PUNICODE_STRING ObjectName
,
914 IN ACCESS_MASK DesiredAccess
,
915 OUT PFILE_OBJECT
*FileObject
,
916 OUT PDEVICE_OBJECT
*DeviceObject
);
922 IN PDEVICE_OBJECT DeviceObject
,
923 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
924 IN ULONG BufferLength
,
925 OUT PVOID PropertyBuffer
,
926 OUT PULONG ResultLength
);
932 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
933 IN PDEVICE_DESCRIPTION DeviceDescription
,
934 IN OUT PULONG NumberOfMapRegisters
);
939 IoGetDriverObjectExtension(
940 IN PDRIVER_OBJECT DriverObject
,
941 IN PVOID ClientIdentificationAddress
);
946 IoGetInitialStack(VOID
);
951 IoGetRelatedDeviceObject(
952 IN PFILE_OBJECT FileObject
);
958 IN PIO_WORKITEM IoWorkItem
,
959 IN PIO_WORKITEM_ROUTINE WorkerRoutine
,
960 IN WORK_QUEUE_TYPE QueueType
,
961 IN PVOID Context OPTIONAL
);
968 IN USHORT PacketSize
,
974 IoInitializeRemoveLockEx(
975 IN PIO_REMOVE_LOCK Lock
,
976 IN ULONG AllocateTag
,
977 IN ULONG MaxLockedMinutes
,
978 IN ULONG HighWatermark
,
979 IN ULONG RemlockSize
);
985 IN PDEVICE_OBJECT DeviceObject
,
986 IN PIO_TIMER_ROUTINE TimerRoutine
,
987 IN PVOID Context OPTIONAL
);
992 IoInvalidateDeviceRelations(
993 IN PDEVICE_OBJECT DeviceObject
,
994 IN DEVICE_RELATION_TYPE Type
);
999 IoInvalidateDeviceState(
1000 IN PDEVICE_OBJECT PhysicalDeviceObject
);
1005 IoIsWdmVersionAvailable(
1006 IN UCHAR MajorVersion
,
1007 IN UCHAR MinorVersion
);
1012 IoOpenDeviceInterfaceRegistryKey(
1013 IN PUNICODE_STRING SymbolicLinkName
,
1014 IN ACCESS_MASK DesiredAccess
,
1015 OUT PHANDLE DeviceInterfaceKey
);
1020 IoOpenDeviceRegistryKey(
1021 IN PDEVICE_OBJECT DeviceObject
,
1022 IN ULONG DevInstKeyType
,
1023 IN ACCESS_MASK DesiredAccess
,
1024 OUT PHANDLE DevInstRegKey
);
1029 IoRegisterDeviceInterface(
1030 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1031 IN CONST GUID
*InterfaceClassGuid
,
1032 IN PUNICODE_STRING ReferenceString OPTIONAL
,
1033 OUT PUNICODE_STRING SymbolicLinkName
);
1038 IoRegisterPlugPlayNotification(
1039 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
1040 IN ULONG EventCategoryFlags
,
1041 IN PVOID EventCategoryData OPTIONAL
,
1042 IN PDRIVER_OBJECT DriverObject
,
1043 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
1044 IN OUT PVOID Context OPTIONAL
,
1045 OUT PVOID
*NotificationEntry
);
1050 IoRegisterShutdownNotification(
1051 IN PDEVICE_OBJECT DeviceObject
);
1056 IoReleaseCancelSpinLock(
1062 IoReleaseRemoveLockAndWaitEx(
1063 IN PIO_REMOVE_LOCK RemoveLock
,
1064 IN PVOID Tag OPTIONAL
,
1065 IN ULONG RemlockSize
);
1070 IoReleaseRemoveLockEx(
1071 IN PIO_REMOVE_LOCK RemoveLock
,
1072 IN PVOID Tag OPTIONAL
,
1073 IN ULONG RemlockSize
);
1078 IoRemoveShareAccess(
1079 IN PFILE_OBJECT FileObject
,
1080 IN OUT PSHARE_ACCESS ShareAccess
);
1085 IoReportTargetDeviceChange(
1086 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1087 IN PVOID NotificationStructure
);
1092 IoReportTargetDeviceChangeAsynchronous(
1093 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1094 IN PVOID NotificationStructure
,
1095 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
1096 IN PVOID Context OPTIONAL
);
1101 IoRequestDeviceEject(
1102 IN PDEVICE_OBJECT PhysicalDeviceObject
);
1109 IN NTSTATUS Status
);
1114 IoSetDeviceInterfaceState(
1115 IN PUNICODE_STRING SymbolicLinkName
,
1122 IN ACCESS_MASK DesiredAccess
,
1123 IN ULONG DesiredShareAccess
,
1124 IN OUT PFILE_OBJECT FileObject
,
1125 OUT PSHARE_ACCESS ShareAccess
);
1131 IN PDEVICE_OBJECT DeviceObject
,
1132 IN BOOLEAN Cancelable
);
1137 IoStartNextPacketByKey(
1138 IN PDEVICE_OBJECT DeviceObject
,
1139 IN BOOLEAN Cancelable
,
1146 IN PDEVICE_OBJECT DeviceObject
,
1148 IN PULONG Key OPTIONAL
,
1149 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
1155 IN PDEVICE_OBJECT DeviceObject
);
1161 IN PDEVICE_OBJECT DeviceObject
);
1166 IoUnregisterPlugPlayNotification(
1167 IN PVOID NotificationEntry
);
1172 IoUnregisterShutdownNotification(
1173 IN PDEVICE_OBJECT DeviceObject
);
1178 IoUpdateShareAccess(
1179 IN PFILE_OBJECT FileObject
,
1180 IN OUT PSHARE_ACCESS ShareAccess
);
1185 IoWMIAllocateInstanceIds(
1187 IN ULONG InstanceCount
,
1188 OUT ULONG
*FirstInstanceId
);
1193 IoWMIQuerySingleInstanceMultiple(
1194 IN PVOID
*DataBlockObjectList
,
1195 IN PUNICODE_STRING InstanceNames
,
1196 IN ULONG ObjectCount
,
1197 IN OUT ULONG
*InOutBufferSize
,
1198 OUT PVOID OutBuffer
);
1203 IoWMIRegistrationControl(
1204 IN PDEVICE_OBJECT DeviceObject
,
1210 IoWMISuggestInstanceName(
1211 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
1212 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
1213 IN BOOLEAN CombineNames
,
1214 OUT PUNICODE_STRING SuggestedInstanceName
);
1220 IN OUT PVOID WnodeEventItem
);
1225 IoWriteErrorLogEntry(
1231 IoGetTopLevelIrp(VOID
);
1236 IoRegisterLastChanceShutdownNotification(
1237 IN PDEVICE_OBJECT DeviceObject
);
1243 IN PIRP Irp OPTIONAL
);
1247 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1251 IoAllocateAdapterChannel(
1252 IN PADAPTER_OBJECT AdapterObject
,
1253 IN PDEVICE_OBJECT DeviceObject
,
1254 IN ULONG NumberOfMapRegisters
,
1255 IN PDRIVER_CONTROL ExecutionRoutine
,
1259 #if !defined(DMA_MACROS_DEFINED)
1260 //DECLSPEC_DEPRECATED_DDK
1265 IN PADAPTER_OBJECT AdapterObject
,
1267 IN PVOID MapRegisterBase
,
1269 IN OUT PULONG Length
,
1270 IN BOOLEAN WriteToDevice
);
1276 IoAllocateController(
1277 IN PCONTROLLER_OBJECT ControllerObject
,
1278 IN PDEVICE_OBJECT DeviceObject
,
1279 IN PDRIVER_CONTROL ExecutionRoutine
,
1280 IN PVOID Context OPTIONAL
);
1292 IN PCONTROLLER_OBJECT ControllerObject
);
1298 IN PCONTROLLER_OBJECT ControllerObject
);
1301 PCONFIGURATION_INFORMATION
1303 IoGetConfigurationInformation(VOID
);
1308 IoGetDeviceToVerify(
1309 IN PETHREAD Thread
);
1315 IN PDEVICE_OBJECT DeviceObject
,
1316 IN PFILE_OBJECT FileObject
);
1321 IoGetFileObjectGenericMapping(VOID
);
1326 IoMakeAssociatedIrp(
1328 IN CCHAR StackSize
);
1333 IoQueryDeviceDescription(
1334 IN PINTERFACE_TYPE BusType OPTIONAL
,
1335 IN PULONG BusNumber OPTIONAL
,
1336 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
1337 IN PULONG ControllerNumber OPTIONAL
,
1338 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
1339 IN PULONG PeripheralNumber OPTIONAL
,
1340 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
1341 IN OUT PVOID Context OPTIONAL
);
1348 IN PVPB Vpb OPTIONAL
,
1349 IN PDEVICE_OBJECT RealDeviceObject
);
1354 IoRaiseInformationalHardError(
1355 IN NTSTATUS ErrorStatus
,
1356 IN PUNICODE_STRING String OPTIONAL
,
1357 IN PKTHREAD Thread OPTIONAL
);
1362 IoRegisterBootDriverReinitialization(
1363 IN PDRIVER_OBJECT DriverObject
,
1364 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
1365 IN PVOID Context OPTIONAL
);
1370 IoRegisterDriverReinitialization(
1371 IN PDRIVER_OBJECT DriverObject
,
1372 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
1373 IN PVOID Context OPTIONAL
);
1378 IoAttachDeviceByPointer(
1379 IN PDEVICE_OBJECT SourceDevice
,
1380 IN PDEVICE_OBJECT TargetDevice
);
1385 IoReportDetectedDevice(
1386 IN PDRIVER_OBJECT DriverObject
,
1387 IN INTERFACE_TYPE LegacyBusType
,
1389 IN ULONG SlotNumber
,
1390 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
1391 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
1392 IN BOOLEAN ResourceAssigned
,
1393 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
1398 IoReportResourceForDetection(
1399 IN PDRIVER_OBJECT DriverObject
,
1400 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
1401 IN ULONG DriverListSize OPTIONAL
,
1402 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
1403 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
1404 IN ULONG DeviceListSize OPTIONAL
,
1405 OUT PBOOLEAN ConflictDetected
);
1410 IoReportResourceUsage(
1411 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1412 IN PDRIVER_OBJECT DriverObject
,
1413 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
1414 IN ULONG DriverListSize OPTIONAL
,
1415 IN PDEVICE_OBJECT DeviceObject
,
1416 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
1417 IN ULONG DeviceListSize OPTIONAL
,
1418 IN BOOLEAN OverrideConflict
,
1419 OUT PBOOLEAN ConflictDetected
);
1424 IoSetHardErrorOrVerifyDevice(
1426 IN PDEVICE_OBJECT DeviceObject
);
1432 IN PUNICODE_STRING RegistryPath
,
1433 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1434 IN PDRIVER_OBJECT DriverObject
,
1435 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
1436 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
1437 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1442 IoSetThreadHardErrorMode(
1443 IN BOOLEAN EnableHardErrors
);
1451 IoAcquireVpbSpinLock(
1457 IoCheckDesiredAccess(
1458 IN OUT PACCESS_MASK DesiredAccess
,
1459 IN ACCESS_MASK GrantedAccess
);
1464 IoCheckEaBufferValidity(
1465 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
1467 OUT PULONG ErrorOffset
);
1472 IoCheckFunctionAccess(
1473 IN ACCESS_MASK GrantedAccess
,
1474 IN UCHAR MajorFunction
,
1475 IN UCHAR MinorFunction
,
1476 IN ULONG IoControlCode
,
1477 IN PVOID Argument1 OPTIONAL
,
1478 IN PVOID Argument2 OPTIONAL
);
1483 IoCheckQuerySetFileInformation(
1484 IN FILE_INFORMATION_CLASS FileInformationClass
,
1486 IN BOOLEAN SetOperation
);
1491 IoCheckQuerySetVolumeInformation(
1492 IN FS_INFORMATION_CLASS FsInformationClass
,
1494 IN BOOLEAN SetOperation
);
1499 IoCheckQuotaBufferValidity(
1500 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
1501 IN ULONG QuotaLength
,
1502 OUT PULONG ErrorOffset
);
1507 IoCreateStreamFileObject(
1508 IN PFILE_OBJECT FileObject OPTIONAL
,
1509 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
1514 IoCreateStreamFileObjectLite(
1515 IN PFILE_OBJECT FileObject OPTIONAL
,
1516 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
1521 IoFastQueryNetworkAttributes(
1522 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1523 IN ACCESS_MASK DesiredAccess
,
1524 IN ULONG OpenOptions
,
1525 OUT PIO_STATUS_BLOCK IoStatus
,
1526 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
);
1532 IN PFILE_OBJECT FileObject
,
1534 IN PLARGE_INTEGER Offset
,
1536 OUT PIO_STATUS_BLOCK IoStatusBlock
);
1541 IoGetBaseFileSystemDeviceObject(
1542 IN PFILE_OBJECT FileObject
);
1545 PCONFIGURATION_INFORMATION
1547 IoGetConfigurationInformation(VOID
);
1552 IoGetRequestorProcessId(
1558 IoGetRequestorProcess(
1564 IoGetTopLevelIrp(VOID
);
1569 IoIsOperationSynchronous(
1576 IN PETHREAD Thread
);
1581 IoIsValidNameGraftingBuffer(
1583 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
1588 IoQueryFileInformation(
1589 IN PFILE_OBJECT FileObject
,
1590 IN FILE_INFORMATION_CLASS FileInformationClass
,
1592 OUT PVOID FileInformation
,
1593 OUT PULONG ReturnedLength
);
1598 IoQueryVolumeInformation(
1599 IN PFILE_OBJECT FileObject
,
1600 IN FS_INFORMATION_CLASS FsInformationClass
,
1602 OUT PVOID FsInformation
,
1603 OUT PULONG ReturnedLength
);
1614 IoRegisterFileSystem(
1615 IN PDEVICE_OBJECT DeviceObject
);
1620 IoRegisterFsRegistrationChange(
1621 IN PDRIVER_OBJECT DriverObject
,
1622 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
1627 IoReleaseVpbSpinLock(
1633 IoSetDeviceToVerify(
1635 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
1641 IN PFILE_OBJECT FileObject
,
1642 IN FILE_INFORMATION_CLASS FileInformationClass
,
1644 IN PVOID FileInformation
);
1650 IN PIRP Irp OPTIONAL
);
1655 IoSynchronousPageWrite(
1656 IN PFILE_OBJECT FileObject
,
1658 IN PLARGE_INTEGER FileOffset
,
1660 OUT PIO_STATUS_BLOCK IoStatusBlock
);
1666 IN PETHREAD Thread
);
1671 IoUnregisterFileSystem(
1672 IN PDEVICE_OBJECT DeviceObject
);
1677 IoUnregisterFsRegistrationChange(
1678 IN PDRIVER_OBJECT DriverObject
,
1679 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
1685 IN PDEVICE_OBJECT DeviceObject
,
1686 IN BOOLEAN AllowRawMount
);
1691 IoGetRequestorSessionId(
1693 OUT PULONG pSessionId
);
1696 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1699 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
1704 IoIsFileOriginRemote(
1705 IN PFILE_OBJECT FileObject
);
1711 IN PFILE_OBJECT FileObject
,
1714 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
1717 #if (NTDDI_VERSION >= NTDDI_WINXP)
1725 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
1726 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
1727 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
1728 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
1729 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
1730 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
1738 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
);
1745 IN PIO_CSQ_IRP_CONTEXT Context
);
1752 IN PVOID PeekContext OPTIONAL
);
1757 IoForwardIrpSynchronously(
1758 IN PDEVICE_OBJECT DeviceObject
,
1761 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
1766 IoFreeErrorLogEntry(
1772 IoSetCompletionRoutineEx(
1773 IN PDEVICE_OBJECT DeviceObject
,
1775 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
1777 IN BOOLEAN InvokeOnSuccess
,
1778 IN BOOLEAN InvokeOnError
,
1779 IN BOOLEAN InvokeOnCancel
);
1783 IoSetStartIoAttributes(
1784 IN PDEVICE_OBJECT DeviceObject
,
1785 IN BOOLEAN DeferredStartIo
,
1786 IN BOOLEAN NonCancelable
);
1791 IoWMIDeviceObjectToInstanceName(
1792 IN PVOID DataBlockObject
,
1793 IN PDEVICE_OBJECT DeviceObject
,
1794 OUT PUNICODE_STRING InstanceName
);
1800 IN PVOID DataBlockObject
,
1801 IN PUNICODE_STRING InstanceName
,
1803 IN ULONG InBufferSize
,
1804 IN OUT PULONG OutBufferSize
,
1805 IN OUT PUCHAR InOutBuffer
);
1810 IoWMIHandleToInstanceName(
1811 IN PVOID DataBlockObject
,
1812 IN HANDLE FileHandle
,
1813 OUT PUNICODE_STRING InstanceName
);
1819 IN GUID
*DataBlockGuid
,
1820 IN ULONG DesiredAccess
,
1821 OUT PVOID
*DataBlockObject
);
1827 IN PVOID DataBlockObject
,
1828 IN OUT ULONG
*InOutBufferSize
,
1829 OUT PVOID OutBuffer
);
1834 IoWMIQueryAllDataMultiple(
1835 IN PVOID
*DataBlockObjectList
,
1836 IN ULONG ObjectCount
,
1837 IN OUT ULONG
*InOutBufferSize
,
1838 OUT PVOID OutBuffer
);
1843 IoWMIQuerySingleInstance(
1844 IN PVOID DataBlockObject
,
1845 IN PUNICODE_STRING InstanceName
,
1846 IN OUT ULONG
*InOutBufferSize
,
1847 OUT PVOID OutBuffer
);
1852 IoWMISetNotificationCallback(
1853 IN OUT PVOID Object
,
1854 IN WMI_NOTIFICATION_CALLBACK Callback
,
1855 IN PVOID Context OPTIONAL
);
1860 IoWMISetSingleInstance(
1861 IN PVOID DataBlockObject
,
1862 IN PUNICODE_STRING InstanceName
,
1864 IN ULONG ValueBufferSize
,
1865 IN PVOID ValueBuffer
);
1871 IN PVOID DataBlockObject
,
1872 IN PUNICODE_STRING InstanceName
,
1873 IN ULONG DataItemId
,
1875 IN ULONG ValueBufferSize
,
1876 IN PVOID ValueBuffer
);
1882 IoReadPartitionTable(
1883 IN PDEVICE_OBJECT DeviceObject
,
1884 IN ULONG SectorSize
,
1885 IN BOOLEAN ReturnRecognizedPartitions
,
1886 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1891 IoSetPartitionInformation(
1892 IN PDEVICE_OBJECT DeviceObject
,
1893 IN ULONG SectorSize
,
1894 IN ULONG PartitionNumber
,
1895 IN ULONG PartitionType
);
1900 IoWritePartitionTable(
1901 IN PDEVICE_OBJECT DeviceObject
,
1902 IN ULONG SectorSize
,
1903 IN ULONG SectorsPerTrack
,
1904 IN ULONG NumberOfHeads
,
1905 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1911 IN PDEVICE_OBJECT DeviceObject
,
1912 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
1917 IoReadDiskSignature(
1918 IN PDEVICE_OBJECT DeviceObject
,
1919 IN ULONG BytesPerSector
,
1920 OUT PDISK_SIGNATURE Signature
);
1925 IoReadPartitionTableEx(
1926 IN PDEVICE_OBJECT DeviceObject
,
1927 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
1932 IoSetPartitionInformationEx(
1933 IN PDEVICE_OBJECT DeviceObject
,
1934 IN ULONG PartitionNumber
,
1935 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
1940 IoSetSystemPartition(
1941 IN PUNICODE_STRING VolumeNameString
);
1946 IoVerifyPartitionTable(
1947 IN PDEVICE_OBJECT DeviceObject
,
1948 IN BOOLEAN FixErrors
);
1953 IoVolumeDeviceToDosName(
1954 IN PVOID VolumeDeviceObject
,
1955 OUT PUNICODE_STRING DosName
);
1960 IoWritePartitionTableEx(
1961 IN PDEVICE_OBJECT DeviceObject
,
1962 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
1967 IoCreateFileSpecifyDeviceObjectHint(
1968 OUT PHANDLE FileHandle
,
1969 IN ACCESS_MASK DesiredAccess
,
1970 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1971 OUT PIO_STATUS_BLOCK IoStatusBlock
,
1972 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
1973 IN ULONG FileAttributes
,
1974 IN ULONG ShareAccess
,
1975 IN ULONG Disposition
,
1976 IN ULONG CreateOptions
,
1977 IN PVOID EaBuffer OPTIONAL
,
1979 IN CREATE_FILE_TYPE CreateFileType
,
1980 IN PVOID InternalParameters OPTIONAL
,
1982 IN PVOID DeviceObject OPTIONAL
);
1987 IoAttachDeviceToDeviceStackSafe(
1988 IN PDEVICE_OBJECT SourceDevice
,
1989 IN PDEVICE_OBJECT TargetDevice
,
1990 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
1998 IoCreateStreamFileObjectEx(
1999 IN PFILE_OBJECT FileObject OPTIONAL
,
2000 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2001 OUT PHANDLE FileObjectHandle OPTIONAL
);
2006 IoQueryFileDosDeviceName(
2007 IN PFILE_OBJECT FileObject
,
2008 OUT POBJECT_NAME_INFORMATION
*ObjectNameInformation
);
2013 IoEnumerateDeviceObjectList(
2014 IN PDRIVER_OBJECT DriverObject
,
2015 OUT PDEVICE_OBJECT
*DeviceObjectList
,
2016 IN ULONG DeviceObjectListSize
,
2017 OUT PULONG ActualNumberDeviceObjects
);
2022 IoGetLowerDeviceObject(
2023 IN PDEVICE_OBJECT DeviceObject
);
2028 IoGetDeviceAttachmentBaseRef(
2029 IN PDEVICE_OBJECT DeviceObject
);
2034 IoGetDiskDeviceObject(
2035 IN PDEVICE_OBJECT FileSystemDeviceObject
,
2036 OUT PDEVICE_OBJECT
*DiskDeviceObject
);
2039 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2042 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
2046 IoValidateDeviceIoControlAccess(
2048 IN ULONG RequiredAccess
);
2052 $
if (_WDMDDK_
|| _NTDDK_
)
2053 #if (NTDDI_VERSION >= NTDDI_WS03)
2059 IoGetPagingIoPriority(
2069 IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
2070 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
2071 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
2072 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
2073 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
2074 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
2082 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
,
2083 IN PVOID InsertContext OPTIONAL
);
2085 $
if (_WDMDDK_
|| _NTDDK_
)
2086 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
2088 $
if (_NTDDK_
|| _NTIFS_
)
2089 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2095 IoTranslateBusAddress(
2096 IN INTERFACE_TYPE InterfaceType
,
2098 IN PHYSICAL_ADDRESS BusAddress
,
2099 IN OUT PULONG AddressSpace
,
2100 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2107 IoEnumerateRegisteredFiltersList(
2108 OUT PDRIVER_OBJECT
*DriverObjectList
,
2109 IN ULONG DriverObjectListSize
,
2110 OUT PULONG ActualNumberDriverObjects
);
2112 $
if (_NTDDK_
|| _NTIFS_
)
2113 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
2116 #if (NTDDI_VERSION >= NTDDI_VISTA)
2121 IoGetBootDiskInformationLite(
2122 OUT PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
2127 IoCheckShareAccessEx(
2128 IN ACCESS_MASK DesiredAccess
,
2129 IN ULONG DesiredShareAccess
,
2130 IN OUT PFILE_OBJECT FileObject
,
2131 IN OUT PSHARE_ACCESS ShareAccess
,
2133 IN PBOOLEAN WritePermission
);
2138 IoConnectInterruptEx(
2139 IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
2144 IoDisconnectInterruptEx(
2145 IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
2149 IoWithinStackLimits(
2150 IN ULONG_PTR RegionStart
,
2151 IN SIZE_T RegionSize
);
2157 IN ACCESS_MASK DesiredAccess
,
2158 IN ULONG DesiredShareAccess
,
2159 IN OUT PFILE_OBJECT FileObject
,
2160 OUT PSHARE_ACCESS ShareAccess
,
2161 IN PBOOLEAN WritePermission
);
2165 IoSizeofWorkItem(VOID
);
2169 IoInitializeWorkItem(
2171 IN PIO_WORKITEM IoWorkItem
);
2175 IoUninitializeWorkItem(
2176 IN PIO_WORKITEM IoWorkItem
);
2181 IN PIO_WORKITEM IoWorkItem
,
2182 IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
2183 IN WORK_QUEUE_TYPE QueueType
,
2184 IN PVOID Context OPTIONAL
);
2188 IoGetIoPriorityHint(
2193 IoSetIoPriorityHint(
2195 IN IO_PRIORITY_HINT PriorityHint
);
2199 IoAllocateSfioStreamIdentifier(
2200 IN PFILE_OBJECT FileObject
,
2203 OUT PVOID
*StreamIdentifier
);
2207 IoGetSfioStreamIdentifier(
2208 IN PFILE_OBJECT FileObject
,
2209 IN PVOID Signature
);
2213 IoFreeSfioStreamIdentifier(
2214 IN PFILE_OBJECT FileObject
,
2215 IN PVOID Signature
);
2220 IoRequestDeviceEjectEx(
2221 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2222 IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL
,
2223 IN PVOID Context OPTIONAL
,
2224 IN PDRIVER_OBJECT DriverObject OPTIONAL
);
2229 IoSetDevicePropertyData(
2230 IN PDEVICE_OBJECT Pdo
,
2231 IN CONST DEVPROPKEY
*PropertyKey
,
2234 IN DEVPROPTYPE Type
,
2236 IN PVOID Data OPTIONAL
);
2241 IoGetDevicePropertyData(
2243 CONST DEVPROPKEY
*PropertyKey
,
2248 PULONG RequiredSize
,
2256 IoUpdateDiskGeometry(
2257 IN PDEVICE_OBJECT DeviceObject
,
2258 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
2259 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
2261 PTXN_PARAMETER_BLOCK
2263 IoGetTransactionParameterBlock(
2264 IN PFILE_OBJECT FileObject
);
2270 OUT PHANDLE FileHandle
,
2271 IN ACCESS_MASK DesiredAccess
,
2272 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2273 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2274 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
2275 IN ULONG FileAttributes
,
2276 IN ULONG ShareAccess
,
2277 IN ULONG Disposition
,
2278 IN ULONG CreateOptions
,
2279 IN PVOID EaBuffer OPTIONAL
,
2281 IN CREATE_FILE_TYPE CreateFileType
,
2282 IN PVOID InternalParameters OPTIONAL
,
2284 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
2288 IoSetIrpExtraCreateParameter(
2290 IN
struct _ECP_LIST
*ExtraCreateParameter
);
2294 IoClearIrpExtraCreateParameter(
2299 IoGetIrpExtraCreateParameter(
2301 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
2305 IoIsFileObjectIgnoringSharing(
2306 IN PFILE_OBJECT FileObject
);
2314 IoInitializePriorityInfo(
2315 IN PIO_PRIORITY_INFO PriorityInfo
)
2317 PriorityInfo
->Size
= sizeof(IO_PRIORITY_INFO
);
2318 PriorityInfo
->ThreadPriority
= 0xffff;
2319 PriorityInfo
->IoPriority
= IoPriorityNormal
;
2320 PriorityInfo
->PagePriority
= 0;
2323 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2326 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
2328 #if (NTDDI_VERSION >= NTDDI_WS08)
2332 IoReplacePartitionUnit(
2333 IN PDEVICE_OBJECT TargetPdo
,
2334 IN PDEVICE_OBJECT SparePdo
,
2339 #if (NTDDI_VERSION >= NTDDI_WIN7)
2345 IoGetAffinityInterrupt(
2346 IN PKINTERRUPT InterruptObject
,
2347 OUT PGROUP_AFFINITY GroupAffinity
);
2351 IoGetContainerInformation(
2352 IN IO_CONTAINER_INFORMATION_CLASS InformationClass
,
2353 IN PVOID ContainerObject OPTIONAL
,
2354 IN OUT PVOID Buffer OPTIONAL
,
2355 IN ULONG BufferLength
);
2359 IoRegisterContainerNotification(
2360 IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
2361 IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
2362 IN PVOID NotificationInformation OPTIONAL
,
2363 IN ULONG NotificationInformationLength
,
2364 OUT PVOID CallbackRegistration
);
2368 IoUnregisterContainerNotification(
2369 IN PVOID CallbackRegistration
);
2374 IoUnregisterPlugPlayNotificationEx(
2375 IN PVOID NotificationEntry
);
2380 IoGetDeviceNumaNode(
2381 IN PDEVICE_OBJECT Pdo
,
2382 OUT PUSHORT NodeNumber
);
2388 IoSetFileObjectIgnoreSharing(
2389 IN PFILE_OBJECT FileObject
);
2397 IoRegisterFsRegistrationChangeMountAware(
2398 IN PDRIVER_OBJECT DriverObject
,
2399 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
,
2400 IN BOOLEAN SynchronizeWithMounts
);
2405 IoReplaceFileObjectName(
2406 IN PFILE_OBJECT FileObject
,
2407 IN PWSTR NewFileName
,
2408 IN USHORT FileNameLength
);
2410 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2417 IoWMIDeviceObjectToProviderId(
2418 IN PDEVICE_OBJECT DeviceObject
);
2420 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
2426 * IN CCHAR StackSize)
2428 #define IoSizeOfIrp(_StackSize) \
2429 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
2433 IoSkipCurrentIrpStackLocation(
2436 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
2437 Irp
->CurrentLocation
++;
2438 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
2443 IoSetNextIrpStackLocation(
2446 ASSERT(Irp
->CurrentLocation
> 0);
2447 Irp
->CurrentLocation
--;
2448 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
2453 IoGetNextIrpStackLocation(
2456 ASSERT(Irp
->CurrentLocation
> 0);
2457 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
2462 IoSetCompletionRoutine(
2464 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
2465 IN PVOID Context OPTIONAL
,
2466 IN BOOLEAN InvokeOnSuccess
,
2467 IN BOOLEAN InvokeOnError
,
2468 IN BOOLEAN InvokeOnCancel
)
2470 PIO_STACK_LOCATION irpSp
;
2471 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
2472 irpSp
= IoGetNextIrpStackLocation(Irp
);
2473 irpSp
->CompletionRoutine
= CompletionRoutine
;
2474 irpSp
->Context
= Context
;
2477 if (InvokeOnSuccess
) {
2478 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
2481 if (InvokeOnError
) {
2482 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
2485 if (InvokeOnCancel
) {
2486 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
2492 * IoSetCancelRoutine(
2494 * IN PDRIVER_CANCEL CancelRoutine)
2496 #define IoSetCancelRoutine(_Irp, \
2498 ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
2499 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
2504 * IN PDEVICE_OBJECT DeviceObject,
2506 * IN PVOID Context);
2508 #define IoRequestDpc(DeviceObject, Irp, Context)( \
2509 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
2513 * IoReleaseRemoveLock(
2514 * IN PIO_REMOVE_LOCK RemoveLock,
2517 #define IoReleaseRemoveLock(_RemoveLock, \
2519 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
2523 * IoReleaseRemoveLockAndWait(
2524 * IN PIO_REMOVE_LOCK RemoveLock,
2527 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
2529 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
2535 IN PIRP Irp OPTIONAL
);
2538 #define PLUGPLAY_REGKEY_DEVICE 1
2539 #define PLUGPLAY_REGKEY_DRIVER 2
2540 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
2544 IoGetCurrentIrpStackLocation(
2547 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
2548 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
2556 IoGetCurrentIrpStackLocation( (Irp
) )->Control
|= SL_PENDING_RETURNED
;
2561 * IoIsErrorUserInduced(
2562 * IN NTSTATUS Status);
2564 #define IoIsErrorUserInduced(Status) \
2565 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
2566 ((Status) == STATUS_IO_TIMEOUT) || \
2567 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
2568 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
2569 ((Status) == STATUS_VERIFY_REQUIRED) || \
2570 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
2571 ((Status) == STATUS_WRONG_VOLUME)))
2574 * IoInitializeRemoveLock(
2575 * IN PIO_REMOVE_LOCK Lock,
2576 * IN ULONG AllocateTag,
2577 * IN ULONG MaxLockedMinutes,
2578 * IN ULONG HighWatermark)
2580 #define IoInitializeRemoveLock( \
2581 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
2582 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
2583 HighWatermark, sizeof(IO_REMOVE_LOCK))
2587 IoInitializeDpcRequest(
2588 IN PDEVICE_OBJECT DeviceObject
,
2589 IN PIO_DPC_ROUTINE DpcRoutine
)
2591 KeInitializeDpc( &DeviceObject
->Dpc
,
2592 (PKDEFERRED_ROUTINE
) DpcRoutine
,
2596 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
2600 * IoGetFunctionCodeFromCtlCode(
2601 * IN ULONG ControlCode)
2603 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
2604 (((_ControlCode) >> 2) & 0x00000FFF)
2608 IoCopyCurrentIrpStackLocationToNext(
2611 PIO_STACK_LOCATION irpSp
;
2612 PIO_STACK_LOCATION nextIrpSp
;
2613 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
2614 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
2615 RtlCopyMemory( nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
2616 nextIrpSp
->Control
= 0;
2623 OUT PULONG_PTR LowLimit
,
2624 OUT PULONG_PTR HighLimit
);
2628 IoGetRemainingStackSize(VOID
)
2630 ULONG_PTR End
, Begin
;
2633 IoGetStackLimits(&Begin
, &End
);
2634 Result
= (ULONG_PTR
)(&End
) - Begin
;
2638 #if (NTDDI_VERSION >= NTDDI_WS03)
2641 IoInitializeThreadedDpcRequest(
2642 IN PDEVICE_OBJECT DeviceObject
,
2643 IN PIO_DPC_ROUTINE DpcRoutine
)
2645 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
2646 (PKDEFERRED_ROUTINE
) DpcRoutine
,