2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/fs/ext2/attr.c
5 * PURPOSE: Set/Get file attributes support
6 * PROGRAMMER: David Welch (welch@cwcom.net)
10 /* INCLUDES *****************************************************************/
12 #include <ddk/ntddk.h>
21 /* FUNCTIONS ****************************************************************/
24 Ext2SetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
26 DPRINT("Ext2SetInformation(DeviceObject %x Irp %x)\n",DeviceObject,Irp);
28 Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
29 Irp->IoStatus.Information = 0;
30 IoCompleteRequest(Irp,
33 return(STATUS_UNSUCCESSFUL);
37 Ext2QueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
40 PIO_STACK_LOCATION Param;
41 PFILE_OBJECT FileObject;
42 PDEVICE_EXTENSION DeviceExt;
44 PFILE_BASIC_INFORMATION PFileBasicInformation;
45 PFILE_STANDARD_INFORMATION PFileStandardInformation;
46 PFILE_INTERNAL_INFORMATION PFileInternalInformation;
47 PFILE_EA_INFORMATION PFileEaInformation;
48 PFILE_ACCESS_INFORMATION PFileAccessInformation;
49 PFILE_NAME_INFORMATION PFileNameInformation;
50 PFILE_POSITION_INFORMATION PFilePositionInformation;
53 DPRINT("Ext2QueryInformation(DeviceObject %x Irp %x)\n", DeviceObject, Irp);
55 Param = IoGetCurrentIrpStackLocation(Irp);
56 FileObject = Param->FileObject;
57 DeviceExt = DeviceObject->DeviceExtension;
58 Length = Param->Parameters.QueryFile.Length;
59 Buffer = Irp->AssociatedIrp.SystemBuffer;
61 switch (Param->Parameters.QueryFile.FileInformationClass)
63 case FileDirectoryInformation:
64 case FileFullDirectoryInformation:
65 case FileBothDirectoryInformation:
66 Status = STATUS_NOT_IMPLEMENTED;
69 case FileBasicInformation:
70 PFileBasicInformation = (PFILE_BASIC_INFORMATION)Buffer;
71 memset(PFileBasicInformation, 0, sizeof(FILE_BASIC_INFORMATION));
72 Status = STATUS_SUCCESS;
75 case FileStandardInformation:
76 PFileStandardInformation = (PFILE_STANDARD_INFORMATION)Buffer;
77 memset(PFileStandardInformation, 0, sizeof(FILE_STANDARD_INFORMATION));
78 Status = STATUS_SUCCESS;
81 case FileInternalInformation:
82 PFileInternalInformation = (PFILE_INTERNAL_INFORMATION)Buffer;
83 memset(PFileInternalInformation, 0, sizeof(FILE_INTERNAL_INFORMATION));
84 Status = STATUS_SUCCESS;
87 case FileEaInformation:
88 PFileEaInformation = (PFILE_EA_INFORMATION)Buffer;
89 memset(PFileEaInformation, 0, sizeof(FILE_EA_INFORMATION));
90 PFileEaInformation->EaSize = 0;
91 Status = STATUS_SUCCESS;
94 case FileAccessInformation:
95 PFileAccessInformation = (PFILE_ACCESS_INFORMATION)Buffer;
96 memset(PFileAccessInformation, 0, sizeof(FILE_ACCESS_INFORMATION));
97 PFileAccessInformation->AccessFlags = 0;
98 Status = STATUS_SUCCESS;
101 case FileNameInformation:
102 PFileNameInformation = (PFILE_NAME_INFORMATION)Buffer;
103 memset(PFileNameInformation, 0, sizeof(FILE_NAME_INFORMATION));
104 Status = STATUS_SUCCESS;
107 case FilePositionInformation:
108 PFilePositionInformation = (PFILE_POSITION_INFORMATION)Buffer;
109 memcpy(PFilePositionInformation,
110 &FileObject->CurrentByteOffset,
111 sizeof(FileObject->CurrentByteOffset));
112 Status = STATUS_SUCCESS;
115 case FileRenameInformation:
116 Status = STATUS_NOT_IMPLEMENTED;
120 Status = STATUS_NOT_SUPPORTED;
126 Irp->IoStatus.Status = Status;
127 if (NT_SUCCESS(Status))
128 Irp->IoStatus.Information =
129 Param->Parameters.QueryFile.Length - Length;
131 Irp->IoStatus.Information = 0;
132 IoCompleteRequest(Irp,