Win32 API 日本語リファレンス
ホームDevices.DeviceAndDriverInstallation › SetupGetInfPublishedNameA

SetupGetInfPublishedNameA

関数
ドライバーストア内のINFの公開名を取得する(ANSI)。
DLLSETUPAPI.dll文字セットANSI (-A)呼出規約winapiSetLastErrorあり対応OSWindows Vista 以降

シグネチャ

// SETUPAPI.dll  (ANSI / -A)
#include <windows.h>

BOOL SetupGetInfPublishedNameA(
    LPCSTR DriverStoreLocation,
    LPSTR ReturnBuffer,
    DWORD ReturnBufferSize,
    DWORD* RequiredSize   // optional
);

パラメーター

名前方向説明
DriverStoreLocationLPCSTRinドライバーストア内の INF ファイルの完全修飾ファイル名 (ディレクトリパスとファイル名) を格納した NULL 終端文字列へのポインター。または、システム INF ファイルディレクトリ内の INF ファイルの名前 (省略可能で完全なディレクトリパスを含む) を格納した NULL 終端文字列へのポインターを指定します。INF ファイルの指定方法の詳細については、後述の 解説 のセクションを参照してください。
ReturnBufferLPSTRoutSetupGetInfPublishedName が、システム INF ディレクトリ内の指定された INF ファイルの完全修飾ファイル名を格納した NULL 終端文字列を返すバッファーへのポインター。パスの最大サイズは MAX_PATH です。このポインターには NULL を設定できます。戻り値用バッファーに必要なサイズを調べる方法については、後述の 解説 のセクションを参照してください。
ReturnBufferSizeDWORDinReturnBuffer で指定したバッファーのサイズ (文字数)。
RequiredSizeDWORD*outoptionalReturnBuffer バッファーのサイズ (文字数) を受け取る DWORD 型変数へのポインター。このパラメーターは省略可能で、NULL を設定できます。

戻り値の型: BOOL

公式ドキュメント

SetupGetInfPublishedName 関数は、ドライバーストア内の指定された INF ファイル、またはシステム INF ファイルディレクトリ内の指定された INF ファイルに対応する、システム INF ファイルディレクトリ内の INF ファイルの完全修飾ファイル名 (ディレクトリパスとファイル名) を取得します。(ANSI)

戻り値

SetupGetInfPublishedName が成功した場合、関数は TRUE を返します。それ以外の場合は FALSE を返します。拡張エラー情報を取得するには、GetLastError を呼び出します。

要求された INF ファイルの完全修飾ファイル名のサイズ (null 終端文字を含む文字数) が ReturnBufferSize より大きい場合、関数は失敗し、GetLastError を呼び出すと ERROR_INSUFFICIENT_BUFFER が返されます。

解説(Remarks)

システム INF ディレクトリ内の指定された INF ファイルの完全修飾ファイル名を格納するために必要な戻り値用バッファーのサイズを調べるには、ReturnBufferNULLReturnBufferSize に 0 を設定し、RequiredSize を指定して SetupGetInfPublishedName を呼び出します。SetupGetInfPublishedName は、必要なバッファーサイズを RequiredSize に返します。

デバイスインストールがドライバーストアにドライバーパッケージをプレインストールするとき、ドライバーパッケージの INF ファイルのコピーが 2 つ作成されます。デバイスインストールは、一方のコピーをシステム INF ディレクトリに追加し、その INF ファイルのコピーに OEMnnn.inf という形式の一意の公開ファイル名を割り当てます。デバイスインストールは、INF ファイルのもう一方のコピーをドライバーストアに追加し、そのコピーには元の INF ファイル名を割り当てます。

