> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PFPlatformLocalStorageWriteAsyncHandler

> キーの下にデータのバッファーを書き込むために PlayFab が呼び出すストレージ ハンドラー。結果ペイロードなしで完了する XAsync 操作を開始します。

PlayFab がストレージにデータを書き込む必要があるときに呼び出す、ストレージ書き込みハンドラー。[XAsyncProvider](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncprovider.md) として実装します。

## 構文

```cpp theme={null}
HRESULT STDAPIVCALLTYPE PFPlatformLocalStorageWriteAsyncHandler(
    void* context,
    const char* key,
    size_t dataSize,
    void const* data,
    XAsyncBlock* async
);
```

### パラメーター

**`context`**   `_In_opt_` void\*

[PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md) に渡した [PFLocalStorageHooks](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md) 構造体の `context` メンバー。`nullptr` にすることができます。PlayFab はこのポインターを所有しません。

**`key`**   `_In_z_` const char\*

データを識別します。通常はファイル パスです。このキーの下にデータを書き込みます。

**`dataSize`**   `_In_` size\_t

`data` のサイズ (バイト単位)。

**`data`**   `_In_reads_bytes_(dataSize)` void const\*

書き込むデータ。

**`async`**   `_Inout_` [XAsyncBlock](https://docs.xbox.com/ja-jp/reference/system/xasync/structs/xasyncblock.md)\*

書き込み操作の `XAsyncBlock`。

### 戻り値

型: HRESULT

`async` で非同期操作を開始した場合 (たとえば [XAsyncBegin](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncbegin.md) を使用して) は、`S_OK` を返します。ハンドラーがエラーの HRESULT を返すと、PlayFab はその HRESULT でストレージ操作を失敗させ、`async` の完了を待機しません。そのため、エラーを返すのは `async` で操作を開始していない場合だけにしてください。ストレージ操作自体の結果は、[XAsyncComplete](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasynccomplete.md) で `async` を完了することで報告します。

## 解説

このハンドラーをインストールするには、他の 2 つのストレージ ハンドラーと共に [PFLocalStorageHooks](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md) 構造体の `write` メンバーに設定し、[PFInitialize](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfcore/functions/pfinitialize.md) を呼び出す前に、その構造体を [PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md) に渡します。3 つのハンドラーのいずれかが `nullptr` の場合、PFPlatformLocalStorageSetHandlers は `E_INVALIDARG` を返します。カスタム ハンドラーを設定しない場合、PlayFab は cstdio および `std::fstream` オブジェクトに基づく既定の実装を使用します。

書き込みの結果と結果サイズ 0 を渡して、[XAsyncComplete](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasynccomplete.md) で `async` を完了します。

既定の実装は、`key` の既存のデータに `data` を追加します。置き換えはしません。PlayFab はこの動作に依存しています。[PFTraceEnableTraceToFile](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pftrace/functions/pftraceenabletracetofile.md) でファイルへのトレース出力が有効になっている場合、PlayFab はトレース ファイルを一度クリアした後、各トレース メッセージを同じキーへの個別の書き込みとして書き込みます。ハンドラーでも追加するようにしてください。そうしないと、トレース ファイルには最後のメッセージしか残りません。

`data` は操作が完了するまで有効です。その後も必要な場合はコピーしてください。

PlayFab は、ストレージ操作を開始したスレッド上でこのハンドラーをインラインで呼び出す場合があるため、どのスレッドで実行されるかに依存しないでください。`async` のキューは、PlayFab が PFLocalStorageHooks の `queueHandle` メンバーから派生させたキューです。`queueHandle` が `nullptr` の場合、PlayFab は PFInitialize に渡したバックグラウンド キューから、またはそのキューも `nullptr` だった場合はプロセス タスク キューから、キューを派生させます。派生したキューのワーク コールバックと完了コールバックは、どちらも派生元のキューのワーク ポートで実行されます。

PlayFab はストレージ操作を一度に 1 つずつ実行し、現在の操作が完了した後でのみ次の操作を開始します。

PlayFab は、`async` で `XAsyncCancel` を呼び出すことで、保留中の操作をキャンセルできます。ストレージ操作をキャンセルできる場合は、プロバイダーで `XAsyncOp::Cancel` を処理してください。

`key` 引数と `async` 引数は PlayFab が所有し、操作が完了するまで有効です。`context` 引数はこの保証の対象外です。

## 要件

**ヘッダー:** PFPlatform.h

**ライブラリ:** PlayFabCore.lib

**サポートされているプラットフォーム:** Windows、XBOX One ファミリー本体および XBOX Series 本体

## 関連項目

[PFPlatform のメンバー](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/pfplatform_members.md)

[PFLocalStorageHooks](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md)

[PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md)

[XAsyncProvider](https://docs.xbox.com/ja-jp/reference/system/xasyncprovider/functions/xasyncprovider.md)

[PFPlatformLocalStorageReadAsyncHandler](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragereadasynchandler.md)

[PFPlatformLocalStorageClearAsyncHandler](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstorageclearasynchandler.md)


## Related topics

- [PFPlatformLocalStorageClearAsyncHandler](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstorageclearasynchandler.md)
- [PFPlatformLocalStorageReadAsyncHandler](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragereadasynchandler.md)
- [PFLocalStorageHooks](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md)
- [サービス C API の概要 - PFPlatform.h](https://docs.xbox.com/ja-jp/services/playfab/api-references/c/pfplatform/pfplatform_members.md)
- [XblLocalStorageWriteHandler](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/platform_c/functions/xbllocalstoragewritehandler.md)
