/* FUNCTIONS ****************************************************************/
-#ifndef LIBCAPTIVE
-
VOID STDCALL
IopCloseFile(PVOID ObjectBody,
ULONG HandleCount)
DPRINT("IopCloseFile()\n");
- if (HandleCount > 0)
+ if (HandleCount > 0 || FileObject->DeviceObject == NULL)
{
return;
}
STANDARD_RIGHTS_REQUIRED,
IoFileObjectType,
UserMode);
-
+ KeResetEvent( &FileObject->Event );
+
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLEANUP,
FileObject->DeviceObject,
NULL,
StackPtr->FileObject = FileObject;
Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&FileObject->Event, Executive, KernelMode, FALSE, NULL);
+ }
}
VOID STDCALL
NTSTATUS Status;
DPRINT("IopDeleteFile()\n");
+
+ if (FileObject->DeviceObject)
+ {
+ ObReferenceObjectByPointer(ObjectBody,
+ STANDARD_RIGHTS_REQUIRED,
+ IoFileObjectType,
+ UserMode);
- ObReferenceObjectByPointer(ObjectBody,
- STANDARD_RIGHTS_REQUIRED,
- IoFileObjectType,
- UserMode);
-
- Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
- FileObject->DeviceObject,
- NULL,
- 0,
- NULL,
- NULL,
- NULL);
- StackPtr = IoGetNextIrpStackLocation(Irp);
- StackPtr->FileObject = FileObject;
+ KeResetEvent( &FileObject->Event );
+ Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
+ FileObject->DeviceObject,
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ NULL);
+ StackPtr = IoGetNextIrpStackLocation(Irp);
+ StackPtr->FileObject = FileObject;
- Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&FileObject->Event, Executive, KernelMode, FALSE, NULL);
+ }
+ }
if (FileObject->FileName.Buffer != NULL)
{
}
}
-#endif /* LIBCAPTIVE */
VOID IoInit (VOID)
{
-#ifndef LIBCAPTIVE
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING DirName;
+#ifndef LIBCAPTIVE
UNICODE_STRING LinkName;
+#endif /* LIBCAPTIVE */
HANDLE Handle;
+#ifndef LIBCAPTIVE
IopInitDriverImplementation();
#endif /* LIBCAPTIVE */
IoDeviceObjectType->Security = NULL;
IoDeviceObjectType->QueryName = NULL;
IoDeviceObjectType->OkayToClose = NULL;
-#ifndef LIBCAPTIVE
IoDeviceObjectType->Create = IopCreateDevice;
-#else /* !LIBCAPTIVE */
- IoDeviceObjectType->Create = NULL;
-#endif /* !LIBCAPTIVE */
IoDeviceObjectType->DuplicationNotify = NULL;
RtlInitUnicodeStringFromLiteral(&IoDeviceObjectType->TypeName, REACTOS_UCS2(L"Device"));
IoFileObjectType->Mapping = &IopFileMapping;
IoFileObjectType->Dump = NULL;
IoFileObjectType->Open = NULL;
-#ifndef LIBCAPTIVE
IoFileObjectType->Close = IopCloseFile;
IoFileObjectType->Delete = IopDeleteFile;
-#else /* !LIBCAPTIVE */
- IoFileObjectType->Close = NULL;
- IoFileObjectType->Delete = NULL;
-#endif /* !LIBCAPTIVE */
IoFileObjectType->Parse = NULL;
IoFileObjectType->Security = NULL;
IoFileObjectType->QueryName = NULL;
IoFileObjectType->OkayToClose = NULL;
-#ifndef LIBCAPTIVE
IoFileObjectType->Create = IopCreateFile;
-#else /* !LIBCAPTIVE */
- IoFileObjectType->Create = NULL;
-#endif /* !LIBCAPTIVE */
IoFileObjectType->DuplicationNotify = NULL;
RtlInitUnicodeStringFromLiteral(&IoFileObjectType->TypeName, REACTOS_UCS2(L"File"));
-#ifndef LIBCAPTIVE
/*
* Create the '\Driver' object directory
*/
- RtlInitUnicodeStringFromLiteral(&DirName, L"\\Driver");
+ RtlInitUnicodeStringFromLiteral(&DirName, REACTOS_UCS2(L"\\Driver"));
InitializeObjectAttributes(&ObjectAttributes,
&DirName,
0,
* Create the '\FileSystem' object directory
*/
RtlInitUnicodeStringFromLiteral(&DirName,
- L"\\FileSystem");
+ REACTOS_UCS2(L"\\FileSystem"));
InitializeObjectAttributes(&ObjectAttributes,
&DirName,
0,
* Create the '\Device' directory
*/
RtlInitUnicodeStringFromLiteral(&DirName,
- L"\\Device");
+ REACTOS_UCS2(L"\\Device"));
InitializeObjectAttributes(&ObjectAttributes,
&DirName,
0,
0,
&ObjectAttributes);
+#ifndef LIBCAPTIVE
/*
* Create the '\??' directory
*/
RtlInitUnicodeStringFromLiteral(&DirName,
- L"\\??");
+ REACTOS_UCS2(L"\\??"));
InitializeObjectAttributes(&ObjectAttributes,
&DirName,
0,
* Create the '\ArcName' directory
*/
RtlInitUnicodeStringFromLiteral(&DirName,
- L"\\ArcName");
+ REACTOS_UCS2(L"\\ArcName"));
InitializeObjectAttributes(&ObjectAttributes,
&DirName,
0,
#endif /* LIBCAPTIVE */
}
-#ifndef LIBCAPTIVE
PGENERIC_MAPPING STDCALL
IoGetFileObjectGenericMapping(VOID)
return(&IopFileMapping);
}
-#endif /* LIBCAPTIVE */
-
/* EOF */