SetupGetInfPublishedName は、DriverStoreLocation で指定された INF ファイルに対応する、システム INF ファイルディレクトリ内の INF ファイルの完全修飾ファイル名を返します (対応するものがある場合)。DriverStoreLocation には、ドライバーストア内の INF ファイルの完全修飾ファイル名を指定するか、システム INF ディレクトリ内の INF ファイルのファイル名 (省略可能でディレクトリパスを含む) を指定する必要があります。たとえば、あるドライバーパッケージの INF ファイルが myinf.inf であり、このドライバーパッケージに対してデバイスインストールがシステム INF ディレクトリ C:\Windows\inf に INF ファイル OEM1.inf をインストールしたとします。さらに、デバイスインストールが対応する INF ファイルのコピー C:\windows\system32\driverstore\filerepository\myinf_12345678\myinf.inf をドライバーストアにインストールしたとします。この場合、DriverStoreLocation に次のいずれかの文字列を指定すると、関数は C:\Windows\inf\OEM1.inf を返します: C:\windows\system32\driverstore\filerepository\myinf_12345678\myinf.inf, OEM1.inf、または C:\Windows\inf\OEM1.inf.

システム INF ファイルディレクトリ内の指定された INF ファイル、またはドライバーストア内の指定されたファイルに対応する、ドライバーストア内の INF ファイルの完全修飾ファイル名を取得するには、SetupGetInfDriverStoreLocation 関数を呼び出します。

メモ

setupapi.h ヘッダーは SetupGetInfPublishedName をエイリアスとして定義しており、UNICODE プリプロセッサ定数の定義に応じて、この関数の ANSI 版と Unicode 版が自動的に選択されます。エンコーディング中立なエイリアスの使用と、エンコーディング中立でないコードを混在させると、不整合が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、関数プロトタイプの規則を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

// SETUPAPI.dll  (ANSI / -A)
#include <windows.h>

