OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/platform_file.h" | 5 #include "base/platform_file.h" |
6 | 6 |
7 #include <io.h> | 7 #include <io.h> |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 if (flags & PLATFORM_FILE_HIDDEN) | 79 if (flags & PLATFORM_FILE_HIDDEN) |
80 create_flags |= FILE_ATTRIBUTE_HIDDEN; | 80 create_flags |= FILE_ATTRIBUTE_HIDDEN; |
81 if (flags & PLATFORM_FILE_DELETE_ON_CLOSE) | 81 if (flags & PLATFORM_FILE_DELETE_ON_CLOSE) |
82 create_flags |= FILE_FLAG_DELETE_ON_CLOSE; | 82 create_flags |= FILE_FLAG_DELETE_ON_CLOSE; |
83 if (flags & PLATFORM_FILE_BACKUP_SEMANTICS) | 83 if (flags & PLATFORM_FILE_BACKUP_SEMANTICS) |
84 create_flags |= FILE_FLAG_BACKUP_SEMANTICS; | 84 create_flags |= FILE_FLAG_BACKUP_SEMANTICS; |
85 | 85 |
86 HANDLE file = CreateFile(name.value().c_str(), access, sharing, NULL, | 86 HANDLE file = CreateFile(name.value().c_str(), access, sharing, NULL, |
87 disposition, create_flags, NULL); | 87 disposition, create_flags, NULL); |
88 | 88 |
| 89 if (INVALID_HANDLE_VALUE != file){ |
| 90 // Don't allow directories to be opened without the proper flag (block ADS). |
| 91 if (!(flags & PLATFORM_FILE_BACKUP_SEMANTICS)) { |
| 92 BY_HANDLE_FILE_INFORMATION info = { 0 }; |
| 93 BOOL result = GetFileInformationByHandle(file, &info); |
| 94 DCHECK(result); |
| 95 if (info.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY | |
| 96 FILE_ATTRIBUTE_REPARSE_POINT)) { |
| 97 CloseHandle(file); |
| 98 file = INVALID_HANDLE_VALUE; |
| 99 } |
| 100 } |
| 101 } |
| 102 |
89 if (created && (INVALID_HANDLE_VALUE != file)) { | 103 if (created && (INVALID_HANDLE_VALUE != file)) { |
90 if (flags & (PLATFORM_FILE_OPEN_ALWAYS)) | 104 if (flags & (PLATFORM_FILE_OPEN_ALWAYS)) |
91 *created = (ERROR_ALREADY_EXISTS != GetLastError()); | 105 *created = (ERROR_ALREADY_EXISTS != GetLastError()); |
92 else if (flags & (PLATFORM_FILE_CREATE_ALWAYS | PLATFORM_FILE_CREATE)) | 106 else if (flags & (PLATFORM_FILE_CREATE_ALWAYS | PLATFORM_FILE_CREATE)) |
93 *created = true; | 107 *created = true; |
94 } | 108 } |
95 | 109 |
96 if (error) { | 110 if (error) { |
97 if (file != kInvalidPlatformFileValue) | 111 if (file != kInvalidPlatformFileValue) |
98 *error = PLATFORM_FILE_OK; | 112 *error = PLATFORM_FILE_OK; |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 case ERROR_DISK_CORRUPT: | 330 case ERROR_DISK_CORRUPT: |
317 return PLATFORM_FILE_ERROR_IO; | 331 return PLATFORM_FILE_ERROR_IO; |
318 default: | 332 default: |
319 UMA_HISTOGRAM_SPARSE_SLOWLY("PlatformFile.UnknownErrors.Windows", | 333 UMA_HISTOGRAM_SPARSE_SLOWLY("PlatformFile.UnknownErrors.Windows", |
320 last_error); | 334 last_error); |
321 return PLATFORM_FILE_ERROR_FAILED; | 335 return PLATFORM_FILE_ERROR_FAILED; |
322 } | 336 } |
323 } | 337 } |
324 | 338 |
325 } // namespace base | 339 } // namespace base |
OLD | NEW |