No need to define __USE_W32API
[reactos.git] / rosapps / 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 <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 }