YSTest: MinGW32.h 文件参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

类 | 命名空间 | 宏定义 | 类型定义 | 枚举 | 函数 | 变量
Win32/include/YCLib/MinGW32.h 文件参考
YFramework Library » YCommonLib | Platforms » MinGW for Win32

YCLib MinGW32 平台公共扩展。 更多...

`#include "YCLib/YModules.h"`
`#include <YFM_YCLib_Host>`
`#include <YFM_YCLib_NativeAPI>`
`#include <YFM_YCLib_Debug>`
`#include <ystdex/enum.hpp>`
`#include <YFM_YCLib_FileIO>`
`#include <chrono>`
Win32/include/YCLib/MinGW32.h 的引用(Include)关系图:

浏览源代码.

## 类

struct | platform_ex::Windows::GlobalDelete
| 全局存储删除器。 更多...
class | platform_ex::Windows::GlobalLocked
| 全局锁定存储。 更多...
struct | platform_ex::Windows::LocalDelete
| 局部存储删除器。 更多...
class | platform_ex::Windows::DirectoryFindData
| 文件系统目录查找状态。 更多...
class | platform_ex::Windows::DirectoryFindData::Deleter
class | platform_ex::Windows::ReparsePointData
| 重解析点数据。 更多...
class | platform_ex::Windows::Mutex
| 互斥量：可用于进程间同步。 更多...

## 命名空间

| platform_ex
| 平台扩展命名空间。
| platform_ex::Windows
| Windows 平台扩展接口。

## 宏定义

#define | YCL_Raise_Win32E(...)
| 取转换为 errno 的 Win32 错误。 更多...
#define | YCL_RaiseZ_Win32E(_expr, ...)
| 按表达式求值和指定参数抛出 Windows::Win32Exception 对象。 更多...
#define | YCL_Trace_Win32E(_lv, _fn, _sig)
| 跟踪 ::GetLastError 取得的调用状态结果。 更多...
#define | YCL_WrapCall_Win32(_fn, ...)
| 调用 Win32 API 或其它可用 ::GetLastError 取得调用状态的例程。 更多...
#define | YCL_Call_Win32(_fn, _sig, ...) YCL_WrapCall_Win32(_fn, __VA_ARGS__)(_sig)
#define | YCL_CallF_Win32(_fn, ...) YCL_Call_Win32(_fn, yfsig, __VA_ARGS__)
#define | YCL_TraceWrapCall_Win32(_fn, ...)
#define | YCL_TraceCall_Win32(_fn, _sig, ...) YCL_TraceWrapCall_Win32(_fn, __VA_ARGS__)(_sig)
#define | YCL_TraceCallF_Win32(_fn, ...) YCL_TraceCall_Win32(_fn, yfsig, __VA_ARGS__)
#define | YCL_Impl_W32Call_Fn(_fn) W32_##_fn##_t
#define | YCL_Impl_W32Call_FnCall(_fn) W32_##_fn##_call
#define | YCL_DeclW32Call(_fn, _module, _tRet, ...)
| 声明调用 WinAPI 的例程。 更多...

## 类型定义

using | platform_ex::Windows::ErrorCode = unsigned long
using | platform_ex::Windows::ModuleProc = ystdex::remove_reference_t< decltype(*::GetProcAddress(::HMODULE(), {}))>
| 加载过程地址得到的过程类型。 更多...
using | platform_ex::Windows::FileID = std::uint64_t
| 文件标识。 更多...
using | platform_ex::Windows::VolumeID = std::uint32_t
| 卷序列号。 更多...

## 枚举

enum

