Moved IoVerifyVolume().

Made CDROM and TAPE devices mountable.

svn path=/trunk/; revision=2837
This commit is contained in:
Eric Kohl 2002-04-10 09:58:45 +00:00
parent b6a1093b95
commit 62b86daaf8
10 changed files with 468 additions and 371 deletions

View file

@ -1,4 +1,4 @@
/* $Id: fsctl.c,v 1.1 2002/03/18 22:37:13 hbirr Exp $
/* $Id: fsctl.c,v 1.2 2002/04/10 09:58:45 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -202,7 +202,7 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext)
goto ByeBye;
}
Status = VfatHasFileSystem (IrpContext->Stack->Parameters.Mount.DeviceObject, &RecognizedFS, NULL);
Status = VfatHasFileSystem (IrpContext->Stack->Parameters.MountVolume.DeviceObject, &RecognizedFS, NULL);
if (!NT_SUCCESS(Status))
{
goto ByeBye;
@ -233,8 +233,8 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext)
RtlZeroMemory(DeviceExt, sizeof(DEVICE_EXTENSION));
/* use same vpb as device disk */
DeviceObject->Vpb = IrpContext->Stack->Parameters.Mount.DeviceObject->Vpb;
Status = VfatMountDevice(DeviceExt, IrpContext->Stack->Parameters.Mount.DeviceObject);
DeviceObject->Vpb = IrpContext->Stack->Parameters.MountVolume.DeviceObject->Vpb;
Status = VfatMountDevice(DeviceExt, IrpContext->Stack->Parameters.MountVolume.DeviceObject);
if (!NT_SUCCESS(Status))
{
/* FIXME: delete device object */
@ -254,7 +254,7 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext)
}
#endif
DeviceObject->Vpb->Flags |= VPB_MOUNTED;
DeviceExt->StorageDevice = IoAttachDeviceToDeviceStack(DeviceObject, IrpContext->Stack->Parameters.Mount.DeviceObject);
DeviceExt->StorageDevice = IoAttachDeviceToDeviceStack(DeviceObject, IrpContext->Stack->Parameters.MountVolume.DeviceObject);
DeviceExt->FATFileObject = IoCreateStreamFileObject(NULL, DeviceExt->StorageDevice);
Fcb = vfatNewFCB(NULL);
@ -334,6 +334,21 @@ ByeBye:
return Status;
}
static NTSTATUS
VfatVerify (PVFAT_IRP_CONTEXT IrpContext)
/*
* FUNCTION: Mount the filesystem
*/
{
DPRINT("VfatVerify(IrpContext %x)\n", IrpContext);
assert(IrpContext);
return(STATUS_INVALID_DEVICE_REQUEST);
}
NTSTATUS VfatFileSystemControl(PVFAT_IRP_CONTEXT IrpContext)
/*
* FUNCTION: File system control
@ -358,8 +373,7 @@ NTSTATUS VfatFileSystemControl(PVFAT_IRP_CONTEXT IrpContext)
break;
case IRP_MN_VERIFY_VOLUME:
DPRINT("VFAT FSC: IRP_MN_VERIFY_VOLUME\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
Status = VfatVerify(IrpContext);
break;
default:

View file

@ -1,6 +1,6 @@
#ifndef _INCLUDE_DDK_IOFUNCS_H
#define _INCLUDE_DDK_IOFUNCS_H
/* $Id: iofuncs.h,v 1.29 2002/01/21 22:27:36 hbirr Exp $ */
/* $Id: iofuncs.h,v 1.30 2002/04/10 09:55:10 ekohl Exp $ */
/* --- EXPORTED BY NTOSKRNL --- */
@ -822,7 +822,7 @@ IoQueryVolumeInformation (
VOID
STDCALL
IoQueueThreadIrp (
PVOID Unknown0
IN PIRP Irp
);
VOID
STDCALL

View file

@ -1,4 +1,4 @@
/* $Id: iotypes.h,v 1.35 2002/03/25 21:53:27 ekohl Exp $
/* $Id: iotypes.h,v 1.36 2002/04/10 09:55:10 ekohl Exp $
*
*/
@ -304,7 +304,7 @@ typedef struct __attribute__((packed)) _IO_STACK_LOCATION
{
struct _VPB* Vpb;
struct _DEVICE_OBJECT* DeviceObject;
} Mount;
} MountVolume;
struct
{
struct _VPB* Vpb;

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: io.h,v 1.17 2002/03/15 23:59:05 ekohl Exp $
/* $Id: io.h,v 1.18 2002/04/10 09:58:02 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -264,7 +264,9 @@ IoInitFileSystemImplementation(VOID);
VOID
IoInitVpbImplementation (VOID);
NTSTATUS IoTryToMountStorageDevice(PDEVICE_OBJECT DeviceObject);
NTSTATUS
IoTryToMountStorageDevice(IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN AllowRawMount);
POBJECT IoOpenSymlink(POBJECT SymbolicLink);
POBJECT IoOpenFileOnDevice(POBJECT SymbolicLink, PWCHAR Name);
@ -300,12 +302,13 @@ VOID IoShutdownRegisteredDevices(VOID);
VOID IoShutdownRegisteredFileSystems(VOID);
NTSTATUS STDCALL
IoPageRead (PFILE_OBJECT FileObject,
IoPageRead(PFILE_OBJECT FileObject,
PMDL Mdl,
PLARGE_INTEGER Offset,
PIO_STATUS_BLOCK StatusBlock,
BOOLEAN PagingIo);
NTSTATUS STDCALL IoPageWrite (PFILE_OBJECT FileObject,
NTSTATUS STDCALL
IoPageWrite(PFILE_OBJECT FileObject,
PMDL Mdl,
PLARGE_INTEGER Offset,
PIO_STATUS_BLOCK StatusBlock,

View file

@ -1,4 +1,4 @@
/* $Id: buildirp.c,v 1.26 2002/03/17 17:21:44 hbirr Exp $
/* $Id: buildirp.c,v 1.27 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -81,8 +81,8 @@ PIRP IoBuildFilesystemControlRequest(ULONG MinorFunction,
* DeviceObject = Device object to send the request to
* UserEvent = Event used to notify the caller of completion
* IoStatusBlock (OUT) = Used to return the status of the operation
* DeviceToMount = Device to mount (for the IRP_MN_MOUNT_DEVICE
* request)
* DeviceToMount = Device to mount (for the IRP_MN_MOUNT_VOLUME
* or IRP_MN_VERIFY_VOLUME request)
*/
{
PIRP Irp;
@ -114,11 +114,13 @@ PIRP IoBuildFilesystemControlRequest(ULONG MinorFunction,
break;
case IRP_MN_MOUNT_VOLUME:
StackPtr->Parameters.Mount.Vpb = DeviceToMount->Vpb;
StackPtr->Parameters.Mount.DeviceObject = DeviceToMount;
StackPtr->Parameters.MountVolume.Vpb = DeviceToMount->Vpb;
StackPtr->Parameters.MountVolume.DeviceObject = DeviceToMount;
break;
case IRP_MN_VERIFY_VOLUME:
StackPtr->Parameters.VerifyVolume.Vpb = DeviceToMount->Vpb;
StackPtr->Parameters.VerifyVolume.DeviceObject = DeviceToMount;
break;
case IRP_MN_LOAD_FILE_SYSTEM:

View file

@ -1,4 +1,4 @@
/* $Id: create.c,v 1.55 2002/04/07 18:36:13 phreak Exp $
/* $Id: create.c,v 1.56 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -81,26 +81,27 @@ IopCreateFile(PVOID ObjectBody,
/* This is probably an attempt to create a meta fileobject (eg. for FAT)
for the cache manager, so return STATUS_SUCCESS */
DPRINT("DeviceObject was NULL\n");
return (STATUS_SUCCESS);
return(STATUS_SUCCESS);
}
if (IoDeviceObjectType != BODY_TO_HEADER(Parent)->ObjectType)
{
CPRINT("Parent is a %S which is not a device type\n",
BODY_TO_HEADER(Parent)->ObjectType->TypeName.Buffer);
return (STATUS_UNSUCCESSFUL);
return(STATUS_UNSUCCESSFUL);
}
Status = ObReferenceObjectByPointer (DeviceObject,
Status = ObReferenceObjectByPointer(DeviceObject,
STANDARD_RIGHTS_REQUIRED,
IoDeviceObjectType,
UserMode);
if (STATUS_SUCCESS != Status)
if (!NT_SUCCESS(Status))
{
CHECKPOINT1;
return (Status);
CPRINT("Failed to reference device object %x\n", DeviceObject);
return(Status);
}
DeviceObject = IoGetAttachedDevice (DeviceObject);
DeviceObject = IoGetAttachedDevice(DeviceObject);
DPRINT("DeviceObject %x\n", DeviceObject);
if (NULL == RemainingPath)
@ -113,12 +114,14 @@ IopCreateFile(PVOID ObjectBody,
{
if ((DeviceObject->DeviceType != FILE_DEVICE_FILE_SYSTEM)
&& (DeviceObject->DeviceType != FILE_DEVICE_DISK)
&& (DeviceObject->DeviceType != FILE_DEVICE_CD_ROM)
&& (DeviceObject->DeviceType != FILE_DEVICE_TAPE)
&& (DeviceObject->DeviceType != FILE_DEVICE_NETWORK)
&& (DeviceObject->DeviceType != FILE_DEVICE_NAMED_PIPE)
&& (DeviceObject->DeviceType != FILE_DEVICE_MAILSLOT))
{
CPRINT ("Device was wrong type\n");
return (STATUS_UNSUCCESSFUL);
CPRINT("Device was wrong type\n");
return(STATUS_UNSUCCESSFUL);
}
if (DeviceObject->DeviceType != FILE_DEVICE_NETWORK
@ -128,13 +131,13 @@ IopCreateFile(PVOID ObjectBody,
if (!(DeviceObject->Vpb->Flags & VPB_MOUNTED))
{
DPRINT("Trying to mount storage device\n");
Status = IoTryToMountStorageDevice (DeviceObject);
Status = IoTryToMountStorageDevice(DeviceObject, FALSE);
DPRINT("Status %x\n", Status);
if (!NT_SUCCESS(Status))
{
CPRINT("Failed to mount storage device (status %x)\n",
Status);
return (Status);
return(Status);
}
DeviceObject = IoGetAttachedDevice(DeviceObject);
}
@ -142,8 +145,9 @@ IopCreateFile(PVOID ObjectBody,
RtlCreateUnicodeString(&(FileObject->FileName),
RemainingPath);
}
DPRINT("FileObject->FileName.Buffer %S\n",
FileObject->FileName.Buffer);
DPRINT("FileObject->FileName %wZ\n",
&FileObject->FileName);
FileObject->DeviceObject = DeviceObject;
DPRINT("FileObject %x DeviceObject %x\n",
FileObject,
@ -151,7 +155,7 @@ IopCreateFile(PVOID ObjectBody,
FileObject->Vpb = DeviceObject->Vpb;
FileObject->Type = InternalFileType;
return (STATUS_SUCCESS);
return(STATUS_SUCCESS);
}
@ -186,9 +190,9 @@ IoCreateStreamFileObject(PFILE_OBJECT FileObject,
DPRINT("IoCreateStreamFileObject(FileObject %x, DeviceObject %x)\n",
FileObject, DeviceObject);
assert_irql (PASSIVE_LEVEL);
assert_irql(PASSIVE_LEVEL);
Status = ObCreateObject (&FileHandle,
Status = ObCreateObject(&FileHandle,
STANDARD_RIGHTS_REQUIRED,
NULL,
IoFileObjectType,
@ -213,11 +217,11 @@ IoCreateStreamFileObject(PFILE_OBJECT FileObject,
CreatedFileObject->Flags |= FO_DIRECT_DEVICE_OPEN;
// shouldn't we initialize the lock event, and several other things here too?
KeInitializeEvent( &CreatedFileObject->Event, NotificationEvent, FALSE );
KeInitializeEvent(&CreatedFileObject->Event, NotificationEvent, FALSE);
ZwClose (FileHandle);
ZwClose(FileHandle);
return (CreatedFileObject);
return(CreatedFileObject);
}

View file

@ -1,4 +1,4 @@
/* $Id: device.c,v 1.36 2002/03/24 15:30:44 ekohl Exp $
/* $Id: device.c,v 1.37 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -274,6 +274,7 @@ IoRegisterDriverReinitialization(PDRIVER_OBJECT DriverObject,
UNIMPLEMENTED;
}
NTSTATUS STDCALL
IopDefaultDispatchFunction(PDEVICE_OBJECT DeviceObject,
PIRP Irp)
@ -285,6 +286,7 @@ IopDefaultDispatchFunction(PDEVICE_OBJECT DeviceObject,
return(STATUS_NOT_IMPLEMENTED);
}
NTSTATUS
IopCreateDriverObject(PDRIVER_OBJECT *DriverObject)
{
@ -458,8 +460,7 @@ IopInitializeService(
}
NTSTATUS
IopInitializeDeviceNodeService(
PDEVICE_NODE DeviceNode)
IopInitializeDeviceNodeService(PDEVICE_NODE DeviceNode)
{
RTL_QUERY_REGISTRY_TABLE QueryTable[2];
UNICODE_STRING ImagePath;
@ -474,7 +475,7 @@ IopInitializeDeviceNodeService(
if (!NT_SUCCESS(Status))
{
DPRINT("RtlpGetRegistryHandle() failed (Status %x)\n", Status);
return Status;
return(Status);
}
RtlZeroMemory(QueryTable, sizeof(QueryTable));
@ -504,7 +505,7 @@ IopInitializeDeviceNodeService(
RtlFreeUnicodeString(&ImagePath);
}
return Status;
return(Status);
}
NTSTATUS
@ -561,6 +562,7 @@ IopInitializeDriver(PDRIVER_INITIALIZE DriverEntry,
return(Status);
}
NTSTATUS STDCALL
IoAttachDevice(PDEVICE_OBJECT SourceDevice,
PUNICODE_STRING TargetDevice,
@ -576,6 +578,7 @@ IoAttachDevice(PDEVICE_OBJECT SourceDevice,
UNIMPLEMENTED;
}
NTSTATUS STDCALL
IopCreateDevice(PVOID ObjectBody,
PVOID Parent,
@ -705,7 +708,10 @@ IoCreateDevice(PDRIVER_OBJECT DriverObject,
SynchronizationEvent,
TRUE);
if (CreatedDeviceObject->DeviceType == FILE_DEVICE_DISK)
/* FIXME: Do we need to add network drives too?! */
if (CreatedDeviceObject->DeviceType == FILE_DEVICE_DISK ||
CreatedDeviceObject->DeviceType == FILE_DEVICE_CD_ROM ||
CreatedDeviceObject->DeviceType == FILE_DEVICE_TAPE)
{
IoAttachVpb(CreatedDeviceObject);
}
@ -727,7 +733,7 @@ IoOpenDeviceInstanceKey (
)
{
UNIMPLEMENTED;
return (STATUS_NOT_IMPLEMENTED);
return(STATUS_NOT_IMPLEMENTED);
}
@ -750,12 +756,12 @@ IoGetDeviceToVerify (PETHREAD Thread)
* device, that is the target of the given thread's I/O request
*/
{
return Thread->DeviceToVerify;
return(Thread->DeviceToVerify);
}
VOID STDCALL
IoSetDeviceToVerify (IN PETHREAD Thread,
IoSetDeviceToVerify(IN PETHREAD Thread,
IN PDEVICE_OBJECT DeviceObject)
{
Thread->DeviceToVerify = DeviceObject;

View file

@ -1,4 +1,4 @@
/* $Id: fs.c,v 1.21 2002/04/07 18:36:13 phreak Exp $
/* $Id: fs.c,v 1.22 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -130,7 +130,9 @@ NtFsControlFile (
return(Status);
}
VOID IoInitFileSystemImplementation(VOID)
VOID
IoInitFileSystemImplementation(VOID)
{
InitializeListHead(&FileSystemListHead);
KeInitializeSpinLock(&FileSystemListLock);
@ -139,7 +141,9 @@ VOID IoInitFileSystemImplementation(VOID)
KeInitializeSpinLock(&FsChangeNotifyListLock);
}
VOID IoShutdownRegisteredFileSystems(VOID)
VOID
IoShutdownRegisteredFileSystems(VOID)
{
KIRQL oldlvl;
PLIST_ENTRY current_entry;
@ -180,7 +184,9 @@ VOID IoShutdownRegisteredFileSystems(VOID)
KeReleaseSpinLock(&FileSystemListLock,oldlvl);
}
NTSTATUS IoAskFileSystemToMountDevice(PDEVICE_OBJECT DeviceObject,
NTSTATUS
IoAskFileSystemToMountDevice(PDEVICE_OBJECT DeviceObject,
PDEVICE_OBJECT DeviceToMount)
{
PIRP Irp;
@ -211,12 +217,17 @@ NTSTATUS IoAskFileSystemToMountDevice(PDEVICE_OBJECT DeviceObject,
return(Status);
}
NTSTATUS IoAskFileSystemToLoad(PDEVICE_OBJECT DeviceObject)
NTSTATUS
IoAskFileSystemToLoad(PDEVICE_OBJECT DeviceObject)
{
UNIMPLEMENTED;
}
NTSTATUS IoTryToMountStorageDevice(PDEVICE_OBJECT DeviceObject)
NTSTATUS
IoTryToMountStorageDevice(IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN AllowRawMount)
/*
* FUNCTION: Trys to mount a storage device
* ARGUMENTS:
@ -231,7 +242,7 @@ NTSTATUS IoTryToMountStorageDevice(PDEVICE_OBJECT DeviceObject)
assert_irql(PASSIVE_LEVEL);
DPRINT("IoTryToMountStorageDevice(DeviceObject %x)\n",DeviceObject);
DPRINT1("IoTryToMountStorageDevice(DeviceObject %x)\n",DeviceObject);
KeAcquireSpinLock(&FileSystemListLock,&oldlvl);
current_entry = FileSystemListHead.Flink;
@ -266,6 +277,90 @@ NTSTATUS IoTryToMountStorageDevice(PDEVICE_OBJECT DeviceObject)
return(STATUS_UNRECOGNIZED_VOLUME);
}
/**********************************************************************
* NAME EXPORTED
* IoVerifyVolume
*
* DESCRIPTION
* Veriyfy the file system type and volume information or mount
* a file system.
*
* ARGUMENTS
* DeviceObject
* Device to verify or mount
*
* AllowRawMount
* ...
*
* RETURN VALUE
* Status
*/
NTSTATUS STDCALL
IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN AllowRawMount)
{
#if 0
IO_STATUS_BLOCK IoStatusBlock,
KEVENT Event;
PIRP Irp;
#endif
NTSTATUS Status;
DPRINT1("IoVerifyVolume(DeviceObject %x AllowRawMount %x)\n",
DeviceObject,
AllowRawMount);
Status = STATUS_SUCCESS;
KeWaitForSingleObject(&DeviceObject->DeviceLock,
Executive,
KernelMode,
FALSE,
NULL);
if (DeviceObject->Vpb->Flags & VPB_MOUNTED)
{
/* FIXME: Issue verify request to the FSD */
#if 0
KeInitializeEvent(&Event,...);
Irp = IoBuildFilesystemControlRequest(IRP_MN_VERIFY_VOLUME,
DeviceObject,
&Event,
&IoStatusBlock,
&DeviceToMount)
#endif
if (NT_SUCCESS(Status))
{
KeSetEvent(&DeviceObject->DeviceLock,
IO_NO_INCREMENT,
FALSE);
return(STATUS_SUCCESS);
}
}
if (Status == STATUS_WRONG_VOLUME)
{
/* FIXME: Replace existing VPB by a new one */
}
/* Start mount sequence */
Status = IoTryToMountStorageDevice(DeviceObject,
AllowRawMount);
KeSetEvent(&DeviceObject->DeviceLock,
IO_NO_INCREMENT,
FALSE);
return(Status);
}
VOID STDCALL
IoRegisterFileSystem(PDEVICE_OBJECT DeviceObject)
{
@ -283,6 +378,7 @@ IoRegisterFileSystem(PDEVICE_OBJECT DeviceObject)
IopNotifyFileSystemChange(DeviceObject, TRUE);
}
VOID STDCALL
IoUnregisterFileSystem(PDEVICE_OBJECT DeviceObject)
{

View file

@ -1,4 +1,4 @@
/* $Id: irp.c,v 1.39 2002/01/21 22:30:26 hbirr Exp $
/* $Id: irp.c,v 1.40 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -46,7 +46,7 @@
VOID STDCALL
IoFreeIrp (PIRP Irp)
IoFreeIrp(PIRP Irp)
/*
* FUNCTION: Releases a caller allocated irp
* ARGUMENTS:
@ -58,7 +58,8 @@ IoFreeIrp (PIRP Irp)
PIRP STDCALL
IoMakeAssociatedIrp (PIRP Irp, CCHAR StackSize)
IoMakeAssociatedIrp(PIRP Irp,
CCHAR StackSize)
/*
* FUNCTION: Allocates and initializes an irp to associated with a master irp
* ARGUMENTS:
@ -75,7 +76,9 @@ IoMakeAssociatedIrp (PIRP Irp, CCHAR StackSize)
VOID STDCALL
IoInitializeIrp (PIRP Irp, USHORT PacketSize, CCHAR StackSize)
IoInitializeIrp(PIRP Irp,
USHORT PacketSize,
CCHAR StackSize)
/*
* FUNCTION: Initalizes an irp allocated by the caller
* ARGUMENTS:
@ -95,7 +98,8 @@ IoInitializeIrp (PIRP Irp, USHORT PacketSize, CCHAR StackSize)
NTSTATUS FASTCALL
IofCallDriver (PDEVICE_OBJECT DeviceObject, PIRP Irp)
IofCallDriver(PDEVICE_OBJECT DeviceObject,
PIRP Irp)
/*
* FUNCTION: Sends an IRP to the next lower driver
*/
@ -125,7 +129,8 @@ IofCallDriver (PDEVICE_OBJECT DeviceObject, PIRP Irp)
DriverObject->MajorFunction[Param->MajorFunction]);
Status = DriverObject->MajorFunction[Param->MajorFunction](DeviceObject,
Irp);
return Status;
return(Status);
}
@ -133,16 +138,14 @@ NTSTATUS
STDCALL
IoCallDriver (PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
return IofCallDriver (
DeviceObject,
Irp
);
return(IofCallDriver(DeviceObject,
Irp));
}
PIRP
STDCALL
IoAllocateIrp (CCHAR StackSize, BOOLEAN ChargeQuota)
PIRP STDCALL
IoAllocateIrp(CCHAR StackSize,
BOOLEAN ChargeQuota)
/*
* FUNCTION: Allocates an IRP
* ARGUMENTS:
@ -163,12 +166,14 @@ IoAllocateIrp (CCHAR StackSize, BOOLEAN ChargeQuota)
if (ChargeQuota)
{
// Irp = ExAllocatePoolWithQuota(NonPagedPool,IoSizeOfIrp(StackSize));
Irp = ExAllocatePoolWithTag(NonPagedPool, IoSizeOfIrp(StackSize),
Irp = ExAllocatePoolWithTag(NonPagedPool,
IoSizeOfIrp(StackSize),
TAG_IRP);
}
else
{
Irp = ExAllocatePoolWithTag(NonPagedPool,IoSizeOfIrp(StackSize),
Irp = ExAllocatePoolWithTag(NonPagedPool,
IoSizeOfIrp(StackSize),
TAG_IRP);
}
@ -177,11 +182,13 @@ IoAllocateIrp (CCHAR StackSize, BOOLEAN ChargeQuota)
return(NULL);
}
IoInitializeIrp(Irp, IoSizeOfIrp(StackSize), StackSize);
IoInitializeIrp(Irp,
IoSizeOfIrp(StackSize),
StackSize);
// DPRINT("Irp %x Irp->StackPtr %d\n", Irp, Irp->CurrentLocation);
return Irp;
return(Irp);
}
@ -192,8 +199,9 @@ IopCompleteRequest(struct _KAPC* Apc,
PVOID* SystemArgument1,
PVOID* SystemArgument2)
{
DPRINT("IopCompleteRequest(Apc %x, SystemArgument1 %x, "
"(*SystemArgument1) %x\n", Apc, SystemArgument1,
DPRINT("IopCompleteRequest(Apc %x, SystemArgument1 %x, (*SystemArgument1) %x\n",
Apc,
SystemArgument1,
*SystemArgument1);
IoSecondStageCompletion((PIRP)(*SystemArgument1),
(KPRIORITY)(*SystemArgument2));
@ -263,14 +271,12 @@ IofCompleteRequest(PIRP Irp,
}
VOID
STDCALL
IoCompleteRequest (PIRP Irp, CCHAR PriorityBoost)
VOID STDCALL
IoCompleteRequest(PIRP Irp,
CCHAR PriorityBoost)
{
IofCompleteRequest (
Irp,
PriorityBoost
);
IofCompleteRequest(Irp,
PriorityBoost);
}
@ -288,87 +294,63 @@ IoCompleteRequest (PIRP Irp, CCHAR PriorityBoost)
* RETURN VALUE
* TRUE if Irp's operation is synchronous; otherwise FALSE.
*/
BOOLEAN
STDCALL
IoIsOperationSynchronous (
IN PIRP Irp
)
BOOLEAN STDCALL
IoIsOperationSynchronous(IN PIRP Irp)
{
ULONG Flags = 0;
PFILE_OBJECT FileObject = NULL;
ULONG Flags = 0;
/*
* Check the associated FILE_OBJECT's
* flags first.
*/
/* 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
))
if (!((IRP_SYNCHRONOUS_API | IRP_SYNCHRONOUS_PAGING_IO) & Flags))
{
return FALSE;
return(FALSE);
}
}
/*
* Check more IRP's flags.
*/
/* Check more IRP's flags. */
Flags = Irp->Flags;
if ( !(IRP_MOUNT_COMPLETION & Flags)
|| (IRP_SYNCHRONOUS_PAGING_IO & Flags)
)
if (!(IRP_MOUNT_COMPLETION & Flags)
|| (IRP_SYNCHRONOUS_PAGING_IO & Flags))
{
return TRUE;
return(TRUE);
}
/*
* Otherwise, it is an
* asynchronous operation.
*/
return FALSE;
/* Otherwise, it is an asynchronous operation. */
return(FALSE);
}
VOID
STDCALL
IoEnqueueIrp (
PIRP Irp
)
VOID STDCALL
IoEnqueueIrp(IN PIRP Irp)
{
UNIMPLEMENTED;
}
VOID
STDCALL
IoSetTopLevelIrp (
IN PIRP Irp
)
VOID STDCALL
IoSetTopLevelIrp(IN PIRP Irp)
{
PETHREAD Thread;
Thread = PsGetCurrentThread ();
Thread = PsGetCurrentThread();
Thread->TopLevelIrp->TopLevelIrp = Irp;
}
PIRP
STDCALL
IoGetTopLevelIrp (
VOID
)
PIRP STDCALL
IoGetTopLevelIrp(VOID)
{
return (PsGetCurrentThread ()->TopLevelIrp->TopLevelIrp);
return(PsGetCurrentThread()->TopLevelIrp->TopLevelIrp);
}
VOID
STDCALL
IoQueueThreadIrp (
PVOID Unknown0
)
VOID STDCALL
IoQueueThreadIrp(IN PIRP Irp)
{
UNIMPLEMENTED;
}

View file

@ -1,4 +1,4 @@
/* $Id: vpb.c,v 1.14 2001/11/02 22:22:33 hbirr Exp $
/* $Id: vpb.c,v 1.15 2002/04/10 09:57:31 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -376,14 +376,4 @@ IoReleaseVpbSpinLock(IN KIRQL Irql)
Irql);
}
NTSTATUS STDCALL
IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN AllowRawMount)
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);
}
/* EOF */