次の方法で共有


CreateFile3 関数 (fileapi.h)

ファイルまたは I/O デバイスを作成または開きます。 最も一般的に使用される I/O デバイスは、ファイル、ファイル ストリーム、ディレクトリ、物理ディスク、ボリューム、コンソール バッファー、テープ ドライブ、通信リソース、mailslot、パイプです。 この関数は、ファイルまたはデバイス、および指定されたフラグと属性に応じて、さまざまな種類の I/O のファイルまたはデバイスにアクセスするために使用できるハンドルを返します。

サンドボックス パッケージ アプリから呼び出されると、 CreateFile3 が簡略化されます。 ApplicationData.LocalFolder ディレクトリまたは Package.InstalledLocation ディレクトリ内のファイルまたはディレクトリのみを開くことができます。 名前付きパイプやメールスロットを開いたり、暗号化されたファイル (FILE_ATTRIBUTE_ENCRYPTED) を作成したりすることはできません。

 ここでは、リソース パッケージなど、パッケージ グラフ内の追加パッケージではなく、アプリのローカル フォルダーとパッケージのインストール場所を参照します。 CreateFile3 では、パッケージ グラフ内の追加パッケージでファイルを開く機能はサポートされていません。 この操作をトランザクション操作として実行し、トランザクション I/O に使用できるハンドルを作成するには、 CreateFileTransacted 関数を使用します。

構文

HANDLE CreateFile3(
  LPCWSTR                           lpFileName,
  DWORD                             dwDesiredAccess,
  DWORD                             dwShareMode,
  DWORD                             dwCreationDisposition,
  LPCREATEFILE3_EXTENDED_PARAMETERS pCreateExParams
);

パラメーター

lpFileName

作成または開くファイルまたはデバイスの名前。

特殊なデバイス名については、「 MS-DOS デバイス名の定義」を参照してください。

ファイル ストリームを作成するには、ファイルの名前、コロン、ストリームの名前を指定します。 詳細については、「 ファイル ストリーム」を参照してください。

ヒント

 事前に "\?" を指定せずに 、MAX_PATH 制限を削除するようにオプトインできます。 詳細については、「 ファイル、パス、および名前空間の名前付け 」の「パスの最大長制限」セクションを参照してください。

dwDesiredAccess

ファイルまたはデバイスへの要求されたアクセス。読み取り、書き込み、両方、またはゼロとして要約できます。

最も一般的に使用される値は、 GENERIC_READGENERIC_WRITE、またはその両方 (GENERIC_READ | GENERIC_WRITE) です。 詳細については、「 汎用アクセス権ファイル セキュリティとアクセス権ファイル アクセス権定数およびACCESS_MASK」を参照してください。

このパラメーターが 0 の場合、アプリケーションは、ファイル、ディレクトリ、デバイス属性などの特定のメタデータに対してクエリを実行できます。そのファイルやデバイスにアクセスしなくても、 GENERIC_READ アクセスが拒否された場合でも同様です。

既に開いているハンドルを持つオープン要求で dwShareMode パラメーターで指定された共有モードと競合するアクセス モードを要求することはできません。

詳細については、このトピックの 「解説 」セクションおよび 「ファイルの作成と開く」を参照してください。

dwShareMode

ファイルまたはデバイスの要求された共有モード。読み取り、書き込み、両方、削除、これらすべて、またはなしを指定できます (次の表を参照)。 属性または拡張属性へのアクセス要求は、このフラグの影響を受けません。

このパラメーターが 0 で 、CreateFile3 が成功した場合、ファイルまたはデバイスを共有することはできず、ファイルまたはデバイスへのハンドルが閉じられるまで、もう一度開くことはできません。 詳細については、「解説」を参照してください。

開いているハンドルを持つ既存の要求で指定されているアクセス モードと競合する共有モードを要求することはできません。 CreateFile3 は失敗し、 GetLastError 関数は ERROR_SHARING_VIOLATIONを返します。

別のプロセスがファイルまたはデバイスを開いている間にプロセスでファイルまたはデバイスを共有できるようにするには、次の値の 1 つ以上の互換性のある組み合わせを使用します。 このパラメーターと dwDesiredAccess パラメーターの有効な組み合わせの詳細については、「 ファイルの作成と開く」を参照してください。

 開いている各ハンドルの共有オプションは、プロセス コンテキストに関係なく、そのハンドルが閉じられるまで有効です。

