branch update for HEAD-2003091401
[reactos.git] / ntoskrnl / io / lock.c
index 3b14693..35b29ab 100644 (file)
@@ -34,6 +34,9 @@ STDCALL
        //FIXME: should I call IoFreeIrp and return STATUS_MORE_PROCESSING_REQUIRED?
 }
 
+/*
+ * @unimplemented
+ */
 NTSTATUS
 STDCALL
 NtLockFile (
@@ -54,7 +57,7 @@ NtLockFile (
        PLARGE_INTEGER  LocalLength = NULL;
        PKEVENT Event = NULL;
        PIRP Irp = NULL;
-       PIO_STACK_LOCATION StackPtr;
+       PEXTENDED_IO_STACK_LOCATION StackPtr;
        IO_STATUS_BLOCK         LocalIoStatusBlock;
        PIO_STATUS_BLOCK IoStatusBlock;
        PDEVICE_OBJECT  DeviceObject;
@@ -114,6 +117,9 @@ NtLockFile (
        else
                IoStatusBlock = UserIoStatusBlock;
 
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
        Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
        Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
 
@@ -121,7 +127,7 @@ NtLockFile (
        Irp->UserIosb = IoStatusBlock;
        Irp->Tail.Overlay.Thread = PsGetCurrentThread();
 
-       StackPtr = IoGetNextIrpStackLocation(Irp);
+       StackPtr = (PEXTENDED_IO_STACK_LOCATION) IoGetNextIrpStackLocation(Irp);
        StackPtr->MajorFunction = IRP_MJ_LOCK_CONTROL;
        StackPtr->MinorFunction = IRP_MN_LOCK;
        StackPtr->FileObject = FileObject;
@@ -144,7 +150,7 @@ NtLockFile (
        StackPtr->Parameters.LockControl.Length = LocalLength;
        StackPtr->Parameters.LockControl.ByteOffset = *ByteOffset;
        StackPtr->Parameters.LockControl.Key = Key ? *Key : 0;
-
+       
        IoSetCompletionRoutine(  
                                        Irp,  
                                        NtLockFileCompletionRoutine,  
@@ -198,6 +204,9 @@ NtLockFile (
 
 
 
+/*
+ * @unimplemented
+ */
 NTSTATUS
 STDCALL
 NtUnlockFile (
@@ -212,7 +221,7 @@ NtUnlockFile (
        PFILE_OBJECT FileObject = NULL;
        PLARGE_INTEGER  LocalLength = NULL;
        PIRP Irp  = NULL;
-       PIO_STACK_LOCATION StackPtr;
+       PEXTENDED_IO_STACK_LOCATION StackPtr;
        IO_STATUS_BLOCK         LocalIoStatusBlock;
        PDEVICE_OBJECT  DeviceObject;
 
@@ -250,10 +259,13 @@ NtUnlockFile (
                goto fail;
        }
 
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
        Irp->UserIosb = &LocalIoStatusBlock;
        Irp->Tail.Overlay.Thread = PsGetCurrentThread();
 
-       StackPtr = IoGetNextIrpStackLocation(Irp);
+       StackPtr = (PEXTENDED_IO_STACK_LOCATION) IoGetNextIrpStackLocation(Irp);
        StackPtr->MajorFunction = IRP_MJ_LOCK_CONTROL;
        StackPtr->MinorFunction = IRP_MN_UNLOCK_SINGLE;
        StackPtr->DeviceObject = DeviceObject;