mirror of
https://github.com/reactos/reactos.git
synced 2024-12-26 00:54:40 +00:00
Added .Type and .Size attributes to the IRP object: so far nothing
seems broken. Added __stdcall to some Io subsystem functions. Attempt to implement IoIsOperationSynchronous(). svn path=/trunk/; revision=1033
This commit is contained in:
parent
79d0e047eb
commit
1eed2a945a
6 changed files with 210 additions and 33 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $Id: iofuncs.h,v 1.6 2000/03/05 19:17:37 ea Exp $ */
|
||||
/* $Id: iofuncs.h,v 1.7 2000/03/06 01:02:30 ea Exp $ */
|
||||
/* IO MANAGER ***************************************************************/
|
||||
|
||||
BOOLEAN
|
||||
|
@ -100,6 +100,7 @@ IoAllocateErrorLogEntry (
|
|||
* On failure NULL
|
||||
*/
|
||||
PIRP
|
||||
STDCALL
|
||||
IoAllocateIrp (
|
||||
CCHAR StackSize,
|
||||
BOOLEAN ChargeQuota
|
||||
|
@ -281,11 +282,17 @@ IoBuildSynchronousFsdRequest (
|
|||
* FUNCTION: Sends an irp to the next lower driver
|
||||
*/
|
||||
NTSTATUS
|
||||
FASTCALL
|
||||
IofCallDriver (
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp
|
||||
);
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IoCallDriver (
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PIRP irp
|
||||
PIRP Irp
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
IoCancelIrp (
|
||||
PIRP Irp
|
||||
|
@ -309,11 +316,17 @@ IoCheckShareAccess (
|
|||
* thread making the request
|
||||
*/
|
||||
VOID
|
||||
FASTCALL
|
||||
IofCompleteRequest (
|
||||
PIRP Irp,
|
||||
CCHAR PriorityBoost
|
||||
);
|
||||
VOID
|
||||
STDCALL
|
||||
IoCompleteRequest (
|
||||
PIRP Irp,
|
||||
CCHAR PriorityBoost
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
IoConnectInterrupt (
|
||||
PKINTERRUPT * InterruptObject,
|
||||
|
@ -458,12 +471,11 @@ VOID
|
|||
IoFreeController (
|
||||
PCONTROLLER_OBJECT ControllerObject
|
||||
);
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
IoFreeIrp (
|
||||
PIRP Irp
|
||||
);
|
||||
|
||||
VOID
|
||||
IoFreeMapRegisters (
|
||||
PADAPTER_OBJECT AdapterObject,
|
||||
|
@ -502,12 +514,11 @@ IoGetDeviceObjectPointer (
|
|||
PFILE_OBJECT * FileObject,
|
||||
PDEVICE_OBJECT * DeviceObject
|
||||
);
|
||||
|
||||
PDEVICE_OBJECT
|
||||
STDCALL
|
||||
IoGetDeviceToVerify (
|
||||
PETHREAD Thread
|
||||
);
|
||||
|
||||
PGENERIC_MAPPING
|
||||
IoGetFileObjectGenericMapping (VOID);
|
||||
|
||||
|
@ -547,6 +558,7 @@ IoInitializeDpcRequest (
|
|||
* StackSize = Number of stack locations in the IRP
|
||||
*/
|
||||
VOID
|
||||
STDCALL
|
||||
IoInitializeIrp (
|
||||
PIRP Irp,
|
||||
USHORT PacketSize,
|
||||
|
@ -564,18 +576,21 @@ BOOLEAN
|
|||
IoIsErrorUserInduced (
|
||||
NTSTATUS Status
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
IoIsOperationSynchronous (
|
||||
IN PIRP Irp
|
||||
);
|
||||
BOOLEAN
|
||||
IoIsTotalDeviceFailure (
|
||||
NTSTATUS Status
|
||||
);
|
||||
|
||||
PIRP
|
||||
STDCALL
|
||||
IoMakeAssociatedIrp (
|
||||
PIRP Irp,
|
||||
CCHAR StackSize
|
||||
);
|
||||
|
||||
PHYSICAL_ADDRESS
|
||||
IoMapTransfer (
|
||||
PADAPTER_OBJECT AdapterObject,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: iotypes.h,v 1.11 2000/03/05 19:17:37 ea Exp $
|
||||
/* $Id: iotypes.h,v 1.12 2000/03/06 01:02:30 ea Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
@ -265,6 +265,8 @@ typedef struct _FILE_OBJECT
|
|||
|
||||
typedef struct _IRP
|
||||
{
|
||||
CSHORT Type;
|
||||
USHORT Size;
|
||||
PMDL MdlAddress;
|
||||
ULONG Flags;
|
||||
union
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/*
|
||||
/* $Id: fs.c,v 1.11 2000/03/06 01:02:30 ea Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/io/fs.c
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/*
|
||||
/* $Id: irp.c,v 1.26 2000/03/06 01:02:30 ea Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/io/irp.c
|
||||
|
@ -39,7 +40,9 @@
|
|||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
PDEVICE_OBJECT IoGetDeviceToVerify(PETHREAD Thread)
|
||||
PDEVICE_OBJECT
|
||||
STDCALL
|
||||
IoGetDeviceToVerify (PETHREAD Thread)
|
||||
/*
|
||||
* FUNCTION: Returns a pointer to the device, representing a removable-media
|
||||
* device, that is the target of the given thread's I/O request
|
||||
|
@ -48,7 +51,10 @@ PDEVICE_OBJECT IoGetDeviceToVerify(PETHREAD Thread)
|
|||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
VOID IoFreeIrp(PIRP Irp)
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
IoFreeIrp (PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Releases a caller allocated irp
|
||||
* ARGUMENTS:
|
||||
|
@ -58,7 +64,10 @@ VOID IoFreeIrp(PIRP Irp)
|
|||
ExFreePool(Irp);
|
||||
}
|
||||
|
||||
PIRP IoMakeAssociatedIrp(PIRP Irp, CCHAR StackSize)
|
||||
|
||||
PIRP
|
||||
STDCALL
|
||||
IoMakeAssociatedIrp (PIRP Irp, CCHAR StackSize)
|
||||
/*
|
||||
* FUNCTION: Allocates and initializes an irp to associated with a master irp
|
||||
* ARGUMENTS:
|
||||
|
@ -73,7 +82,13 @@ PIRP IoMakeAssociatedIrp(PIRP Irp, CCHAR StackSize)
|
|||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
VOID IoMarkIrpPending(PIRP Irp)
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoMarkIrpPending
|
||||
*/
|
||||
VOID
|
||||
IoMarkIrpPending (PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Marks the specified irp, indicating further processing will
|
||||
* be required by other driver routines
|
||||
|
@ -86,7 +101,13 @@ VOID IoMarkIrpPending(PIRP Irp)
|
|||
IoGetCurrentIrpStackLocation(Irp)->Control |= SL_PENDING_RETURNED;
|
||||
}
|
||||
|
||||
USHORT IoSizeOfIrp(CCHAR StackSize)
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoSizeOfIrp
|
||||
*/
|
||||
USHORT
|
||||
IoSizeOfIrp (CCHAR StackSize)
|
||||
/*
|
||||
* FUNCTION: Determines the size of an IRP
|
||||
* ARGUMENTS:
|
||||
|
@ -97,7 +118,10 @@ USHORT IoSizeOfIrp(CCHAR StackSize)
|
|||
return(sizeof(IRP)+((StackSize-1)*sizeof(IO_STACK_LOCATION)));
|
||||
}
|
||||
|
||||
VOID IoInitializeIrp(PIRP Irp, USHORT PacketSize, CCHAR StackSize)
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
IoInitializeIrp (PIRP Irp, USHORT PacketSize, CCHAR StackSize)
|
||||
/*
|
||||
* FUNCTION: Initalizes an irp allocated by the caller
|
||||
* ARGUMENTS:
|
||||
|
@ -109,12 +133,19 @@ VOID IoInitializeIrp(PIRP Irp, USHORT PacketSize, CCHAR StackSize)
|
|||
assert(Irp != NULL);
|
||||
|
||||
memset(Irp, 0, PacketSize);
|
||||
Irp->Size = PacketSize;
|
||||
Irp->StackCount = StackSize;
|
||||
Irp->CurrentLocation = StackSize;
|
||||
Irp->Tail.Overlay.CurrentStackLocation = IoGetCurrentIrpStackLocation(Irp);
|
||||
}
|
||||
|
||||
PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoGetCurrentIrpStackLocation
|
||||
*/
|
||||
PIO_STACK_LOCATION
|
||||
IoGetCurrentIrpStackLocation (PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Gets a pointer to the callers location in the I/O stack in
|
||||
* the given IRP
|
||||
|
@ -131,13 +162,25 @@ PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
|
|||
return(&Irp->Stack[(ULONG)Irp->CurrentLocation]);
|
||||
}
|
||||
|
||||
VOID IoSetNextIrpStackLocation(PIRP Irp)
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoSetNextIrpStackLocation
|
||||
*/
|
||||
VOID
|
||||
IoSetNextIrpStackLocation (PIRP Irp)
|
||||
{
|
||||
Irp->CurrentLocation--;
|
||||
Irp->Tail.Overlay.CurrentStackLocation--;
|
||||
}
|
||||
|
||||
PIO_STACK_LOCATION IoGetNextIrpStackLocation(PIRP Irp)
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoGetNextIrpStackLocation
|
||||
*/
|
||||
PIO_STACK_LOCATION
|
||||
IoGetNextIrpStackLocation (PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Gives a higher level driver access to the next lower driver's
|
||||
* I/O stack location
|
||||
|
@ -153,7 +196,10 @@ PIO_STACK_LOCATION IoGetNextIrpStackLocation(PIRP Irp)
|
|||
return(&Irp->Stack[Irp->CurrentLocation-1]);
|
||||
}
|
||||
|
||||
NTSTATUS IoCallDriver(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
|
||||
NTSTATUS
|
||||
FASTCALL
|
||||
IofCallDriver (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Sends an IRP to the next lower driver
|
||||
*/
|
||||
|
@ -178,7 +224,21 @@ NTSTATUS IoCallDriver(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
|||
return Status;
|
||||
}
|
||||
|
||||
PIRP IoAllocateIrp(CCHAR StackSize, BOOLEAN ChargeQuota)
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IoCallDriver (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
{
|
||||
return IofCallDriver (
|
||||
DeviceObject,
|
||||
Irp
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
PIRP
|
||||
STDCALL
|
||||
IoAllocateIrp (CCHAR StackSize, BOOLEAN ChargeQuota)
|
||||
/*
|
||||
* FUNCTION: Allocates an IRP
|
||||
* ARGUMENTS:
|
||||
|
@ -218,7 +278,13 @@ PIRP IoAllocateIrp(CCHAR StackSize, BOOLEAN ChargeQuota)
|
|||
return Irp;
|
||||
}
|
||||
|
||||
VOID IoSetCompletionRoutine(PIRP Irp,
|
||||
|
||||
/**********************************************************************
|
||||
* NAME INTERNAL
|
||||
* IoSetCompletionRoutine
|
||||
*/
|
||||
VOID
|
||||
IoSetCompletionRoutine (PIRP Irp,
|
||||
PIO_COMPLETION_ROUTINE CompletionRoutine,
|
||||
PVOID Context,
|
||||
BOOLEAN InvokeOnSuccess,
|
||||
|
@ -256,7 +322,10 @@ VOID IopCompleteRequest(struct _KAPC* Apc,
|
|||
(KPRIORITY)(*SystemArgument2));
|
||||
}
|
||||
|
||||
VOID IoCompleteRequest(PIRP Irp, CCHAR PriorityBoost)
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
IofCompleteRequest (PIRP Irp, CCHAR PriorityBoost)
|
||||
/*
|
||||
* FUNCTION: Indicates the caller has finished all processing for a given
|
||||
* I/O request and is returning the given IRP to the I/O manager
|
||||
|
@ -320,3 +389,73 @@ VOID IoCompleteRequest(PIRP Irp, CCHAR PriorityBoost)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
IoCompleteRequest (PIRP Irp, CCHAR PriorityBoost)
|
||||
{
|
||||
IofCompleteRequest (
|
||||
Irp,
|
||||
PriorityBoost
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* IoIsOperationSynchronous@4
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Check if the I/O operation associated with the given IRP
|
||||
* is synchronous.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* Irp Packet to check.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* TRUE if Irp's operation is synchronous; otherwise FALSE.
|
||||
*/
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
IoIsOperationSynchronous (
|
||||
IN PIRP Irp
|
||||
)
|
||||
{
|
||||
ULONG Flags = 0;
|
||||
PFILE_OBJECT FileObject = NULL;
|
||||
|
||||
/*
|
||||
* Check the associated FILE_OBJECT's
|
||||
* flags first.
|
||||
*/
|
||||
FileObject = Irp->Tail.Overlay.OriginalFileObject;
|
||||
if (!(FO_SYNCHRONOUS_IO & FileObject->Flags))
|
||||
{
|
||||
/* Check IRP's flags. */
|
||||
Flags = Irp->Flags;
|
||||
if (!( (IRP_SYNCHRONOUS_API | IRP_SYNCHRONOUS_PAGING_IO)
|
||||
& Flags
|
||||
))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Check more IRP's flags.
|
||||
*/
|
||||
Flags = Irp->Flags;
|
||||
if ( !(IRP_MOUNT_COMPLETION & Flags)
|
||||
|| (IRP_SYNCHRONOUS_PAGING_IO & Flags)
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
/*
|
||||
* Otherwise, it is an
|
||||
* asynchronous operation.
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; $Id: ntoskrnl.def,v 1.52 2000/03/05 19:17:39 ea Exp $
|
||||
; $Id: ntoskrnl.def,v 1.53 2000/03/06 01:02:30 ea Exp $
|
||||
;
|
||||
; reactos/ntoskrnl/ntoskrnl.def
|
||||
;
|
||||
|
@ -146,11 +146,12 @@ FsRtlTruncateMcb@8
|
|||
FsRtlUninitializeFileLock@4
|
||||
FsRtlUninitializeLargeMcb@4
|
||||
FsRtlUninitializeMcb@4
|
||||
IoAllocateIrp@8
|
||||
IoAllocateController
|
||||
IoAttachDeviceToDeviceStack
|
||||
IoBuildSynchronousFsdRequest
|
||||
IoCallDriver
|
||||
IoCompleteRequest
|
||||
IoCallDriver@8
|
||||
IoCompleteRequest@8
|
||||
IoConnectInterrupt
|
||||
IoCreateController
|
||||
IoCreateDevice
|
||||
|
@ -161,11 +162,16 @@ IoDeleteController
|
|||
IoDeleteDevice
|
||||
IoDisconnectInterrupt
|
||||
IoFreeController
|
||||
IoFreeIrp@4
|
||||
IoGetBaseFileSystemDeviceObject@4
|
||||
IoGetCurrentIrpStackLocation
|
||||
IoGetDeviceToVerify@4
|
||||
IoGetRelatedDeviceObject@4
|
||||
IoInitializeDpcRequest
|
||||
IoInitializeIrp@12
|
||||
IoInitializeTimer
|
||||
IoIsOperationSynchronous@4
|
||||
IoMakeAssociatedIrp@8
|
||||
IoMarkIrpPending
|
||||
IoRegisterFileSystem
|
||||
IoRequestDpc
|
||||
|
@ -174,6 +180,10 @@ IoStartNextPacket
|
|||
IoStartNextPacketByKey
|
||||
IoStartTimer
|
||||
IoStopTimer
|
||||
;@IofCallDriver@0
|
||||
IofCallDriver@8
|
||||
;@IofCompleteRequest@0
|
||||
IofCompleteRequest@8
|
||||
KdDebuggerEnabled DATA
|
||||
KdDebuggerNotPresent DATA
|
||||
KdPollBreakIn@0
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; $Id: ntoskrnl.edf,v 1.39 2000/03/05 19:17:40 ea Exp $
|
||||
; $Id: ntoskrnl.edf,v 1.40 2000/03/06 01:02:30 ea Exp $
|
||||
;
|
||||
; reactos/ntoskrnl/ntoskrnl.def
|
||||
;
|
||||
|
@ -146,11 +146,12 @@ FsRtlTruncateMcb=FsRtlTruncateMcb@8
|
|||
FsRtlUninitializeFileLock=FsRtlUninitializeFileLock@4
|
||||
FsRtlUninitializeLargeMcb=FsRtlUninitializeLargeMcb@4
|
||||
FsRtlUninitializeMcb=FsRtlUninitializeMcb@4
|
||||
IoAllocateIrp=IoAllocateIrp@8
|
||||
IoAllocateController
|
||||
IoAttachDeviceToDeviceStack
|
||||
IoBuildSynchronousFsdRequest
|
||||
IoCallDriver
|
||||
IoCompleteRequest
|
||||
IoCallDriver=IoCallDriver@8
|
||||
IoCompleteRequest=IoCompleteRequest@8
|
||||
IoConnectInterrupt
|
||||
IoCreateController
|
||||
IoCreateDevice
|
||||
|
@ -161,11 +162,16 @@ IoDeleteController
|
|||
IoDeleteDevice
|
||||
IoDisconnectInterrupt
|
||||
IoFreeController
|
||||
IoFreeIrp=IoFreeIrp@4
|
||||
IoGetBaseFileSystemDeviceObject=IoGetBaseFileSystemDeviceObject@4
|
||||
IoGetCurrentIrpStackLocation
|
||||
IoGetDeviceToVerify=IoGetDeviceToVerify@4
|
||||
IoGetRelatedDeviceObject=IoGetRelatedDeviceObject@4
|
||||
IoInitializeDpcRequest
|
||||
IoInitializeIrp=IoInitializeIrp@12
|
||||
IoInitializeTimer
|
||||
IoIsOperationSynchronous=IoIsOperationSynchronous@4
|
||||
IoMakeAssociatedIrp@8
|
||||
IoMarkIrpPending
|
||||
IoRegisterFileSystem
|
||||
IoRequestDpc
|
||||
|
@ -174,6 +180,10 @@ IoStartNextPacket
|
|||
IoStartNextPacketByKey
|
||||
IoStartTimer
|
||||
IoStopTimer
|
||||
;IofCallDriver=@IofCallDriver@0
|
||||
IofCallDriver=IofCallDriver@8
|
||||
;IofCompleteRequest=@IofCompleteRequest@0
|
||||
IofCompleteRequest=IofCompleteRequest@8
|
||||
KdDebuggerEnabled DATA
|
||||
KdDebuggerNotPresent DATA
|
||||
KdPollBreakIn=KdPollBreakIn@0
|
||||
|
|
Loading…
Reference in a new issue