価値 意味
0
0x00000000
他のプロセスが削除、読み取り、または書き込みアクセスを要求した場合に、他のプロセスがファイルまたはデバイスを開かないようにします。 ファイルまたはディレクトリへの排他アクセス権は、アプリケーションがファイルへの書き込みアクセス権を持っている場合にのみ付与されます。
FILE_SHARE_DELETE
0x00000004
ファイルまたはデバイスに対する後続のオープン操作で、削除アクセスを要求できるようにします。 それ以外の場合、削除アクセスを要求した場合、他のプロセスはファイルまたはデバイスを開くことができません。 このフラグが指定されていないが、ファイルまたはデバイスが削除アクセスのために開かれている場合、関数は失敗します。

手記: 削除アクセスでは、削除操作と名前変更操作の両方が許可されます。
FILE_SHARE_READ
0x00000001
ファイルまたはデバイスに対する後続のオープン操作で読み取りアクセスを要求できるようにします。 それ以外の場合、他のプロセスが読み取りアクセスを要求した場合、ファイルまたはデバイスを開くことができません。 このフラグが指定されていないが、ファイルまたはデバイスが読み取りアクセスのために開かれている場合、関数は失敗します。 ファイルまたはディレクトリを開き、このフラグを指定せず、呼び出し元がファイルまたはディレクトリへの書き込みアクセス権を持っていない場合、関数は失敗します。
FILE_SHARE_WRITE
0x00000002
ファイルまたはデバイスに対する後続のオープン操作で書き込みアクセスを要求できるようにします。 それ以外の場合、書き込みアクセスを要求した場合、他のプロセスはファイルまたはデバイスを開くことができません。 このフラグが指定されていないが、ファイルまたはデバイスが書き込みアクセスのために開かれているか、書き込みアクセス権を持つファイル マッピングがある場合、関数は失敗します。

dwCreationDisposition

存在する、または存在しないファイルまたはデバイスに対して実行するアクション。

ファイル以外のデバイスの場合、通常、このパラメーターは OPEN_EXISTING に設定されます。

詳細については、「解説」を参照してください。

このパラメーターは、組み合わせることができない次のいずれかの値である必要があります。

価値 意味
CREATE_ALWAYS
2
常に新しいファイルを作成します。 指定したファイルが存在し、書き込み可能な場合、関数はファイルを切り捨て、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。 指定したファイルが存在せず、有効なパスである場合は、新しいファイルが作成され、関数が成功し、最後のエラー コードが 0 に設定されます。 詳細については、このトピックの 「解説 」セクションを参照してください。
CREATE_NEW
1
まだ存在しない場合にのみ、新しいファイルを作成します。 指定したファイルが存在する場合、関数は失敗し、最後のエラー コードは ERROR_FILE_EXISTS (80) に設定されます。 指定したファイルが存在せず、書き込み可能な場所への有効なパスである場合は、新しいファイルが作成されます。
OPEN_ALWAYS
4
常にファイルを開きます。 指定したファイルが存在する場合、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。 指定したファイルが存在せず、書き込み可能な場所への有効なパスである場合、関数はファイルを作成し、最後のエラー コードを 0 に設定します。
OPEN_EXISTING
3
ファイルまたはデバイスが存在する場合にのみ開きます。 指定したファイルまたはデバイスが存在しない場合、関数は失敗し、最後のエラー コードは ERROR_FILE_NOT_FOUND (2) に設定されます。 デバイスの詳細については、「解説」セクション 参照してください。
TRUNCATE_EXISTING
5
ファイルを開き、サイズが 0 バイトになるように切り捨てます(存在する場合のみ)。 指定したファイルが存在しない場合、関数は失敗し、最後のエラー コードは ERROR_FILE_NOT_FOUND (2) に設定されます。 呼び出し元のプロセスでは、dwDesiredAccess パラメーターの一部としてGENERIC_WRITE ビットが設定されたファイルを開く必要があります。

pCreateExParams

省略可能な CREATEFILE3_EXTENDED_PARAMETERS 構造体へのポインター。

戻り値

関数が成功した場合、戻り値は、指定されたファイル、デバイス、名前付きパイプ、またはメール スロットへの開いているハンドルです。

関数が失敗した場合、戻り値は INVALID_HANDLE_VALUE。 拡張エラー情報を取得するには、GetLastError呼び出します。 考えられるエラーは次のとおりです。

リターン コード 説明
ERROR_PATH_REDIRECTED lpFileName は、再解析ポイントまたはシンボリック リンクによってリダイレクトされました。

注釈

