• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**@file
2 
3 Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14   WinNtSimpleFileSystem.h
15 
16 Abstract:
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 
33 typedef 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 
57 typedef 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 //
83 extern EFI_DRIVER_BINDING_PROTOCOL   gWinNtSimpleFileSystemDriverBinding;
84 extern EFI_COMPONENT_NAME_PROTOCOL   gWinNtSimpleFileSystemComponentName;
85 extern EFI_COMPONENT_NAME2_PROTOCOL  gWinNtSimpleFileSystemComponentName2;
86 
87 //
88 // Driver Binding protocol member functions
89 //
90 EFI_STATUS
91 EFIAPI
92 WinNtSimpleFileSystemDriverBindingSupported (
93   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
94   IN  EFI_HANDLE                   ControllerHandle,
95   IN  EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath  OPTIONAL
96   )
97 /*++
98 
99 Routine Description:
100 
101   Check to see if the driver supports a given controller.
102 
103 Arguments:
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 
111 Returns:
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 
128 EFI_STATUS
129 EFIAPI
130 WinNtSimpleFileSystemDriverBindingStart (
131   IN  EFI_DRIVER_BINDING_PROTOCOL   *This,
132   IN  EFI_HANDLE                    ControllerHandle,
133   IN  EFI_DEVICE_PATH_PROTOCOL      *RemainingDevicePath  OPTIONAL
134   )
135 /*++
136 
137 Routine Description:
138 
139   Starts a device controller or a bus controller.
140 
141 Arguments:
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 
149 Returns:
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 
160 EFI_STATUS
161 EFIAPI
162 WinNtSimpleFileSystemDriverBindingStop (
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 
170 Routine Description:
171 
172   TODO: Add function description
173 
174 Arguments:
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 
184 Returns:
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 //
196 EFI_STATUS
197 EFIAPI
198 WinNtSimpleFileSystemOpenVolume (
199   IN  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
200   OUT EFI_FILE_PROTOCOL               **Root
201   )
202 /*++
203 
204 Routine Description:
205 
206   Open the root directory on a volume.
207 
208 Arguments:
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 
214 Returns:
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 
235 EFI_STATUS
236 EFIAPI
237 WinNtSimpleFileSystemOpen (
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 
246 Routine Description:
247 
248   Open a file relative to the source file location.
249 
250 Arguments:
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 
262 Returns:
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 
287 EFI_STATUS
288 EFIAPI
289 WinNtSimpleFileSystemClose (
290   IN EFI_FILE_PROTOCOL  *This
291   )
292 /*++
293 
294 Routine Description:
295 
296   Close the specified file handle.
297 
298 Arguments:
299 
300   This  - Pointer to a returned opened file handle.
301 
302 Returns:
303 
304   EFI_SUCCESS - The file handle has been closed.
305 
306 --*/
307 ;
308 
309 EFI_STATUS
310 EFIAPI
311 WinNtSimpleFileSystemDelete (
312   IN EFI_FILE_PROTOCOL  *This
313   )
314 /*++
315 
316 Routine Description:
317 
318   Close and delete a file.
319 
320 Arguments:
321 
322   This  - Pointer to a returned opened file handle.
323 
324 Returns:
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 
333 EFI_STATUS
334 EFIAPI
335 WinNtSimpleFileSystemRead (
336   IN     EFI_FILE_PROTOCOL  *This,
337   IN OUT UINTN              *BufferSize,
338   OUT    VOID               *Buffer
339   )
340 /*++
341 
342 Routine Description:
343 
344   Read data from a file.
345 
346 Arguments:
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 
354 Returns:
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 
370 EFI_STATUS
371 EFIAPI
372 WinNtSimpleFileSystemWrite (
373   IN     EFI_FILE_PROTOCOL  *This,
374   IN OUT UINTN              *BufferSize,
375   IN     VOID               *Buffer
376   )
377 /*++
378 
379 Routine Description:
380 
381   Write data to a file.
382 
383 Arguments:
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 
392 Returns:
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 
413 EFI_STATUS
414 EFIAPI
415 WinNtSimpleFileSystemSetPosition (
416   IN EFI_FILE_PROTOCOL  *This,
417   IN UINT64             Position
418   )
419 /*++
420 
421 Routine Description:
422 
423   Set a file's current position.
424 
425 Arguments:
426 
427   This      - Pointer to an opened file handle.
428 
429   Position  - The byte position from the start of the file to set.
430 
431 Returns:
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 
440 EFI_STATUS
441 EFIAPI
442 WinNtSimpleFileSystemGetPosition (
443   IN  EFI_FILE_PROTOCOL   *This,
444   OUT UINT64              *Position
445   )
446 /*++
447 
448 Routine Description:
449 
450   Get a file's current position.
451 
452 Arguments:
453 
454   This      - Pointer to an opened file handle.
455 
456   Position  - Pointer to storage for the current position.
457 
458 Returns:
459 
460   EFI_SUCCESS     - The file position has been reported.
461 
462   EFI_UNSUPPORTED - Not valid for directories.
463 
464 --*/
465 ;
466 
467 EFI_STATUS
468 EFIAPI
469 WinNtSimpleFileSystemGetInfo (
470   IN     EFI_FILE_PROTOCOL  *This,
471   IN     EFI_GUID           *InformationType,
472   IN OUT UINTN              *BufferSize,
473   OUT    VOID               *Buffer
474   )
475 /*++
476 
477 Routine Description:
478 
479   Return information about a file or volume.
480 
481 Arguments:
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 
492 Returns:
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 
510 EFI_STATUS
511 EFIAPI
512 WinNtSimpleFileSystemSetInfo (
513   IN EFI_FILE_PROTOCOL  *This,
514   IN EFI_GUID           *InformationType,
515   IN UINTN              BufferSize,
516   IN VOID               *Buffer
517   )
518 /*++
519 
520 Routine Description:
521 
522   Set information about a file or volume.
523 
524 Arguments:
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 
534 Returns:
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 
557 EFI_STATUS
558 EFIAPI
559 WinNtSimpleFileSystemFlush (
560   IN EFI_FILE_PROTOCOL  *This
561   )
562 /*++
563 
564 Routine Description:
565 
566   Flush all modified data to the media.
567 
568 Arguments:
569 
570   This  - Pointer to an opened file handle.
571 
572 Returns:
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 */
594