platform_ex::Windows::AccessRights : ::ACCESS_MASK {
platform_ex::Windows::AccessRights::None = 0, platform_ex::Windows::AccessRights::GenericRead = GENERIC_READ, platform_ex::Windows::AccessRights::GenericWrite = GENERIC_WRITE, platform_ex::Windows::AccessRights::GenericReadWrite = GenericRead | GenericWrite,
platform_ex::Windows::AccessRights::GenericExecute = GENERIC_EXECUTE, platform_ex::Windows::AccessRights::GenericAll = GENERIC_ALL, platform_ex::Windows::AccessRights::MaximumAllowed = MAXIMUM_ALLOWED, platform_ex::Windows::AccessRights::AccessSystemACL = ACCESS_SYSTEM_SECURITY,
platform_ex::Windows::AccessRights::Delete = DELETE, platform_ex::Windows::AccessRights::ReadControl = READ_CONTROL, platform_ex::Windows::AccessRights::Synchronize = SYNCHRONIZE, platform_ex::Windows::AccessRights::WriteDAC = WRITE_DAC,
platform_ex::Windows::AccessRights::WriteOwner = WRITE_OWNER, platform_ex::Windows::AccessRights::All = STANDARD_RIGHTS_ALL, platform_ex::Windows::AccessRights::Execute = STANDARD_RIGHTS_EXECUTE, platform_ex::Windows::AccessRights::StandardRead = STANDARD_RIGHTS_READ,
platform_ex::Windows::AccessRights::Required = STANDARD_RIGHTS_REQUIRED, platform_ex::Windows::AccessRights::StandardWrite = STANDARD_RIGHTS_WRITE
}

| 访问权限。 更多...
enum | FileAttributes : unsigned long
| 文件共享模式。 更多...

enum

platform_ex::Windows::FileFlags : unsigned long {
platform_ex::Windows::WriteThrough = FILE_FLAG_WRITE_THROUGH, platform_ex::Windows::Overlapped = FILE_FLAG_OVERLAPPED, platform_ex::Windows::NoBuffering = FILE_FLAG_NO_BUFFERING, platform_ex::Windows::RandomAccess = FILE_FLAG_RANDOM_ACCESS,
platform_ex::Windows::SequentialScan = FILE_FLAG_SEQUENTIAL_SCAN, platform_ex::Windows::DeleteOnClose = FILE_FLAG_DELETE_ON_CLOSE, platform_ex::Windows::BackupSemantics = FILE_FLAG_BACKUP_SEMANTICS, platform_ex::Windows::POSIXSemantics = FILE_FLAG_POSIX_SEMANTICS,
platform_ex::Windows::SessionAware = FILE_FLAG_SESSION_AWARE, platform_ex::Windows::OpenReparsePoint = FILE_FLAG_OPEN_REPARSE_POINT, platform_ex::Windows::OpenNoRecall = FILE_FLAG_OPEN_NO_RECALL, platform_ex::Windows::FirstPipeInstance = FILE_FLAG_FIRST_PIPE_INSTANCE
}

enum

platform_ex::Windows::SecurityQoS : unsigned long {
platform_ex::Windows::Anonymous = SECURITY_ANONYMOUS, platform_ex::Windows::ContextTracking = SECURITY_CONTEXT_TRACKING, platform_ex::Windows::Delegation = SECURITY_DELEGATION, platform_ex::Windows::EffectiveOnly = SECURITY_EFFECTIVE_ONLY,
platform_ex::Windows::Identification = SECURITY_IDENTIFICATION, platform_ex::Windows::Impersonation = SECURITY_IMPERSONATION, platform_ex::Windows::Present = SECURITY_SQOS_PRESENT, platform_ex::Windows::ValidFlags = SECURITY_VALID_SQOS_FLAGS
}

enum | platform_ex::Windows::FileAttributesAndFlags : unsigned long { platform_ex::Windows::NormalWithDirectory = Normal | BackupSemantics, platform_ex::Windows::NormalAll = NormalWithDirectory | OpenReparsePoint }

## 函数

