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

Information | Donate

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

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

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

ReactOS Development > Doxygen

io.h
Go to the documentation of this file.
00001 /*
00002 * PROJECT:         ReactOS Kernel
00003 * LICENSE:         GPL - See COPYING in the top level directory
00004 * FILE:            ntoskrnl/include/io.h
00005 * PURPOSE:         Internal header for the I/O Manager
00006 * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
00007 */
00008 #include "ntdddisk.h"
00009 
00010 //
00011 // Define this if you want debugging support
00012 //
00013 #define _IO_DEBUG_                                      0x01
00014 
00015 //
00016 // These define the Debug Masks Supported
00017 //
00018 #define IO_IRP_DEBUG                                    0x01
00019 #define IO_FILE_DEBUG                                   0x02
00020 #define IO_API_DEBUG                                    0x04
00021 #define IO_CTL_DEBUG                                    0x08
00022 
00023 //
00024 // Debug/Tracing support
00025 //
00026 #if _IO_DEBUG_
00027 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
00028 #define IOTRACE(x, ...)                                     \
00029     {                                                       \
00030         DbgPrintEx("%s [%.16s] - ",                         \
00031                    __FUNCTION__,                            \
00032                    PsGetCurrentProcess()->ImageFileName);   \
00033         DbgPrintEx(__VA_ARGS__);                            \
00034     }
00035 #else
00036 #define IOTRACE(x, ...)                                     \
00037     if (x & IopTraceLevel)                                  \
00038     {                                                       \
00039         DbgPrint("%s [%.16s] - ",                           \
00040                  __FUNCTION__,                              \
00041                  PsGetCurrentProcess()->ImageFileName);     \
00042         DbgPrint(__VA_ARGS__);                              \
00043     }
00044 #endif
00045 #else
00046 #define IOTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
00047 #endif
00048 
00049 //
00050 // Registry path to the enumeration root key
00051 //
00052 #define ENUM_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum"
00053 
00054 //
00055 // Returns the type of METHOD_ used in this IOCTL
00056 //
00057 #define IO_METHOD_FROM_CTL_CODE(c)                      (c & 0x00000003)
00058 
00059 //
00060 // Bugcheck codes for RAM disk booting
00061 //
00062 //
00063 // No LoaderXIPRom descriptor was found in the loader memory list
00064 //
00065 #define RD_NO_XIPROM_DESCRIPTOR  1
00066 //
00067 // Unable to open the RAM disk driver (ramdisk.sys or \Device\Ramdisk)
00068 //
00069 #define RD_NO_RAMDISK_DRIVER     2
00070 //
00071 // FSCTL_CREATE_RAM_DISK failed
00072 //
00073 #define RD_FSCTL_FAILED          3
00074 //
00075 // Unable to create GUID string from binary GUID
00076 //
00077 #define RD_GUID_CONVERT_FAILED   4
00078 //
00079 // Unable to create symbolic link pointing to the RAM disk device
00080 //
00081 #define RD_SYMLINK_CREATE_FAILED 5
00082 
00083 //
00084 // We can call the Ob Inlined API, it's the same thing
00085 //
00086 #define IopAllocateMdlFromLookaside                     \
00087     ObpAllocateObjectCreateInfoBuffer
00088 #define IopFreeMdlFromLookaside                         \
00089     ObpFreeCapturedAttributes
00090 
00091 //
00092 // Determines if the IRP is Synchronous
00093 //
00094 #define IsIrpSynchronous(Irp, FileObject)               \
00095     ((Irp->Flags & IRP_SYNCHRONOUS_API)  ||             \
00096      (!(FileObject) ?                                   \
00097         FALSE :                                         \
00098         FileObject->Flags & FO_SYNCHRONOUS_IO))         \
00099 
00100 //
00101 // Returns the internal Device Object Extension
00102 //
00103 #define IoGetDevObjExtension(DeviceObject)              \
00104     ((PEXTENDED_DEVOBJ_EXTENSION)                       \
00105      (DeviceObject->DeviceObjectExtension))             \
00106 
00107 //
00108 // Returns the internal Driver Object Extension
00109 //
00110 #define IoGetDrvObjExtension(DriverObject)              \
00111     ((PEXTENDED_DRIVER_EXTENSION)                       \
00112      (DriverObject->DriverExtension))                   \
00113 
00114 /*
00115  * VOID
00116  * IopDeviceNodeSetFlag(
00117  *   PDEVICE_NODE DeviceNode,
00118  *   ULONG Flag);
00119  */
00120 #define IopDeviceNodeSetFlag(DeviceNode, Flag)          \
00121     ((DeviceNode)->Flags |= (Flag))
00122 
00123 /*
00124  * VOID
00125  * IopDeviceNodeClearFlag(
00126  *   PDEVICE_NODE DeviceNode,
00127  *   ULONG Flag);
00128  */
00129 #define IopDeviceNodeClearFlag(DeviceNode, Flag)        \
00130     ((DeviceNode)->Flags &= ~(Flag))
00131 
00132 /*
00133  * BOOLEAN
00134  * IopDeviceNodeHasFlag(
00135  *   PDEVICE_NODE DeviceNode,
00136  *   ULONG Flag);
00137  */
00138 #define IopDeviceNodeHasFlag(DeviceNode, Flag)          \
00139     (((DeviceNode)->Flags & (Flag)) > 0)
00140 
00141 /*
00142  * VOID
00143  * IopDeviceNodeSetUserFlag(
00144  *   PDEVICE_NODE DeviceNode,
00145  *   ULONG UserFlag);
00146  */
00147 #define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag)  \
00148     ((DeviceNode)->UserFlags |= (UserFlag))
00149 
00150 /*
00151  * VOID
00152  * IopDeviceNodeClearUserFlag(
00153  *   PDEVICE_NODE DeviceNode,
00154  *   ULONG UserFlag);
00155  */
00156 #define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
00157     ((DeviceNode)->UserFlags &= ~(UserFlag))
00158 
00159 /*
00160  * BOOLEAN
00161  * IopDeviceNodeHasUserFlag(
00162  *   PDEVICE_NODE DeviceNode,
00163  *   ULONG UserFlag);
00164  */
00165 #define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag)  \
00166     (((DeviceNode)->UserFlags & (UserFlag)) > 0)
00167 
00168  /*
00169  * VOID
00170  * IopDeviceNodeSetProblem(
00171  *   PDEVICE_NODE DeviceNode,
00172  *   ULONG Problem);
00173  */
00174 #define IopDeviceNodeSetProblem(DeviceNode, Problem)    \
00175     ((DeviceNode)->Problem |= (Problem))
00176 
00177 /*
00178  * VOID
00179  * IopDeviceNodeClearProblem(
00180  *   PDEVICE_NODE DeviceNode,
00181  *   ULONG Problem);
00182  */
00183 #define IopDeviceNodeClearProblem(DeviceNode, Problem)  \
00184     ((DeviceNode)->Problem &= ~(Problem))
00185 
00186 /*
00187  * BOOLEAN
00188  * IopDeviceNodeHasProblem(
00189  *   PDEVICE_NODE DeviceNode,
00190  *   ULONG Problem);
00191  */
00192 #define IopDeviceNodeHasProblem(DeviceNode, Problem)    \
00193     (((DeviceNode)->Problem & (Problem)) > 0)
00194 
00195 /*
00196  * VOID
00197  * IopInitDeviceTreeTraverseContext(
00198  *   PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
00199  *   PDEVICE_NODE DeviceNode,
00200  *   DEVICETREE_TRAVERSE_ROUTINE Action,
00201  *   PVOID Context);
00202  */
00203 #define IopInitDeviceTreeTraverseContext(               \
00204     _DeviceTreeTraverseContext, _DeviceNode, _Action,   \
00205     _Context) {                                         \
00206     (_DeviceTreeTraverseContext)->FirstDeviceNode =     \
00207         (_DeviceNode);                                  \
00208     (_DeviceTreeTraverseContext)->Action = (_Action);   \
00209     (_DeviceTreeTraverseContext)->Context = (_Context); }
00210 
00211 /*
00212  * BOOLEAN
00213  * IopIsValidPhysicalDeviceObject(
00214  *   IN PDEVICE_OBJECT PhysicalDeviceObject);
00215  */
00216 #define IopIsValidPhysicalDeviceObject(PhysicalDeviceObject)                                                            \
00217         (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject) &&                                                          \
00218         (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode) &&                      \
00219         (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->Flags & DNF_ENUMERATED))
00220 
00221 //
00222 // Device List Operations
00223 //
00224 typedef enum _IOP_DEVICE_LIST_OPERATION
00225 {
00226     IopRemove,
00227     IopAdd
00228 } IOP_DEVICE_LIST_OPERATION, *PIOP_DEVICE_LIST_OPERATION;
00229 
00230 //
00231 // Transfer statistics
00232 //
00233 typedef enum _IOP_TRANSFER_TYPE
00234 {
00235     IopReadTransfer,
00236     IopWriteTransfer,
00237     IopOtherTransfer
00238 } IOP_TRANSFER_TYPE, *PIOP_TRANSFER_TYPE;
00239 
00240 //
00241 // Packet Types when piggybacking on the IRP Overlay
00242 //
00243 typedef enum _COMPLETION_PACKET_TYPE
00244     {
00245     IopCompletionPacketIrp,
00246     IopCompletionPacketMini,
00247     IopCompletionPacketQuota
00248 } COMPLETION_PACKET_TYPE, *PCOMPLETION_PACKET_TYPE;
00249 
00250 //
00251 // Special version of the IRP Overlay used to optimize I/O completion
00252 // by not using up a separate structure.
00253 //
00254 typedef struct _IOP_MINI_COMPLETION_PACKET
00255 {
00256     struct
00257     {
00258         LIST_ENTRY ListEntry;
00259         union
00260         {
00261             struct _IO_STACK_LOCATION *CurrentStackLocation;
00262             ULONG PacketType;
00263         };
00264     };
00265     PVOID KeyContext;
00266     PVOID ApcContext;
00267     NTSTATUS IoStatus;
00268     ULONG_PTR IoStatusInformation;
00269 } IOP_MINI_COMPLETION_PACKET, *PIOP_MINI_COMPLETION_PACKET;
00270 
00271 //
00272 // I/O Completion Context for IoSetIoCompletionRoutineEx
00273 //
00274 typedef struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT
00275 {
00276     PDEVICE_OBJECT DeviceObject;
00277     PVOID Context;
00278     PIO_COMPLETION_ROUTINE CompletionRoutine;
00279 } IO_UNLOAD_SAFE_COMPLETION_CONTEXT, *PIO_UNLOAD_SAFE_COMPLETION_CONTEXT;
00280 
00281 //
00282 // I/O Wrapper around the Executive Work Item
00283 //
00284 typedef struct _IO_WORKITEM
00285 {
00286     WORK_QUEUE_ITEM Item;
00287     PDEVICE_OBJECT DeviceObject;
00288     PIO_WORKITEM_ROUTINE WorkerRoutine;
00289     PVOID Context;
00290 } IO_WORKITEM;
00291 
00292 //
00293 // I/O Wrapper around the Kernel Interrupt
00294 //
00295 typedef struct _IO_INTERRUPT
00296 {
00297     KINTERRUPT FirstInterrupt;
00298     PKINTERRUPT Interrupt[MAXIMUM_PROCESSORS];
00299     KSPIN_LOCK SpinLock;
00300 } IO_INTERRUPT, *PIO_INTERRUPT;
00301 
00302 //
00303 // I/O Error Log Packet Header
00304 //
00305 typedef struct _ERROR_LOG_ENTRY
00306 {
00307     CSHORT Type;
00308     CSHORT Size;
00309     LIST_ENTRY ListEntry;
00310     PDEVICE_OBJECT DeviceObject;
00311     PDRIVER_OBJECT DriverObject;
00312     LARGE_INTEGER TimeStamp;
00313 } ERROR_LOG_ENTRY, *PERROR_LOG_ENTRY;
00314 
00315 //
00316 // Event Log LPC Message
00317 //
00318 typedef struct _ELF_API_MSG
00319 {
00320     PORT_MESSAGE h;
00321     ULONG Unknown[2];
00322     IO_ERROR_LOG_MESSAGE IoErrorMessage;
00323 } ELF_API_MSG, *PELF_API_MSG;
00324 
00325 //
00326 // To simplify matters, the kernel is made to support both the checked and free
00327 // version of the I/O Remove Lock in the same binary. This structure includes
00328 // both, since the DDK has the structure with a compile-time #ifdef.
00329 //
00330 typedef struct _EXTENDED_IO_REMOVE_LOCK
00331 {
00332     IO_REMOVE_LOCK_COMMON_BLOCK Common;
00333     IO_REMOVE_LOCK_DBG_BLOCK Dbg;
00334 } EXTENDED_IO_REMOVE_LOCK, *PEXTENDED_IO_REMOVE_LOCK;
00335 
00336 //
00337 // Dummy File Object used inside the Open Packet so that OB knows how to
00338 // deal with the Object Pointer even though it's not a real file.
00339 //
00340 typedef struct _DUMMY_FILE_OBJECT
00341 {
00342     OBJECT_HEADER ObjectHeader;
00343     CHAR FileObjectBody[sizeof(FILE_OBJECT)];
00344 } DUMMY_FILE_OBJECT, *PDUMMY_FILE_OBJECT;
00345 
00346 //
00347 // Open packet used as a context for Device/File parsing so that the parse
00348 // routine can know what operation is being requested.
00349 //
00350 typedef struct _OPEN_PACKET
00351 {
00352     CSHORT Type;
00353     CSHORT Size;
00354     PFILE_OBJECT FileObject;
00355     NTSTATUS FinalStatus;
00356     ULONG_PTR Information;
00357     ULONG ParseCheck;
00358     PFILE_OBJECT RelatedFileObject;
00359     OBJECT_ATTRIBUTES OriginalAttributes;
00360     LARGE_INTEGER AllocationSize;
00361     ULONG CreateOptions;
00362     USHORT FileAttributes;
00363     USHORT ShareAccess;
00364     PVOID EaBuffer;
00365     ULONG EaLength;
00366     ULONG Options;
00367     ULONG Disposition;
00368     PFILE_BASIC_INFORMATION BasicInformation;
00369     PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
00370     CREATE_FILE_TYPE CreateFileType;
00371     PVOID MailslotOrPipeParameters;
00372     BOOLEAN Override;
00373     BOOLEAN QueryOnly;
00374     BOOLEAN DeleteOnly;
00375     BOOLEAN FullAttributes;
00376     PDUMMY_FILE_OBJECT DummyFileObject;
00377     ULONG InternalFlags;
00378     //PIO_DRIVER_CREATE_CONTEXT DriverCreateContext; Vista only, needs ROS DDK Update
00379 } OPEN_PACKET, *POPEN_PACKET;
00380 
00381 //
00382 // Parameters packet for Load/Unload work item's context
00383 //
00384 typedef struct _LOAD_UNLOAD_PARAMS
00385 {
00386     NTSTATUS Status;
00387     PUNICODE_STRING ServiceName;
00388     WORK_QUEUE_ITEM WorkItem;
00389     KEVENT Event;
00390     PDRIVER_OBJECT DriverObject;
00391 } LOAD_UNLOAD_PARAMS, *PLOAD_UNLOAD_PARAMS;
00392 
00393 //
00394 // Boot Driver List Entry
00395 //
00396 typedef struct _DRIVER_INFORMATION
00397 {
00398     LIST_ENTRY Link;
00399     PDRIVER_OBJECT DriverObject;
00400     PBOOT_DRIVER_LIST_ENTRY DataTableEntry;
00401     HANDLE ServiceHandle;
00402     USHORT TagPosition;
00403     ULONG Failed;
00404     ULONG Processed;
00405     NTSTATUS Status;
00406 } DRIVER_INFORMATION, *PDRIVER_INFORMATION;
00407 
00408 //
00409 // Boot Driver Node
00410 //
00411 typedef struct _BOOT_DRIVER_NODE
00412 {
00413     BOOT_DRIVER_LIST_ENTRY ListEntry;
00414     UNICODE_STRING Group;
00415     UNICODE_STRING Name;
00416     ULONG Tag;
00417     ULONG ErrorControl;
00418 } BOOT_DRIVER_NODE, *PBOOT_DRIVER_NODE;
00419 
00420 //
00421 // List of Bus Type GUIDs
00422 //
00423 typedef struct _IO_BUS_TYPE_GUID_LIST
00424 {
00425     ULONG GuidCount;
00426     FAST_MUTEX Lock;
00427     GUID Guids[1];
00428 } IO_BUS_TYPE_GUID_LIST, *PIO_BUS_TYPE_GUID_LIST;
00429 extern PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList;
00430 
00431 //
00432 // Shutdown entry for registed devices
00433 //
00434 typedef struct _SHUTDOWN_ENTRY
00435 {
00436     LIST_ENTRY ShutdownList;
00437     PDEVICE_OBJECT DeviceObject;
00438 } SHUTDOWN_ENTRY, *PSHUTDOWN_ENTRY;
00439 
00440 //
00441 // F/S Notification entry for registered File Systems
00442 //
00443 typedef struct _FS_CHANGE_NOTIFY_ENTRY
00444 {
00445     LIST_ENTRY FsChangeNotifyList;
00446     PDRIVER_OBJECT DriverObject;
00447     PDRIVER_FS_NOTIFICATION FSDNotificationProc;
00448 } FS_CHANGE_NOTIFY_ENTRY, *PFS_CHANGE_NOTIFY_ENTRY;
00449 
00450 //
00451 // Driver (Boot) Re-Initialization Entry
00452 //
00453 typedef struct _DRIVER_REINIT_ITEM
00454 {
00455     LIST_ENTRY ItemEntry;
00456     PDRIVER_OBJECT DriverObject;
00457     PDRIVER_REINITIALIZE ReinitRoutine;
00458     PVOID Context;
00459 } DRIVER_REINIT_ITEM, *PDRIVER_REINIT_ITEM;
00460 
00461 //
00462 // Called on every visit of a node during a preorder-traversal of the device
00463 // node tree.
00464 // If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
00465 // STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
00466 // Any other returned status code will be returned to the caller. If a status
00467 // code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
00468 // the traversal is stopped immediately and the status code is returned to
00469 // the caller.
00470 //
00471 typedef
00472 NTSTATUS
00473 (*DEVICETREE_TRAVERSE_ROUTINE)(
00474     IN PDEVICE_NODE DeviceNode,
00475     IN PVOID Context
00476 );
00477 
00478 //
00479 // Context information for traversing the device tree
00480 //
00481 typedef struct _DEVICETREE_TRAVERSE_CONTEXT
00482 {
00483     //
00484     // Current device node during a traversal
00485     //
00486     PDEVICE_NODE DeviceNode;
00487 
00488     //
00489     // Initial device node where we start the traversal
00490     //
00491     PDEVICE_NODE FirstDeviceNode;
00492 
00493     //
00494     // Action routine to be called for every device node
00495     //
00496     DEVICETREE_TRAVERSE_ROUTINE Action;
00497 
00498     //
00499     // Context passed to the action routine
00500     //
00501     PVOID Context;
00502 } DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
00503 
00504 //
00505 // Resource code
00506 //
00507 ULONG
00508 NTAPI
00509 PnpDetermineResourceListSize(IN PCM_RESOURCE_LIST ResourceList);
00510 
00511 NTSTATUS
00512 NTAPI
00513 IopAssignDeviceResources(
00514     IN PDEVICE_NODE DeviceNode
00515 );
00516 
00517 NTSTATUS
00518 NTAPI
00519 IopFixupResourceListWithRequirements(
00520     IN PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList,
00521     OUT PCM_RESOURCE_LIST *ResourceList
00522 );
00523 
00524 NTSTATUS
00525 NTAPI
00526 IopDetectResourceConflict(
00527      IN PCM_RESOURCE_LIST ResourceList,
00528      IN BOOLEAN Silent,
00529      OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor
00530 );
00531 
00532 //
00533 // PNP Routines
00534 //
00535 NTSTATUS
00536 NTAPI
00537 PipCallDriverAddDevice(
00538     IN PDEVICE_NODE DeviceNode,
00539     IN BOOLEAN LoadDriver,
00540     IN PDRIVER_OBJECT DriverObject
00541 );
00542 
00543 NTSTATUS
00544 NTAPI
00545 IopInitializePlugPlayServices(
00546     VOID
00547 );
00548 
00549 BOOLEAN
00550 NTAPI
00551 PpInitSystem(
00552     VOID
00553 );
00554 
00555 VOID
00556 PnpInit2(
00557     VOID
00558 );
00559 
00560 VOID
00561 IopInitDriverImplementation(
00562     VOID
00563 );
00564 
00565 VOID
00566 IopInitPnpNotificationImplementation(
00567     VOID
00568 );
00569 
00570 VOID
00571 IopNotifyPlugPlayNotification(
00572     IN PDEVICE_OBJECT DeviceObject,
00573     IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
00574     IN LPCGUID Event,
00575     IN PVOID EventCategoryData1,
00576     IN PVOID EventCategoryData2
00577 );
00578 
00579 NTSTATUS
00580 IopGetSystemPowerDeviceObject(
00581     IN PDEVICE_OBJECT *DeviceObject
00582 );
00583 
00584 PDEVICE_NODE
00585 NTAPI
00586 PipAllocateDeviceNode(
00587     IN PDEVICE_OBJECT PhysicalDeviceObject
00588 );
00589 
00590 NTSTATUS
00591 IopCreateDeviceNode(
00592     IN PDEVICE_NODE ParentNode,
00593     IN PDEVICE_OBJECT PhysicalDeviceObject,
00594     IN PUNICODE_STRING ServiceName,
00595     OUT PDEVICE_NODE *DeviceNode
00596 );
00597 
00598 NTSTATUS
00599 IopFreeDeviceNode(
00600     IN PDEVICE_NODE DeviceNode
00601 );
00602 
00603 NTSTATUS
00604 NTAPI
00605 IopQueryDeviceCapabilities(PDEVICE_NODE DeviceNode,
00606                            PDEVICE_CAPABILITIES DeviceCaps);
00607 
00608 NTSTATUS
00609 NTAPI
00610 IopSynchronousCall(
00611     IN PDEVICE_OBJECT DeviceObject,
00612     IN PIO_STACK_LOCATION IoStackLocation,
00613     OUT PVOID *Information
00614 );
00615 
00616 NTSTATUS
00617 NTAPI
00618 IopInitiatePnpIrp(
00619     IN PDEVICE_OBJECT DeviceObject,
00620     IN PIO_STATUS_BLOCK IoStatusBlock,
00621     IN UCHAR MinorFunction,
00622     IN PIO_STACK_LOCATION Stack
00623 );
00624 
00625 PDEVICE_NODE
00626 FASTCALL
00627 IopGetDeviceNode(
00628     IN PDEVICE_OBJECT DeviceObject
00629 );
00630 
00631 NTSTATUS
00632 IopActionConfigureChildServices(
00633     IN PDEVICE_NODE DeviceNode,
00634     IN PVOID Context
00635 );
00636 
00637 NTSTATUS
00638 IopActionInitChildServices(
00639     IN PDEVICE_NODE DeviceNode,
00640     IN PVOID Context
00641 );
00642 
00643 NTSTATUS
00644 IopEnumerateDevice(
00645     IN PDEVICE_OBJECT DeviceObject
00646 );
00647 
00648 NTSTATUS
00649 IoCreateDriverList(
00650     VOID
00651 );
00652 
00653 NTSTATUS
00654 IoDestroyDriverList(
00655     VOID
00656 );
00657 
00658 NTSTATUS
00659 INIT_FUNCTION
00660 IopInitPlugPlayEvents(VOID);
00661 
00662 NTSTATUS
00663 IopQueueTargetDeviceEvent(
00664     const GUID *Guid,
00665     PUNICODE_STRING DeviceIds
00666 );
00667 
00668 NTSTATUS
00669 IopInitializePnpServices(
00670     IN PDEVICE_NODE DeviceNode);
00671 
00672 NTSTATUS
00673 NTAPI
00674 IopOpenRegistryKeyEx(
00675     PHANDLE KeyHandle,
00676     HANDLE ParentKey,
00677     PUNICODE_STRING Name,
00678     ACCESS_MASK DesiredAccess);
00679 
00680 NTSTATUS
00681 NTAPI
00682 IopGetRegistryValue(
00683     IN HANDLE Handle,
00684     IN PWSTR ValueName,
00685     OUT PKEY_VALUE_FULL_INFORMATION *Information
00686 );
00687 
00688 NTSTATUS
00689 NTAPI
00690 IopCreateRegistryKeyEx(
00691     OUT PHANDLE Handle,
00692     IN HANDLE BaseHandle OPTIONAL,
00693     IN PUNICODE_STRING KeyName,
00694     IN ACCESS_MASK DesiredAccess,
00695     IN ULONG CreateOptions,
00696     OUT PULONG Disposition OPTIONAL
00697 );
00698 
00699 
00700 NTSTATUS
00701 IopTraverseDeviceTree(
00702     PDEVICETREE_TRAVERSE_CONTEXT Context);
00703 
00704 //
00705 // PnP Routines
00706 //
00707 NTSTATUS
00708 NTAPI
00709 IopUpdateRootKey(
00710     VOID
00711 );
00712 
00713 NTSTATUS
00714 NTAPI
00715 PiInitCacheGroupInformation(
00716     VOID
00717 );
00718 
00719 USHORT
00720 NTAPI
00721 PpInitGetGroupOrderIndex(
00722     IN HANDLE ServiceHandle
00723 );
00724 
00725 USHORT
00726 NTAPI
00727 PipGetDriverTagPriority(
00728     IN HANDLE ServiceHandle
00729 );
00730 
00731 NTSTATUS
00732 NTAPI
00733 PnpRegMultiSzToUnicodeStrings(
00734     IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation,
00735     OUT PUNICODE_STRING *UnicodeStringList,
00736     OUT PULONG UnicodeStringCount
00737 );
00738 
00739 BOOLEAN
00740 NTAPI
00741 PnpRegSzToString(
00742     IN PWCHAR RegSzData,
00743     IN ULONG RegSzLength,
00744     OUT PUSHORT StringLength OPTIONAL
00745 );
00746 
00747 //
00748 // Initialization Routines
00749 //
00750 NTSTATUS
00751 NTAPI
00752 IopCreateArcNames(
00753     IN PLOADER_PARAMETER_BLOCK LoaderBlock
00754 );
00755 
00756 NTSTATUS
00757 NTAPI
00758 IopReassignSystemRoot(
00759     IN PLOADER_PARAMETER_BLOCK LoaderBlock,
00760     OUT PANSI_STRING NtBootPath
00761 );
00762 
00763 BOOLEAN
00764 NTAPI
00765 IoInitSystem(
00766     IN PLOADER_PARAMETER_BLOCK LoaderBlock
00767 );
00768 
00769 BOOLEAN
00770 NTAPI
00771 IopVerifyDiskSignature(
00772     IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout,
00773     IN PARC_DISK_SIGNATURE ArcDiskSignature,
00774     OUT PULONG Signature
00775 );
00776 
00777 //
00778 // Device/Volume Routines
00779 //
00780 VOID
00781 NTAPI
00782 IopReadyDeviceObjects(
00783     IN PDRIVER_OBJECT Driver
00784 );
00785 
00786 NTSTATUS
00787 FASTCALL
00788 IopInitializeDevice(
00789     IN PDEVICE_NODE DeviceNode,
00790     IN PDRIVER_OBJECT DriverObject
00791 );
00792 
00793 NTSTATUS
00794 IopStartDevice(
00795     IN PDEVICE_NODE DeviceNode
00796 );
00797 
00798 NTSTATUS
00799 IopStopDevice(
00800     IN PDEVICE_NODE DeviceNode
00801 );
00802 
00803 NTSTATUS
00804 IopRemoveDevice(
00805     IN PDEVICE_NODE DeviceNode
00806 );
00807 
00808 PVPB
00809 NTAPI
00810 IopCheckVpbMounted(
00811     IN POPEN_PACKET OpenPacket,
00812     IN PDEVICE_OBJECT DeviceObject,
00813     IN PUNICODE_STRING RemainingName,
00814     OUT PNTSTATUS Status
00815 );
00816 
00817 NTSTATUS
00818 NTAPI
00819 IopMountVolume(
00820     IN PDEVICE_OBJECT DeviceObject,
00821     IN BOOLEAN AllowRawMount,
00822     IN BOOLEAN DeviceIsLocked,
00823     IN BOOLEAN Alertable,
00824     OUT PVPB *Vpb
00825 );
00826 
00827 PVOID
00828 IoOpenSymlink(
00829     IN PVOID SymbolicLink
00830 );
00831 
00832 PVOID
00833 IoOpenFileOnDevice(
00834     IN PVOID SymbolicLink,
00835     IN PWCHAR Name
00836 );
00837 
00838 NTSTATUS
00839 NTAPI
00840 IopCreateVpb(
00841     IN PDEVICE_OBJECT DeviceObject
00842 );
00843 
00844 VOID
00845 NTAPI
00846 IopDereferenceVpbAndFree(
00847     IN PVPB Vpb
00848 );
00849 
00850 VOID
00851 NTAPI
00852 IoInitFileSystemImplementation(
00853     VOID
00854 );
00855 
00856 VOID
00857 NTAPI
00858 IoInitVpbImplementation(
00859     VOID
00860 );
00861 
00862 NTSTATUS
00863 NTAPI
00864 IopReferenceDeviceObject(
00865     IN PDEVICE_OBJECT DeviceObject
00866 );
00867 
00868 VOID
00869 NTAPI
00870 IopDereferenceDeviceObject(
00871     IN PDEVICE_OBJECT DeviceObject,
00872     IN BOOLEAN ForceUnload
00873 );
00874 
00875 NTSTATUS
00876 NTAPI
00877 IoGetRelatedTargetDevice(
00878     IN PFILE_OBJECT FileObject,
00879     OUT PDEVICE_OBJECT *DeviceObject
00880 );
00881 
00882 VOID
00883 NTAPI
00884 IopUnloadDevice(
00885     IN PDEVICE_OBJECT DeviceObject
00886 );
00887 
00888 //
00889 // IRP Routines
00890 //
00891 NTSTATUS
00892 NTAPI
00893 IopCleanupFailedIrp(
00894     IN PFILE_OBJECT FileObject,
00895     IN PKEVENT EventObject,
00896     IN PVOID Buffer OPTIONAL
00897 );
00898 
00899 VOID
00900 NTAPI
00901 IopAbortInterruptedIrp(
00902     IN PKEVENT EventObject,
00903     IN PIRP Irp
00904 );
00905 
00906 //
00907 // Shutdown routines
00908 //
00909 VOID
00910 IoInitShutdownNotification(
00911     VOID
00912 );
00913 
00914 VOID
00915 NTAPI
00916 IoShutdownSystem(
00917     IN ULONG Phase
00918 );
00919 
00920 VOID
00921 NTAPI
00922 IopShutdownBaseFileSystems(
00923     IN PLIST_ENTRY ListHead
00924 );
00925 
00926 //
00927 // Boot logging support
00928 //
00929 VOID
00930 IopInitBootLog(
00931     IN BOOLEAN StartBootLog
00932 );
00933 
00934 VOID
00935 IopStartBootLog(
00936     VOID
00937 );
00938 
00939 VOID
00940 IopStopBootLog(
00941     VOID
00942 );
00943 
00944 VOID
00945 IopBootLog(
00946     IN PUNICODE_STRING DriverName,
00947     IN BOOLEAN Success
00948 );
00949 
00950 VOID
00951 IopSaveBootLogToFile(
00952     VOID
00953 );
00954 
00955 //
00956 // I/O Cancellation Routines
00957 //
00958 VOID
00959 NTAPI
00960 IoCancelThreadIo(
00961     IN PETHREAD Thread
00962 );
00963 
00964 VOID
00965 IoInitCancelHandling(
00966     VOID
00967 );
00968 
00969 //
00970 // I/O Completion
00971 //
00972 VOID
00973 NTAPI
00974 IopCompleteRequest(
00975     IN PKAPC Apc,
00976     IN PKNORMAL_ROUTINE* NormalRoutine,
00977     IN PVOID* NormalContext,
00978     IN PVOID* SystemArgument1,
00979     IN PVOID* SystemArgument2
00980 );
00981 
00982 //
00983 // Error Logging Routines
00984 //
00985 VOID
00986 NTAPI
00987 IopInitErrorLog(
00988     VOID
00989 );
00990 
00991 VOID
00992 NTAPI
00993 IopLogWorker(
00994     IN PVOID Parameter
00995 );
00996 
00997 //
00998 // Raw File System MiniDriver
00999 //
01000 BOOLEAN
01001 RawFsIsRawFileSystemDeviceObject(
01002     IN PDEVICE_OBJECT DeviceObject
01003 );
01004 
01005 NTSTATUS
01006 NTAPI
01007 RawFsDriverEntry(
01008     IN PDRIVER_OBJECT DriverObject,
01009     IN PUNICODE_STRING RegistryPath
01010 );
01011 
01012 //
01013 // PnP Root MiniDriver
01014 //
01015 NTSTATUS
01016 NTAPI
01017 PnpRootDriverEntry(
01018    IN PDRIVER_OBJECT DriverObject,
01019    IN PUNICODE_STRING RegistryPath
01020 );
01021 
01022 NTSTATUS
01023 PnpRootCreateDevice(
01024     IN PUNICODE_STRING ServiceName,
01025     IN OPTIONAL PDRIVER_OBJECT DriverObject,
01026     OUT PDEVICE_OBJECT *PhysicalDeviceObject,
01027     OUT OPTIONAL PUNICODE_STRING FullInstancePath
01028 );
01029 
01030 NTSTATUS
01031 PnpRootRegisterDevice(
01032     IN PDEVICE_OBJECT DeviceObject);
01033 
01034 //
01035 // Driver Routines
01036 //
01037 VOID
01038 FASTCALL
01039 IopInitializeBootDrivers(
01040     VOID
01041 );
01042 
01043 VOID
01044 FASTCALL
01045 IopInitializeSystemDrivers(
01046     VOID
01047 );
01048 
01049 NTSTATUS
01050 NTAPI
01051 IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
01052                 IN PDRIVER_INITIALIZE InitializationFunction,
01053                 IN PUNICODE_STRING RegistryPath,
01054                 PLDR_DATA_TABLE_ENTRY ModuleObject,
01055                 OUT PDRIVER_OBJECT *pDriverObject);
01056 
01057 VOID
01058 NTAPI
01059 IopDeleteDriver(
01060     IN PVOID ObjectBody
01061 );
01062 
01063 NTSTATUS
01064 FASTCALL
01065 IopGetDriverObject(
01066     OUT PDRIVER_OBJECT *DriverObject,
01067     IN PUNICODE_STRING ServiceName,
01068     IN BOOLEAN FileSystem
01069 );
01070 
01071 NTSTATUS
01072 FASTCALL
01073 IopLoadServiceModule(
01074     IN PUNICODE_STRING ServiceName,
01075     OUT PLDR_DATA_TABLE_ENTRY *ModuleObject
01076 );
01077 
01078 VOID
01079 NTAPI
01080 IopLoadUnloadDriver(
01081     IN OUT PLOAD_UNLOAD_PARAMS LoadParams
01082 );
01083 
01084 NTSTATUS
01085 FASTCALL
01086 IopInitializeDriverModule(
01087     IN PDEVICE_NODE DeviceNode,
01088     IN PLDR_DATA_TABLE_ENTRY ModuleObject,
01089     IN PUNICODE_STRING ServiceName,
01090     IN BOOLEAN FileSystemDriver,
01091     OUT PDRIVER_OBJECT *DriverObject
01092 );
01093 
01094 NTSTATUS
01095 FASTCALL
01096 IopAttachFilterDrivers(
01097     IN PDEVICE_NODE DeviceNode,
01098     IN BOOLEAN Lower
01099 );
01100 
01101 VOID
01102 NTAPI
01103 IopReinitializeDrivers(
01104     VOID
01105 );
01106 
01107 VOID
01108 NTAPI
01109 IopReinitializeBootDrivers(
01110     VOID
01111 );
01112 
01113 //
01114 // File Routines
01115 //
01116 VOID
01117 NTAPI
01118 IopDeleteDevice(IN PVOID ObjectBody);
01119 
01120 NTSTATUS
01121 NTAPI
01122 IopParseDevice(
01123     IN PVOID ParseObject,
01124     IN PVOID ObjectType,
01125     IN OUT PACCESS_STATE AccessState,
01126     IN KPROCESSOR_MODE AccessMode,
01127     IN ULONG Attributes,
01128     IN OUT PUNICODE_STRING CompleteName,
01129     IN OUT PUNICODE_STRING RemainingName,
01130     IN OUT PVOID Context,
01131     IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
01132     OUT PVOID *Object
01133 );
01134 
01135 NTSTATUS
01136 NTAPI
01137 IopParseFile(
01138     IN PVOID ParseObject,
01139     IN PVOID ObjectType,
01140     IN OUT PACCESS_STATE AccessState,
01141     IN KPROCESSOR_MODE AccessMode,
01142     IN ULONG Attributes,
01143     IN OUT PUNICODE_STRING CompleteName,
01144     IN OUT PUNICODE_STRING RemainingName,
01145     IN OUT PVOID Context OPTIONAL,
01146     IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
01147     OUT PVOID *Object
01148 );
01149 
01150 VOID
01151 NTAPI
01152 IopDeleteFile(
01153     IN PVOID ObjectBody
01154 );
01155 
01156 NTSTATUS
01157 NTAPI
01158 IopSecurityFile(
01159     IN PVOID ObjectBody,
01160     IN SECURITY_OPERATION_CODE OperationCode,
01161     IN PSECURITY_INFORMATION SecurityInformation,
01162     IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
01163     IN OUT PULONG BufferLength,
01164     OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
01165     IN POOL_TYPE PoolType,
01166     IN OUT PGENERIC_MAPPING GenericMapping
01167 );
01168 
01169 NTSTATUS
01170 NTAPI
01171 IopQueryNameFile(
01172     IN PVOID ObjectBody,
01173     IN BOOLEAN HasName,
01174     OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
01175     IN ULONG Length,
01176     OUT PULONG ReturnLength,
01177     IN KPROCESSOR_MODE PreviousMode
01178 );
01179 
01180 VOID
01181 NTAPI
01182 IopCloseFile(
01183     IN PEPROCESS Process OPTIONAL,
01184     IN PVOID Object,
01185     IN ACCESS_MASK GrantedAccess,
01186     IN ULONG ProcessHandleCount,
01187     IN ULONG SystemHandleCount
01188 );
01189 
01190 PVOID
01191 NTAPI
01192 IoGetFileObjectFilterContext(
01193     IN PFILE_OBJECT FileObject
01194 );
01195 
01196 NTSTATUS
01197 NTAPI
01198 IoChangeFileObjectFilterContext(
01199     IN PFILE_OBJECT FileObject,
01200     IN PVOID FilterContext,
01201     IN BOOLEAN Define
01202 );
01203 
01204 //
01205 // I/O Timer Routines
01206 //
01207 VOID
01208 FASTCALL
01209 IopInitTimerImplementation(
01210     VOID
01211 );
01212 
01213 VOID
01214 NTAPI
01215 IopRemoveTimerFromTimerList(
01216     IN PIO_TIMER Timer
01217 );
01218 
01219 //
01220 // I/O Completion Routines
01221 //
01222 VOID
01223 NTAPI
01224 IopDeleteIoCompletion(
01225     PVOID ObjectBody
01226 );
01227 
01228 //
01229 // Ramdisk Routines
01230 //
01231 NTSTATUS
01232 NTAPI
01233 IopStartRamdisk(
01234     IN PLOADER_PARAMETER_BLOCK LoaderBlock
01235 );
01236 
01237 //
01238 // Configuration Routines
01239 //
01240 NTSTATUS
01241 NTAPI
01242 IopFetchConfigurationInformation(OUT PWSTR * SymbolicLinkList,
01243                                  IN GUID Guid,
01244                                  IN ULONG ExpectedInterfaces,
01245                                  IN PULONG Interfaces
01246 );
01247 
01248 VOID
01249 NTAPI
01250 IopStoreSystemPartitionInformation(IN PUNICODE_STRING NtSystemPartitionDeviceName,
01251                                    IN PUNICODE_STRING OsLoaderPathName
01252 );
01253 
01254 //
01255 // Global I/O Data
01256 //
01257 extern POBJECT_TYPE IoCompletionType;
01258 extern PDEVICE_NODE IopRootDeviceNode;
01259 extern KSPIN_LOCK IopDeviceTreeLock;
01260 extern ULONG IopTraceLevel;
01261 extern GENERAL_LOOKASIDE IopMdlLookasideList;
01262 extern GENERIC_MAPPING IopCompletionMapping;
01263 extern GENERIC_MAPPING IopFileMapping;
01264 extern POBJECT_TYPE _IoFileObjectType;
01265 extern HAL_DISPATCH _HalDispatchTable;
01266 extern LIST_ENTRY IopErrorLogListHead;
01267 extern ULONG IopNumTriageDumpDataBlocks;
01268 extern PVOID IopTriageDumpDataBlocks[64];
01269 extern PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList;
01270 extern PDRIVER_OBJECT IopRootDriverObject;
01271 
01272 //
01273 // Inlined Functions
01274 //
01275 #include "io_x.h"

Generated on Fri May 25 2012 04:28:24 for ReactOS by doxygen 1.7.6.1

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