CreateFile3 は、1 つの例外を除き、 CreateFile2 とまったく同じように動作します。 lpFileName が再解析ポイントまたはシンボリック リンクを介してリダイレクトされた場合、操作は失敗します。 この動作は、 dwFileFlags に追加できる新しいフラグを使用して無効にすることができます。

CreateFile3 関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNT マクロを 0x0602 以降として定義します。 詳細については、「Windows ヘッダーの使用」を参照してください。

CreateFile3 では、Windows 開発者が使用できるファイル操作やその他のほとんどの種類の I/O デバイスとメカニズムがサポートされています。 このセクションでは、さまざまなコンテキストやさまざまな I/O の種類で CreateFile3 を 使用する場合に開発者が経験する可能性があるさまざまな問題について説明します。 テキストは、ファイル システム上の実際の ファイル に格納されているデータを特に参照する場合にのみ、ワード ファイルの使用を試みます。 ただし、ファイルの一部の使用は、 ファイル のようなメカニズムをサポートする I/O オブジェクトをより一般的に参照している可能性があります。 この用語 ファイル のリベラルな使用は、前述の歴史的な理由から、定数名とパラメーター名で特に一般的です。

CreateFile3 によって返されるオブジェクト ハンドルを使用してアプリケーションが終了したら、CloseHandle 関数を使用してハンドルを閉じます。 これにより、システム リソースが解放されるだけでなく、ファイルやデバイスの共有やディスクへのデータのコミットなどに大きな影響を与える可能性があります。 詳細については、このトピック内で適宜説明します。

NTFS ファイル システムなどの一部のファイル システムでは、個々のファイルとディレクトリの圧縮または暗号化がサポートされています。 このサポートを持つマウントされたファイル システムを持つボリュームでは、新しいファイルは、そのディレクトリの圧縮属性と暗号化属性を継承します。

CreateFile3 を使用して、ファイルまたはディレクトリの圧縮、展開、または復号化を制御することはできません。 詳細については、「 ファイルの作成と開きファイルの圧縮と圧縮解除、および ファイル暗号化」を参照してください。

pCreateExParams パラメーターで渡されるCREATEFILE3_EXTENDED_PARAMETERS構造体の lpSecurityAttributes メンバーがNULL場合、CreateFile3 によって返されるハンドルは、アプリケーションで作成できる子プロセスによって継承できません。 このメンバーに関する次の情報も適用されます。

  • bInheritHandle メンバー変数が 0 以外の値であるFALSEされていない場合は、ハンドルを継承できます。 そのため、ハンドルを継承可能にしない場合は、この構造体メンバーを FALSE に適切に初期化することが重要です。
  • ファイルまたはディレクトリの既定のセキュリティ記述子のアクセス制御リスト (ACL) は、親ディレクトリから継承されます。
  • ターゲット ファイル システムは、 lpSecurityDescriptor メンバーがそれらに影響を与えるために、ファイルとディレクトリのセキュリティをサポートする必要があります。これは 、GetVolumeInformation を使用して決定できます。

Windows 8 および Windows Server 2012 では、この関数は次のテクノロジでサポートされています。

テクノロジー サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル イエス
SMB 3.0 透過的フェールオーバー (TFO) いいえ
SMB 3.0 とスケールアウト ファイル共有 (SO) いいえ
クラスター共有ボリューム ファイル システム (CsvFS) イエス
回復性のあるファイル システム (ReFS) イエス

この関数の呼び出しによってファイルが作成された場合、動作に変更はありません。 また、pCreateExParams パラメーターで渡されるCREATEFILE3_EXTENDED_PARAMETERS構造体の dwFileFlags メンバーのFILE_FLAG_OPEN_REPARSE_POINT フラグに関する次の情報を考慮してください。

  • FILE_FLAG_OPEN_REPARSE_POINTが指定されている場合:
    • 既存のファイルが開き、シンボリック リンクである場合、返されるハンドルはシンボリック リンクへのハンドルです。
    • TRUNCATE_EXISTINGまたはFILE_FLAG_DELETE_ON_CLOSEが指定されている場合、影響を受けるファイルはシンボリック リンクです。
  • FILE_FLAG_OPEN_REPARSE_POINTが指定されていない場合:
    • 既存のファイルが開き、それがシンボリック リンクである場合、返されるハンドルはターゲットへのハンドルです。
    • CREATE_ALWAYSTRUNCATE_EXISTING、または FILE_FLAG_DELETE_ON_CLOSE が指定されている場合、影響を受けるファイルがターゲットです。

