Author: greatlrd
Date: Wed Jul 5 22:49:03 2006
New Revision: 22865
URL: http://svn.reactos.org/svn/reactos?rev=22865&view=rev
Log:
[AUDIT] after looking through code no signs of reverse engineering were found. Alot stuff taken from wine, it contain hard code string like date, contry names, that need to move to msvcrt dll rc file
Modified:
trunk/reactos/lib/crt/locale/locale.c (props changed)
Propchange: trunk/reactos/lib/crt/locale/locale.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*
Author: ion
Date: Wed Jul 5 06:02:44 2006
New Revision: 22856
URL: http://svn.reactos.org/svn/reactos?rev=22856&view=rev
Log:
- Fix IopcloseFile... I'm not sure it was working right after the Ob changes, so it's possible some devices weren't getting IRP_MJ_CLEANUP... also made it lock the FO and detect malformed FOs (more spam for you on the debug logs!) -- but this is one problem I'm planning on fixing.
Modified:
trunk/reactos/ntoskrnl/io/iomgr/file.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/file.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/file.c?r…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/file.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/file.c Wed Jul 5 06:02:44 2006
@@ -561,7 +561,7 @@
}
VOID
-STDCALL
+NTAPI
IopCloseFile(IN PEPROCESS Process OPTIONAL,
IN PVOID ObjectBody,
IN ACCESS_MASK GrantedAccess,
@@ -575,19 +575,40 @@
NTSTATUS Status;
PDEVICE_OBJECT DeviceObject;
- DPRINT("IopCloseFile()\n");
-
- if (HandleCount > 1 || FileObject->DeviceObject == NULL) return;
+ /* Check if the file is locked and has more then one handle opened */
+ if ((FileObject->LockOperation) && (SystemHandleCount != 1))
+ {
+ DPRINT1("We need to unlock this file!\n");
+ KEBUGCHECK(0);
+ }
+
+ /* Make sure this is the last handle */
+ if (SystemHandleCount != 1) return;
+
+ /* FIXME: ROS HACK */
+ if (!FileObject->DeviceObject)
+ {
+ DPRINT1("FIXME: MALFORMED FILE OBJECT!\n");
+ return;
+ }
/* Check if this is a direct open or not */
if (FileObject->Flags & FO_DIRECT_DEVICE_OPEN)
{
+ /* Get the attached device */
DeviceObject = IoGetAttachedDevice(FileObject->DeviceObject);
}
else
{
+ /* Get the FO's device */
DeviceObject = IoGetRelatedDeviceObject(FileObject);
}
+
+ /* Set the handle created flag */
+ FileObject->Flags |= FO_HANDLE_CREATED;
+
+ /* Check if this is a sync FO and lock it */
+ if (FileObject->Flags & FO_SYNCHRONOUS_IO) IopLockFileObject(FileObject);
/* Clear and set up Events */
KeClearEvent(&FileObject->Event);
@@ -595,12 +616,14 @@
/* Allocate an IRP */
Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
+ if (!Irp) return;
/* Set it up */
Irp->UserEvent = &Event;
Irp->UserIosb = &Irp->IoStatus;
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
Irp->Tail.Overlay.OriginalFileObject = FileObject;
+ Irp->Overlay.AsynchronousParameters.UserApcRoutine = NULL;
Irp->Flags = IRP_CLOSE_OPERATION | IRP_SYNCHRONOUS_API;
/* Set up Stack Pointer Data */
@@ -608,15 +631,25 @@
StackPtr->MajorFunction = IRP_MJ_CLEANUP;
StackPtr->FileObject = FileObject;
+ /* Queue the IRP */
+ //IopQueueIrpToThread(Irp);
+
+ /* Update operation counts */
+ IopUpdateOperationCount(IopOtherTransfer);
+
/* Call the FS Driver */
Status = IoCallDriver(DeviceObject, Irp);
-
- /* Wait for completion */
if (Status == STATUS_PENDING)
{
- KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
- }
+ /* Wait for completion */
+ KeWaitForSingleObject(&Event, UserRequest, KernelMode, FALSE, NULL);
+ }
+
+ /* Free the IRP */
IoFreeIrp(Irp);
+
+ /* Release the lock if we were holding it */
+ if (FileObject->Flags & FO_SYNCHRONOUS_IO) IopUnlockFileObject(FileObject);
}
NTSTATUS
@@ -986,7 +1019,7 @@
SecurityContext.DesiredAccess = DesiredAccess;
SecurityContext.FullCreateOptions = 0; /* ?? */
- KeInitializeEvent(&FileObject->Lock, SynchronizationEvent, FALSE);
+ KeInitializeEvent(&FileObject->Lock, SynchronizationEvent, TRUE);
KeInitializeEvent(&FileObject->Event, NotificationEvent, FALSE);
DPRINT("FileObject 0x%p\n", FileObject);