BOOL SetupGetInfPublishedNameA(
    LPCSTR DriverStoreLocation,
    LPSTR ReturnBuffer,
    DWORD ReturnBufferSize,
    DWORD* RequiredSize   // optional
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("SETUPAPI.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
static extern bool SetupGetInfPublishedNameA(
    [MarshalAs(UnmanagedType.LPStr)] string DriverStoreLocation,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder ReturnBuffer,   // LPSTR out
    uint ReturnBufferSize,   // DWORD
    IntPtr RequiredSize   // DWORD* optional, out
);
<DllImport("SETUPAPI.dll", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True)>
Public Shared Function SetupGetInfPublishedNameA(
    <MarshalAs(UnmanagedType.LPStr)> DriverStoreLocation As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> ReturnBuffer As System.Text.StringBuilder,   ' LPSTR out
    ReturnBufferSize As UInteger,   ' DWORD
    RequiredSize As IntPtr   ' DWORD* optional, out
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
' DriverStoreLocation : LPCSTR
' ReturnBuffer : LPSTR out
' ReturnBufferSize : DWORD
' RequiredSize : DWORD* optional, out
Declare PtrSafe Function SetupGetInfPublishedNameA Lib "setupapi" ( _
    ByVal DriverStoreLocation As String, _
    ByVal ReturnBuffer As String, _
    ByVal ReturnBufferSize As Long, _
    ByVal RequiredSize As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

SetupGetInfPublishedNameA = ctypes.windll.setupapi.SetupGetInfPublishedNameA
SetupGetInfPublishedNameA.restype = wintypes.BOOL
SetupGetInfPublishedNameA.argtypes = [
    wintypes.LPCSTR,  # DriverStoreLocation : LPCSTR
    wintypes.LPSTR,  # ReturnBuffer : LPSTR out
    wintypes.DWORD,  # ReturnBufferSize : DWORD
    ctypes.POINTER(wintypes.DWORD),  # RequiredSize : DWORD* optional, out
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('SETUPAPI.dll')
SetupGetInfPublishedNameA = Fiddle::Function.new(
  lib['SetupGetInfPublishedNameA'],
  [
    Fiddle::TYPE_VOIDP,  # DriverStoreLocation : LPCSTR
    Fiddle::TYPE_VOIDP,  # ReturnBuffer : LPSTR out
    -Fiddle::TYPE_INT,  # ReturnBufferSize : DWORD
    Fiddle::TYPE_VOIDP,  # RequiredSize : DWORD* optional, out
  ],
  Fiddle::TYPE_INT)
#[link(name = "setupapi")]
extern "system" {
    fn SetupGetInfPublishedNameA(
        DriverStoreLocation: *const u8,  // LPCSTR
        ReturnBuffer: *mut u8,  // LPSTR out
        ReturnBufferSize: u32,  // DWORD
        RequiredSize: *mut u32  // DWORD* optional, out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("SETUPAPI.dll", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool SetupGetInfPublishedNameA([MarshalAs(UnmanagedType.LPStr)] string DriverStoreLocation, [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder ReturnBuffer, uint ReturnBufferSize, IntPtr RequiredSize);
"@
$api = Add-Type -MemberDefinition $sig -Name 'SETUPAPI_SetupGetInfPublishedNameA' -Namespace Win32 -PassThru
# $api::SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
#uselib "SETUPAPI.dll"
#func global SetupGetInfPublishedNameA "SetupGetInfPublishedNameA" sptr, sptr, sptr, sptr
; SetupGetInfPublishedNameA DriverStoreLocation, varptr(ReturnBuffer), ReturnBufferSize, varptr(RequiredSize)   ; 戻り値は stat
; DriverStoreLocation : LPCSTR -> "sptr"
; ReturnBuffer : LPSTR out -> "sptr"
; ReturnBufferSize : DWORD -> "sptr"
; RequiredSize : DWORD* optional, out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "SETUPAPI.dll"
#cfunc global SetupGetInfPublishedNameA "SetupGetInfPublishedNameA" str, var, int, var
; res = SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
; DriverStoreLocation : LPCSTR -> "str"
; ReturnBuffer : LPSTR out -> "var"
; ReturnBufferSize : DWORD -> "int"
; RequiredSize : DWORD* optional, out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; BOOL SetupGetInfPublishedNameA(LPCSTR DriverStoreLocation, LPSTR ReturnBuffer, DWORD ReturnBufferSize, DWORD* RequiredSize)
#uselib "SETUPAPI.dll"
#cfunc global SetupGetInfPublishedNameA "SetupGetInfPublishedNameA" str, var, int, var
; res = SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
; DriverStoreLocation : LPCSTR -> "str"
; ReturnBuffer : LPSTR out -> "var"
; ReturnBufferSize : DWORD -> "int"
; RequiredSize : DWORD* optional, out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	setupapi = windows.NewLazySystemDLL("SETUPAPI.dll")
	procSetupGetInfPublishedNameA = setupapi.NewProc("SetupGetInfPublishedNameA")
)

// DriverStoreLocation (LPCSTR), ReturnBuffer (LPSTR out), ReturnBufferSize (DWORD), RequiredSize (DWORD* optional, out)
r1, _, err := procSetupGetInfPublishedNameA.Call(
	uintptr(unsafe.Pointer(windows.BytePtrFromString(DriverStoreLocation))),
	uintptr(ReturnBuffer),
	uintptr(ReturnBufferSize),
	uintptr(RequiredSize),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function SetupGetInfPublishedNameA(
  DriverStoreLocation: PAnsiChar;   // LPCSTR
  ReturnBuffer: PAnsiChar;   // LPSTR out
  ReturnBufferSize: DWORD;   // DWORD
  RequiredSize: Pointer   // DWORD* optional, out
): BOOL; stdcall;
  external 'SETUPAPI.dll' name 'SetupGetInfPublishedNameA';
result := DllCall("SETUPAPI\SetupGetInfPublishedNameA"
    , "AStr", DriverStoreLocation   ; LPCSTR
    , "Ptr", ReturnBuffer   ; LPSTR out
    , "UInt", ReturnBufferSize   ; DWORD
    , "Ptr", RequiredSize   ; DWORD* optional, out
    , "Int")   ; return: BOOL
●SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize) = DLL("SETUPAPI.dll", "bool SetupGetInfPublishedNameA(char*, char*, dword, void*)")
# 呼び出し: SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
# DriverStoreLocation : LPCSTR -> "char*"
# ReturnBuffer : LPSTR out -> "char*"
# ReturnBufferSize : DWORD -> "dword"
# RequiredSize : DWORD* optional, out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "setupapi" fn SetupGetInfPublishedNameA(
    DriverStoreLocation: [*c]const u8, // LPCSTR
    ReturnBuffer: [*c]u8, // LPSTR out
    ReturnBufferSize: u32, // DWORD
    RequiredSize: [*c]u32 // DWORD* optional, out
) callconv(std.os.windows.WINAPI) i32;
proc SetupGetInfPublishedNameA(
    DriverStoreLocation: cstring,  # LPCSTR
    ReturnBuffer: ptr char,  # LPSTR out
    ReturnBufferSize: uint32,  # DWORD
    RequiredSize: ptr uint32  # DWORD* optional, out
): int32 {.importc: "SetupGetInfPublishedNameA", stdcall, dynlib: "SETUPAPI.dll".}
pragma(lib, "setupapi");
extern(Windows)
int SetupGetInfPublishedNameA(
    const(char)* DriverStoreLocation,   // LPCSTR
    char* ReturnBuffer,   // LPSTR out
    uint ReturnBufferSize,   // DWORD
    uint* RequiredSize   // DWORD* optional, out
);
ccall((:SetupGetInfPublishedNameA, "SETUPAPI.dll"), stdcall, Int32,
      (Cstring, Ptr{UInt8}, UInt32, Ptr{UInt32}),
      DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
# DriverStoreLocation : LPCSTR -> Cstring
# ReturnBuffer : LPSTR out -> Ptr{UInt8}
# ReturnBufferSize : DWORD -> UInt32
# RequiredSize : DWORD* optional, out -> Ptr{UInt32}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t SetupGetInfPublishedNameA(
    const char* DriverStoreLocation,
    char* ReturnBuffer,
    uint32_t ReturnBufferSize,
    uint32_t* RequiredSize);
]]
local setupapi = ffi.load("setupapi")
-- setupapi.SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
-- DriverStoreLocation : LPCSTR
-- ReturnBuffer : LPSTR out
-- ReturnBufferSize : DWORD
-- RequiredSize : DWORD* optional, out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('SETUPAPI.dll');
const SetupGetInfPublishedNameA = lib.func('__stdcall', 'SetupGetInfPublishedNameA', 'int32_t', ['str', 'char *', 'uint32_t', 'uint32_t *']);
// SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
// DriverStoreLocation : LPCSTR -> 'str'
// ReturnBuffer : LPSTR out -> 'char *'
// ReturnBufferSize : DWORD -> 'uint32_t'
// RequiredSize : DWORD* optional, out -> 'uint32_t *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("SETUPAPI.dll", {
  SetupGetInfPublishedNameA: { parameters: ["buffer", "buffer", "u32", "pointer"], result: "i32" },
});
// lib.symbols.SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize)
// DriverStoreLocation : LPCSTR -> "buffer"
// ReturnBuffer : LPSTR out -> "buffer"
// ReturnBufferSize : DWORD -> "u32"
// RequiredSize : DWORD* optional, out -> "pointer"
// 文字列は "buffer"。ANSI(-A) は new TextEncoder() で UTF-8/ANSI バイト列(末尾に \x00)を渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t SetupGetInfPublishedNameA(
    const char* DriverStoreLocation,
    char* ReturnBuffer,
    uint32_t ReturnBufferSize,
    uint32_t* RequiredSize);