ファイル

ファイルの名前を変更または削除し、その後すぐに復元すると、システムはキャッシュで復元するファイル情報を検索します。 キャッシュされた情報には、短い名前と長い名前のペアと作成時間が含まれます。

DeleteFile または DeleteFile2 の以前の呼び出しの結果として削除が保留中のファイルに対して CreateFile3 を呼び出すと、関数は失敗します。 オペレーティング システムは、ファイルに対するすべてのハンドルが閉じられるまで、ファイルの削除を遅延します。 GetLastError はERROR_ACCESS_DENIEDを返します。

dwDesiredAccess パラメーターは 0 にすることができ、アプリケーションが適切なセキュリティ設定で実行されている場合、アプリケーションはファイルにアクセスせずにファイル属性を照会できます。 これは、読み取り/書き込みアクセスのためにファイルを開かずにファイルの存在をテストしたり、ファイルまたはディレクトリに関するその他の統計情報を取得したりする場合に便利です。 「ファイル情報の取得と設定」と「GetFileInformationByHandle」を参照してください。

アプリケーションがネットワーク経由でファイルを作成する場合は、GENERIC_WRITEのみを使用するよりも dwDesiredAccessGENERIC_READ | GENERIC_WRITEを使用することをお勧めします。 リダイレクターはキャッシュ マネージャーを使用でき、送信するデータの数が少ない SMB を減らすことができるため、結果のコードは高速になります。 この組み合わせにより、ネットワーク経由でファイルに書き込むときにERROR_ACCESS_DENIEDが返される場合がある問題も回避 できます

詳細については、「ファイルの作成と開く」を参照してください。

ファイル ストリーム

NTFS ファイル システムでは、 CreateFile3 を使用してファイル内に個別のストリームを作成できます。 詳細については、「 ファイル ストリーム」を参照してください。

ディレクトリ

アプリケーションは CreateFile3 を使用してディレクトリを作成できないため、このユース ケースでは 、OPEN_EXISTING 値のみが dwCreationDisposition に対して有効です。 ディレクトリを作成するには、アプリケーションで CreateDirectory、CreateDirectoryEx、または CreateDirectory2 を呼び出す必要があります。

CreateFile3 を使用してディレクトリを開くには、pCreateExParams パラメーターで渡されるCREATEFILE3_EXTENDED_PARAMETERS構造体の dwFileFlags メンバーの一部として、FILE_FLAG_BACKUP_SEMANTICS フラグを指定します。 このフラグが SE_BACKUP_NAME および SE_RESTORE_NAME 特権なしで使用されている場合は、適切なセキュリティ チェックが引き続き適用されます。

FAT または FAT32 ファイル システム ボリュームの最適化中に CreateFile3 を使用してディレクトリを開く場合は、 MAXIMUM_ALLOWED アクセス権を指定しないでください。 この操作を行うと、ディレクトリへのアクセスが拒否されます。 代わりに 、GENERIC_READ アクセス権を指定します。

詳細については、「 ディレクトリ管理について」を参照してください。

物理ディスクとボリューム

ディスクまたはボリュームへの直接アクセスは制限されます。

CreateFile3 関数を使用すると、物理ディスク ドライブまたはボリュームを開くことができます。このボリュームは、DeviceIoControl 関数で使用できる直接アクセス ストレージ デバイス (BLOB) ハンドルを返します。 これにより、パーティション テーブルなどのディスク メタデータなど、ディスクまたはボリュームに直接アクセスできます。 ただし、この種類のアクセスでは、ディスク ドライブまたはボリュームのデータ損失の可能性もあります。このメカニズムを使用したディスクへの書き込みが正しくないと、その内容がオペレーティング システムからアクセスできなくなる可能性があるためです。 データの整合性を確保するには、 DeviceIoControl と、ファイル システム ハンドルではなく直接アクセス ハンドルを使用して他の API の動作が異なる方法を理解していることを確認してください。

このような呼び出しを成功させるには、次の要件を満たす必要があります。

  • 呼び出し元には管理者特権が必要です。 詳細については、「特別な特権を使用した実行 」を参照してください。
  • dwCreationDisposition パラメーターには、OPEN_EXISTING フラグが必要です。
  • ボリュームまたはフロッピー ディスクを開く場合、 dwShareMode パラメーターには FILE_SHARE_WRITE フラグが必要です。

  dwDesiredAccess パラメーターは 0 にすることができ、アプリケーションはデバイスにアクセスせずにデバイス属性を照会できます。 これは、たとえば、フロッピー ディスク ドライブのサイズと、ドライブにフロッピー ディスクを必要とせずにサポートする形式を決定するアプリケーションに役立ちます。 また、上位レベルのデータの読み取り/書き込みアクセス許可を必要とせずに統計を読み取る場合にも使用できます。

