2006-06-29 23:52:45 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: ReactOS Kernel
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
|
|
* FILE: ntoskrnl/include/io.h
|
|
|
|
* PURPOSE: Internal header for the I/O Manager
|
|
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
|
|
*/
|
|
|
|
#include "ntdddisk.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// Define this if you want debugging support
|
|
|
|
//
|
|
|
|
#define _IO_DEBUG_ 0x00
|
|
|
|
|
|
|
|
//
|
|
|
|
// These define the Debug Masks Supported
|
|
|
|
//
|
|
|
|
#define IO_IRP_DEBUG 0x01
|
|
|
|
|
|
|
|
//
|
|
|
|
// Debug/Tracing support
|
|
|
|
//
|
|
|
|
#if _IO_DEBUG_
|
|
|
|
#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
|
|
|
|
#define IOTRACE DbgPrintEx
|
|
|
|
#else
|
|
|
|
#define IOTRACE(x, ...) \
|
|
|
|
if (x & IopTraceLevel) DbgPrint(__VA_ARGS__)
|
|
|
|
#endif
|
|
|
|
#else
|
|
|
|
#define IOTRACE(x, ...) DPRINT(__VA_ARGS__)
|
|
|
|
#endif
|
2005-08-11 00:01:17 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
2006-06-30 03:48:03 +00:00
|
|
|
// Returns the type of METHOD_ used in this IOCTL
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
2006-06-30 03:48:03 +00:00
|
|
|
#define IO_METHOD_FROM_CTL_CODE(c) (c & 0x00000003)
|
2006-06-29 23:52:45 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Packet Types when piggybacking on the IRP Overlay
|
|
|
|
//
|
|
|
|
#define IrpCompletionPacket 0x1
|
|
|
|
#define IrpMiniCompletionPacket 0x2
|
|
|
|
|
|
|
|
//
|
|
|
|
// Number of partition tables in the Boot Record
|
|
|
|
//
|
|
|
|
#define PARTITION_TBL_SIZE 4
|
|
|
|
|
2006-06-30 15:59:06 +00:00
|
|
|
//
|
|
|
|
// We can call the Ob Inlined API, it's the same thing
|
|
|
|
//
|
|
|
|
#define IopAllocateMdlFromLookaside \
|
|
|
|
ObpAllocateCapturedAttributes
|
|
|
|
#define IopFreeMdlFromLookaside \
|
|
|
|
ObpFreeCapturedAttributes
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Returns the size of a CM_RESOURCE_LIST
|
|
|
|
//
|
|
|
|
#define CM_RESOURCE_LIST_SIZE(ResList) \
|
|
|
|
(ResList->Count == 1) ? \
|
|
|
|
FIELD_OFFSET( \
|
|
|
|
CM_RESOURCE_LIST, \
|
|
|
|
List[0].PartialResourceList. \
|
|
|
|
PartialDescriptors[(ResList)-> \
|
|
|
|
List[0]. \
|
|
|
|
PartialResourceList. \
|
|
|
|
Count]) \
|
|
|
|
: \
|
|
|
|
FIELD_OFFSET(CM_RESOURCE_LIST, List)
|
2005-05-13 05:41:24 +00:00
|
|
|
|
2006-06-30 03:15:56 +00:00
|
|
|
//
|
|
|
|
// Determines if the IRP is Synchronous
|
|
|
|
//
|
|
|
|
#define IsIrpSynchronous(Irp, FileObject) \
|
|
|
|
((Irp->Flags & IRP_SYNCHRONOUS_API) || \
|
|
|
|
(!(FileObject) ? \
|
|
|
|
FALSE : \
|
|
|
|
FileObject->Flags & FO_SYNCHRONOUS_IO)) \
|
|
|
|
|
2006-07-01 17:40:03 +00:00
|
|
|
//
|
|
|
|
// Returns the internal Device Object Extension
|
|
|
|
//
|
|
|
|
#define IoGetDevObjExtension(DeviceObject) \
|
|
|
|
((PEXTENDED_DEVOBJ_EXTENSION) \
|
|
|
|
(DeviceObject->DeviceObjectExtension)) \
|
|
|
|
|
2001-09-16 13:19:32 +00:00
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeSetFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Flag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeSetFlag(DeviceNode, Flag) \
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->Flags |= (Flag))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeClearFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Flag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeClearFlag(DeviceNode, Flag) \
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->Flags &= ~(Flag))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* BOOLEAN
|
|
|
|
* IopDeviceNodeHasFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Flag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeHasFlag(DeviceNode, Flag) \
|
2005-06-25 17:01:17 +00:00
|
|
|
(((DeviceNode)->Flags & (Flag)) > 0)
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeSetUserFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG UserFlag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->UserFlags |= (UserFlag))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeClearUserFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG UserFlag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->UserFlags &= ~(UserFlag))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* BOOLEAN
|
|
|
|
* IopDeviceNodeHasUserFlag(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG UserFlag);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
|
2005-06-25 17:01:17 +00:00
|
|
|
(((DeviceNode)->UserFlags & (UserFlag)) > 0)
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeSetProblem(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Problem);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeSetProblem(DeviceNode, Problem) \
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->Problem |= (Problem))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* VOID
|
|
|
|
* IopDeviceNodeClearProblem(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Problem);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeClearProblem(DeviceNode, Problem) \
|
2005-06-25 17:01:17 +00:00
|
|
|
((DeviceNode)->Problem &= ~(Problem))
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* BOOLEAN
|
|
|
|
* IopDeviceNodeHasProblem(
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* ULONG Problem);
|
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopDeviceNodeHasProblem(DeviceNode, Problem) \
|
2005-06-25 17:01:17 +00:00
|
|
|
(((DeviceNode)->Problem & (Problem)) > 0)
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
/*
|
2006-06-29 23:52:45 +00:00
|
|
|
* VOID
|
|
|
|
* IopInitDeviceTreeTraverseContext(
|
|
|
|
* PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
|
|
|
|
* PDEVICE_NODE DeviceNode,
|
|
|
|
* DEVICETREE_TRAVERSE_ROUTINE Action,
|
|
|
|
* PVOID Context);
|
2001-09-16 13:19:32 +00:00
|
|
|
*/
|
2006-06-29 23:52:45 +00:00
|
|
|
#define IopInitDeviceTreeTraverseContext( \
|
|
|
|
_DeviceTreeTraverseContext, _DeviceNode, _Action, \
|
|
|
|
_Context) { \
|
|
|
|
(_DeviceTreeTraverseContext)->FirstDeviceNode = \
|
|
|
|
(_DeviceNode); \
|
|
|
|
(_DeviceTreeTraverseContext)->Action = (_Action); \
|
|
|
|
(_DeviceTreeTraverseContext)->Context = (_Context); }
|
|
|
|
|
2006-07-01 17:40:03 +00:00
|
|
|
//
|
|
|
|
// Device List Operations
|
|
|
|
//
|
|
|
|
typedef enum _IOP_DEVICE_LIST_OPERATION
|
|
|
|
{
|
|
|
|
IopRemove,
|
|
|
|
IopAdd
|
|
|
|
} IOP_DEVICE_LIST_OPERATION, *PIOP_DEVICE_LIST_OPERATION;
|
|
|
|
|
2006-07-02 16:20:10 +00:00
|
|
|
//
|
|
|
|
// Transfer statistics
|
|
|
|
//
|
|
|
|
typedef enum _IOP_TRANSFER_TYPE
|
|
|
|
{
|
|
|
|
IopReadTransfer,
|
|
|
|
IopWriteTransfer,
|
|
|
|
IopOtherTransfer
|
|
|
|
} IOP_TRANSFER_TYPE, *PIOP_TRANSFER_TYPE;
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Special version of the IRP Overlay used to optimize I/O completion
|
|
|
|
// by not using up a separate structure.
|
|
|
|
//
|
|
|
|
typedef struct _IO_COMPLETION_PACKET
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct _IO_STACK_LOCATION *CurrentStackLocation;
|
|
|
|
ULONG PacketType;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
PVOID Key;
|
|
|
|
PVOID Context;
|
|
|
|
IO_STATUS_BLOCK IoStatus;
|
|
|
|
} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET;
|
|
|
|
|
2006-06-30 16:56:18 +00:00
|
|
|
//
|
|
|
|
// I/O Wrapper around the Executive Work Item
|
|
|
|
//
|
|
|
|
typedef struct _IO_WORKITEM
|
|
|
|
{
|
|
|
|
WORK_QUEUE_ITEM Item;
|
|
|
|
PDEVICE_OBJECT DeviceObject;
|
|
|
|
PIO_WORKITEM_ROUTINE WorkerRoutine;
|
|
|
|
PVOID Context;
|
|
|
|
} IO_WORKITEM, *PIO_WORKITEM;
|
|
|
|
|
2006-06-30 18:54:34 +00:00
|
|
|
//
|
|
|
|
// I/O Wrapper around the Kernel Interrupt
|
|
|
|
//
|
|
|
|
typedef struct _IO_INTERRUPT
|
|
|
|
{
|
|
|
|
KINTERRUPT FirstInterrupt;
|
|
|
|
PKINTERRUPT Interrupt[MAXIMUM_PROCESSORS];
|
|
|
|
KSPIN_LOCK SpinLock;
|
|
|
|
} IO_INTERRUPT, *PIO_INTERRUPT;
|
|
|
|
|
2006-07-01 03:36:15 +00:00
|
|
|
//
|
|
|
|
// I/O Error Log Packet Header
|
|
|
|
//
|
|
|
|
typedef struct _ERROR_LOG_ENTRY
|
|
|
|
{
|
|
|
|
CSHORT Type;
|
|
|
|
CSHORT Size;
|
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
PDEVICE_OBJECT DeviceObject;
|
|
|
|
PDRIVER_OBJECT DriverObject;
|
|
|
|
LARGE_INTEGER TimeStamp;
|
|
|
|
} ERROR_LOG_ENTRY, *PERROR_LOG_ENTRY;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Event Log LPC Message
|
|
|
|
//
|
|
|
|
typedef struct _ELF_API_MSG
|
|
|
|
{
|
|
|
|
PORT_MESSAGE h;
|
|
|
|
ULONG Unknown[2];
|
|
|
|
IO_ERROR_LOG_MESSAGE IoErrorMessage;
|
|
|
|
} ELF_API_MSG, *PELF_API_MSG;
|
|
|
|
|
2006-06-30 18:54:34 +00:00
|
|
|
//
|
|
|
|
// To simplify matters, the kernel is made to support both the checked and free
|
|
|
|
// version of the I/O Remove Lock in the same binary. This structure includes
|
|
|
|
// both, since the DDK has the structure with a compile-time #ifdef.
|
|
|
|
//
|
|
|
|
typedef struct _EXTENDED_IO_REMOVE_LOCK
|
|
|
|
{
|
|
|
|
IO_REMOVE_LOCK_COMMON_BLOCK Common;
|
|
|
|
IO_REMOVE_LOCK_DBG_BLOCK Dbg;
|
|
|
|
} EXTENDED_IO_REMOVE_LOCK, *PEXTENDED_IO_REMOVE_LOCK;
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Dummy File Object used inside the Open Packet so that OB knows how to
|
|
|
|
// deal with the Object Pointer even though it's not a real file.
|
|
|
|
//
|
|
|
|
typedef struct _DUMMY_FILE_OBJECT
|
|
|
|
{
|
|
|
|
OBJECT_HEADER ObjectHeader;
|
|
|
|
CHAR FileObjectBody[sizeof(FILE_OBJECT)];
|
|
|
|
} DUMMY_FILE_OBJECT, *PDUMMY_FILE_OBJECT;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Open packet used as a context for Device/File parsing so that the parse
|
|
|
|
// routine can know what operation is being requested.
|
|
|
|
//
|
|
|
|
typedef struct _OPEN_PACKET
|
|
|
|
{
|
|
|
|
CSHORT Type;
|
|
|
|
CSHORT Size;
|
|
|
|
PFILE_OBJECT FileObject;
|
|
|
|
NTSTATUS FinalStatus;
|
|
|
|
ULONG_PTR Information;
|
|
|
|
ULONG ParseCheck;
|
|
|
|
PFILE_OBJECT RelatedFileObject;
|
|
|
|
OBJECT_ATTRIBUTES OriginalAttributes;
|
|
|
|
LARGE_INTEGER AllocationSize;
|
|
|
|
ULONG CreateOptions;
|
|
|
|
USHORT FileAttributes;
|
|
|
|
USHORT ShareAccess;
|
|
|
|
PVOID EaBuffer;
|
|
|
|
ULONG EaLength;
|
|
|
|
ULONG Options;
|
|
|
|
ULONG Disposition;
|
|
|
|
PFILE_BASIC_INFORMATION BasicInformation;
|
|
|
|
PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
|
|
|
|
CREATE_FILE_TYPE CreateFileType;
|
|
|
|
PVOID MailslotOrPipeParameters;
|
|
|
|
BOOLEAN Override;
|
|
|
|
BOOLEAN QueryOnly;
|
|
|
|
BOOLEAN DeleteOnly;
|
|
|
|
BOOLEAN FullAttributes;
|
|
|
|
PDUMMY_FILE_OBJECT DummyFileObject;
|
|
|
|
ULONG InternalFlags;
|
|
|
|
//PIO_DRIVER_CREATE_CONTEXT DriverCreateContext; Vista only, needs ROS DDK Update
|
|
|
|
} OPEN_PACKET, *POPEN_PACKET;
|
|
|
|
|
|
|
|
//
|
|
|
|
// List of Bus Type GUIDs
|
|
|
|
//
|
|
|
|
typedef struct _IO_BUS_TYPE_GUID_LIST
|
|
|
|
{
|
|
|
|
ULONG GuidCount;
|
|
|
|
FAST_MUTEX Lock;
|
|
|
|
GUID Guids[1];
|
|
|
|
} IO_BUS_TYPE_GUID_LIST, *PIO_BUS_TYPE_GUID_LIST;
|
|
|
|
extern PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList;
|
|
|
|
|
2006-07-01 21:51:06 +00:00
|
|
|
//
|
|
|
|
// Shutdown entry for registed devices
|
|
|
|
//
|
|
|
|
typedef struct _SHUTDOWN_ENTRY
|
|
|
|
{
|
|
|
|
LIST_ENTRY ShutdownList;
|
|
|
|
PDEVICE_OBJECT DeviceObject;
|
|
|
|
} SHUTDOWN_ENTRY, *PSHUTDOWN_ENTRY;
|
|
|
|
|
2006-07-02 01:29:12 +00:00
|
|
|
//
|
|
|
|
// F/S Notification entry for registered File Systems
|
|
|
|
//
|
|
|
|
typedef struct _FS_CHANGE_NOTIFY_ENTRY
|
|
|
|
{
|
|
|
|
LIST_ENTRY FsChangeNotifyList;
|
|
|
|
PDRIVER_OBJECT DriverObject;
|
|
|
|
PDRIVER_FS_NOTIFICATION FSDNotificationProc;
|
|
|
|
} FS_CHANGE_NOTIFY_ENTRY, *PFS_CHANGE_NOTIFY_ENTRY;
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Called on every visit of a node during a preorder-traversal of the device
|
|
|
|
// node tree.
|
|
|
|
// If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
|
|
|
|
// STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
|
|
|
|
// Any other returned status code will be returned to the caller. If a status
|
|
|
|
// code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
|
|
|
|
// the traversal is stopped immediately and the status code is returned to
|
|
|
|
// the caller.
|
|
|
|
//
|
|
|
|
typedef
|
|
|
|
NTSTATUS
|
|
|
|
(*DEVICETREE_TRAVERSE_ROUTINE)(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN PVOID Context
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2001-09-16 13:19:32 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Context information for traversing the device tree
|
|
|
|
//
|
2001-09-16 13:19:32 +00:00
|
|
|
typedef struct _DEVICETREE_TRAVERSE_CONTEXT
|
|
|
|
{
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Current device node during a traversal
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
PDEVICE_NODE DeviceNode;
|
2006-06-29 23:52:45 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Initial device node where we start the traversal
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
PDEVICE_NODE FirstDeviceNode;
|
2006-06-29 23:52:45 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Action routine to be called for every device node
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
DEVICETREE_TRAVERSE_ROUTINE Action;
|
2006-06-29 23:52:45 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Context passed to the action routine
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
PVOID Context;
|
2001-09-16 13:19:32 +00:00
|
|
|
} DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Internal Representation of a Disk
|
|
|
|
//
|
|
|
|
typedef struct _DISKENTRY
|
|
|
|
{
|
|
|
|
LIST_ENTRY ListEntry;
|
|
|
|
ULONG DiskNumber;
|
|
|
|
ULONG Signature;
|
|
|
|
ULONG Checksum;
|
|
|
|
PDEVICE_OBJECT DeviceObject;
|
|
|
|
} DISKENTRY, *PDISKENTRY;
|
2001-09-16 13:19:32 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Partition Table Entry
|
|
|
|
//
|
|
|
|
#include <pshpack1.h>
|
|
|
|
typedef struct _PARTITION
|
|
|
|
{
|
|
|
|
UCHAR BootFlags;
|
|
|
|
UCHAR StartingHead;
|
|
|
|
UCHAR StartingSector;
|
|
|
|
UCHAR StartingCylinder;
|
|
|
|
UCHAR PartitionType;
|
|
|
|
UCHAR EndingHead;
|
|
|
|
UCHAR EndingSector;
|
|
|
|
UCHAR EndingCylinder;
|
|
|
|
ULONG StartingBlock;
|
|
|
|
ULONG SectorCount;
|
|
|
|
} PARTITION, *PPARTITION;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Boot Record Structure
|
|
|
|
//
|
|
|
|
typedef struct _PARTITION_SECTOR
|
|
|
|
{
|
|
|
|
UCHAR BootCode[440];
|
|
|
|
ULONG Signature;
|
|
|
|
UCHAR Reserved[2];
|
|
|
|
PARTITION Partition[PARTITION_TBL_SIZE];
|
|
|
|
USHORT Magic;
|
|
|
|
} PARTITION_SECTOR, *PPARTITION_SECTOR;
|
|
|
|
#include <poppack.h>
|
|
|
|
|
|
|
|
//
|
|
|
|
// PNP Routines
|
|
|
|
//
|
2001-05-01 23:08:21 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
PnpInit(
|
|
|
|
VOID
|
|
|
|
);
|
2001-05-01 23:08:21 +00:00
|
|
|
|
2005-06-04 22:55:58 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
PnpInit2(
|
|
|
|
VOID
|
|
|
|
);
|
2005-06-04 22:55:58 +00:00
|
|
|
|
2002-06-10 08:50:55 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitDriverImplementation(
|
|
|
|
VOID
|
|
|
|
);
|
2002-06-10 08:50:55 +00:00
|
|
|
|
2005-04-30 09:39:09 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitPnpNotificationImplementation(
|
|
|
|
VOID
|
|
|
|
);
|
2005-04-30 09:39:09 +00:00
|
|
|
|
|
|
|
VOID
|
|
|
|
IopNotifyPlugPlayNotification(
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
|
2006-01-11 22:13:02 +00:00
|
|
|
IN LPCGUID Event,
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PVOID EventCategoryData1,
|
|
|
|
IN PVOID EventCategoryData2
|
|
|
|
);
|
2005-04-30 09:39:09 +00:00
|
|
|
|
2001-05-01 23:08:21 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopGetSystemPowerDeviceObject(
|
|
|
|
IN PDEVICE_OBJECT *DeviceObject
|
|
|
|
);
|
2005-06-25 17:01:17 +00:00
|
|
|
|
2001-05-01 23:08:21 +00:00
|
|
|
NTSTATUS
|
2005-06-25 17:01:17 +00:00
|
|
|
IopCreateDeviceNode(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PDEVICE_NODE ParentNode,
|
|
|
|
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
|
|
|
OUT PDEVICE_NODE *DeviceNode
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
|
|
|
|
2001-05-01 23:08:21 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopFreeDeviceNode(
|
|
|
|
IN PDEVICE_NODE DeviceNode
|
|
|
|
);
|
1998-09-13 15:55:36 +00:00
|
|
|
|
2002-04-10 09:58:45 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitiatePnpIrp(
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PIO_STATUS_BLOCK IoStatusBlock,
|
|
|
|
IN ULONG MinorFunction,
|
|
|
|
IN PIO_STACK_LOCATION Stack
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
PDEVICE_NODE
|
|
|
|
FASTCALL
|
|
|
|
IopGetDeviceNode(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
|
|
);
|
2005-06-25 17:01:17 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
IopActionConfigureChildServices(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN PVOID Context
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopActionInitChildServices(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN PVOID Context,
|
|
|
|
IN BOOLEAN BootDrivers
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-04-17 04:20:16 +00:00
|
|
|
|
2005-05-09 01:38:29 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IoCreateDriverList(
|
|
|
|
VOID
|
|
|
|
);
|
1999-02-01 20:58:37 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
IoDestroyDriverList(
|
|
|
|
VOID
|
|
|
|
);
|
2005-06-25 17:01:17 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
INIT_FUNCTION
|
|
|
|
IopInitPlugPlayEvents(VOID);
|
2005-06-25 17:01:17 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
IopQueueTargetDeviceEvent(
|
|
|
|
const GUID *Guid,
|
|
|
|
PUNICODE_STRING DeviceIds
|
|
|
|
);
|
1999-11-12 12:01:17 +00:00
|
|
|
|
2002-03-13 01:30:34 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitializePnpServices(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN BOOLEAN BootDrivers)
|
|
|
|
;
|
2002-03-13 01:30:34 +00:00
|
|
|
|
2002-03-16 00:00:13 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInvalidateDeviceRelations(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN DEVICE_RELATION_TYPE Type
|
|
|
|
);
|
2002-03-16 00:00:13 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Initialization Routines
|
|
|
|
//
|
2001-09-01 15:36:45 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IoCreateArcNames(
|
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2001-09-01 15:36:45 +00:00
|
|
|
|
2002-06-12 23:30:36 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
IoCreateSystemRootLink(
|
|
|
|
IN PCHAR ParameterLine
|
|
|
|
);
|
2002-06-12 23:30:36 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Device/Volume Routines
|
|
|
|
//
|
2002-06-12 23:30:36 +00:00
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
FASTCALL
|
|
|
|
IopInitializeDevice(
|
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN PDRIVER_OBJECT DriverObject
|
|
|
|
);
|
2002-06-12 23:30:36 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
IopStartDevice(
|
|
|
|
IN PDEVICE_NODE DeviceNode
|
|
|
|
);
|
2004-09-23 11:27:58 +00:00
|
|
|
|
2006-07-07 17:18:52 +00:00
|
|
|
PVPB
|
|
|
|
NTAPI
|
|
|
|
IopCheckVpbMounted(
|
|
|
|
IN POPEN_PACKET OpenPacket,
|
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN PUNICODE_STRING RemainingName,
|
|
|
|
OUT PNTSTATUS Status
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
2006-07-01 22:47:52 +00:00
|
|
|
NTAPI
|
|
|
|
IopMountVolume(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
2006-07-02 01:29:12 +00:00
|
|
|
IN BOOLEAN AllowRawMount,
|
|
|
|
IN BOOLEAN DeviceIsLocked,
|
|
|
|
IN BOOLEAN Alertable,
|
|
|
|
OUT PVPB *Vpb
|
2006-06-29 23:52:45 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
PVOID
|
|
|
|
IoOpenSymlink(
|
|
|
|
IN PVOID SymbolicLink
|
|
|
|
);
|
|
|
|
|
|
|
|
PVOID
|
|
|
|
IoOpenFileOnDevice(
|
|
|
|
IN PVOID SymbolicLink,
|
|
|
|
IN PWCHAR Name
|
|
|
|
);
|
|
|
|
|
|
|
|
NTSTATUS
|
2006-07-01 22:47:52 +00:00
|
|
|
NTAPI
|
2006-07-02 01:29:12 +00:00
|
|
|
IopCreateVpb(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
|
|
);
|
2004-09-23 11:27:58 +00:00
|
|
|
|
|
|
|
VOID
|
2006-07-01 22:47:52 +00:00
|
|
|
NTAPI
|
2006-06-29 23:52:45 +00:00
|
|
|
IoInitFileSystemImplementation(
|
|
|
|
VOID
|
|
|
|
);
|
2004-09-23 11:27:58 +00:00
|
|
|
|
|
|
|
VOID
|
2006-07-01 22:47:52 +00:00
|
|
|
NTAPI
|
2006-06-29 23:52:45 +00:00
|
|
|
IoInitVpbImplementation(
|
|
|
|
VOID
|
|
|
|
);
|
2004-09-23 11:27:58 +00:00
|
|
|
|
2006-07-01 17:40:03 +00:00
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
IopReferenceDeviceObject(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
|
|
);
|
|
|
|
|
2006-07-07 17:18:52 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
IopDereferenceDeviceObject(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN BOOLEAN ForceUnload
|
|
|
|
);
|
|
|
|
|
2006-07-04 22:28:23 +00:00
|
|
|
//
|
|
|
|
// IRP Routines
|
|
|
|
//
|
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
IopCleanupFailedIrp(
|
|
|
|
IN PFILE_OBJECT FileObject,
|
|
|
|
IN PKEVENT EventObject
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
IopAbortInterruptedIrp(
|
|
|
|
IN PKEVENT EventObject,
|
|
|
|
IN PIRP Irp
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Shutdown routines
|
|
|
|
//
|
2004-09-23 11:27:58 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
IoInitShutdownNotification(
|
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2004-09-23 11:27:58 +00:00
|
|
|
|
|
|
|
VOID
|
2006-07-01 18:26:22 +00:00
|
|
|
NTAPI
|
2006-06-29 23:52:45 +00:00
|
|
|
IoShutdownRegisteredDevices(
|
|
|
|
VOID
|
|
|
|
);
|
2002-06-12 23:30:36 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
2006-07-01 22:47:52 +00:00
|
|
|
NTAPI
|
2006-06-29 23:52:45 +00:00
|
|
|
IoShutdownRegisteredFileSystems(
|
|
|
|
VOID
|
|
|
|
);
|
2005-03-05 11:27:15 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Boot logging support
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitBootLog(
|
|
|
|
IN BOOLEAN StartBootLog
|
|
|
|
);
|
2005-03-05 11:27:15 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
|
|
|
IopStartBootLog(
|
|
|
|
VOID
|
|
|
|
);
|
2003-06-20 22:43:27 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
|
|
|
IopStopBootLog(
|
|
|
|
VOID
|
|
|
|
);
|
2003-06-20 22:43:27 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
|
|
|
IopBootLog(
|
|
|
|
IN PUNICODE_STRING DriverName,
|
|
|
|
IN BOOLEAN Success
|
|
|
|
);
|
2003-05-13 21:28:26 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
|
|
|
IopSaveBootLogToFile(
|
|
|
|
VOID
|
|
|
|
);
|
2003-05-13 21:28:26 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// I/O Cancellation Routines
|
|
|
|
//
|
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
STDCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IoCancelThreadIo(
|
|
|
|
IN PETHREAD Thread
|
|
|
|
);
|
2005-10-08 14:47:25 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
|
|
|
IoInitCancelHandling(
|
|
|
|
VOID
|
|
|
|
);
|
2005-10-08 14:47:25 +00:00
|
|
|
|
2006-07-02 16:20:10 +00:00
|
|
|
//
|
|
|
|
// I/O Completion
|
|
|
|
//
|
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
IopCompleteRequest(
|
|
|
|
IN PKAPC Apc,
|
|
|
|
IN PKNORMAL_ROUTINE* NormalRoutine,
|
|
|
|
IN PVOID* NormalContext,
|
|
|
|
IN PVOID* SystemArgument1,
|
|
|
|
IN PVOID* SystemArgument2
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Error Logging Routines
|
|
|
|
//
|
2006-07-01 03:36:15 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitErrorLog(
|
|
|
|
VOID
|
|
|
|
);
|
2005-10-08 14:47:25 +00:00
|
|
|
|
2006-07-01 03:36:15 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
IopLogWorker(
|
|
|
|
IN PVOID Parameter
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Raw File System MiniDriver
|
|
|
|
//
|
|
|
|
BOOLEAN
|
|
|
|
RawFsIsRawFileSystemDeviceObject(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject
|
|
|
|
);
|
2005-10-08 14:47:25 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
|
|
|
RawFsDriverEntry(
|
|
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
|
|
IN PUNICODE_STRING RegistryPath
|
|
|
|
);
|
2001-09-16 13:19:32 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// PnP Root MiniDriver
|
|
|
|
//
|
2001-09-16 13:19:32 +00:00
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
|
|
|
PnpRootDriverEntry(
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
|
|
IN PUNICODE_STRING RegistryPath
|
|
|
|
);
|
2001-09-16 13:19:32 +00:00
|
|
|
|
|
|
|
NTSTATUS
|
2006-06-29 23:52:45 +00:00
|
|
|
PnpRootCreateDevice(
|
|
|
|
IN OUT PDEVICE_OBJECT *PhysicalDeviceObject
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2004-03-21 18:58:53 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Driver Routines
|
|
|
|
//
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitializeBootDrivers(
|
|
|
|
VOID
|
|
|
|
);
|
2003-10-15 17:04:39 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitializeSystemDrivers(
|
|
|
|
VOID
|
|
|
|
);
|
2003-10-15 17:04:39 +00:00
|
|
|
|
2006-07-04 22:41:47 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
IopDeleteDriver(
|
|
|
|
IN PVOID ObjectBody
|
|
|
|
);
|
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2004-03-27 19:41:32 +00:00
|
|
|
IopCreateDriverObject(
|
2006-06-29 23:52:45 +00:00
|
|
|
OUT PDRIVER_OBJECT *DriverObject,
|
|
|
|
IN PUNICODE_STRING ServiceName,
|
|
|
|
IN ULONG CreateAttributes,
|
|
|
|
IN BOOLEAN FileSystemDriver,
|
|
|
|
IN PVOID DriverImageStart,
|
|
|
|
IN ULONG DriverImageSize
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2005-05-19 22:02:34 +00:00
|
|
|
IopGetDriverObject(
|
2006-06-29 23:52:45 +00:00
|
|
|
OUT PDRIVER_OBJECT *DriverObject,
|
|
|
|
IN PUNICODE_STRING ServiceName,
|
|
|
|
IN BOOLEAN FileSystem
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-05-19 22:02:34 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2004-03-27 19:41:32 +00:00
|
|
|
IopLoadServiceModule(
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PUNICODE_STRING ServiceName,
|
2005-07-30 16:25:35 +00:00
|
|
|
OUT PLDR_DATA_TABLE_ENTRY *ModuleObject
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2004-03-27 19:41:32 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2004-03-27 19:41:32 +00:00
|
|
|
IopInitializeDriverModule(
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PDEVICE_NODE DeviceNode,
|
2005-07-30 16:25:35 +00:00
|
|
|
IN PLDR_DATA_TABLE_ENTRY ModuleObject,
|
2005-06-25 17:01:17 +00:00
|
|
|
IN PUNICODE_STRING ServiceName,
|
|
|
|
IN BOOLEAN FileSystemDriver,
|
|
|
|
OUT PDRIVER_OBJECT *DriverObject
|
|
|
|
);
|
2004-03-27 19:41:32 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2004-03-27 19:41:32 +00:00
|
|
|
IopAttachFilterDrivers(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PDEVICE_NODE DeviceNode,
|
|
|
|
IN BOOLEAN Lower
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2004-03-27 19:41:32 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopMarkLastReinitializeDriver(
|
|
|
|
VOID
|
|
|
|
);
|
2003-12-15 17:50:23 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopReinitializeDrivers(
|
|
|
|
VOID
|
|
|
|
);
|
2005-02-01 16:24:10 +00:00
|
|
|
|
2006-07-02 18:34:21 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
|
|
|
IopReinitializeBootDrivers(
|
|
|
|
VOID
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// File Routines
|
|
|
|
//
|
2005-05-09 01:38:29 +00:00
|
|
|
NTSTATUS
|
2006-06-11 22:26:54 +00:00
|
|
|
NTAPI
|
|
|
|
IopParseDevice(
|
|
|
|
IN PVOID ParseObject,
|
2006-06-11 22:32:12 +00:00
|
|
|
IN PVOID ObjectType,
|
2006-06-11 22:26:54 +00:00
|
|
|
IN OUT PACCESS_STATE AccessState,
|
|
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
|
|
IN ULONG Attributes,
|
|
|
|
IN OUT PUNICODE_STRING CompleteName,
|
|
|
|
IN OUT PUNICODE_STRING RemainingName,
|
|
|
|
IN OUT PVOID Context OPTIONAL,
|
|
|
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
|
|
|
OUT PVOID *Object
|
|
|
|
);
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
IopParseFile(
|
|
|
|
IN PVOID ParseObject,
|
2006-06-11 22:32:12 +00:00
|
|
|
IN PVOID ObjectType,
|
2006-06-11 22:26:54 +00:00
|
|
|
IN OUT PACCESS_STATE AccessState,
|
|
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
|
|
IN ULONG Attributes,
|
|
|
|
IN OUT PUNICODE_STRING CompleteName,
|
|
|
|
IN OUT PUNICODE_STRING RemainingName,
|
|
|
|
IN OUT PVOID Context OPTIONAL,
|
|
|
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
|
|
|
OUT PVOID *Object
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
|
|
|
VOID
|
IO Manager Cleanup continues:
- Removed many extra files that expanded the I/O Manager too much. We usually stick with the standard of
one object/class per file, like io/device.c or io/controller.c, so it was very confusing to have some
objects split up in 5 or 6 different files, some containing only one api. Additionally, even a third
system was used, were objects were bunched up together by class. This mess was so bad that NtCreateFile,
IopCreateFile, IoCreateFile, IopDeleteFile, NtDeleteFile and NtWriteFile were in 5 different files (as an
example).
- Cleaned up some IRP code and fixed a couple of bugs, mainly:
- Write I/O Type in IRP
- Write proper IRP Flags where they shoudl be used (Will help for completing requests when i clean up that code)
- Do *NOT* zero out buffers or data that shouldn't be zeroed. Scsiport actually dependen on this incorrect
behaviour. Code should never depend on a buffer being zeroed!
- Remove a lot of duplicated code and helper/alternate functions that weren't really useful.
- Free MDL and IRP on some failures where we didn't
- Alphabetized some of the large io files for easier lookup of functions. This and the deletions have resulted
in a completely bloated diff file. I will provide a cleaned up diff on request by manually downloading the
old revision and copy/pasting the new code directly above it. The functions which we touched are:
- IoAllocateIrp
- IoBuild[A]SyncronousFsdRequest
- IoBuildDeviceIoControlRequest
- IoInitializeIrp
- IoPageRead, IoSynchronousPageWrite
svn path=/trunk/; revision=14837
2005-04-28 00:54:59 +00:00
|
|
|
STDCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopDeleteFile(
|
|
|
|
IN PVOID ObjectBody
|
|
|
|
);
|
IO Manager Cleanup continues:
- Removed many extra files that expanded the I/O Manager too much. We usually stick with the standard of
one object/class per file, like io/device.c or io/controller.c, so it was very confusing to have some
objects split up in 5 or 6 different files, some containing only one api. Additionally, even a third
system was used, were objects were bunched up together by class. This mess was so bad that NtCreateFile,
IopCreateFile, IoCreateFile, IopDeleteFile, NtDeleteFile and NtWriteFile were in 5 different files (as an
example).
- Cleaned up some IRP code and fixed a couple of bugs, mainly:
- Write I/O Type in IRP
- Write proper IRP Flags where they shoudl be used (Will help for completing requests when i clean up that code)
- Do *NOT* zero out buffers or data that shouldn't be zeroed. Scsiport actually dependen on this incorrect
behaviour. Code should never depend on a buffer being zeroed!
- Remove a lot of duplicated code and helper/alternate functions that weren't really useful.
- Free MDL and IRP on some failures where we didn't
- Alphabetized some of the large io files for easier lookup of functions. This and the deletions have resulted
in a completely bloated diff file. I will provide a cleaned up diff on request by manually downloading the
old revision and copy/pasting the new code directly above it. The functions which we touched are:
- IoAllocateIrp
- IoBuild[A]SyncronousFsdRequest
- IoBuildDeviceIoControlRequest
- IoInitializeIrp
- IoPageRead, IoSynchronousPageWrite
svn path=/trunk/; revision=14837
2005-04-28 00:54:59 +00:00
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
IopSecurityFile(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PVOID ObjectBody,
|
|
|
|
IN SECURITY_OPERATION_CODE OperationCode,
|
|
|
|
IN SECURITY_INFORMATION SecurityInformation,
|
|
|
|
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
|
|
IN OUT PULONG BufferLength,
|
|
|
|
OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
|
|
|
|
IN POOL_TYPE PoolType,
|
|
|
|
IN OUT PGENERIC_MAPPING GenericMapping
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
IO Manager Cleanup continues:
- Removed many extra files that expanded the I/O Manager too much. We usually stick with the standard of
one object/class per file, like io/device.c or io/controller.c, so it was very confusing to have some
objects split up in 5 or 6 different files, some containing only one api. Additionally, even a third
system was used, were objects were bunched up together by class. This mess was so bad that NtCreateFile,
IopCreateFile, IoCreateFile, IopDeleteFile, NtDeleteFile and NtWriteFile were in 5 different files (as an
example).
- Cleaned up some IRP code and fixed a couple of bugs, mainly:
- Write I/O Type in IRP
- Write proper IRP Flags where they shoudl be used (Will help for completing requests when i clean up that code)
- Do *NOT* zero out buffers or data that shouldn't be zeroed. Scsiport actually dependen on this incorrect
behaviour. Code should never depend on a buffer being zeroed!
- Remove a lot of duplicated code and helper/alternate functions that weren't really useful.
- Free MDL and IRP on some failures where we didn't
- Alphabetized some of the large io files for easier lookup of functions. This and the deletions have resulted
in a completely bloated diff file. I will provide a cleaned up diff on request by manually downloading the
old revision and copy/pasting the new code directly above it. The functions which we touched are:
- IoAllocateIrp
- IoBuild[A]SyncronousFsdRequest
- IoBuildDeviceIoControlRequest
- IoInitializeIrp
- IoPageRead, IoSynchronousPageWrite
svn path=/trunk/; revision=14837
2005-04-28 00:54:59 +00:00
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
IopQueryNameFile(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PVOID ObjectBody,
|
2006-05-10 17:47:44 +00:00
|
|
|
IN BOOLEAN HasName,
|
2006-06-29 23:52:45 +00:00
|
|
|
OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
|
|
|
|
IN ULONG Length,
|
|
|
|
OUT PULONG ReturnLength,
|
2006-06-11 06:52:56 +00:00
|
|
|
IN KPROCESSOR_MODE PreviousMode
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
|
|
|
VOID
|
IO Manager Cleanup continues:
- Removed many extra files that expanded the I/O Manager too much. We usually stick with the standard of
one object/class per file, like io/device.c or io/controller.c, so it was very confusing to have some
objects split up in 5 or 6 different files, some containing only one api. Additionally, even a third
system was used, were objects were bunched up together by class. This mess was so bad that NtCreateFile,
IopCreateFile, IoCreateFile, IopDeleteFile, NtDeleteFile and NtWriteFile were in 5 different files (as an
example).
- Cleaned up some IRP code and fixed a couple of bugs, mainly:
- Write I/O Type in IRP
- Write proper IRP Flags where they shoudl be used (Will help for completing requests when i clean up that code)
- Do *NOT* zero out buffers or data that shouldn't be zeroed. Scsiport actually dependen on this incorrect
behaviour. Code should never depend on a buffer being zeroed!
- Remove a lot of duplicated code and helper/alternate functions that weren't really useful.
- Free MDL and IRP on some failures where we didn't
- Alphabetized some of the large io files for easier lookup of functions. This and the deletions have resulted
in a completely bloated diff file. I will provide a cleaned up diff on request by manually downloading the
old revision and copy/pasting the new code directly above it. The functions which we touched are:
- IoAllocateIrp
- IoBuild[A]SyncronousFsdRequest
- IoBuildDeviceIoControlRequest
- IoInitializeIrp
- IoPageRead, IoSynchronousPageWrite
svn path=/trunk/; revision=14837
2005-04-28 00:54:59 +00:00
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
IopCloseFile(
|
2006-05-10 17:47:44 +00:00
|
|
|
IN PEPROCESS Process OPTIONAL,
|
|
|
|
IN PVOID Object,
|
|
|
|
IN ACCESS_MASK GrantedAccess,
|
|
|
|
IN ULONG ProcessHandleCount,
|
|
|
|
IN ULONG SystemHandleCount
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// I/O Timer Routines
|
|
|
|
//
|
2004-11-06 04:12:59 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopInitTimerImplementation(
|
|
|
|
VOID
|
|
|
|
);
|
2004-11-06 04:12:59 +00:00
|
|
|
|
|
|
|
VOID
|
|
|
|
STDCALL
|
2006-06-29 23:52:45 +00:00
|
|
|
IopRemoveTimerFromTimerList(
|
|
|
|
IN PIO_TIMER Timer
|
|
|
|
);
|
2004-11-19 21:31:02 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// I/O Completion Routines
|
|
|
|
//
|
2004-12-21 18:37:28 +00:00
|
|
|
VOID
|
2006-07-04 22:41:47 +00:00
|
|
|
NTAPI
|
|
|
|
IopDeleteIoCompletion(
|
|
|
|
PVOID ObjectBody
|
2006-06-29 23:52:45 +00:00
|
|
|
);
|
2004-11-19 21:31:02 +00:00
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// I/O HAL Entrypoints
|
|
|
|
//
|
2005-09-14 01:44:19 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
|
|
|
xHalQueryDriveLayout(
|
|
|
|
IN PUNICODE_STRING DeviceName,
|
|
|
|
OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo
|
|
|
|
);
|
|
|
|
|
|
|
|
#undef HalExamineMBR
|
|
|
|
VOID
|
|
|
|
FASTCALL
|
|
|
|
HalExamineMBR(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN ULONG SectorSize,
|
|
|
|
IN ULONG MBRTypeIdentifier,
|
|
|
|
OUT PVOID *Buffer
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
VOID
|
2005-09-14 01:44:19 +00:00
|
|
|
FASTCALL
|
|
|
|
xHalIoAssignDriveLetters(
|
2006-05-10 17:47:44 +00:00
|
|
|
IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock,
|
2005-09-14 01:44:19 +00:00
|
|
|
IN PSTRING NtDeviceName,
|
|
|
|
OUT PUCHAR NtSystemPath,
|
|
|
|
OUT PSTRING NtSystemPathString
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
2005-09-14 01:44:19 +00:00
|
|
|
FASTCALL
|
|
|
|
xHalIoReadPartitionTable(
|
2006-06-29 23:52:45 +00:00
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN ULONG SectorSize,
|
|
|
|
IN BOOLEAN ReturnRecognizedPartitions,
|
|
|
|
OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer
|
2005-09-14 01:44:19 +00:00
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
2005-09-14 01:44:19 +00:00
|
|
|
FASTCALL
|
|
|
|
xHalIoSetPartitionInformation(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN ULONG SectorSize,
|
|
|
|
IN ULONG PartitionNumber,
|
|
|
|
IN ULONG PartitionType
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
NTSTATUS
|
2005-09-14 01:44:19 +00:00
|
|
|
FASTCALL
|
|
|
|
xHalIoWritePartitionTable(
|
|
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
|
|
IN ULONG SectorSize,
|
|
|
|
IN ULONG SectorsPerTrack,
|
|
|
|
IN ULONG NumberOfHeads,
|
|
|
|
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
|
|
|
|
);
|
|
|
|
|
2006-06-29 23:52:45 +00:00
|
|
|
//
|
|
|
|
// Global I/O Data
|
|
|
|
//
|
|
|
|
extern POBJECT_TYPE IoCompletionType;
|
|
|
|
extern PDEVICE_NODE IopRootDeviceNode;
|
|
|
|
extern ULONG IopTraceLevel;
|
2006-06-30 15:59:06 +00:00
|
|
|
extern NPAGED_LOOKASIDE_LIST IopMdlLookasideList;
|
2006-07-04 22:41:47 +00:00
|
|
|
extern GENERIC_MAPPING IopCompletionMapping;
|
2006-07-05 20:08:08 +00:00
|
|
|
extern GENERIC_MAPPING IopFileMapping;
|
2006-07-02 16:20:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Inlined Functions
|
|
|
|
//
|
|
|
|
#include "io_x.h"
|