C, "SETUPAPI.dll");
// $ffi->SetupGetInfPublishedNameA(DriverStoreLocation, ReturnBuffer, ReturnBufferSize, RequiredSize);
// DriverStoreLocation : LPCSTR
// ReturnBuffer : LPSTR out
// ReturnBufferSize : DWORD
// RequiredSize : DWORD* optional, out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Setupapi extends StdCallLibrary {
    Setupapi INSTANCE = Native.load("setupapi", Setupapi.class, W32APIOptions.ASCII_OPTIONS);
    boolean SetupGetInfPublishedNameA(
        String DriverStoreLocation,   // LPCSTR
        byte[] ReturnBuffer,   // LPSTR out
        int ReturnBufferSize,   // DWORD
        IntByReference RequiredSize   // DWORD* optional, out
    );
}
@[Link("setupapi")]
lib LibSETUPAPI
  fun SetupGetInfPublishedNameA = SetupGetInfPublishedNameA(
    DriverStoreLocation : UInt8*,   # LPCSTR
    ReturnBuffer : UInt8*,   # LPSTR out
    ReturnBufferSize : UInt32,   # DWORD
    RequiredSize : UInt32*   # DWORD* optional, out
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef SetupGetInfPublishedNameANative = Int32 Function(Pointer<Utf8>, Pointer<Utf8>, Uint32, Pointer<Uint32>);
typedef SetupGetInfPublishedNameADart = int Function(Pointer<Utf8>, Pointer<Utf8>, int, Pointer<Uint32>);
final SetupGetInfPublishedNameA = DynamicLibrary.open('SETUPAPI.dll')
    .lookupFunction<SetupGetInfPublishedNameANative, SetupGetInfPublishedNameADart>('SetupGetInfPublishedNameA');
// DriverStoreLocation : LPCSTR -> Pointer<Utf8>
// ReturnBuffer : LPSTR out -> Pointer<Utf8>
// ReturnBufferSize : DWORD -> Uint32
// RequiredSize : DWORD* optional, out -> Pointer<Uint32>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function SetupGetInfPublishedNameA(
  DriverStoreLocation: PAnsiChar;   // LPCSTR
  ReturnBuffer: PAnsiChar;   // LPSTR out
  ReturnBufferSize: DWORD;   // DWORD
  RequiredSize: Pointer   // DWORD* optional, out
): BOOL; stdcall;
  external 'SETUPAPI.dll' name 'SetupGetInfPublishedNameA';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "SetupGetInfPublishedNameA"
  c_SetupGetInfPublishedNameA :: CString -> CString -> Word32 -> Ptr Word32 -> IO CInt