物理ドライブ x: を開くと、 lpFileName 文字列は "\.\PhysicalDriveX" の形式になります。

ハード ディスク番号は 0 から始まります。 次の表に、物理ドライブ文字列の例をいくつか示します。

意味
"\.\PhysicalDrive0" 最初の物理ドライブを開きます。
"\.\PhysicalDrive2" 3 番目の物理ドライブを開きます。

ボリュームの物理ドライブ識別子を取得するには、ボリュームのハンドルを開き、IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTSを使用して DeviceIoControl 関数を呼び出します。 この制御コードは、ボリュームの 1 つ以上のエクステントごとにディスク番号とオフセットを返します。ボリュームは複数の物理ディスクにまたがる場合があります。

物理ドライブを開く例については、「 DeviceIoControl の呼び出し」を参照してください。

ボリュームまたはリムーバブル メディア ドライブ (フロッピー ディスク ドライブやフラッシュ メモリサム ドライブなど) を開く場合、 lpFileName 文字列は "\\.\X:" という形式にする必要があります。 ドライブのルート ディレクトリを示す末尾の円記号 (\) は使用しないでください。

ドライブ文字列の例を次の表に示します。

意味
"\.\A:" フロッピー ディスク ドライブ A を開きます。
"\.\C:" C: ボリュームを開きます。
"\.\C:" C: ボリュームのファイル システムを開きます。

ボリューム名を参照してボリュームを開くこともできます。 詳細については、「 ボリュームの名前付け」を参照してください。

ボリュームには、1 つ以上のマウントされたファイル システムが含まれています。 ボリューム ハンドルは、 CreateFile3 でキャッシュされていないオプションが指定されていない場合でも、特定のファイル システムの判断でキャッシュされていないものとして開くことができます。 すべての Microsoft ファイル システムがボリューム ハンドルをキャッシュされていないものとして開くと想定する必要があります。 ファイルのキャッシュされていない I/O に対する制限もボリュームに適用されます。

ファイル システムでは、データがキャッシュされていない場合でも、バッファーの配置が必要な場合と必要ない場合があります。 ただし、ボリュームを開くときにキャッシュされていないオプションが指定されている場合は、ボリューム上のファイル システムに関係なく、バッファーの配置が適用されます。 ボリューム ハンドルをキャッシュなしとして開き、キャッシュされていない I/O 制限に従うすべてのファイル システムで推奨されます。

 ボリュームの最後のいくつかのセクターの読み取りまたは書き込みを行うには、 DeviceIoControl を呼び出し、 FSCTL_ALLOW_EXTENDED_DASD_IOを指定する必要があります。 これにより、パーティションの読み取りまたは書き込みの呼び出しで I/O 境界チェックを実行しないようにファイル システム ドライバーが通知されます。 代わりに、境界チェックはデバイス ドライバーによって実行されます。

チェンジャー デバイス

DeviceIoControlIOCTL_CHANGER_* コントロール コードは、チェンジャー デバイスへのハンドルを受け入れます。 チェンジャー デバイスを開くには、"\.\Changerx" という形式のファイル名を使用します。 ここで、x は、開くデバイスを示す数値で、ゼロから始まります。 C または C++ で記述されたアプリケーションで changer デバイス 0 を開くには、"\\.\Changer0" というファイル名を使用します。

テープ ドライブ

テープ ドライブを開くには、"\.\TAPEx" という形式のファイル名を使用します。 ここで、x は、テープ ドライブ 0 から始まる、開くドライブを示す番号です。 C または C++ で記述されたアプリケーションでテープ ドライブ 0 を開くには、"\\.\TAPE0" というファイル名を使用します。

詳細については、「バックアップ」を参照してください。

通信リソース

CreateFile3 関数は、シリアル ポート COM1 などの通信リソースへのハンドルを作成できます。 通信リソースの場合、 dwCreationDisposition パラメーターは OPEN_EXISTINGする必要があります。 dwShareMode パラメーターは 0 (排他アクセス) にする必要があり、 hTemplateFile パラメーターは NULLする必要があります。 読み取り、書き込み、または読み取り/書き込みアクセスを指定でき、重複する I/O に対してハンドルを開くことができます。

