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
,