/*
* PROJECT: ReactOS Kernel
* LICENSE: GPL - See COPYING in the top level directory
-* FILE: ntoskrnl/include/io.h
+* FILE: ntoskrnl/include/internal/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_ 0x01
+#define _IO_DEBUG_ 0x00
//
// These define the Debug Masks Supported
//
#define RD_SYMLINK_CREATE_FAILED 5
+//
+// Max traversal of reparse points for a single open in IoParseDevice
+//
+#define IOP_MAX_REPARSE_TRAVERSAL 0x20
+
+//
+// Private flags for IoCreateFile / IoParseDevice
+//
+#define IOP_USE_TOP_LEVEL_DEVICE_HINT 0x01
+#define IOP_CREATE_FILE_OBJECT_EXTENSION 0x02
+
+
+typedef struct _FILE_OBJECT_EXTENSION
+{
+ PDEVICE_OBJECT TopDeviceObjectHint;
+
+} FILE_OBJECT_EXTENSION, *PFILE_OBJECT_EXTENSION;
+
+
+
//
// We can call the Ob Inlined API, it's the same thing
//
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;
-
//
// 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
typedef struct _LOAD_UNLOAD_PARAMS
{
NTSTATUS Status;
- PUNICODE_STRING ServiceName;
+ PCUNICODE_STRING RegistryPath;
WORK_QUEUE_ITEM WorkItem;
KEVENT Event;
PDRIVER_OBJECT DriverObject;
PVOID Context;
} DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
+//
+// Reserve IRP allocator
+// Used for read paging IOs in low-memory situations
+//
+typedef struct _RESERVE_IRP_ALLOCATOR
+{
+ PIRP ReserveIrp;
+ volatile LONG ReserveIrpInUse;
+ KEVENT WaitEvent;
+ CCHAR StackSize;
+} RESERVE_IRP_ALLOCATOR, *PRESERVE_IRP_ALLOCATOR;
+
//
// Resource code
//
);
NTSTATUS
-INIT_FUNCTION
IopInitPlugPlayEvents(VOID);
NTSTATUS
OUT PULONG Signature
);
+BOOLEAN
+NTAPI
+IoInitializeCrashDump(
+ IN HANDLE PageFileHandle
+);
+
//
// Device/Volume Routines
//
IN CCHAR StackSize
);
+BOOLEAN
+NTAPI
+IopInitializeReserveIrp(
+ IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator
+);
+
+PIRP
+NTAPI
+IopAllocateReserveIrp(
+ IN CCHAR StackSize
+);
+
//
// Shutdown routines
//
NTAPI
IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
IN PDRIVER_INITIALIZE InitializationFunction,
- IN PUNICODE_STRING RegistryPath,
- PLDR_DATA_TABLE_ENTRY ModuleObject,
+ IN PUNICODE_STRING RegistryPath OPTIONAL,
+ IN PCUNICODE_STRING ServiceName,
+ IN PLDR_DATA_TABLE_ENTRY ModuleObject OPTIONAL,
OUT PDRIVER_OBJECT *pDriverObject);
VOID
OUT PLDR_DATA_TABLE_ENTRY *ModuleObject
);
-VOID
+NTSTATUS
NTAPI
IopLoadUnloadDriver(
- IN OUT PLOAD_UNLOAD_PARAMS LoadParams
+ _In_opt_ PCUNICODE_STRING RegistryPath,
+ _Inout_ PDRIVER_OBJECT *DriverObject
);
NTSTATUS
FASTCALL
IopAttachFilterDrivers(
IN PDEVICE_NODE DeviceNode,
+ IN HANDLE EnumSubKey,
+ IN HANDLE ClassKey,
IN BOOLEAN Lower
);
NTSTATUS
NTAPI
-IopSecurityFile(
+IopGetSetSecurityObject(
IN PVOID ObjectBody,
IN SECURITY_OPERATION_CODE OperationCode,
IN PSECURITY_INFORMATION SecurityInformation,
NTSTATUS
NTAPI
-IopQueryNameFile(
+IopQueryNameInternal(
IN PVOID ObjectBody,
IN BOOLEAN HasName,
OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
IN ULONG SystemHandleCount
);
+NTSTATUS
+NTAPI
+IopAcquireFileObjectLock(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ KPROCESSOR_MODE AccessMode,
+ _In_ BOOLEAN Alertable,
+ _Out_ PBOOLEAN LockFailed
+);
+
PVOID
NTAPI
IoGetFileObjectFilterContext(
IN BOOLEAN Define
);
+VOID
+NTAPI
+IopDoNameTransmogrify(
+ IN PIRP Irp,
+ IN PFILE_OBJECT FileObject,
+ IN PREPARSE_DATA_BUFFER DataBuffer
+);
+
+NTSTATUS
+NTAPI
+IoComputeDesiredAccessFileObject(
+ IN PFILE_OBJECT FileObject,
+ IN PACCESS_MASK DesiredAccess
+);
+
//
// I/O Timer Routines
//
PVOID ObjectBody
);
+NTSTATUS
+NTAPI
+IoSetIoCompletion(
+ IN PVOID IoCompletion,
+ IN PVOID KeyContext,
+ IN PVOID ApcContext,
+ IN NTSTATUS IoStatus,
+ IN ULONG_PTR IoStatusInformation,
+ IN BOOLEAN Quota
+);
+
//
// Ramdisk Routines
//
extern PVOID IopTriageDumpDataBlocks[64];
extern PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList;
extern PDRIVER_OBJECT IopRootDriverObject;
+extern KSPIN_LOCK IopDeviceActionLock;
+extern LIST_ENTRY IopDeviceActionRequestList;
+extern RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator;
//
// Inlined Functions