-- DriverStoreLocation : LPCSTR -> CString
-- ReturnBuffer : LPSTR out -> CString
-- ReturnBufferSize : DWORD -> Word32
-- RequiredSize : DWORD* optional, out -> Ptr Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let setupgetinfpublishednamea =
  foreign "SetupGetInfPublishedNameA"
    (string @-> string @-> uint32_t @-> (ptr uint32_t) @-> returning int32_t)
(* DriverStoreLocation : LPCSTR -> string *)
(* ReturnBuffer : LPSTR out -> string *)
(* ReturnBufferSize : DWORD -> uint32_t *)
(* RequiredSize : DWORD* optional, out -> (ptr uint32_t) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library setupapi (t "SETUPAPI.dll"))
(cffi:use-foreign-library setupapi)

(cffi:defcfun ("SetupGetInfPublishedNameA" setup-get-inf-published-name-a :convention :stdcall) :int32
  (driver-store-location :string)   ; LPCSTR
  (return-buffer :pointer)   ; LPSTR out
  (return-buffer-size :uint32)   ; DWORD
  (required-size :pointer))   ; DWORD* optional, out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $SetupGetInfPublishedNameA = Win32::API::More->new('SETUPAPI',
    'BOOL SetupGetInfPublishedNameA(LPCSTR DriverStoreLocation, LPSTR ReturnBuffer, DWORD ReturnBufferSize, LPVOID RequiredSize)');
# my $ret = $SetupGetInfPublishedNameA->Call($DriverStoreLocation, $ReturnBuffer, $ReturnBufferSize, $RequiredSize);
# DriverStoreLocation : LPCSTR -> LPCSTR
# ReturnBuffer : LPSTR out -> LPSTR
# ReturnBufferSize : DWORD -> DWORD
# RequiredSize : DWORD* optional, out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

文字セット違い
公式の関連項目