terminal/src/propslib/ShortcutSerialization.hpp
Dustin Howett d4d59fa339 Initial release of the Windows Terminal source code
This commit introduces all of the Windows Terminal and Console Host source,
under the MIT license.
2019-05-02 15:29:04 -07:00

78 lines
3.6 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.
Module Name:
- ShortcutSerialization.hpp
Abstract:
- This module is used for writing console properties to the link associated
with a particular console title.
Author(s):
- Michael Niksa (MiNiksa) 23-Jul-2014
- Paul Campbell (PaulCam) 23-Jul-2014
- Mike Griese (MiGrie) 04-Aug-2015
Revision History:
- From components of srvinit.c
- From miniksa, paulcam's Registry.cpp
--*/
#pragma once
class ShortcutSerialization
{
public:
[[nodiscard]]
static NTSTATUS s_SetLinkValues(_In_ PCONSOLE_STATE_INFO pStateInfo, const BOOL fEastAsianSystem, const BOOL fForceV2);
[[nodiscard]]
static NTSTATUS s_GetLinkConsoleProperties(_Inout_ PCONSOLE_STATE_INFO pStateInfo);
[[nodiscard]]
static NTSTATUS s_GetLinkValues(_Inout_ PCONSOLE_STATE_INFO pStateInfo,
_Out_ BOOL * const pfReadConsoleProperties,
_Out_writes_opt_(cchShortcutTitle) PWSTR pwszShortcutTitle,
const size_t cchShortcutTitle,
_Out_writes_opt_(cchIconLocation) PWSTR pwszIconLocation,
const size_t cchIconLocation,
_Out_opt_ int * const piIcon,
_Out_opt_ int * const piShowCmd,
_Out_opt_ WORD * const pwHotKey);
private:
static void s_InitPropVarFromBool(_In_ BOOL fVal, _Out_ PROPVARIANT *ppropvar);
static void s_InitPropVarFromByte(_In_ BYTE bVal, _Out_ PROPVARIANT *ppropvar);
static void s_InitPropVarFromDword(_In_ DWORD dwVal, _Out_ PROPVARIANT *ppropvar);
static void s_SetLinkPropertyBoolValue(_In_ IPropertyStore *pps, _In_ REFPROPERTYKEY refPropKey,const BOOL fVal);
static void s_SetLinkPropertyByteValue(_In_ IPropertyStore *pps, _In_ REFPROPERTYKEY refPropKey,const BYTE bVal);
static void s_SetLinkPropertyDwordValue(_In_ IPropertyStore *pps, _In_ REFPROPERTYKEY refPropKey,const DWORD dwVal);
[[nodiscard]]
static HRESULT s_GetPropertyBoolValue(_In_ IPropertyStore * const pPropStore,
_In_ REFPROPERTYKEY refPropKey,
_Out_ BOOL * const pfValue);
[[nodiscard]]
static HRESULT s_GetPropertyByteValue(_In_ IPropertyStore * const pPropStore,
_In_ REFPROPERTYKEY refPropKey,
_Out_ BYTE * const pbValue);
[[nodiscard]]
static HRESULT s_GetPropertyDwordValue(_In_ IPropertyStore * const pPropStore,
_In_ REFPROPERTYKEY refPropKey,
_Out_ DWORD * const pdwValue);
[[nodiscard]]
static HRESULT s_PopulateV1Properties(_In_ IShellLink * const pslConsole, _In_ PCONSOLE_STATE_INFO pStateInfo);
[[nodiscard]]
static HRESULT s_PopulateV2Properties(_In_ IShellLink * const pslConsole, _In_ PCONSOLE_STATE_INFO pStateInfo);
static void s_GetLinkTitle(_In_ PCWSTR pwszShortcutFilename, _Out_writes_(cchShortcutTitle) PWSTR pwszShortcutTitle, const size_t cchShortcutTitle);
[[nodiscard]]
static HRESULT s_GetLoadedShellLinkForShortcut(_In_ PCWSTR pwszShortcutFileName,
const DWORD dwMode,
_COM_Outptr_ IShellLink **ppsl,
_COM_Outptr_ IPersistFile **ppPf);
};