YF_API YB_STATELESS int | platform_ex::Windows::ConvertToErrno (ErrorCode) ynothrow
| 转换 Win32 错误为 errno 。 更多...
template<typename _func >
YF_API YB_ATTR_returns_nonnull YB_NONNULL(2) ModuleProc *LoadProc( | platform_ex::Windows::YB_NONNULL (2) inline _func &LoadProc(
| 从模块加载指定过程的指针。 更多...
template<typename _func >
| platform_ex::Windows::YB_NONNULL (1, 2) inline _func &LoadProc(const wchar_t *module
YF_API wstring | platform_ex::Windows::FetchModuleFileName (::HMODULE={}, YSLib::RecordLevel=YSLib::Err)
| 取模块映像路径。 更多...
YB_ATTR_nodiscard YB_STATELESS yconstfn | platform_ex::Windows::PDefH (bool, IsDirectory, FileAttributes attr) ynothrow ImplRet(attr &Directory) YB_ATTR_nodiscard YB_STATELESS inline PDefH(bool
| 判断 `FileAttributes` 是否指定目录。 更多...
YB_ATTR_nodiscard YB_STATELESS yconstfnconst ::WIN32_FIND_DATAA &d ynothrow | platform_ex::Windows::ImplRet (IsDirectory(FileAttributes(d.dwFileAttributes))) YB_ATTR_nodiscard YB_STATELESS inline PDefH(bool
| 判断 `::WIN32_FIND_DATAW` 指定的节点是否为目录。 更多...
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 | platform_ex::Windows::TryCategorizeNodeDevice (UniqueHandle::pointer)
| 按打开的文件句柄归类节点从属的属性类别。 更多...
YF_API YB_STATELESS platform::NodeCategory | platform_ex::Windows::CategorizeNode (FileAttributes, unsigned long=0) ynothrow
| 按 FileAttributes 和重解析标签归类节点类别。 更多...
YB_STATELESS | platform_ex::Windows::PDefH (platform::NodeCategory, CategorizeNode, const ::WIN32_FIND_DATAA &d) ynothrow ImplRet(CategorizeNode(FileAttributes(d.dwFileAttributes)
| 按 `::WIN32_FIND_DATAA` 归类节点类别。 更多...
YB_STATELESS d dwReserved0 YB_STATELESS | platform_ex::Windows::PDefH (platform::NodeCategory, CategorizeNode, const ::WIN32_FIND_DATAW &d) ynothrow ImplRet(CategorizeNode(FileAttributes(d.dwFileAttributes)
| 按 `::WIN32_FIND_DATAW` 归类节点类别。 更多...
YB_STATELESS d dwReserved0 YB_STATELESS d dwReserved0 YF_API platform::NodeCategory | platform_ex::Windows::CategorizeNode (UniqueHandle::pointer) ynothrow
| 按打开的文件句柄归类节点类别。 更多...
YF_API | platform_ex::Windows::YB_NONNULL (1) UniqueHandle MakeFile(const wchar_t *
| 创建或打开独占的文件或设备。 更多...
const wchar_t FileAccessRights FileShareMode FileAttributesAndFlags attributes_and_flags ynothrowv | platform_ex::Windows::ImplRet (MakeFile(path, desired_access, shared_mode, CreationDisposition::OpenExisting, attributes_and_flags)) YB_NONNULL(1) inline PDefH(UniqueHandle
YF_API size_t | platform_ex::Windows::QueryFileLinks (UniqueHandle::pointer)
| 查询文件链接数。 更多...
YF_API pair< VolumeID, FileID > | platform_ex::Windows::QueryFileNodeID (UniqueHandle::pointer)
| 查询文件标识。 更多...
YF_API FileID | platform_ex::Windows::QueryFileNodeID (const wchar_t *, bool={})
YF_API std::uint64_t | platform_ex::Windows::QueryFileSize (UniqueHandle::pointer)
| 查询文件大小。 更多...
YF_API YB_NONNULL(1) std YF_API void | platform_ex::Windows::QueryFileTime (UniqueHandle::pointer, ::FILETIME *={}, ::FILETIME *={}, ::FILETIME *={})
| 查询文件的创建、访问和/或修改时间。 更多...
YF_API void | platform_ex::Windows::SetFileTime (UniqueHandle::pointer, ::FILETIME *={}, ::FILETIME *={}, ::FILETIME *={})
| 设置文件的创建、访问和/或修改时间。 更多...
YF_API std::chrono::nanoseconds | platform_ex::Windows::ConvertTime (const ::FILETIME &)
| 转换文件时间为以 POSIX 历元起始度量的时间间隔。 更多...
YF_API ::FILETIME | platform_ex::Windows::ConvertTime (std::chrono::nanoseconds)
| 转换以 POSIX 历元起始度量的时间间隔为文件时间。 更多...
void | platform_ex::Windows::LockFile (UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1), bool=true, bool={})
| 锁定文件。 更多...
bool | platform_ex::Windows::TryLockFile (UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1), bool=true, bool=true) ynothrow
bool | platform_ex::Windows::UnlockFile (UniqueHandle::pointer, std::uint64_t=0, std::uint64_t=std::uint64_t(-1)) ynothrow
| 解锁文件。 更多...
YF_API void | platform_ex::Windows::WaitUnique (UniqueHandle::pointer, unsigned long=INFINITE)
| 以指定的时间间隔上限等待句柄指定的同步对象。 更多...
YF_API bool | platform_ex::Windows::TryWaitUnique (UniqueHandle::pointer, unsigned long=0) ynothrow
YF_API wstring | platform_ex::Windows::FetchSystemPath (size_t=MAX_PATH)
| 取系统目录路径。 更多...
YF_API wstring | platform_ex::Windows::FetchWindowsPath (size_t=MAX_PATH)
| 取系统目录路径。 更多...

## 变量

const char * | platform_ex::Windows::proc
YB_ATTR_nodiscard YB_STATELESS yconstfn | platform_ex::Windows::IsDirectory
YF_API | platform_ex::Windows::FileAccessRights = AccessRights::None
YF_API | platform_ex::Windows::FileShareMode = FileShareMode::All
YF_API | platform_ex::Windows::CreationDisposition = CreationDisposition::OpenExisting
YF_API | platform_ex::Windows::FileAttributesAndFlags = FileAttributesAndFlags::NormalAll) ynothrowv
| platform_ex::Windows::MakeFile
const wchar_t * | platform_ex::Windows::path
const wchar_t FileAccessRights | platform_ex::Windows::desired_access
const wchar_t FileAccessRights FileShareMode | platform_ex::Windows::shared_mode
const wchar_t FileAccessRights FileShareMode FileAttributesAndFlags attributes_and_flags ynothrowv const wchar_t FileAccessRights CreationDisposition | platform_ex::Windows::creation_disposition
const wchar_t FileAccessRights FileShareMode FileAttributesAndFlags attributes_and_flags ynothrowv const wchar_t FileAccessRights CreationDisposition FileAttributesAndFlags | platform_ex::Windows::attributes_and_flags
YF_API | platform_ex::Windows::bool = {})

## 详细描述

YCLib MinGW32 平台公共扩展。

版本
  r2050

作者
  FrankHB frank.nosp@m.hb19.nosp@m.89@gm.nosp@m.ail..nosp@m.com

自从
  build 412

创建时间:
  2012-06-08 17:57:49 +0800

修改时间:
  2020-01-27 02:40 +0800

文本编码:
  UTF-8

模块名称:
  YCLib_(Win32)::MinGW32

在文件 Win32/include/YCLib/MinGW32.h 中定义.

## 宏定义说明

## ◆ YCL_Call_Win32

#define YCL_Call_Win32 | ( |  | _fn,
|  |  | _sig,
|  |  | ...
| ) |  | YCL_WrapCall_Win32(_fn, __VA_ARGS__)(_sig)

在文件 Win32/include/YCLib/MinGW32.h 第 196 行定义.

## ◆ YCL_CallF_Win32

#define YCL_CallF_Win32 | ( |  | _fn,
|  |  | ...
| ) |  | YCL_Call_Win32(_fn, yfsig, __VA_ARGS__)

自从
  build 638

在文件 Win32/include/YCLib/MinGW32.h 第 200 行定义.

## ◆ YCL_DeclW32Call

#define YCL_DeclW32Call | ( |  | _fn,
|  |  | _module,
|  |  | _tRet,
|  |  | ...
| ) |  |

值:
YCL_DeclCheck_t(_fn, _fn) \
using YCL_Impl_W32Call_Fn(_fn) = _tRet __stdcall(__VA_ARGS__); \
\
template<typename... _tParams> \
auto \
YCL_Impl_W32Call_FnCall(_fn)(_tParams&&... args) \
-> YCL_CheckDecl_t(_fn)<_tParams...> \
{ \
return _fn(yforward(args)...); \
} \
template<typename... _tParams> \
ystdex::enable_fallback_t<YCL_CheckDecl_t(_fn), \
YCL_Impl_W32Call_Fn(_fn), _tParams...> \
YCL_Impl_W32Call_FnCall(_fn)(_tParams&&... args) \
{ \
return platform_ex::Windows::LoadProc<YCL_Impl_W32Call_Fn(_fn)>( \
L###_module, #_fn)(yforward(args)...); \
} \
\
template<typename... _tParams> \
auto \
_fn(_tParams&&... args) \
-> decltype(YCL_Impl_W32Call_FnCall(_fn)(yforward(args)...)) \
{ \
return YCL_Impl_W32Call_FnCall(_fn)(yforward(args)...); \
}

声明调用 WinAPI 的例程。

注解
  为避免歧义，应在非全局命名空间中使用；注意类作用域名称查找顺序会引起歧义。
  当没有合式调用时从指定模块加载。

在文件 Win32/include/YCLib/MinGW32.h 第 269 行定义.

## ◆ YCL_Impl_W32Call_Fn

#define YCL_Impl_W32Call_Fn | ( |  | _fn | ) | W32_##_fn##_t

在文件 Win32/include/YCLib/MinGW32.h 第 261 行定义.

## ◆ YCL_Impl_W32Call_FnCall

#define YCL_Impl_W32Call_FnCall | ( |  | _fn | ) | W32_##_fn##_call

在文件 Win32/include/YCLib/MinGW32.h 第 262 行定义.

## ◆ YCL_RaiseZ_Win32E

#define YCL_RaiseZ_Win32E | ( |  | _expr,
|  |  | ...
| ) |  |

值:
do \
{ \
const auto err_(Windows::ErrorCode(_expr)); \
\
if(err_ != ERROR_SUCCESS) \
throw platform_ex::Windows::Win32Exception(err_, __VA_ARGS__); \
}while(false)

按表达式求值和指定参数抛出 Windows::Win32Exception 对象。

在文件 Win32/include/YCLib/MinGW32.h 第 157 行定义.

## ◆ YCL_Trace_Win32E

#define YCL_Trace_Win32E | ( |  | _lv,
|  |  | _fn,
|  |  | _sig
| ) |  |

值:
do \
{ \
const auto err_(::GetLastError()); \
\
YTraceDe(_lv, "Failed calling " #_fn " @ %s with error %lu: %s", \
_sig, err_, \
platform_ex::Win32Exception::FormatMessage(err_).c_str()); \
}while(false)

跟踪 ::GetLastError 取得的调用状态结果。

在文件 Win32/include/YCLib/MinGW32.h 第 167 行定义.

## ◆ YCL_TraceCall_Win32

#define YCL_TraceCall_Win32 | ( |  | _fn,
|  |  | _sig,
|  |  | ...
| ) |  | YCL_TraceWrapCall_Win32(_fn, __VA_ARGS__)(_sig)

在文件 Win32/include/YCLib/MinGW32.h 第 218 行定义.

## ◆ YCL_TraceCallF_Win32

#define YCL_TraceCallF_Win32 | ( |  | _fn,
|  |  | ...
| ) |  | YCL_TraceCall_Win32(_fn, yfsig, __VA_ARGS__)

在文件 Win32/include/YCLib/MinGW32.h 第 221 行定义.

## ◆ YCL_TraceWrapCall_Win32

#define YCL_TraceWrapCall_Win32 | ( |  | _fn,
|  |  | ...
| ) |  |

