패키지 지원 프레임워크의 픽스업 만들기

문제에 대한 런타임 수정 사항이 없는 경우 대체 함수를 작성하고 적합한 구성 데이터를 포함하여 새 런타임 수정을 만들 수 있습니다. 각 부분을 살펴보겠습니다.

대체 함수

먼저 애플리케이션이 MSIX 컨테이너에서 실행되면 실패하는 함수 호출을 식별합니다. 그런 다음, 런타임 관리자가 대신 호출할 대체 함수를 생성할 수 있습니다. 이를 통해 함수의 구현을 최신 런타임 환경의 규칙에 부합하는 동작으로 대체할 수 있습니다.

매크로를 FIXUP_DEFINE_EXPORTS 선언한 다음 각 매크로의 맨 위에 include fixup_framework.h 문을 추가합니다. 런타임 수정의 함수를 추가하려는 CPP 파일입니다.

#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>

중요

include 문 앞에 매크로가 표시되는지 확인 FIXUP_DEFINE_EXPORTS 합니다.

수정하려는 동작의 함수 시그니처가 동일한 함수를 만듭니다. 함수를 대체하는 예제 함수는 MessageBoxW 다음과 같습니다.

auto MessageBoxWImpl = &::MessageBoxW;
int WINAPI MessageBoxWFixup(
    _In_opt_ HWND hwnd,
    _In_opt_ LPCWSTR,
    _In_opt_ LPCWSTR caption,
    _In_ UINT type)
{
    return MessageBoxWImpl(hwnd, L"SUCCESS: This worked", caption, type);
}

DECLARE_FIXUP(MessageBoxWImpl, MessageBoxWFixup);

함수를 DECLARE_FIXUP 새 대체 함수에 매핑 MessageBoxW 하는 호출입니다. 애플리케이션이 함수를 호출 MessageBoxW 하려고 하면 대신 대체 함수를 호출합니다.

런타임 수정에서 함수에 대한 재귀 호출로부터 보호

reentrancy_guard 재귀 함수 호출로부터 보호하기 위해 함수에 형식을 추가할 수 있습니다.

예를 들어 함수에 대한 대체 함수를 생성할 CreateFile 수 있습니다. 구현에서 함수를 호출할 CopyFile 수 있지만 함수 구현에서 함수를 CopyFile 호출할 CreateFile 수 있습니다. 이로 인해 함수에 대한 호출의 무한 재귀 주기가 CreateFile 발생할 수 있습니다.

자세한 내용은 reentrancy_guardauthoring.md 참조하세요.

구성 데이터

런타임 수정에 구성 데이터를 추가하려면 구성 데이터를 에 추가하는 것이 config.json좋습니다. 이렇게 하면 해당 데이터를 쉽게 구문 분석하는 데 사용할 FixupQueryCurrentDllConfig 수 있습니다. 이 예제에서는 해당 구성 파일에서 부울 및 문자열 값을 구문 분석합니다.

if (auto configRoot = ::FixupQueryCurrentDllConfig())
{
    auto& config = configRoot->as_object();

    if (auto enabledValue = config.try_get("enabled"))
    {
        g_enabled = enabledValue->as_boolean().get();
    }

    if (auto logPathValue = config.try_get("logPath"))
    {
        g_logPath = logPathValue->as_string().wstring();
    }
}

수정 메타데이터

각 수정 및 PSF 시작 관리자 애플리케이션에는 다음 정보가 포함된 XML 메타데이터 파일이 있습니다.

  • 버전: PSF의 버전은 MAJOR입니다. 사소한. Sem 버전 2에 따른 PATCH 형식입니다.
  • 최소 Windows 플랫폼: 수정 또는 PSF 시작 관리자에 필요한 최소 Windows 버전입니다.
  • 설명: 수정에 대한 간단한 설명입니다.
  • WhenToUse: 수정을 적용해야 하는 경우에 대한 추론입니다.

예를 들어 리디렉션 수정에 대한 FileRedirectionFixupMetadata.xml 메타데이터 파일을 참조하세요. 메타데이터 스키마는 여기에서 사용할 수 있습니다.