9 より大きい COM ポート番号を指定するには、"\.\COM10" という構文を使用します。 この構文は、COM ポート番号を指定できるすべてのポート番号とハードウェアに対して機能します。

通信の詳細については、「 通信」を参照してください。

コンソール

CreateFile3 関数は、コンソール入力 (CONIN$) へのハンドルを作成できます。 継承または重複の結果としてプロセスに開いているハンドルがある場合は、アクティブな画面バッファー (CONOUT$) へのハンドルを作成することもできます。 呼び出し元のプロセスは、継承されたコンソールまたは AllocConsole 関数によって割り当てられたコンソールにアタッチされている必要があります。

コンソール ハンドルの場合は、 CreateFile3 パラメーターを次のように設定します。

パラメーター 価値
lpFileName CONIN$ 値を使用してコンソール入力を指定します。

CONOUT$ 値を使用してコンソール出力を指定します。

CONIN$ は、 SetStdHandle 関数が標準入力ハンドルをリダイレクトした場合でも、コンソール入力バッファーへのハンドルを取得します。 標準入力ハンドルを取得するには、 GetStdHandle 関数を使用します。

CONOUT$ は、 SetStdHandle が標準出力ハンドルをリダイレクトした場合でも、アクティブな画面バッファーにハンドルを取得します。 標準出力ハンドルを取得するには、 GetStdHandle を使用します。
dwDesiredAccess GENERIC_READ \| GENERIC_WRITE が推奨されますが、どちらか一方がアクセスを制限できます。
dwShareMode CONIN$ を開く場合は、FILE_SHARE_READを指定 します。 CONOUT$ を開く場合は、FILE_SHARE_WRITEを指定 します

呼び出し元のプロセスがコンソールを継承する場合、または子プロセスがコンソールにアクセスできる必要がある場合は、このパラメーターを FILE_SHARE_READ \| FILE_SHARE_WRITEする必要があります。
dwCreationDisposition CreateFile3 を使用してコンソールを開く場合は、OPEN_EXISTINGを指定する必要があります。

pCreateExParams パラメーターで渡されるCREATEFILE3_EXTENDED_PARAMETERS構造体のメンバーを次のように設定します。

メンバー 価値
lpSecurityAttributes 本体を継承する場合は、SECURITY_ATTRIBUTES構造体の bInheritHandle メンバーをTRUEする必要があります。
dwFileAttributes
dwFileFlags
dwSecurityQosFlags
hTemplateFile
無視。

次の表は、 dwDesiredAccesslpFileName のさまざまな設定を示しています。

lpFileName dwDesiredAccess 結果
"CON" GENERIC_READ 入力用のコンソールを開きます。
"CON" GENERIC_WRITE 出力用のコンソールを開きます。
"CON" GENERIC_READ \| GENERIC_WRITE CreateFile3 が失敗します。GetLastError はERROR_FILE_NOT_FOUNDを返します。

Mailslots

CreateFile3 が mailslot のクライアント側を開いた場合、mailslot サーバーが CreateMailSlot 関数を使用して作成する前に、mailslot クライアントがローカル mailslot を開こうとした場合、この関数はINVALID_HANDLE_VALUEを返します。

詳細については、「Mailslots」を参照してください。

パイプ

CreateFile3 が名前付きパイプのクライアント側を開いた場合、関数はリッスン状態にある名前付きパイプのインスタンスを使用します。 開始プロセスは必要な回数ハンドルを複製できますが、開いた後、名前付きパイプ インスタンスを別のクライアントが開くことはできません。 パイプを開くときに指定するアクセスは、CreateNamedPipe 関数の dwOpenMode パラメーターで指定されたアクセスと互換性がある必要があります。

この操作の前 にサーバーで CreateNamedPipe 関数が正常に呼び出されなかった場合、パイプは存在せず、 CreateFile3ERROR_FILE_NOT_FOUNDで失敗します。

アクティブなパイプ インスタンスが少なくとも 1 つ存在するが、サーバー上に使用可能なリスナー パイプがない場合(つまり、すべてのパイプ インスタンスが現在接続されていることを意味します)、 CreateFile3ERROR_PIPE_BUSYで失敗します。

詳細については、「パイプ」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 11 24H2 [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2025 [デスクトップ アプリ |UWP アプリ]
ヘッダー fileapi.h (Windows.h を含む)
図書館 Kernel32.lib
DLL Kernel32.dll

こちらもご覧ください

CreateDirectory2

DeleteFile2

RemoveDirectory2