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