DownlevelGetStringScripts 関数

指定した Unicode 文字列で使用されるスクリプトの一覧を提供します。

Note

この関数は、Windows Vista より前のオペレーティング システムで実行されるアプリケーションでのみ使われます。 使うにはダウンロード パッケージが必要です。 Windows Vista 以降でのみ実行されるアプリケーションでは、GetStringScripts を呼び出す必要があります。

 

構文

int DownlevelGetStringScripts(
  _In_  DWORD   dwFlags,
  _In_  LPCWSTR lpString,
  _In_  int     cchString,
  _Out_ LPWSTR  lpScripts,
  _In_  int     cchScripts
);

パラメーター

dwFlags [in]

スクリプト取得のオプションを指定するフラグ。

Value 意味
GSS_ALLOW_INHERITED_COMMON
"Qaii" (INHERITED) と "Zyyy" (COMMON) のスクリプト情報を取得します。 この値は、割り当てられていない文字の処理には影響しません。 入力文字列のこれらの文字が含まれていると、スクリプト文字列に常に "Zzzz" (UNASSIGNED スクリプト) が表示されます。

 

Note

この関数の既定では、入力 Unicode 文字列内の inherited または common 文字は無視されます。 GSS_ALLOW_INHERITED_COMMON が設定されていない場合、"Qaii" または "Zyyy" は、入力文字列にそのような文字が含まれていたとしても、スクリプト文字列には表示されません。 GSS_ALLOW_INHERITED_COMMON が設定されており、入力文字列に inherited、common、またはその両方の文字が含まれている場合、スクリプト文字列に "Qaii" や "Zyyy" が表示されます。 「解説」を参照してください。

 

lpString [in]

分析する Unicode 文字列へのポインター。

cchString [in]

lpString で示される Unicode 文字列のサイズ (文字単位)。 文字列が null 終端である場合、アプリケーションはこのパラメーターを -1 に設定します。 アプリケーションでこのパラメーターを 0 に設定すると、関数は lpScripts 内の null Unicode 文字列 (L"\0") を取得し、1 を返します。

lpScripts [out]

ISO 15924 で使われる 4 文字の表記をこの関数で使い、スクリプトの一覧を表す null 終端の文字列を取得するバッファーへのポインター。 各スクリプト名は 4 つのラテン文字で構成され、名前はアルファベット順に取得されます。 姓を含む各名前の後にはセミコロンが続きます。

また、cchScripts が 0 に設定されている場合は、このパラメーターに NULL を含めることができます。 この場合、この関数は、スクリプト バッファーに必要なサイズを返します。

cchScripts [in]

lpScripts で示されるスクリプト バッファーのサイズ (文字数)。

また、アプリケーションでこのパラメーターを 0 に設定することもできます。 この場合、この関数で lpScripts 内の NULL を取得し、スクリプト バッファーに必要なサイズを返します。

戻り値

成功し、cchScripts がゼロ以外の値に設定されている場合は、出力バッファー内の取得された文字数 (終端の null 文字を含む) を返します。 この関数は、スクリプトが見つからなかったことを示す 1 を返します。たとえば、入力文字列に COMMON または INHERITED 文字のみが含まれており、GSS_ALLOW_INHERITED_COMMON が設定されていない場合です。 見つかった各スクリプトで 5 文字 (4 文字 + 区切り記号) が追加されるとすると、単純な数学演算により、スクリプト カウントは (return_code - 1) / 5 となります。

関数が成功し、cchScripts の値が 0 の場合、戻り値は、スクリプト バッファーに必要なサイズ (終端の null 文字を含む文字数) になります。 スクリプト カウントは上記のとおりです。

成功しなかった場合、関数は 0 を返します。 アプリケーションで GetLastError を呼び出して、拡張エラー情報を取得できます。次のいずれかのエラー コードが返されます。

  • ERROR_BADDB。 関数はデータにアクセスできませんでした。 この状況は通常は発生しませんが、一般的に、インストールの誤りやディスクの問題などを示しています。
  • ERROR_INSUFFICIENT_BUFFER。 指定されたバッファー サイズが十分な大きさではなかったか、誤って NULL に設定されました。
  • ERROR_INVALID_FLAGS。 フラグに指定された値が無効でした。
  • ERROR_INVALID_PARAMETER。 いずれかのパラメーターの値が無効でした。

解説

この機能は、国際化ドメイン名 (IDN) に関連するセキュリティ問題を軽減する戦略の一環として役立ちます。

スクリプトの決定は、Unicode コンソーシアムから https://www.unicode.org/Public/4.1.0/ucd/Scripts.txt で公開されたスクリプト値に基づいて行われます。ただし、未割り当ての文字の値は "Zyyy" (COMMON) ではなく "Zzzz" (UNASSIGNED) になります。

この関数の動作の例をいくつか示します。

入力文字列

dwFlags

lpScripts

スクリプト

Microsoft.com

0

Latn;

ラテン語

Microsoft.com

GSS_ALLOW_INHERITED_COMMON

Latn;Zyyy;

Latin + Common

${ROWSPAN2}$Niño${REMOVE}$

004E 0069 0241 006F

${ROWSPAN2}$GSS_ALLOW_INHERITED_COMMON${REMOVE}$

${ROWSPAN2}$Latn;${REMOVE}$

${ROWSPAN2}$Latin${REMOVE}$

Uses LATIN SMALL LETTER N WITH TILDE

${ROWSPAN2}$Niño${REMOVE}$

004E 0069 006E 0303 006F

${ROWSPAN2}$GSS_ALLOW_INHERITED_COMMON${REMOVE}$

${ROWSPAN2}$Latn;Qaii;${REMOVE}$

${ROWSPAN2}$Latin + Inherited${REMOVE}$

Uses COMBINING TILDE

${ROWSPAN2}$Spооf${REMOVE}$

0053 0070 043e 043e 0066

${ROWSPAN2}$0${REMOVE}$

${ROWSPAN2}$Latn;Cyrl;${REMOVE}$

${ROWSPAN2}$Latin + Cyrillic${REMOVE}$

Uses CYRILLIC SMALL LETTER O

U+f000

0

Zzzz;

未割り当て

U+f000

GSS_ALLOW_INHERITED_COMMON

Zzzz;

未割り当て

 

必要なヘッダー ファイルと DLL は、archive.org からダウンロードできる "Microsoft 国際化ドメイン名 (IDN) Mitigation API" の一部です。

要件

要件 Value
サポートされている最小のクライアント
Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー
Windows Server 2003 (デスクトップ アプリのみ)
再頒布可能パッケージ
Windows XP (SP2 以降)、Windows Server 2003 (SP1 以降)、または Windows Vista 上の Microsoft 国際化ドメイン名 (IDN) Mitigation API
ヘッダー
Idndl.h
[DLL]
Idndl.dll

関連項目

各国語サポート

各国語サポート関数

国際化ドメイン名 (IDN) の処理

DownlevelGetLocaleScripts

DownlevelVerifyScripts

GetStringScripts