值:
[&](const char* sig_) YB_NONNULL(2){ \
const auto res_(_fn(__VA_ARGS__)); \
\
if(YB_UNLIKELY(!res_)) \
YCL_Trace_Win32E(platform::Descriptions::Warning, _fn, sig_); \
return res_; \
}

注解
  若失败跟踪 ::GetLastError 的结果。
  格式转换说明符置于最前以避免宏参数影响结果。

参见
  YCL_Trace_Win32E

在文件 Win32/include/YCLib/MinGW32.h 第 209 行定义.

## ◆ YCL_WrapCall_Win32

#define YCL_WrapCall_Win32 | ( |  | _fn,
|  |  | ...
| ) |  |

值:
[&](const char* sig_) YB_NONNULL(2){ \
const auto res_(_fn(__VA_ARGS__)); \
\
if(YB_UNLIKELY(!res_)) \
YCL_Raise_Win32E(#_fn, sig_); \
return res_; \
}

调用 Win32 API 或其它可用 ::GetLastError 取得调用状态的例程。

注解
  调用时直接使用实际参数，可指定非标识符的表达式，不保证是全局名称。
  若失败抛出 Windows::Win32Exception 对象。

参见
  YCL_Raise_Win32E

在文件 Win32/include/YCLib/MinGW32.h 第 187 行定义.

## 枚举类型说明

## ◆ FileAttributes

enum FileAttributes : unsigned long

related

文件共享模式。

文件创建选项。

自从
  build 639

参见
  https://msdn.microsoft.com/en-us/library/gg258117(v=vs.85).aspx 。

在文件 Win32/include/YCLib/MinGW32.h 第 461 行定义.

platform::if
if(!p) p
YCL_Impl_W32Call_Fn
#define YCL_Impl_W32Call_Fn(_fn)
Definition: Win32/include/YCLib/MinGW32.h:260
YCL_CheckDecl_t
#define YCL_CheckDecl_t(_fn)
声明检查存在合式调用的辅助宏。
Definition: YCommon.h:148
CHRLib::args
YB_ATTR_nodiscard _tParams && args
Definition: CharacterProcessing.h:649
YCL_DeclCheck_t
#define YCL_DeclCheck_t(_fn, _call)
Definition: YCommon.h:149
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 转发对应参数。
Definition: ydef.h:1508
YTraceDe
#define YTraceDe(...)
YCLib 默认调试跟踪。
Definition: Debug.h:407
platform::KeyCodes::DS::L
@ L
Definition: Keys.h:228
platform::Descriptions::Warning
@ Warning
Definition: YCommon.h:183
YSLib::_tParams
YB_ATTR_nodiscard YB_PURE typename _tParams
Definition: ValueNode.h:1294
YSLib::IO::Path::YB_NONNULL
PDefH(String, GetExtensionOf, const Path &pth) ImplRet(pth.empty() ? String() YF_API YB_NONNULL(1) bool VerifyDirectory(const char *)
判断路径表示绝对路径。
Definition: YSLib/Service/FileSystem.h:516
NPL::c_str
YF_API const char src c_str())) YF_API void InstallDirectory(const string &
安装目录：复制目录树。
Definition: Dependency.h:140
YB_UNLIKELY
#define YB_UNLIKELY(_expr)
分支预测提示。
Definition: ydef.h:828
platform_ex::Windows::ErrorCode
unsigned long ErrorCode
Definition: Win32/include/YCLib/MinGW32.h:58
YCL_Impl_W32Call_FnCall
#define YCL_Impl_W32Call_FnCall(_fn)
Definition: Win32/include/YCLib/MinGW32.h:261
ystdex::enable_fallback_t
enable_if_t<!is_detected< _gOp, _tParams &&... >::value, decltype(std::declval< _func >()(std::declval< _tParams >()...))> enable_fallback_t
启用备用重载。
Definition: function.hpp:430