mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 23:45:42 +00:00
parent
81931d1ac0
commit
8ed6ec437b
1 changed files with 12 additions and 11 deletions
361
sdk/include/psdk/pathcch.h
Normal file
361
sdk/include/psdk/pathcch.h
Normal file
|
@ -0,0 +1,361 @@
|
|||
/*
|
||||
* PROJECT: ReactOS PSDK
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: "Secure" shell path manipulation functions
|
||||
* COPYRIGHT: MinGW-64 and Microsoft Corporation.
|
||||
* Copyright 2023-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
/**
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef WINBASEAPI
|
||||
#ifndef _KERNEL32_
|
||||
#define WINBASEAPI DECLSPEC_IMPORT
|
||||
#else
|
||||
#define WINBASEAPI
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WINPATHCCHAPI
|
||||
#ifndef STATIC_PATHCCH
|
||||
#define WINPATHCCHAPI WINBASEAPI
|
||||
#else
|
||||
#define WINPATHCCHAPI
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum PATHCCH_OPTIONS
|
||||
{
|
||||
PATHCCH_NONE = 0x00,
|
||||
PATHCCH_ALLOW_LONG_PATHS = 0x01,
|
||||
PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS = 0x02,
|
||||
PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS = 0x04,
|
||||
PATHCCH_DO_NOT_NORMALIZE_SEGMENTS = 0x08,
|
||||
PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH = 0x10,
|
||||
PATHCCH_ENSURE_TRAILING_SLASH = 0x20,
|
||||
} PATHCCH_OPTIONS;
|
||||
DEFINE_ENUM_FLAG_OPERATORS(PATHCCH_OPTIONS)
|
||||
|
||||
#define VOLUME_PREFIX L"\\\\?\\Volume"
|
||||
#define VOLUME_PREFIX_LEN (ARRAYSIZE(VOLUME_PREFIX) - 1)
|
||||
|
||||
#define PATHCCH_MAX_CCH 0x8000
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathAllocCanonicalize(
|
||||
_In_ PCWSTR pszPathIn,
|
||||
_In_ /* PATHCCH_OPTIONS */ ULONG dwFlags,
|
||||
_Outptr_ PWSTR* ppszPathOut);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathAllocCombine(
|
||||
_In_opt_ PCWSTR pszPathIn,
|
||||
_In_opt_ PCWSTR pszMore,
|
||||
_In_ /* PATHCCH_OPTIONS */ ULONG dwFlags,
|
||||
_Outptr_ PWSTR* ppszPathOut);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchAddBackslash(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchAddBackslashEx(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_Outptr_opt_result_buffer_(*pcchRemaining) PWSTR* ppszEnd,
|
||||
_Out_opt_ size_t* pcchRemaining);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchAddExtension(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_In_ PCWSTR pszExt);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchAppend(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_In_opt_ PCWSTR pszMore);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchAppendEx(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_In_opt_ PCWSTR pszMore,
|
||||
_In_ /* PATHCCH_OPTIONS */ ULONG dwFlags);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchCanonicalize(
|
||||
_Out_writes_(cchPathOut) PWSTR pszPathOut,
|
||||
_In_ size_t cchPathOut,
|
||||
_In_ PCWSTR pszPathIn);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchCanonicalizeEx(
|
||||
_Out_writes_(cchPathOut) PWSTR pszPathOut,
|
||||
_In_ size_t cchPathOut,
|
||||
_In_ PCWSTR pszPathIn,
|
||||
_In_ /* PATHCCH_OPTIONS */ ULONG dwFlags);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchCombine(
|
||||
_Out_writes_(cchPathOut) PWSTR pszPathOut,
|
||||
_In_ size_t cchPathOut,
|
||||
_In_opt_ PCWSTR pszPathIn,
|
||||
_In_opt_ PCWSTR pszMore);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchCombineEx(
|
||||
_Out_writes_(cchPathOut) PWSTR pszPathOut,
|
||||
_In_ size_t cchPathOut,
|
||||
_In_opt_ PCWSTR pszPathIn,
|
||||
_In_opt_ PCWSTR pszMore,
|
||||
_In_ /* PATHCCH_OPTIONS */ ULONG dwFlags);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchFindExtension(
|
||||
_In_reads_(cchPath) PCWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_Outptr_ PCWSTR* ppszExt);
|
||||
|
||||
WINPATHCCHAPI
|
||||
BOOL
|
||||
APIENTRY
|
||||
PathCchIsRoot(
|
||||
_In_opt_ PCWSTR pszPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchRemoveBackslash(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchRemoveBackslashEx(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_Outptr_opt_result_buffer_(*pcchRemaining) PWSTR* ppszEnd,
|
||||
_Out_opt_ size_t* pcchRemaining);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchRemoveExtension(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchRemoveFileSpec(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchRenameExtension(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_In_ PCWSTR pszExt);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchSkipRoot(
|
||||
_In_ PCWSTR pszPath,
|
||||
_Outptr_ PCWSTR* ppszRootEnd);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchStripPrefix(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
HRESULT
|
||||
APIENTRY
|
||||
PathCchStripToRoot(
|
||||
_Inout_updates_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath);
|
||||
|
||||
WINPATHCCHAPI
|
||||
BOOL
|
||||
APIENTRY
|
||||
PathIsUNCEx(
|
||||
_In_ PCWSTR pszPath,
|
||||
_Outptr_opt_ PCWSTR* ppszServer);
|
||||
|
||||
|
||||
#ifndef PATHCCH_NO_DEPRECATE
|
||||
|
||||
#undef PathAddBackslash
|
||||
#undef PathAddBackslashA
|
||||
#undef PathAddBackslashW
|
||||
|
||||
#undef PathAddExtension
|
||||
#undef PathAddExtensionA
|
||||
#undef PathAddExtensionW
|
||||
|
||||
#undef PathAppend
|
||||
#undef PathAppendA
|
||||
#undef PathAppendW
|
||||
|
||||
#undef PathCanonicalize
|
||||
#undef PathCanonicalizeA
|
||||
#undef PathCanonicalizeW
|
||||
|
||||
#undef PathCombine
|
||||
#undef PathCombineA
|
||||
#undef PathCombineW
|
||||
|
||||
#undef PathRenameExtension
|
||||
#undef PathRenameExtensionA
|
||||
#undef PathRenameExtensionW
|
||||
|
||||
|
||||
#ifdef DEPRECATE_SUPPORTED
|
||||
|
||||
// #pragma deprecated(PathIsRelativeWorker)
|
||||
// #pragma deprecated(StrIsEqualWorker)
|
||||
// #pragma deprecated(FindPreviousBackslashWorker)
|
||||
// #pragma deprecated(IsHexDigitWorker)
|
||||
// #pragma deprecated(StringIsGUIDWorker)
|
||||
// #pragma deprecated(PathIsVolumeGUIDWorker)
|
||||
// #pragma deprecated(IsValidExtensionWorker)
|
||||
|
||||
#pragma deprecated(PathAddBackslash)
|
||||
#pragma deprecated(PathAddBackslashA)
|
||||
#pragma deprecated(PathAddBackslashW)
|
||||
|
||||
#pragma deprecated(PathAddExtension)
|
||||
#pragma deprecated(PathAddExtensionA)
|
||||
#pragma deprecated(PathAddExtensionW)
|
||||
|
||||
#pragma deprecated(PathAppend)
|
||||
#pragma deprecated(PathAppendA)
|
||||
#pragma deprecated(PathAppendW)
|
||||
|
||||
#pragma deprecated(PathCanonicalize)
|
||||
#pragma deprecated(PathCanonicalizeA)
|
||||
#pragma deprecated(PathCanonicalizeW)
|
||||
|
||||
#pragma deprecated(PathCombine)
|
||||
#pragma deprecated(PathCombineA)
|
||||
#pragma deprecated(PathCombineW)
|
||||
|
||||
#pragma deprecated(PathRenameExtension)
|
||||
#pragma deprecated(PathRenameExtensionA)
|
||||
#pragma deprecated(PathRenameExtensionW)
|
||||
|
||||
#else // !DEPRECATE_SUPPORTED
|
||||
|
||||
// #define PathIsRelativeWorker PathIsRelativeWorker_is_internal_to_pathcch;
|
||||
// #define StrIsEqualWorker StrIsEqualWorker_is_internal_to_pathcch;
|
||||
// #define FindPreviousBackslashWorker FindPreviousBackslashWorker_is_internal_to_pathcch;
|
||||
// #define IsHexDigitWorker IsHexDigitWorker_is_internal_to_pathcch;
|
||||
// #define StringIsGUIDWorker StringIsGUIDWorker_is_internal_to_pathcch;
|
||||
// #define PathIsVolumeGUIDWorker PathIsVolumeGUIDWorker_is_internal_to_pathcch;
|
||||
// #define IsValidExtensionWorker IsValidExtensionWorker_is_internal_to_pathcch;
|
||||
|
||||
#define PathAddBackslash PathAddBackslash_instead_use_PathCchAddBackslash;
|
||||
#define PathAddBackslashA PathAddBackslash_instead_use_PathCchAddBackslash;
|
||||
#define PathAddBackslashW PathAddBackslash_instead_use_PathCchAddBackslash;
|
||||
|
||||
#define PathAddExtension PathAddExtension_instead_use_PathCchAddExtension;
|
||||
#define PathAddExtensionA PathAddExtension_instead_use_PathCchAddExtension;
|
||||
#define PathAddExtensionW PathAddExtension_instead_use_PathCchAddExtension;
|
||||
|
||||
#define PathAppend PathAppend_instead_use_PathCchAppend;
|
||||
#define PathAppendA PathAppend_instead_use_PathCchAppend;
|
||||
#define PathAppendW PathAppend_instead_use_PathCchAppend;
|
||||
|
||||
#define PathCanonicalize PathCanonicalize_instead_use_PathCchCanonicalize;
|
||||
#define PathCanonicalizeA PathCanonicalize_instead_use_PathCchCanonicalize;
|
||||
#define PathCanonicalizeW PathCanonicalize_instead_use_PathCchCanonicalize;
|
||||
|
||||
#define PathCombine PathCombine_instead_use_PathCchCombine;
|
||||
#define PathCombineA PathCombine_instead_use_PathCchCombine;
|
||||
#define PathCombineW PathCombine_instead_use_PathCchCombine;
|
||||
|
||||
#define PathRenameExtension PathRenameExtension_instead_use_PathCchRenameExtension;
|
||||
#define PathRenameExtensionA PathRenameExtension_instead_use_PathCchRenameExtension;
|
||||
#define PathRenameExtensionW PathRenameExtension_instead_use_PathCchRenameExtension;
|
||||
|
||||
#endif // DEPRECATE_SUPPORTED
|
||||
|
||||
#endif // PATHCCH_NO_DEPRECATE
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* C++ non-const overloads */
|
||||
#ifdef __cplusplus
|
||||
|
||||
__inline HRESULT
|
||||
PathCchFindExtension(
|
||||
_In_reads_(cchPath) PWSTR pszPath,
|
||||
_In_ size_t cchPath,
|
||||
_Outptr_ PWSTR* ppszExt)
|
||||
{
|
||||
return PathCchFindExtension(const_cast<PCWSTR>(pszPath), cchPath, const_cast<PCWSTR*>(ppszExt));
|
||||
}
|
||||
|
||||
__inline HRESULT
|
||||
PathCchSkipRoot(
|
||||
_In_ PWSTR pszPath,
|
||||
_Outptr_ PWSTR* ppszRootEnd)
|
||||
{
|
||||
return PathCchSkipRoot(const_cast<PCWSTR>(pszPath), const_cast<PCWSTR*>(ppszRootEnd));
|
||||
}
|
||||
|
||||
__inline BOOL
|
||||
PathIsUNCEx(
|
||||
_In_ PWSTR pszPath,
|
||||
_Outptr_opt_ PWSTR* ppszServer)
|
||||
{
|
||||
return PathIsUNCEx(const_cast<PCWSTR>(pszPath), const_cast<PCWSTR*>(ppszServer));
|
||||
}
|
||||
|
||||
#endif // __cplusplus
|
Loading…
Add table
Add a link
Reference in a new issue