YSTest: MinGW32.h 源文件

YSTest PreAlpha_b900_20201012 The YSLib Test Project

Win32/include/YCLib/MinGW32.h
浏览该文件的文档.
1 /*
2 © 2013-2016, 2018-2020 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
29 #ifndef YCL_MinGW32_INC_MinGW32_h_
30 #define YCL_MinGW32_INC_MinGW32_h_ 1
31
32 #include "YCLib/YModules.h"
33 #include YFM_YCLib_Host // for string, ystdex::remove_reference_t, wstring,
34 // unique_ptr_from, ystdex::ends_with, ystdex::aligned_storage_t,
35 // ystdex::pun_ref, pair;
36 #include YFM_YCLib_NativeAPI // for ERROR_SUCCESS,
37 // MAXIMUM_REPARSE_DATA_BUFFER_SIZE, MAX_PATH;
38 #if !YCL_Win32
39 # error "This file is only for Win32."
40 #endif
41 #include YFM_YCLib_Debug // for platform::Deref;
42 #include <ystdex/enum.hpp> // for ystdex::enum_union,
43 // ystdex::wrapped_enum_traits_t;
44 #include YFM_YCLib_FileIO // for platform::NodeCategory;
45 #include <chrono> // for std::chrono::nanoseconds;
46
47 namespace platform_ex
48 {
49
54 inline namespace Windows
55 {
56
58 using ErrorCode = unsigned long;
59
65 YF_API YB_STATELESS int
66 ConvertToErrno(ErrorCode) ynothrow;
67
72 inline PDefH(int, GetErrnoFromWin32, ) ynothrow
73 ImplRet(ConvertToErrno(::GetLastError()))
74
75
81 class YF_API Win32Exception : public Exception
82 {
83 public:
90
92 YB_NONNULL(3)
93 Win32Exception(ErrorCode, const char* = "Win32 exception",
94 YSLib::RecordLevel = YSLib::Emergent);
95 Win32Exception(ErrorCode, string_view,
96 YSLib::RecordLevel = YSLib::Emergent);
97 Win32Exception(ErrorCode, const std::string&,
98 YSLib::RecordLevel = YSLib::Emergent);
100
104 YB_NONNULL(4)
105 Win32Exception(ErrorCode, string_view, const char*,
106 YSLib::RecordLevel = YSLib::Emergent);
108 DefDeCopyCtor(Win32Exception)
114 ~Win32Exception() override;
115
116 DefGetter(const ynothrow, ErrorCode, ErrorCode, ErrorCode(code().value()))
118 DefGetter(const ynothrow, std::string, Message,
119 FormatMessage(GetErrorCode()))
120
121 explicit DefCvt(const ynothrow, ErrorCode, GetErrorCode())
122
123
128 static const std::error_category&
129 GetErrorCategory();
130
135 static std::string
136 FormatMessage(ErrorCode) ynothrow;
138 };
139
140
142
143
147 # define YCL_Raise_Win32E(...) \
148 do \
149 { \
150 const auto err_(::GetLastError()); \
151 \
152 throw platform_ex::Windows::Win32Exception(err_, __VA_ARGS__); \
153 }while(false)
154
156 # define YCL_RaiseZ_Win32E(_expr, ...) \
157 do \
158 { \
159 const auto err_(Windows::ErrorCode(_expr)); \
160 \
161 if(err_ != ERROR_SUCCESS) \
162 throw platform_ex::Windows::Win32Exception(err_, __VA_ARGS__); \
163 }while(false)
164
166 # define YCL_Trace_Win32E(_lv, _fn, _sig) \
167 do \
168 { \
169 const auto err_(::GetLastError()); \
170 \
171 YTraceDe(_lv, "Failed calling " #_fn " @ %s with error %lu: %s", \
172 _sig, err_, \
173 platform_ex::Win32Exception::FormatMessage(err_).c_str()); \
174 }while(false)
175
186 # define YCL_WrapCall_Win32(_fn, ...) \
187 [&](const char* sig_) YB_NONNULL(2){ \
188 const auto res_(_fn(__VA_ARGS__)); \
189 \
190 if(YB_UNLIKELY(!res_)) \
191 YCL_Raise_Win32E(#_fn, sig_); \
192 return res_; \
193 }
194
195 # define YCL_Call_Win32(_fn, _sig, ...) \
196 YCL_WrapCall_Win32(_fn, __VA_ARGS__)(_sig)
197
199 # define YCL_CallF_Win32(_fn, ...) YCL_Call_Win32(_fn, yfsig, __VA_ARGS__)
200
201
208 # define YCL_TraceWrapCall_Win32(_fn, ...) \
209 [&](const char* sig_) YB_NONNULL(2){ \
210 const auto res_(_fn(__VA_ARGS__)); \
211 \
212 if(YB_UNLIKELY(!res_)) \
213 YCL_Trace_Win32E(platform::Descriptions::Warning, _fn, sig_); \
214 return res_; \
215 }
216
217 # define YCL_TraceCall_Win32(_fn, _sig, ...) \
218 YCL_TraceWrapCall_Win32(_fn, __VA_ARGS__)(_sig)
219
220 # define YCL_TraceCallF_Win32(_fn, ...) \
221 YCL_TraceCall_Win32(_fn, yfsig, __VA_ARGS__)
222
223
224
225
226
228
229 using ModuleProc
231 #if YB_IMPL_MSCPP
232 = ystdex::remove_reference_t<decltype(::GetProcAddress(::HMODULE(), {})())>(
233 __stdcall)();
234 #else
235 = ystdex::remove_reference_t<decltype(*::GetProcAddress(::HMODULE(), {}))>;
236 #endif
237
243 YF_API YB_ATTR_returns_nonnull YB_NONNULL(2) ModuleProc*
244 LoadProc(::HMODULE, const char*);
245 template<typename _func>
246 YB_NONNULL(2) inline _func&
247 LoadProc(::HMODULE h_module, const char* proc)
248 {
249 return platform::Deref(reinterpret_cast<_func*>(LoadProc(h_module, proc)));
250 }
251 template<typename _func>
252 YB_NONNULL(1, 2) inline _func&
253 LoadProc(const wchar_t* module, const char* proc)
254 {
255 return LoadProc<_func>(YCL_CallF_Win32(GetModuleHandleW, module), proc);
256 }
258
259
260 #define YCL_Impl_W32Call_Fn(_fn) W32_##_fn##_t
261 #define YCL_Impl_W32Call_FnCall(_fn) W32_##_fn##_call
262
268 #define YCL_DeclW32Call(_fn, _module, _tRet, ...) \
269 YCL_DeclCheck_t(_fn, _fn) \
270 using YCL_Impl_W32Call_Fn(_fn) = _tRet __stdcall(__VA_ARGS__); \
271 \
272 template<typename... _tParams> \
273 auto \
274 YCL_Impl_W32Call_FnCall(_fn)(_tParams&&... args) \
275 -> YCL_CheckDecl_t(_fn)<_tParams...> \
276 { \
277 return _fn(yforward(args)...); \
278 } \
279 template<typename... _tParams> \
280 ystdex::enable_fallback_t<YCL_CheckDecl_t(_fn), \
281 YCL_Impl_W32Call_Fn(_fn), _tParams...> \
282 YCL_Impl_W32Call_FnCall(_fn)(_tParams&&... args) \
283 { \
284 return platform_ex::Windows::LoadProc<YCL_Impl_W32Call_Fn(_fn)>( \
285 L###_module, #_fn)(yforward(args)...); \
286 } \
287 \
288 template<typename... _tParams> \
289 auto \
290 _fn(_tParams&&... args) \
291 -> decltype(YCL_Impl_W32Call_FnCall(_fn)(yforward(args)...)) \
292 { \
293 return YCL_Impl_W32Call_FnCall(_fn)(yforward(args)...); \
294 }
295
296
297
302 YF_API wstring
303 FetchModuleFileName(::HMODULE = {}, YSLib::RecordLevel = YSLib::Err);
304
305
306
308
309 struct YF_API GlobalDelete
311 {
312 using pointer = ::HGLOBAL;
313
314 void
315 operator()(pointer) const ynothrow;
316 };
317
318
320 class YF_API GlobalLocked
321 {
322 private:
324 void* p_locked;
325
326 public:
332 GlobalLocked(::HGLOBAL);
333 template<typename _tPointer>
334 GlobalLocked(const _tPointer& p)
335 : GlobalLocked(p.get())
336 {}
338 ~GlobalLocked();
339
340 template<typename _type = void>
341 observer_ptr<_type>
342 GetPtr() const ynothrow
343 {
344 return make_observer(static_cast<_type*>(p_locked));
345 }
346 };
348
349
354 struct YF_API LocalDelete
355 {
356 using pointer = ::HLOCAL;
357
358 void
359 operator()(pointer) const ynothrow;
360 };
361
362
364
365
370 enum class AccessRights : ::ACCESS_MASK
371 {
372 None = 0,
373 GenericRead = GENERIC_READ,
374 GenericWrite = GENERIC_WRITE,
375 GenericReadWrite = GenericRead | GenericWrite,
376 GenericExecute = GENERIC_EXECUTE,
377 GenericAll = GENERIC_ALL,
378 MaximumAllowed = MAXIMUM_ALLOWED,
379 AccessSystemACL = ACCESS_SYSTEM_SECURITY,
380 Delete = DELETE,
381 ReadControl = READ_CONTROL,
382 Synchronize = SYNCHRONIZE,
383 WriteDAC = WRITE_DAC,
384 WriteOwner = WRITE_OWNER,
385 All = STANDARD_RIGHTS_ALL,
386 Execute = STANDARD_RIGHTS_EXECUTE,
387 StandardRead = STANDARD_RIGHTS_READ,
388 Required = STANDARD_RIGHTS_REQUIRED,
389 StandardWrite = STANDARD_RIGHTS_WRITE
390 };
391
393 DefBitmaskEnum(AccessRights)
394
395
396 enum class FileSpecificAccessRights : ::ACCESS_MASK
398 {
399 AddFile = FILE_ADD_FILE,
400 AddSubdirectory = FILE_ADD_SUBDIRECTORY,
401 AllAccess = FILE_ALL_ACCESS,
402 AppendData = FILE_APPEND_DATA,
403 CreatePipeInstance = FILE_CREATE_PIPE_INSTANCE,
404 DeleteChild = FILE_DELETE_CHILD,
405 Execute = FILE_EXECUTE,
406 ListDirectory = FILE_LIST_DIRECTORY,
407 ReadAttributes = FILE_READ_ATTRIBUTES,
408 ReadData = FILE_READ_DATA,
409 ReadEA = FILE_READ_EA,
410 Traverse = FILE_TRAVERSE,
411 WriteAttributes = FILE_WRITE_ATTRIBUTES,
412 WriteData = FILE_WRITE_DATA,
413 WriteEA = FILE_WRITE_EA,
414 Read = STANDARD_RIGHTS_READ,
415 Write = STANDARD_RIGHTS_WRITE
416 };
417
419 DefBitmaskEnum(FileSpecificAccessRights)
420
421
422 using FileAccessRights
424 = ystdex::enum_union<AccessRights, FileSpecificAccessRights>;
425
427 DefBitmaskOperations(FileAccessRights,
428 ystdex::wrapped_enum_traits_t<FileAccessRights>)
429
430
431 enum class FileShareMode : ::ACCESS_MASK
433 {
434 None = 0,
435 Delete = FILE_SHARE_DELETE,
436 Read = FILE_SHARE_READ,
437 Write = FILE_SHARE_WRITE,
438 ReadWrite = Read | Write,
439 All = Delete | Read | Write
440 };
441
443 DefBitmaskEnum(FileShareMode)
444
445
446 enum class CreationDisposition : unsigned long
448 {
449 CreateAlways = CREATE_ALWAYS,
450 CreateNew = CREATE_NEW,
451 OpenAlways = OPEN_ALWAYS,
452 OpenExisting = OPEN_EXISTING,
453 TruncateExisting = TRUNCATE_EXISTING
454 };
456
457
459
460 enum FileAttributes : unsigned long
462 {
463 ReadOnly = FILE_ATTRIBUTE_READONLY,
464 Hidden = FILE_ATTRIBUTE_HIDDEN,
465 System = FILE_ATTRIBUTE_SYSTEM,
466 Directory = FILE_ATTRIBUTE_DIRECTORY,
467 Archive = FILE_ATTRIBUTE_ARCHIVE,
468 Device = FILE_ATTRIBUTE_DEVICE,
469 Normal = FILE_ATTRIBUTE_NORMAL,
470 Temporary = FILE_ATTRIBUTE_TEMPORARY,
471 SparseFile = FILE_ATTRIBUTE_SPARSE_FILE,
472 ReparsePoint = FILE_ATTRIBUTE_REPARSE_POINT,
473 Compressed = FILE_ATTRIBUTE_COMPRESSED,
474 Offline = FILE_ATTRIBUTE_OFFLINE,
475 NotContentIndexed = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
476 Encrypted = FILE_ATTRIBUTE_ENCRYPTED,
477 // IntegrityStream = FILE_ATTRIBUTE_INTEGRITY_STREAM,
478 IntegrityStream = 0x8000,
479 Virtual = FILE_ATTRIBUTE_VIRTUAL,
480 // NoScrubData = FILE_ATTRIBUTE_NO_SCRUB_DATA,
481 NoScrubData = 0x20000,
482 // EA = FILE_ATTRIBUTE_EA,
484 EA = 0x40000,
485 Invalid = INVALID_FILE_ATTRIBUTES
486 };
487
489 enum FileFlags : unsigned long
490 {
491 WriteThrough = FILE_FLAG_WRITE_THROUGH,
492 Overlapped = FILE_FLAG_OVERLAPPED,
493 NoBuffering = FILE_FLAG_NO_BUFFERING,
494 RandomAccess = FILE_FLAG_RANDOM_ACCESS,
495 SequentialScan = FILE_FLAG_SEQUENTIAL_SCAN,
496 DeleteOnClose = FILE_FLAG_DELETE_ON_CLOSE,
497 BackupSemantics = FILE_FLAG_BACKUP_SEMANTICS,
498 POSIXSemantics = FILE_FLAG_POSIX_SEMANTICS,
499 SessionAware = FILE_FLAG_SESSION_AWARE,
500 OpenReparsePoint = FILE_FLAG_OPEN_REPARSE_POINT,
501 OpenNoRecall = FILE_FLAG_OPEN_NO_RECALL,
502 // \see https://msdn.microsoft.com/zh-cn/library/windows/desktop/aa365150(v=vs.85).aspx 。
503 FirstPipeInstance = FILE_FLAG_FIRST_PIPE_INSTANCE
504 };
505
506 enum SecurityQoS : unsigned long
507 {
508 Anonymous = SECURITY_ANONYMOUS,
509 ContextTracking = SECURITY_CONTEXT_TRACKING,
510 Delegation = SECURITY_DELEGATION,
511 EffectiveOnly = SECURITY_EFFECTIVE_ONLY,
512 Identification = SECURITY_IDENTIFICATION,
513 Impersonation = SECURITY_IMPERSONATION,
514 Present = SECURITY_SQOS_PRESENT,
515 ValidFlags = SECURITY_VALID_SQOS_FLAGS
516 };
517
518 enum FileAttributesAndFlags : unsigned long
519 {
520 NormalWithDirectory = Normal | BackupSemantics,
521 NormalAll = NormalWithDirectory | OpenReparsePoint
522 };
524
525
530 YB_ATTR_nodiscard YB_STATELESS yconstfn
531 PDefH(bool, IsDirectory, FileAttributes attr) ynothrow
532 ImplRet(attr & Directory)
537 YB_ATTR_nodiscard YB_STATELESS inline
538 PDefH(bool, IsDirectory, const ::WIN32_FIND_DATAA& d) ynothrow
539 ImplRet(IsDirectory(FileAttributes(d.dwFileAttributes)))
544 YB_ATTR_nodiscard YB_STATELESS inline
545 PDefH(bool, IsDirectory, const ::WIN32_FIND_DATAW& d) ynothrow
546 ImplRet(IsDirectory(FileAttributes(d.dwFileAttributes)))
547
557 YF_API platform::NodeCategory
558 TryCategorizeNodeAttributes(UniqueHandle::pointer);
559
564 YF_API platform::NodeCategory
565 TryCategorizeNodeDevice(UniqueHandle::pointer);
567
575 YF_API YB_STATELESS platform::NodeCategory
577 CategorizeNode(FileAttributes, unsigned long = 0) ynothrow;
579 YB_STATELESS inline PDefH(platform::NodeCategory, CategorizeNode,
580 const ::WIN32_FIND_DATAA& d) ynothrow
581 ImplRet(CategorizeNode(FileAttributes(d.dwFileAttributes), d.dwReserved0))
586 YB_STATELESS inline PDefH(platform::NodeCategory, CategorizeNode,
587 const ::WIN32_FIND_DATAW& d) ynothrow
588 ImplRet(CategorizeNode(FileAttributes(d.dwFileAttributes), d.dwReserved0))
590
598 YF_API platform::NodeCategory
599 CategorizeNode(UniqueHandle::pointer) ynothrow;
600
601
609 YF_API YB_NONNULL(1) UniqueHandle
610 MakeFile(const wchar_t*, FileAccessRights = AccessRights::None,
611 FileShareMode = FileShareMode::All, CreationDisposition
612 = CreationDisposition::OpenExisting,
613 FileAttributesAndFlags = FileAttributesAndFlags::NormalAll) ynothrowv;
615 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
616 FileAccessRights desired_access, FileShareMode shared_mode,
617 FileAttributesAndFlags attributes_and_flags) ynothrowv
618 ImplRet(MakeFile(path, desired_access, shared_mode,
619 CreationDisposition::OpenExisting, attributes_and_flags))
620 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
621 FileAccessRights desired_access, CreationDisposition creation_disposition,
622 FileAttributesAndFlags attributes_and_flags
623 = FileAttributesAndFlags::NormalAll) ynothrowv
624 ImplRet(MakeFile(path, desired_access, FileShareMode::All,
625 creation_disposition, attributes_and_flags))
627 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
628 FileAccessRights desired_access,
629 FileAttributesAndFlags attributes_and_flags) ynothrowv
630 ImplRet(MakeFile(path, desired_access, FileShareMode::All,
631 CreationDisposition::OpenExisting, attributes_and_flags))
633
634 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
635 FileShareMode shared_mode, CreationDisposition creation_disposition
636 = CreationDisposition::OpenExisting, FileAttributesAndFlags
637 attributes_and_flags = FileAttributesAndFlags::NormalAll) ynothrowv
638 ImplRet(MakeFile(path, AccessRights::None, shared_mode,
639 creation_disposition, attributes_and_flags))
641 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
642 CreationDisposition creation_disposition, FileAttributesAndFlags
643 attributes_and_flags = FileAttributesAndFlags::NormalAll) ynothrowv
644 ImplRet(MakeFile(path, AccessRights::None, FileShareMode::All,
645 creation_disposition, attributes_and_flags))
646 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
647 FileShareMode shared_mode, FileAttributesAndFlags
648 attributes_and_flags = FileAttributesAndFlags::NormalAll) ynothrowv
649 ImplRet(MakeFile(path, AccessRights::None, shared_mode,
650 CreationDisposition::OpenExisting, attributes_and_flags))
651 YB_NONNULL(1) inline PDefH(UniqueHandle, MakeFile, const wchar_t* path,
652 FileAttributesAndFlags attributes_and_flags) ynothrowv
653 ImplRet(MakeFile(path, AccessRights::None, FileShareMode::All,
654 CreationDisposition::OpenExisting, attributes_and_flags))
656
657
658
665 YF_API bool
666 CheckWine();
667
668
674 class YF_API DirectoryFindData : private ystdex::noncopyable
675 {
676 private:
678 class YF_API Deleter
679 {
680 public:
681 using pointer = ::HANDLE;
682
683 void
684 operator()(pointer) const ynothrowv;
685 };
686
694 wstring dir_name;
696 ::WIN32_FIND_DATAW find_data;
701 unique_ptr_from<Deleter> p_node{};
702
703 public:
715 DirectoryFindData(wstring_view sv)
716 : DirectoryFindData(wstring(sv))
717 {}
719 DirectoryFindData(u16string_view sv)
720 : DirectoryFindData(wstring(sv.cbegin(), sv.cend()))
721 {}
723 DirectoryFindData(wstring);
725 DefDeDtor(DirectoryFindData)
727
728
729 DefBoolNeg(explicit, p_node.get())
730
732 DefGetter(const ynothrow, unsigned long, Attributes,
733 find_data.dwFileAttributes)
739 YB_PURE DefGetter(const ynothrow,
740 const wchar_t*, EntryName, find_data.cFileName)
741 DefGetter(const ynothrow, const ::WIN32_FIND_DATAW&, FindData, find_data)
743 DefGetter(const ynothrow, const wstring&, DirName, (YAssert(
744 dir_name.length() > 1 && ystdex::ends_with(dir_name, L"\\*"),
745 "Invalid directory name found."), dir_name))
756 platform::NodeCategory
757 GetNodeCategory() const ynothrow;
758
769 bool
770 Read();
771
773 void
774 Rewind() ynothrow;
775 };
776
777
784 class YF_API ReparsePointData
785 {
786 public:
787 struct Data;
788
789 private:
791 ystdex::aligned_storage_t<MAXIMUM_REPARSE_DATA_BUFFER_SIZE,
792 yalignof(void*)> target_buffer;
794 ystdex::pun_ref<Data> pun;
795
796 public:
797 ReparsePointData();
802 ~ReparsePointData();
803
804 DefGetter(const ynothrow, Data&, , pun.get())
805 };
806
807
817 YF_API YB_NONNULL(1) wstring
819 ResolveReparsePoint(const wchar_t*);
821 YF_API YB_NONNULL(1) wstring_view
822 ResolveReparsePoint(const wchar_t*, ReparsePointData::Data&);
824
825
832 YF_API YB_NONNULL(1) wstring
833 ExpandEnvironmentStrings(const wchar_t*);
834
835
841 using FileID = std::uint64_t;
844 using VolumeID = std::uint32_t;
846
848
849
851
853 YF_API size_t
855 QueryFileLinks(UniqueHandle::pointer);
860 YF_API YB_NONNULL(1) size_t
861 QueryFileLinks(const wchar_t*, bool = {});
863
871 YF_API pair<VolumeID, FileID>
873 QueryFileNodeID(UniqueHandle::pointer);
878 YF_API YB_NONNULL(1) pair<VolumeID, FileID>
879 QueryFileNodeID(const wchar_t*, bool = {});
881
882
889 YF_API std::uint64_t
890 QueryFileSize(UniqueHandle::pointer);
892 YF_API YB_NONNULL(1) std::uint64_t
893 QueryFileSize(const wchar_t*);
895
896 /*
897 \note 后三个参数可选，指针为空时忽略。
898 \note 最高精度取决于文件系统。
899 */
901
903
908 YF_API void
909 QueryFileTime(UniqueHandle::pointer, ::FILETIME* = {}, ::FILETIME* = {},
910 ::FILETIME* = {});
916 YF_API YB_NONNULL(1) void
917 QueryFileTime(const wchar_t*, ::FILETIME* = {}, ::FILETIME* = {},
918 ::FILETIME* = {}, bool = {});
920
930 YF_API void
931 SetFileTime(UniqueHandle::pointer, ::FILETIME* = {}, ::FILETIME* = {},
932 ::FILETIME* = {});
937 YF_API YB_NONNULL(1) void
938 SetFileTime(const wchar_t*, ::FILETIME* = {}, ::FILETIME* = {},
939 ::FILETIME* = {}, bool = {});
941
942
943
953 YF_API std::chrono::nanoseconds
954 ConvertTime(const ::FILETIME&);
959 YF_API ::FILETIME
960 ConvertTime(std::chrono::nanoseconds);
962
963
977 void
979 LockFile(UniqueHandle::pointer, std::uint64_t = 0,
980 std::uint64_t = std::uint64_t(-1), bool = true, bool = {});
981
982 bool
983 TryLockFile(UniqueHandle::pointer, std::uint64_t = 0,
984 std::uint64_t = std::uint64_t(-1), bool = true, bool = true) ynothrow;
986
991 bool
992 UnlockFile(UniqueHandle::pointer, std::uint64_t = 0,
993 std::uint64_t = std::uint64_t(-1)) ynothrow;
995
996
1003 YF_API void
1005 WaitUnique(UniqueHandle::pointer, unsigned long = INFINITE);
1006
1008 YF_API bool
1009 TryWaitUnique(UniqueHandle::pointer, unsigned long = 0) ynothrow;
1011
1012
1018 class YF_API Mutex : private ystdex::noncopyable
1019 {
1020 public:
1021 using native_handle_type = UniqueHandle::pointer;
1022
1023 private:
1024 UniqueHandle h_mutex;
1025
1026 public:
1028 Mutex(const wchar_t*);
1029
1031 PDefH(void, lock, )
1032 ImplExpr(WaitUnique(native_handle()))
1033
1034 PDefH(bool, try_lock, ) ynothrow
1035 ImplRet(TryWaitUnique(native_handle()))
1036
1041 void
1042 unlock() ynothrowv;
1043
1045 PDefH(native_handle_type, native_handle, )
1046 ImplRet(h_mutex.get())
1047 };
1048
1049
1059 YF_API wstring
1060 FetchSystemPath(size_t = MAX_PATH);
1061
1066 YF_API wstring
1067 FetchWindowsPath(size_t = MAX_PATH);
1069
1070 } // inline namespace Windows;
1071
1072 } // namespace platform_ex;
1073
1074 #endif
1075
platform_ex::Windows::ModuleProc
ystdex::remove_reference_t< decltype(*::GetProcAddress(::HMODULE(), {}))> ModuleProc
加载过程地址得到的过程类型。
Definition: Win32/include/YCLib/MinGW32.h:235
platform_ex::Windows::CreationDisposition
YF_API CreationDisposition
Definition: Win32/include/YCLib/MinGW32.h:612
platform_ex::Windows::AccessRights::WriteOwner
@ WriteOwner
platform_ex::Windows::Identification
@ Identification
Definition: Win32/include/YCLib/MinGW32.h:512
enum.hpp
枚举相关操作。
platform_ex::Windows::ReparsePointData::ReparsePointData
ReparsePointData()
platform_ex::Windows::SessionAware
@ SessionAware
Definition: Win32/include/YCLib/MinGW32.h:499
platform_ex::Windows::DirectoryFindData::Deleter::pointer
::HANDLE pointer
Definition: Win32/include/YCLib/MinGW32.h:681
platform_ex::Windows::Mutex
互斥量：可用于进程间同步。
Definition: Win32/include/YCLib/MinGW32.h:1019
YB_ATTR_nodiscard
#define YB_ATTR_nodiscard
标记返回值不被忽略的属性。
Definition: ydef.h:715
platform_ex::Windows::GlobalLocked::p_locked
void * p_locked
Definition: Win32/include/YCLib/MinGW32.h:324
ystdex::single_thread::try_lock
int try_lock(_tLock1 &&, _tLock2 &&, _tLocks &&...)
Definition: pseudo_mutex.h:983
platform_ex::Windows::desired_access
const wchar_t FileAccessRights desired_access
Definition: Win32/include/YCLib/MinGW32.h:616
platform_ex::Windows::AccessRights::GenericWrite
@ GenericWrite
platform_ex::Windows::Present
@ Present
Definition: Win32/include/YCLib/MinGW32.h:514
platform_ex::Windows::Mutex::h_mutex
UniqueHandle h_mutex
Definition: Win32/include/YCLib/MinGW32.h:1024
platform_ex::Windows::AccessRights::None
@ None
platform_ex::Windows::FetchSystemPath
YF_API wstring FetchSystemPath(size_t=MAX_PATH)
取系统目录路径。
platform_ex::Windows::PDefH
YB_ATTR_nodiscard YB_STATELESS yconstfn PDefH(bool, IsDirectory, FileAttributes attr) ynothrow ImplRet(attr &Directory) YB_ATTR_nodiscard YB_STATELESS inline PDefH(bool
判断 FileAttributes 是否指定目录。
platform_ex::Windows::SetFileTime
YF_API void SetFileTime(UniqueHandle::pointer, ::FILETIME *={}, ::FILETIME *={}, ::FILETIME *={})
设置文件的创建、访问和/或修改时间。
YB_PURE
#define YB_PURE
指示函数或函数模板实例为纯函数。
Definition: ydef.h:919
platform_ex::Windows::QueryFileNodeID
YF_API pair< VolumeID, FileID > QueryFileNodeID(UniqueHandle::pointer)
查询文件标识。
platform_ex::Windows::Virtual
@ Virtual
Definition: Win32/include/YCLib/MinGW32.h:479
platform_ex::Windows::GlobalDelete
全局存储删除器。
Definition: Win32/include/YCLib/MinGW32.h:311
platform_ex::Windows::AccessRights::AccessSystemACL
@ AccessSystemACL
platform::references::unique_ptr_from
unique_ptr< ystdex::defer_element< ystdex::unique_ptr_pointer< void, _tDeleter >, _tDefault >, _tDeleter > unique_ptr_from
取删除器对应的 unique_ptr 实例。
Definition: Reference.h:110
platform_ex::Windows::LocalDelete::operator()
void operator()(pointer) const ynothrow
ystdex::cpp2017::basic_string
Definition: string.hpp:77
DefBitmaskOperations
#define DefBitmaskOperations(_tBitmask, _tInt)
Definition: YBaseMacro.h:491
platform_ex::Windows::VolumeID
std::uint32_t VolumeID
卷序列号。
Definition: Win32/include/YCLib/MinGW32.h:844
platform_ex
平台扩展命名空间。
Definition: Android.h:46
platform_ex::Windows::DirectoryFindData
文件系统目录查找状态。
Definition: Win32/include/YCLib/MinGW32.h:675
platform::Descriptions::Emergent
@ Emergent
Definition: YCommon.h:179
yalignof
#define yalignof(_type)
指定特定类型的对齐。
Definition: ydef.h:1053
ystdex::noncopyable
bases::noncopyable noncopyable
Definition: base.h:215
platform::Descriptions::RecordLevel
RecordLevel
记录等级。
Definition: YCommon.h:178
ystdex::cpp2017::string_view
basic_string_view< char > string_view
Definition: string_view.hpp:437
platform_ex::Windows::SparseFile
@ SparseFile
Definition: Win32/include/YCLib/MinGW32.h:471
platform_ex::Windows::AccessRights::WriteDAC
@ WriteDAC
platform_ex::Windows::LockFile
void LockFile(UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1), bool=true, bool={})
锁定文件。
platform_ex::Windows::AccessRights::GenericReadWrite
@ GenericReadWrite
ystdex::cpp2017::wstring_view
basic_string_view< wchar_t > wstring_view
Definition: string_view.hpp:440
platform_ex::Windows::Impersonation
@ Impersonation
Definition: Win32/include/YCLib/MinGW32.h:513
platform_ex::Windows::NoScrubData
@ NoScrubData
Definition: Win32/include/YCLib/MinGW32.h:481
ystdex::cpp2014::aligned_storage_t
typename aligned_storage< _vLen, _vAlign >::type aligned_storage_t
Definition: meta.hpp:187
platform_ex::Windows::ReparsePointData
重解析点数据。
Definition: Win32/include/YCLib/MinGW32.h:785
CHRLib::d
_tDst * d
Definition: CharacterProcessing.h:142
platform_ex::Windows::AccessRights::ReadControl
@ ReadControl
platform_ex::Windows::AccessRights::MaximumAllowed
@ MaximumAllowed
platform_ex::Windows::BackupSemantics
@ BackupSemantics
Definition: Win32/include/YCLib/MinGW32.h:497
platform_ex::Windows::QueryFileSize
YF_API std::uint64_t QueryFileSize(UniqueHandle::pointer)
查询文件大小。
platform_ex::Windows::AccessRights::Synchronize
@ Synchronize
YF_API
#define YF_API
Definition: Platform.h:56
platform_ex::Windows::NoBuffering
@ NoBuffering
Definition: Win32/include/YCLib/MinGW32.h:493
platform_ex::Windows::TryLockFile
bool TryLockFile(UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1), bool=true, bool=true) ynothrow
platform_ex::Windows::DirectoryFindData::DirectoryFindData
DirectoryFindData(u16string_view sv)
Definition: Win32/include/YCLib/MinGW32.h:719
platform_ex::Windows::Hidden
@ Hidden
Definition: Win32/include/YCLib/MinGW32.h:464
platform_ex::Windows::Invalid
@ Invalid
Definition: Win32/include/YCLib/MinGW32.h:485
platform_ex::Windows::IntegrityStream
@ IntegrityStream
Definition: Win32/include/YCLib/MinGW32.h:478
YAssert
#define YAssert(_expr, _msg)
Definition: cassert.h:154
platform_ex::Windows::unsigned
YF_API unsigned
Definition: NLS.h:52
platform_ex::Windows::DeleteOnClose
@ DeleteOnClose
Definition: Win32/include/YCLib/MinGW32.h:496
ystdex::cpp2014::cbegin
auto cbegin(const _tRange &c) -> decltype(ystdex::begin(c))
Definition: range.hpp:418
ystdex::cpp2014::cend
auto cend(const _tRange &c) -> decltype(ystdex::end(c))
Definition: range.hpp:427
platform_ex::Windows::ImplRet
YB_ATTR_nodiscard YB_STATELESS yconstfnconst ::WIN32_FIND_DATAA &d ynothrow ImplRet(IsDirectory(FileAttributes(d.dwFileAttributes))) YB_ATTR_nodiscard YB_STATELESS inline PDefH(bool
判断 ::WIN32_FIND_DATAW 指定的节点是否为目录。
ystdex::enum_union
Definition: enum.hpp:60
platform_ex::Windows::AccessRights::GenericRead
@ GenericRead
platform_ex::Windows::AccessRights::StandardWrite
@ StandardWrite
platform_ex::Windows::EA
@ EA
Definition: Win32/include/YCLib/MinGW32.h:484
platform_ex::Windows::AccessRights
AccessRights
访问权限。
Definition: Win32/include/YCLib/MinGW32.h:371
FileAttributes
FileAttributes
文件共享模式。
Definition: Win32/include/YCLib/MinGW32.h:462
platform_ex::Windows::FileFlags
FileFlags
Definition: Win32/include/YCLib/MinGW32.h:490
YB_ATTR_returns_nonnull
#define YB_ATTR_returns_nonnull
指示返回非空属性。
Definition: ydef.h:761
DefBoolNeg
#define DefBoolNeg(_spec,...)
定义表示显式转换 bool 操作符及其否定的 operator! 。
Definition: YBaseMacro.h:228
platform_ex::Windows::ReparsePointData::target_buffer
ystdex::aligned_storage_t< MAXIMUM_REPARSE_DATA_BUFFER_SIZE, yalignof(void *)> target_buffer
Definition: Win32/include/YCLib/MinGW32.h:787
DefDeDtor
#define DefDeDtor(_t)
Definition: YBaseMacro.h:177
platform_ex::Windows::GlobalDelete::pointer
::HGLOBAL pointer
Definition: Win32/include/YCLib/MinGW32.h:312
platform_ex::Windows::AccessRights::Execute
@ Execute
platform_ex::Windows::AccessRights::Required
@ Required
platform_ex::Windows::NotContentIndexed
@ NotContentIndexed
Definition: Win32/include/YCLib/MinGW32.h:475
ystdex::make_observer
observer_ptr< _type > make_observer(_type *p)
Definition: pointer.hpp:405
platform_ex::Windows::path
const wchar_t * path
Definition: Win32/include/YCLib/MinGW32.h:615
platform_ex::Windows::WaitUnique
YF_API void WaitUnique(UniqueHandle::pointer, unsigned long=INFINITE)
以指定的时间间隔上限等待句柄指定的同步对象。
platform_ex::Windows::OpenNoRecall
@ OpenNoRecall
Definition: Win32/include/YCLib/MinGW32.h:501
platform_ex::Windows::POSIXSemantics
@ POSIXSemantics
Definition: Win32/include/YCLib/MinGW32.h:498
YB_STATELESS
#define YB_STATELESS
指示函数或函数模板实例为无状态函数。
Definition: ydef.h:941
platform_ex::Windows::Mutex::Mutex
Mutex(const wchar_t *)
使用内核对象名。
platform_ex::Windows::DirectoryFindData::dir_name
wstring dir_name
查找起始的目录名称。
Definition: Win32/include/YCLib/MinGW32.h:694
platform_ex::Windows::ReparsePoint
@ ReparsePoint
Definition: Win32/include/YCLib/MinGW32.h:472
platform_ex::Windows::ConvertToErrno
YF_API YB_STATELESS int ConvertToErrno(ErrorCode) ynothrow
转换 Win32 错误为 errno 。
std
Definition: optional.h:982
platform_ex::Windows::EffectiveOnly
@ EffectiveOnly
Definition: Win32/include/YCLib/MinGW32.h:511
platform_ex::Windows::Delegation
@ Delegation
Definition: Win32/include/YCLib/MinGW32.h:510
platform_ex::Windows::LocalDelete
局部存储删除器。
Definition: Win32/include/YCLib/MinGW32.h:355
platform_ex::Windows::GlobalLocked::~GlobalLocked
~GlobalLocked()
platform_ex::Windows::NormalAll
@ NormalAll
Definition: Win32/include/YCLib/MinGW32.h:521
platform_ex::Windows::Temporary
@ Temporary
Definition: Win32/include/YCLib/MinGW32.h:470
platform_ex::Windows::System
@ System
Definition: Win32/include/YCLib/MinGW32.h:465
platform_ex::Windows::TryCategorizeNodeDevice
YB_ATTR_nodiscard YB_STATELESS yconstfnconst ::WIN32_FIND_DATAA &d ynothrowconst ::WIN32_FIND_DATAW &d ynothrow ImplRet(IsDirectory(FileAttributes(d.dwFileAttributes))) YF_API platform YF_API platform::NodeCategory TryCategorizeNodeDevice(UniqueHandle::pointer)
按打开的文件句柄归类节点从属的属性类别。
platform_ex::Windows::IsDirectory
YB_ATTR_nodiscard YB_STATELESS yconstfn IsDirectory
Definition: Win32/include/YCLib/MinGW32.h:538
platform_ex::Windows::FetchModuleFileName
YF_API wstring FetchModuleFileName(::HMODULE={}, YSLib::RecordLevel=YSLib::Err)
取模块映像路径。
platform_ex::Windows::DirectoryFindData::Deleter::operator()
void operator()(pointer) const ynothrowv
platform_ex::Windows::GlobalLocked::GetPtr
observer_ptr< _type > GetPtr() const ynothrow
Definition: Win32/include/YCLib/MinGW32.h:342
platform_ex::Windows::attributes_and_flags
const wchar_t FileAccessRights FileShareMode FileAttributesAndFlags attributes_and_flags ynothrowv const wchar_t FileAccessRights CreationDisposition FileAttributesAndFlags attributes_and_flags
Definition: Win32/include/YCLib/MinGW32.h:623
platform_ex::Windows::Normal
@ Normal
Definition: Win32/include/YCLib/MinGW32.h:469
platform_ex::Windows::FileShareMode
YF_API FileShareMode
Definition: Win32/include/YCLib/MinGW32.h:611
platform_ex::Windows::CategorizeNode
YF_API YB_STATELESS platform::NodeCategory CategorizeNode(FileAttributes, unsigned long=0) ynothrow
按 FileAttributes 和重解析标签归类节点类别。
platform::Descriptions::Err
@ Err
Definition: YCommon.h:182
platform_ex::Windows::Directory
@ Directory
Definition: Win32/include/YCLib/MinGW32.h:466
platform_ex::Windows::QueryFileLinks
YF_API size_t QueryFileLinks(UniqueHandle::pointer)
查询文件链接数。
YCL_CallF_Win32
#define YCL_CallF_Win32(_fn,...)
Definition: Win32/include/YCLib/MinGW32.h:199
platform_ex::Windows::QueryFileTime
YF_API YB_NONNULL(1) std YF_API void QueryFileTime(UniqueHandle::pointer, ::FILETIME *={}, ::FILETIME *={}, ::FILETIME *={})
查询文件的创建、访问和/或修改时间。
platform_ex::Windows::SecurityQoS
SecurityQoS
Definition: Win32/include/YCLib/MinGW32.h:507
platform::KeyCodes::DS::L
@ L
Definition: Keys.h:228
platform_ex::Windows::DirectoryFindData::Deleter
Definition: Win32/include/YCLib/MinGW32.h:679
platform_ex::Windows::AccessRights::GenericAll
@ GenericAll
ystdex::cpp2017::wstring
basic_string< wchar_t > wstring
Definition: string.hpp:775
ystdex::cpp2017::u16string_view
basic_string_view< char16_t > u16string_view
Definition: string_view.hpp:438
platform
默认平台命名空间。
Definition: Container.h:56
platform_ex::Windows::Encrypted
@ Encrypted
Definition: Win32/include/YCLib/MinGW32.h:476
platform_ex::Windows::AccessRights::All
@ All
ystdex::wrapped_enum_traits_t
_t< wrapped_enum_traits< _type > > wrapped_enum_traits_t
Definition: enum.hpp:54
platform_ex::Windows::MakeFile
MakeFile
Definition: Win32/include/YCLib/MinGW32.h:615
platform_ex::Windows::GlobalDelete::operator()
void operator()(pointer) const ynothrow
platform_ex::Windows::OpenReparsePoint
@ OpenReparsePoint
Definition: Win32/include/YCLib/MinGW32.h:500
NPL::A1::name
const char * name
Definition: NPLA1.h:1876
platform_ex::Windows::AccessRights::GenericExecute
@ GenericExecute
platform::Deref
YB_PURE yconstfn auto Deref(_type &&p) -> decltype(*p)
断言并解引用非空指针。
Definition: Debug.h:547
platform_ex::Windows::YB_NONNULL
YF_API YB_ATTR_returns_nonnull YB_NONNULL(2) ModuleProc *LoadProc( YB_NONNULL(2) inline _func &LoadProc(
从模块加载指定过程的指针。
Definition: Win32/include/YCLib/MinGW32.h:246
platform_ex::Windows::FileAccessRights
YF_API FileAccessRights
Definition: Win32/include/YCLib/MinGW32.h:610
platform_ex::Windows::ReadOnly
@ ReadOnly
Definition: Win32/include/YCLib/MinGW32.h:463
platform_ex::Windows::RandomAccess
@ RandomAccess
Definition: Win32/include/YCLib/MinGW32.h:494
platform_ex::Windows::Compressed
@ Compressed
Definition: Win32/include/YCLib/MinGW32.h:473
platform_ex::Windows::WriteThrough
@ WriteThrough
Definition: Win32/include/YCLib/MinGW32.h:491
ynothrowv
#define ynothrowv
YSLib 无异常抛出保证验证：有条件地使用无异常抛出规范。
Definition: ydef.h:1219
ystdex
<memory> 特性测试宏。
Definition: ydef.h:1262
platform_ex::Windows::Mutex::PDefH
PDefH(void, lock,) ImplExpr(WaitUnique(native_handle())) PDefH(bool
platform_ex::Windows::proc
const char * proc
Definition: Win32/include/YCLib/MinGW32.h:254
platform_ex::Windows::NormalWithDirectory
@ NormalWithDirectory
Definition: Win32/include/YCLib/MinGW32.h:520
DefDeCopyCtor
#define DefDeCopyCtor(_t)
Definition: YBaseMacro.h:162
platform_ex::Windows::GlobalLocked::GlobalLocked
GlobalLocked(const _tPointer &p)
Definition: Win32/include/YCLib/MinGW32.h:334
YModules.h
YCLib 库模块配置文件。
DefCvt
#define DefCvt(_q, _t,...)
Definition: YBaseMacro.h:206
platform_ex::Windows::UnlockFile
bool UnlockFile(UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1)) ynothrow
解锁文件。
ImplExpr
#define ImplExpr(...)
简单通用函数实现。
Definition: YBaseMacro.h:96
platform_ex::Windows::SequentialScan
@ SequentialScan
Definition: Win32/include/YCLib/MinGW32.h:495
platform_ex::Windows::ValidFlags
@ ValidFlags
Definition: Win32/include/YCLib/MinGW32.h:515
platform_ex::Windows::Anonymous
@ Anonymous
Definition: Win32/include/YCLib/MinGW32.h:508
ystdex::ends_with
bool ends_with(const _tRange1 &input, const _tRange2 &test, _fPred comp)
判断第一参数指定的串是否以第二参数结束。
Definition: string.hpp:1195
platform_ex::Windows::AccessRights::Delete
@ Delete
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:241
DefBitmaskEnum
#define DefBitmaskEnum(_tEnum)
Definition: YBaseMacro.h:505
platform_ex::Windows::GlobalLocked::GlobalLocked
GlobalLocked(::HGLOBAL)
构造：锁定存储。
platform_ex::Windows::shared_mode
const wchar_t FileAccessRights FileShareMode shared_mode
Definition: Win32/include/YCLib/MinGW32.h:616
platform_ex::Windows::FirstPipeInstance
@ FirstPipeInstance
Definition: Win32/include/YCLib/MinGW32.h:503
platform_ex::Windows::Archive
@ Archive
Definition: Win32/include/YCLib/MinGW32.h:467
ystdex::cpp2014::remove_reference_t
typename remove_reference< _type >::type remove_reference_t
Definition: meta.hpp:155
ystdex::pun_ref< Data >
platform::p
return p p
Definition: YCLib/FileSystem.h:209
platform_ex::Windows::LocalDelete::pointer
::HLOCAL pointer
Definition: Win32/include/YCLib/MinGW32.h:356
platform_ex::Windows::AccessRights::StandardRead
@ StandardRead
const
const Decapsulate const Decapsulate &y ynothrow ContextNode &ctx const
Definition: NPLA1Forms.cpp:1629
platform_ex::Windows::ConvertTime
YF_API std::chrono::nanoseconds ConvertTime(const ::FILETIME &)
转换文件时间为以 POSIX 历元起始度量的时间间隔。
ystdex::single_thread::lock
void lock(_tLock1 &&, _tLock2 &&, _tLocks &&...)
Definition: pseudo_mutex.h:990
platform_ex::Windows::ContextTracking
@ ContextTracking
Definition: Win32/include/YCLib/MinGW32.h:509
ystdex::cpp2017::string
basic_string< char > string
Definition: string.hpp:772
platform_ex::Windows::Offline
@ Offline
Definition: Win32/include/YCLib/MinGW32.h:474
platform_ex::Windows::FetchWindowsPath
YF_API wstring FetchWindowsPath(size_t=MAX_PATH)
取系统目录路径。
platform_ex::Windows::Overlapped
@ Overlapped
Definition: Win32/include/YCLib/MinGW32.h:492
platform_ex::Windows::ReparsePointData::pun
ystdex::pun_ref< Data > pun
Definition: Win32/include/YCLib/MinGW32.h:794
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:1199
platform_ex::Windows::Device
@ Device
Definition: Win32/include/YCLib/MinGW32.h:468
platform_ex::Windows::ErrorCode
unsigned long ErrorCode
Definition: Win32/include/YCLib/MinGW32.h:58
platform_ex::Windows::DirectoryFindData::DirectoryFindData
DirectoryFindData(wstring)
platform_ex::Windows::GlobalLocked
全局锁定存储。
Definition: Win32/include/YCLib/MinGW32.h:321
platform_ex::Windows::DirectoryFindData::DirectoryFindData
DirectoryFindData(wstring_view sv)
构造：使用指定的目录路径。
Definition: Win32/include/YCLib/MinGW32.h:715
ystdex::pun_ref::get
_type & get() const
Definition: type_pun.hpp:261
platform_ex::Windows::ReparsePointData::~ReparsePointData
~ReparsePointData()
析构：类定义外默认实现。
platform_ex::Windows::FileAttributesAndFlags
FileAttributesAndFlags
Definition: Win32/include/YCLib/MinGW32.h:519
platform_ex::Windows::TryWaitUnique
YF_API bool TryWaitUnique(UniqueHandle::pointer, unsigned long=0) ynothrow
NPL::get
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(NPL ref get()
Definition: NPLA.h:1737
platform_ex::Windows::creation_disposition
const wchar_t FileAccessRights FileShareMode FileAttributesAndFlags attributes_and_flags ynothrowv const wchar_t FileAccessRights CreationDisposition creation_disposition
Definition: Win32/include/YCLib/MinGW32.h:621
platform_ex::Windows::DirectoryFindData::find_data
::WIN32_FIND_DATAW find_data
Win32 查找数据。
Definition: Win32/include/YCLib/MinGW32.h:696
platform_ex::Windows::FileID
std::uint64_t FileID
文件标识。
Definition: Win32/include/YCLib/MinGW32.h:842
yconstfn
#define yconstfn
指定编译时常量函数。
Definition: ydef.h:1073
platform_ex::Windows::Mutex::native_handle_type
UniqueHandle::pointer native_handle_type
Definition: Win32/include/YCLib/MinGW32.h:1021