update for HEAD-2003091401
[reactos.git] / drivers / fs / ext2 / attr.c
1 /*
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)
7  * UPDATE HISTORY: 
8  */
9
10 /* INCLUDES *****************************************************************/
11
12 #include <ddk/ntddk.h>
13 #include <wchar.h>
14 #include <string.h>
15
16 //#define NDEBUG
17 #include <debug.h>
18
19 #include "ext2fs.h"
20
21 /* FUNCTIONS ****************************************************************/
22
23 NTSTATUS STDCALL
24 Ext2SetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
25 {
26    DPRINT("Ext2SetInformation(DeviceObject %x Irp %x)\n",DeviceObject,Irp);
27    
28    Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
29    Irp->IoStatus.Information = 0;
30    IoCompleteRequest(Irp,
31                      IO_NO_INCREMENT);
32    
33    return(STATUS_UNSUCCESSFUL);
34 }
35
36 NTSTATUS STDCALL
37 Ext2QueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
38 {
39    NTSTATUS Status;
40    PIO_STACK_LOCATION Param;
41    PFILE_OBJECT FileObject;
42    PDEVICE_EXTENSION DeviceExt;
43    ULONG Length;
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;
51    PVOID Buffer;
52    
53    DPRINT("Ext2QueryInformation(DeviceObject %x Irp %x)\n", DeviceObject, Irp);
54    
55    Param = IoGetCurrentIrpStackLocation(Irp);
56    FileObject = Param->FileObject;
57    DeviceExt = DeviceObject->DeviceExtension;
58    Length = Param->Parameters.QueryFile.Length;
59    Buffer = Irp->AssociatedIrp.SystemBuffer;
60    
61    switch (Param->Parameters.QueryFile.FileInformationClass)
62      {
63       case FileDirectoryInformation:
64       case FileFullDirectoryInformation:
65       case FileBothDirectoryInformation:
66         Status = STATUS_NOT_IMPLEMENTED;
67         break;
68         
69       case FileBasicInformation:
70         PFileBasicInformation = (PFILE_BASIC_INFORMATION)Buffer;
71         memset(PFileBasicInformation, 0, sizeof(FILE_BASIC_INFORMATION));
72         Status = STATUS_SUCCESS;
73         break;
74         
75       case FileStandardInformation:
76         PFileStandardInformation = (PFILE_STANDARD_INFORMATION)Buffer;
77         memset(PFileStandardInformation, 0, sizeof(FILE_STANDARD_INFORMATION));
78         Status = STATUS_SUCCESS;
79         break;
80         
81       case FileInternalInformation:
82         PFileInternalInformation = (PFILE_INTERNAL_INFORMATION)Buffer;
83         memset(PFileInternalInformation, 0, sizeof(FILE_INTERNAL_INFORMATION));
84         Status = STATUS_SUCCESS;
85         break;
86         
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;
92         break;
93         
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;
99         break;
100         
101       case FileNameInformation:
102         PFileNameInformation = (PFILE_NAME_INFORMATION)Buffer;
103         memset(PFileNameInformation, 0, sizeof(FILE_NAME_INFORMATION));
104         Status = STATUS_SUCCESS;
105         break;
106         
107       case FilePositionInformation:
108         PFilePositionInformation = (PFILE_POSITION_INFORMATION)Buffer;
109         memcpy(PFilePositionInformation, 
110                &FileObject->CurrentByteOffset,
111                sizeof(FileObject->CurrentByteOffset));
112         Status = STATUS_SUCCESS;
113         break;
114         
115       case FileRenameInformation:
116         Status = STATUS_NOT_IMPLEMENTED;
117         break;
118         
119       default:
120         Status = STATUS_NOT_SUPPORTED;
121      }
122    
123    
124    
125    
126    Irp->IoStatus.Status = Status;
127    if (NT_SUCCESS(Status))
128      Irp->IoStatus.Information =
129        Param->Parameters.QueryFile.Length - Length;
130    else
131      Irp->IoStatus.Information = 0;
132    IoCompleteRequest(Irp,
133                      IO_NO_INCREMENT);
134    
135    return(Status);
136 }