{
return;
}
-
+
+#if 0
+//NOTE: Allmost certain that the latest changes to I/O Mgr makes this redundant (OriginalFileObject case)
ObReferenceObjectByPointer(FileObject,
STANDARD_RIGHTS_REQUIRED,
IoFileObjectType,
UserMode);
+#endif
+
KeResetEvent( &FileObject->Event );
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLEANUP,
}
}
+
VOID STDCALL
IopDeleteFile(PVOID ObjectBody)
{
if (FileObject->DeviceObject)
{
+#if 0
+//NOTE: Allmost certain that the latest changes to I/O Mgr makes this redundant (OriginalFileObject case)
+
ObReferenceObjectByPointer(ObjectBody,
STANDARD_RIGHTS_REQUIRED,
IoFileObjectType,
UserMode);
-
+#endif
KeResetEvent( &FileObject->Event );
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
FileObject->DeviceObject,
}
+NTSTATUS STDCALL
+IopQueryNameFile(PVOID ObjectBody,
+ POBJECT_NAME_INFORMATION ObjectNameInfo,
+ ULONG Length,
+ PULONG ReturnLength)
+{
+ POBJECT_NAME_INFORMATION LocalInfo;
+ PFILE_NAME_INFORMATION FileNameInfo;
+ PFILE_OBJECT FileObject;
+ ULONG LocalReturnLength;
+ NTSTATUS Status;
+
+ DPRINT ("IopQueryNameFile() called\n");
+
+ FileObject = (PFILE_OBJECT)ObjectBody;
+
+ LocalInfo = ExAllocatePool (NonPagedPool,
+ sizeof(OBJECT_NAME_INFORMATION) +
+ MAX_PATH * sizeof(WCHAR));
+ if (LocalInfo == NULL)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ Status = ObQueryNameString (FileObject->DeviceObject->Vpb->RealDevice,
+ LocalInfo,
+ MAX_PATH * sizeof(WCHAR),
+ &LocalReturnLength);
+ if (!NT_SUCCESS (Status))
+ {
+ ExFreePool (LocalInfo);
+ return Status;
+ }
+ DPRINT ("Device path: %wZ\n", &LocalInfo->Name);
+
+ Status = RtlAppendUnicodeStringToString (&ObjectNameInfo->Name,
+ &LocalInfo->Name);
+
+ ExFreePool (LocalInfo);
+
+ FileNameInfo = ExAllocatePool (NonPagedPool,
+ MAX_PATH * sizeof(WCHAR) + sizeof(ULONG));
+ if (FileNameInfo == NULL)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ Status = IoQueryFileInformation (FileObject,
+ FileNameInformation,
+ MAX_PATH * sizeof(WCHAR) + sizeof(ULONG),
+ FileNameInfo,
+ NULL);
+ if (Status != STATUS_SUCCESS)
+ {
+ ExFreePool (FileNameInfo);
+ return Status;
+ }
+
+ Status = RtlAppendUnicodeToString (&ObjectNameInfo->Name,
+ FileNameInfo->FileName);
+
+ DPRINT ("Total path: %wZ\n", &ObjectNameInfo->Name);
+
+ ExFreePool (FileNameInfo);
+
+ return Status;
+}
+
+
VOID IoInit (VOID)
{
OBJECT_ATTRIBUTES ObjectAttributes;
/*
* Register iomgr types: DeviceObjectType
*/
- IoDeviceObjectType = ExAllocatePool (NonPagedPool,
+ IoDeviceObjectType = ExAllocatePool (NonPagedPool,
sizeof (OBJECT_TYPE));
IoDeviceObjectType->Tag = TAG_DEVICE_TYPE;
IoFileObjectType->Delete = IopDeleteFile;
IoFileObjectType->Parse = NULL;
IoFileObjectType->Security = NULL;
- IoFileObjectType->QueryName = NULL;
+ IoFileObjectType->QueryName = IopQueryNameFile;
IoFileObjectType->OkayToClose = NULL;
IoFileObjectType->Create = IopCreateFile;
IoFileObjectType->DuplicationNotify = NULL;
PnpInit();
}
+VOID IoInit2(VOID)
+{
+ PDEVICE_NODE DeviceNode;
+ NTSTATUS Status;
+
+ /* Initialize raw filesystem driver */
+
+ /* Use IopRootDeviceNode for now */
+ Status = IopCreateDeviceNode(IopRootDeviceNode,
+ NULL,
+ &DeviceNode);
+ if (!NT_SUCCESS(Status))
+ {
+ CPRINT("IopCreateDeviceNode() failed with status (%x)\n", Status);
+ return;
+ }
+ Status = IopInitializeDriver(RawFsDriverEntry,
+ DeviceNode,
+ TRUE,
+ NULL,
+ 0);
+ if (!NT_SUCCESS(Status))
+ {
+ IopFreeDeviceNode(DeviceNode);
+ CPRINT("IopInitializeDriver() failed with status (%x)\n", Status);
+ return;
+ }
+}
+
+/*
+ * @implemented
+ */
PGENERIC_MAPPING STDCALL
IoGetFileObjectGenericMapping(VOID)
{