blob: 4381e1f1fe4153898fca0edc3e08c12737158425 [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/**@file
2
3Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
4This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution. The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12Module Name:
13
14 WinNtSimpleFileSystem.h
15
16Abstract:
17
18 Produce Simple File System abstractions for a directory on your PC using Win32 APIs.
19 The configuration of what devices to mount or emulate comes from NT
20 environment variables. The variables must be visible to the Microsoft*
21 Developer Studio for them to work.
22
23 * Other names and brands may be claimed as the property of others.
24
25**/
26
27#ifndef _WIN_NT_SIMPLE_FILE_SYSTEM_H_
28#define _WIN_NT_SIMPLE_FILE_SYSTEM_H_
29
30
31#define WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'f', 's')
32
33typedef struct {
34 UINTN Signature;
35 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
36 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem;
37 CHAR16 *FilePath;
38 CHAR16 *VolumeLabel;
39 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
40} WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE;
41
42#define WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS(a) \
43 CR (a, \
44 WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE, \
45 SimpleFileSystem, \
46 WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE \
47 )
48
49#define WIN_NT_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('l', 'o', 'f', 's')
50
51//
52// Bit definitions for EFI_TIME.Daylight
53//
54#define EFI_TIME_ADJUST_DAYLIGHT 0x01
55#define EFI_TIME_IN_DAYLIGHT 0x02
56
57typedef struct {
58 UINTN Signature;
59 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
60 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
61 EFI_FILE_PROTOCOL EfiFile;
62 HANDLE LHandle;
63 HANDLE DirHandle;
64 BOOLEAN IsRootDirectory;
65 BOOLEAN IsDirectoryPath;
66 BOOLEAN IsOpenedByRead;
67 CHAR16 *FilePath;
68 WCHAR *FileName;
69 BOOLEAN IsValidFindBuf;
70 WIN32_FIND_DATA FindBuf;
71} WIN_NT_EFI_FILE_PRIVATE;
72
73#define WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS(a) \
74 CR (a, \
75 WIN_NT_EFI_FILE_PRIVATE, \
76 EfiFile, \
77 WIN_NT_EFI_FILE_PRIVATE_SIGNATURE \
78 )
79
80//
81// Global Protocol Variables
82//
83extern EFI_DRIVER_BINDING_PROTOCOL gWinNtSimpleFileSystemDriverBinding;
84extern EFI_COMPONENT_NAME_PROTOCOL gWinNtSimpleFileSystemComponentName;
85extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtSimpleFileSystemComponentName2;
86
87//
88// Driver Binding protocol member functions
89//
90EFI_STATUS
91EFIAPI
92WinNtSimpleFileSystemDriverBindingSupported (
93 IN EFI_DRIVER_BINDING_PROTOCOL *This,
94 IN EFI_HANDLE ControllerHandle,
95 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
96 )
97/*++
98
99Routine Description:
100
101 Check to see if the driver supports a given controller.
102
103Arguments:
104
105 This - A pointer to an instance of the EFI_DRIVER_BINDING_PROTOCOL.
106
107 ControllerHandle - EFI handle of the controller to test.
108
109 RemainingDevicePath - Pointer to remaining portion of a device path.
110
111Returns:
112
113 EFI_SUCCESS - The device specified by ControllerHandle and RemainingDevicePath is supported by the driver
114 specified by This.
115
116 EFI_ALREADY_STARTED - The device specified by ControllerHandle and RemainingDevicePath is already being managed by
117 the driver specified by This.
118
119 EFI_ACCESS_DENIED - The device specified by ControllerHandle and RemainingDevicePath is already being managed by
120 a different driver or an application that requires exclusive access.
121
122 EFI_UNSUPPORTED - The device specified by ControllerHandle and RemainingDevicePath is not supported by the
123 driver specified by This.
124
125--*/
126;
127
128EFI_STATUS
129EFIAPI
130WinNtSimpleFileSystemDriverBindingStart (
131 IN EFI_DRIVER_BINDING_PROTOCOL *This,
132 IN EFI_HANDLE ControllerHandle,
133 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
134 )
135/*++
136
137Routine Description:
138
139 Starts a device controller or a bus controller.
140
141Arguments:
142
143 This - A pointer to an instance of the EFI_DRIVER_BINDING_PROTOCOL.
144
145 ControllerHandle - EFI handle of the controller to start.
146
147 RemainingDevicePath - Pointer to remaining portion of a device path.
148
149Returns:
150
151 EFI_SUCCESS - The device or bus controller has been started.
152
153 EFI_DEVICE_ERROR - The device could not be started due to a device failure.
154
155 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
156
157--*/
158;
159
160EFI_STATUS
161EFIAPI
162WinNtSimpleFileSystemDriverBindingStop (
163 IN EFI_DRIVER_BINDING_PROTOCOL *This,
164 IN EFI_HANDLE ControllerHandle,
165 IN UINTN NumberOfChildren,
166 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
167 )
168/*++
169
170Routine Description:
171
172 TODO: Add function description
173
174Arguments:
175
176 This - A pointer to an instance of the EFI_DRIVER_BINDING_PROTOCOL.
177
178 ControllerHandle - A handle to the device to be stopped.
179
180 NumberOfChildren - The number of child device handles in ChildHandleBuffer.
181
182 ChildHandleBuffer - An array of child device handles to be freed.
183
184Returns:
185
186 EFI_SUCCESS - The device has been stopped.
187
188 EFI_DEVICE_ERROR - The device could not be stopped due to a device failure.
189
190--*/
191;
192
193//
194// Simple File System protocol member functions
195//
196EFI_STATUS
197EFIAPI
198WinNtSimpleFileSystemOpenVolume (
199 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
200 OUT EFI_FILE_PROTOCOL **Root
201 )
202/*++
203
204Routine Description:
205
206 Open the root directory on a volume.
207
208Arguments:
209
210 This - A pointer to the volume to open.
211
212 Root - A pointer to storage for the returned opened file handle of the root directory.
213
214Returns:
215
216 EFI_SUCCESS - The volume was opened.
217
218 EFI_UNSUPPORTED - The volume does not support the requested file system type.
219
220 EFI_NO_MEDIA - The device has no media.
221
222 EFI_DEVICE_ERROR - The device reported an error.
223
224 EFI_VOLUME_CORRUPTED - The file system structures are corrupted.
225
226 EFI_ACCESS_DENIED - The service denied access to the file.
227
228 EFI_OUT_OF_RESOURCES - The file volume could not be opened due to lack of resources.
229
230 EFI_MEDIA_CHANGED - The device has new media or the media is no longer supported.
231
232--*/
233;
234
235EFI_STATUS
236EFIAPI
237WinNtSimpleFileSystemOpen (
238 IN EFI_FILE_PROTOCOL *This,
239 OUT EFI_FILE_PROTOCOL **NewHandle,
240 IN CHAR16 *FileName,
241 IN UINT64 OpenMode,
242 IN UINT64 Attributes
243 )
244/*++
245
246Routine Description:
247
248 Open a file relative to the source file location.
249
250Arguments:
251
252 This - A pointer to the source file location.
253
254 NewHandle - Pointer to storage for the new file handle.
255
256 FileName - Pointer to the file name to be opened.
257
258 OpenMode - File open mode information.
259
260 Attributes - File creation attributes.
261
262Returns:
263
264 EFI_SUCCESS - The file was opened.
265
266 EFI_NOT_FOUND - The file could not be found in the volume.
267
268 EFI_NO_MEDIA - The device has no media.
269
270 EFI_MEDIA_CHANGED - The device has new media or the media is no longer supported.
271
272 EFI_DEVICE_ERROR - The device reported an error.
273
274 EFI_VOLUME_CORRUPTED - The file system structures are corrupted.
275
276 EFI_WRITE_PROTECTED - The volume or file is write protected.
277
278 EFI_ACCESS_DENIED - The service denied access to the file.
279
280 EFI_OUT_OF_RESOURCES - Not enough resources were available to open the file.
281
282 EFI_VOLUME_FULL - There is not enough space left to create the new file.
283
284--*/
285;
286
287EFI_STATUS
288EFIAPI
289WinNtSimpleFileSystemClose (
290 IN EFI_FILE_PROTOCOL *This
291 )
292/*++
293
294Routine Description:
295
296 Close the specified file handle.
297
298Arguments:
299
300 This - Pointer to a returned opened file handle.
301
302Returns:
303
304 EFI_SUCCESS - The file handle has been closed.
305
306--*/
307;
308
309EFI_STATUS
310EFIAPI
311WinNtSimpleFileSystemDelete (
312 IN EFI_FILE_PROTOCOL *This
313 )
314/*++
315
316Routine Description:
317
318 Close and delete a file.
319
320Arguments:
321
322 This - Pointer to a returned opened file handle.
323
324Returns:
325
326 EFI_SUCCESS - The file handle was closed and deleted.
327
328 EFI_WARN_DELETE_FAILURE - The handle was closed but could not be deleted.
329
330--*/
331;
332
333EFI_STATUS
334EFIAPI
335WinNtSimpleFileSystemRead (
336 IN EFI_FILE_PROTOCOL *This,
337 IN OUT UINTN *BufferSize,
338 OUT VOID *Buffer
339 )
340/*++
341
342Routine Description:
343
344 Read data from a file.
345
346Arguments:
347
348 This - Pointer to a returned open file handle.
349
350 BufferSize - On input, the size of the Buffer. On output, the number of bytes stored in the Buffer.
351
352 Buffer - Pointer to the first byte of the read Buffer.
353
354Returns:
355
356 EFI_SUCCESS - The data was read.
357
358 EFI_NO_MEDIA - The device has no media.
359
360 EFI_DEVICE_ERROR - The device reported an error.
361
362 EFI_VOLUME_CORRUPTED - The file system structures are corrupted.
363
364 EFI_BUFFER_TOO_SMALL - The supplied buffer size was too small to store the current directory entry.
365 *BufferSize has been updated with the size needed to complete the request.
366
367--*/
368;
369
370EFI_STATUS
371EFIAPI
372WinNtSimpleFileSystemWrite (
373 IN EFI_FILE_PROTOCOL *This,
374 IN OUT UINTN *BufferSize,
375 IN VOID *Buffer
376 )
377/*++
378
379Routine Description:
380
381 Write data to a file.
382
383Arguments:
384
385 This - Pointer to an opened file handle.
386
387 BufferSize - On input, the number of bytes in the Buffer to write to the file. On output, the number of bytes
388 of data written to the file.
389
390 Buffer - Pointer to the first by of data in the buffer to write to the file.
391
392Returns:
393
394 EFI_SUCCESS - The data was written to the file.
395
396 EFI_UNSUPPORTED - Writes to an open directory are not supported.
397
398 EFI_NO_MEDIA - The device has no media.
399
400 EFI_DEVICE_ERROR - The device reported an error.
401
402 EFI_VOLUME_CORRUPTED - The file system structures are corrupt.
403
404 EFI_WRITE_PROTECTED - The file, directory, volume, or device is write protected.
405
406 EFI_ACCESS_DENIED - The file was opened read-only.
407
408 EFI_VOLUME_FULL - The volume is full.
409
410--*/
411;
412
413EFI_STATUS
414EFIAPI
415WinNtSimpleFileSystemSetPosition (
416 IN EFI_FILE_PROTOCOL *This,
417 IN UINT64 Position
418 )
419/*++
420
421Routine Description:
422
423 Set a file's current position.
424
425Arguments:
426
427 This - Pointer to an opened file handle.
428
429 Position - The byte position from the start of the file to set.
430
431Returns:
432
433 EFI_SUCCESS - The file position has been changed.
434
435 EFI_UNSUPPORTED - The seek request for non-zero is not supported for directories.
436
437--*/
438;
439
440EFI_STATUS
441EFIAPI
442WinNtSimpleFileSystemGetPosition (
443 IN EFI_FILE_PROTOCOL *This,
444 OUT UINT64 *Position
445 )
446/*++
447
448Routine Description:
449
450 Get a file's current position.
451
452Arguments:
453
454 This - Pointer to an opened file handle.
455
456 Position - Pointer to storage for the current position.
457
458Returns:
459
460 EFI_SUCCESS - The file position has been reported.
461
462 EFI_UNSUPPORTED - Not valid for directories.
463
464--*/
465;
466
467EFI_STATUS
468EFIAPI
469WinNtSimpleFileSystemGetInfo (
470 IN EFI_FILE_PROTOCOL *This,
471 IN EFI_GUID *InformationType,
472 IN OUT UINTN *BufferSize,
473 OUT VOID *Buffer
474 )
475/*++
476
477Routine Description:
478
479 Return information about a file or volume.
480
481Arguments:
482
483 This - Pointer to an opened file handle.
484
485 InformationType - GUID describing the type of information to be returned.
486
487 BufferSize - On input, the size of the information buffer. On output, the number of bytes written to the
488 information buffer.
489
490 Buffer - Pointer to the first byte of the information buffer.
491
492Returns:
493
494 EFI_SUCCESS - The requested information has been written into the buffer.
495
496 EFI_UNSUPPORTED - The InformationType is not known.
497
498 EFI_NO_MEDIA - The device has no media.
499
500 EFI_DEVICE_ERROR - The device reported an error.
501
502 EFI_VOLUME_CORRUPTED - The file system structures are corrupt.
503
504 EFI_BUFFER_TOO_SMALL - The buffer size was too small to contain the requested information. The buffer size has
505 been updated with the size needed to complete the requested operation.
506
507--*/
508;
509
510EFI_STATUS
511EFIAPI
512WinNtSimpleFileSystemSetInfo (
513 IN EFI_FILE_PROTOCOL *This,
514 IN EFI_GUID *InformationType,
515 IN UINTN BufferSize,
516 IN VOID *Buffer
517 )
518/*++
519
520Routine Description:
521
522 Set information about a file or volume.
523
524Arguments:
525
526 This - Pointer to an opened file handle.
527
528 InformationType - GUID identifying the type of information to set.
529
530 BufferSize - Number of bytes of data in the information buffer.
531
532 Buffer - Pointer to the first byte of data in the information buffer.
533
534Returns:
535
536 EFI_SUCCESS - The file or volume information has been updated.
537
538 EFI_UNSUPPORTED - The information identifier is not recognised.
539
540 EFI_NO_MEDIA - The device has no media.
541
542 EFI_DEVICE_ERROR - The device reported an error.
543
544 EFI_VOLUME_CORRUPTED - The file system structures are corrupt.
545
546 EFI_WRITE_PROTECTED - The file, directory, volume, or device is write protected.
547
548 EFI_ACCESS_DENIED - The file was opened read-only.
549
550 EFI_VOLUME_FULL - The volume is full.
551
552 EFI_BAD_BUFFER_SIZE - The buffer size is smaller than the type indicated by InformationType.
553
554--*/
555;
556
557EFI_STATUS
558EFIAPI
559WinNtSimpleFileSystemFlush (
560 IN EFI_FILE_PROTOCOL *This
561 )
562/*++
563
564Routine Description:
565
566 Flush all modified data to the media.
567
568Arguments:
569
570 This - Pointer to an opened file handle.
571
572Returns:
573
574 EFI_SUCCESS - The data has been flushed.
575
576 EFI_NO_MEDIA - The device has no media.
577
578 EFI_DEVICE_ERROR - The device reported an error.
579
580 EFI_VOLUME_CORRUPTED - The file system structures have been corrupted.
581
582 EFI_WRITE_PROTECTED - The file, directory, volume, or device is write protected.
583
584 EFI_ACCESS_DENIED - The file was opened read-only.
585
586 EFI_VOLUME_FULL - The volume is full.
587
588--*/
589;
590
591#endif /* _WIN_NT_SIMPLE_FILE_SYSTEM_H_ */
592
593/* eof - WinNtSimpleFileSystem.h */