From 2e000e7b38357b55bbe882a02a81bdd6bc811ac8 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 17 May 2005 19:16:21 +0000 Subject: [PATCH] Sorry for the nonatomic commit svn path=/trunk/; revision=15386 --- reactos/ntoskrnl/io/fs.c | 109 --------------------------------------- 1 file changed, 109 deletions(-) diff --git a/reactos/ntoskrnl/io/fs.c b/reactos/ntoskrnl/io/fs.c index ababaef3925..7478551fbe9 100644 --- a/reactos/ntoskrnl/io/fs.c +++ b/reactos/ntoskrnl/io/fs.c @@ -62,115 +62,6 @@ IoCancelFileOpen( UNIMPLEMENTED; } -/* - * @implemented - */ -NTSTATUS STDCALL -NtFsControlFile ( - IN HANDLE DeviceHandle, - IN HANDLE EventHandle OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG IoControlCode, - IN PVOID InputBuffer, - IN ULONG InputBufferSize, - OUT PVOID OutputBuffer, - IN ULONG OutputBufferSize - ) -{ - NTSTATUS Status; - PFILE_OBJECT FileObject; - PDEVICE_OBJECT DeviceObject; - PIRP Irp; - PIO_STACK_LOCATION StackPtr; - PKEVENT ptrEvent; - KPROCESSOR_MODE PreviousMode; - - DPRINT("NtFsControlFile(DeviceHandle %x EventHandle %x ApcRoutine %x " - "ApcContext %x IoStatusBlock %x IoControlCode %x " - "InputBuffer %x InputBufferSize %x OutputBuffer %x " - "OutputBufferSize %x)\n", - DeviceHandle,EventHandle,ApcRoutine,ApcContext,IoStatusBlock, - IoControlCode,InputBuffer,InputBufferSize,OutputBuffer, - OutputBufferSize); - - PreviousMode = ExGetPreviousMode(); - - /* Check granted access against the access rights from IoContolCode */ - Status = ObReferenceObjectByHandle(DeviceHandle, - (IoControlCode >> 14) & 0x3, - NULL, - PreviousMode, - (PVOID *) &FileObject, - NULL); - if (!NT_SUCCESS(Status)) - { - return Status; - } - - if (EventHandle != NULL) - { - Status = ObReferenceObjectByHandle(EventHandle, - SYNCHRONIZE, - ExEventObjectType, - PreviousMode, - (PVOID*)&ptrEvent, - NULL); - if (!NT_SUCCESS(Status)) - { - ObDereferenceObject(FileObject); - return Status; - } - } - else - { - KeResetEvent(&FileObject->Event); - ptrEvent = &FileObject->Event; - } - - DeviceObject = FileObject->DeviceObject; - - Irp = IoBuildDeviceIoControlRequest(IoControlCode, - DeviceObject, - InputBuffer, - InputBufferSize, - OutputBuffer, - OutputBufferSize, - FALSE, - ptrEvent, - IoStatusBlock); - - /* Trigger FileObject/Event dereferencing */ - Irp->Tail.Overlay.OriginalFileObject = FileObject; - - Irp->RequestorMode = PreviousMode; - Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine; - Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext; - - StackPtr = IoGetNextIrpStackLocation(Irp); - StackPtr->FileObject = FileObject; - StackPtr->DeviceObject = DeviceObject; - StackPtr->Parameters.FileSystemControl.InputBufferLength = InputBufferSize; - StackPtr->Parameters.FileSystemControl.OutputBufferLength = - OutputBufferSize; - StackPtr->MajorFunction = IRP_MJ_FILE_SYSTEM_CONTROL; - - Status = IoCallDriver(DeviceObject,Irp); - if (Status == STATUS_PENDING && (FileObject->Flags & FO_SYNCHRONOUS_IO)) - { - KeWaitForSingleObject(ptrEvent, - Executive, - PreviousMode, - FileObject->Flags & FO_ALERTABLE_IO, - NULL); - Status = IoStatusBlock->Status; - } - - return Status; -} - - VOID INIT_FUNCTION IoInitFileSystemImplementation(VOID) {