Win32 API 日本語リファレンス
ホームStorage.FileSystem › CREATEFILE2_EXTENDED_PARAMETERS

CREATEFILE2_EXTENDED_PARAMETERS

構造体
サイズx64: 32 バイト / x86: 24 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0この構造体のサイズ (sizeof(CREATEFILE2_EXTENDED_PARAMETERS)) を格納します。
dwFileAttributesDWORD4+4+4

ファイルまたはデバイスの属性とフラグです。ファイルでは FILE_ATTRIBUTE_NORMAL が最も一般的な既定値です。

このパラメーターには、利用可能なファイル属性 (FILE_ATTRIBUTE_*) の任意の組み合わせを指定できます。他のファイル属性を指定すると、FILE_ATTRIBUTE_NORMAL は上書きされます。

メモ

CreateFile2 が既存のファイルを開く場合、通常はファイルフラグと既存ファイルのファイル属性が組み合わされ、dwFlagsAndAttributes の一部として指定されたファイル属性は無視されます。特殊なケースについては、ファイルの作成と開く操作 で詳しく説明されています。

以下のファイル属性とフラグの一部は、ファイルにのみ適用され、CreateFile2 が開くことのできる他のすべての種類のデバイスに必ずしも適用されるとは限りません。詳細については、CreateFile2 リファレンスページの 解説 セクションおよび ファイルの作成と開く操作 を参照してください。

ファイル属性へのより高度なアクセスについては、SetFileAttributes を参照してください。すべてのファイル属性の値と説明の完全な一覧については、ファイル属性定数 を参照してください。

属性 意味
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
ファイルはアーカイブされる必要があります。アプリケーションはこの属性を使用して、バックアップまたは削除の対象となるファイルをマークします。
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
ファイルまたはディレクトリが暗号化されています。ファイルの場合、そのファイル内のすべてのデータが暗号化されていることを意味します。ディレクトリの場合、新しく作成されるファイルとサブディレクトリでは暗号化が既定になることを意味します。詳細については、ファイルの暗号化 を参照してください。

FILE_ATTRIBUTE_SYSTEM も指定されている場合、このフラグは効果を持ちません。

このフラグは、Windows の Home、Home Premium、Starter、または ARM の各エディションではサポートされません。

このフラグは、Windows ストアアプリから呼び出された場合はサポートされません。

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
ファイルは隠しファイルです。通常のディレクトリ一覧には含めないでください。
FILE_ATTRIBUTE_INTEGRITY_STREAM
32768 (0x8000)
整合性が構成されたファイルまたはディレクトリです。ファイルの場合、そのファイル内のすべてのデータストリームに整合性が設定されます。ディレクトリの場合、呼び出し元が別途指定しない限り、新しく作成されるファイルとサブディレクトリでは整合性が既定になります。

このフラグは ReFS ファイルシステムでのみサポートされます。

FILE_ATTRIBUTE_NORMAL
128 (0x80)
ファイルに他の属性が設定されていません。この属性は単独で使用する場合にのみ有効です。
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
ファイルのデータをすぐには利用できません。この属性は、ファイルのデータが物理的にオフライン記憶域へ移動されたことを示します。この属性は、階層記憶域管理ソフトウェアであるリモート記憶域によって使用されます。アプリケーションはこの属性を勝手に変更しないでください。
FILE_ATTRIBUTE_READONLY
1 (0x1)
ファイルは読み取り専用です。アプリケーションはファイルを読み取ることはできますが、書き込みや削除はできません。
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
ファイルはオペレーティングシステムの一部であるか、オペレーティングシステムによって排他的に使用されます。
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
ファイルは一時的な記憶域として使用されています。

詳細については、このトピックの キャッシュの動作 セクションを参照してください。

dwFileFlagsDWORD4+8+8

このパラメーターには、ファイルまたはデバイスのキャッシュ動作、アクセスモード、その他の特殊な目的を制御するためのフラグ (FILE_FLAG_*) の組み合わせを指定できます。

フラグ 意味
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
バックアップまたは復元の操作のためにファイルを開く、または作成しています。呼び出し元プロセスが SE_BACKUP_NAME 特権と SE_RESTORE_NAME 特権を持つ場合、システムはそのプロセスがファイルのセキュリティチェックを上書きすることを保証します。詳細については、トークン内の特権の変更 を参照してください。

ディレクトリのハンドルを取得するには、このフラグを設定する必要があります。ディレクトリハンドルは、一部の関数でファイルハンドルの代わりに渡すことができます。詳細については、解説セクションを参照してください。

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
指定したハンドルおよび他の開いているハンドルや複製されたハンドルを含め、そのファイルのすべてのハンドルが閉じられた直後に、ファイルが削除されます。

そのファイルに対して既に開いているハンドルがある場合、それらがすべて FILE_SHARE_DELETE 共有モードで開かれていない限り、呼び出しは失敗します。

以降のそのファイルに対するオープン要求は、FILE_SHARE_DELETE 共有モードが指定されていない限り失敗します。

FILE_FLAG_IGNORE_IMPERSONATED_DEVICEMAP
0x00020000
デバイスマップは、DOS デバイス名とシステム内のデバイスとの対応付けであり、DOS 名を解決する際に使用されます。デバイスマップはシステム内のユーザーごとに個別に存在し、ユーザーは自身のデバイスマップを管理できます。通常、偽装中は偽装されたユーザーのデバイスマップが使用されます。ただし、このフラグが設定されている場合は、代わりにプロセスのユーザーのデバイスマップが使用されます。
FILE_FLAG_NO_BUFFERING
0x20000000
データの読み取りと書き込みに対してシステムのキャッシュを使用せずに、ファイルまたはデバイスを開きます。このフラグは、ハードディスクのキャッシュやメモリマップトファイルには影響しません。

FILE_FLAG_NO_BUFFERING フラグを使用して CreateFile2 で開いたファイルを正しく扱うには厳密な要件があります。詳細については、ファイルのバッファリング を参照してください。

FILE_FLAG_OPEN_NO_RECALL
0x00100000
ファイルのデータは要求されますが、そのデータはリモート記憶域に置かれたままにする必要があります。ローカル記憶域へ戻すべきではありません。このフラグはリモート記憶域システムで使用します。
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
通常の 再解析ポイント の処理は行われません。CreateFile2 は再解析ポイント自体を開こうとします。ファイルが開かれると、再解析ポイントを制御するフィルターが動作しているかどうかにかかわらず、ファイルハンドルが返されます。

このフラグは CREATE_ALWAYS フラグと併用できません。

ファイルが再解析ポイントでない場合、このフラグは無視されます。

詳細については、解説セクションを参照してください。

FILE_FLAG_OPEN_REQUIRING_OPLOCK
0x00040000
ファイルを開く操作と、そのファイルに対する便宜的ロック (oplock) の要求を、単一のアトミックな操作として行います。ファイルシステムは作成操作を実行する前に oplock を確認し、既存の oplock を解除することになる場合は、最終エラーコード ERROR_CANNOT_BREAK_OPLOCK で作成を失敗させます。

このフラグを使用して CreateFile2 関数の呼び出しが成功した場合は、新しいファイルハンドルに対して DeviceIoControlFSCTL_REQUEST_OPLOCK またはその他の 便宜的ロック操作 とともに呼び出して、そのファイルに対する oplock を要求してください。oplock を要求する前にファイルに対して他のファイルシステム操作を実行すると、デッドロックが発生する可能性があります。特に、GetFileAttributes のようにハンドルではなくファイル名を受け取るファイルシステム API を呼び出した場合、デッドロックが発生しやすくなります。

注: 先に oplock を要求しなくても、そのファイルハンドルに対して CloseHandle 関数を安全に呼び出すことができます。

FILE_FLAG_OVERLAPPED
0x40000000
非同期 I/O のためにファイルまたはデバイスを開く、または作成しています。

このハンドルに対する以降の I/O 操作が完了すると、OVERLAPPED 構造体で指定されたイベントがシグナル状態に設定されます。

このフラグを指定した場合、ファイルを読み取りと書き込みで同時に使用できます。

このフラグを指定しない場合、読み取り関数や書き込み関数の呼び出しで OVERLAPPED 構造体を指定していても、I/O 操作は順次実行されます。

このフラグを指定して作成したファイルハンドルを使用する際の考慮事項については、このトピックの 同期および非同期 I/O ハンドル セクションを参照してください。

FILE_FLAG_POSIX_SEMANTICS
0x01000000
アクセスは POSIX の規則に従って行われます。これには、そのような名前付けをサポートするファイルシステムにおいて、大文字と小文字だけが異なる名前を持つ複数のファイルを許可することが含まれます。このフラグを指定して作成したファイルは、MS-DOS または 16 ビット Windows 向けに作成されたアプリケーションからアクセスできない場合があるため、このオプションの使用には注意してください。
FILE_FLAG_RANDOM_ACCESS
0x10000000
ランダムアクセスを想定しています。システムはこれをヒントとして、ファイルのキャッシュを最適化できます。

ファイルシステムがキャッシュされた I/O と FILE_FLAG_NO_BUFFERING をサポートしていない場合、このフラグは効果を持ちません。

詳細については、このトピックの キャッシュの動作 セクションを参照してください。

FILE_FLAG_SESSION_AWARE
0x00800000
セッションを認識した状態でファイルまたはデバイスを開きます。このフラグを指定しない場合、セッションごとのデバイス (RemoteFX USB リダイレクトを使用するデバイスなど) は、セッション 0 で実行されているプロセスから開くことができません。このフラグは、セッション 0 以外の呼び出し元には効果を持ちません。このフラグは Windows のサーバーエディションでのみサポートされます。

Windows Server 2008 R2 および Windows Server 2008: このフラグは Windows Server 2012 より前ではサポートされません。

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
先頭から末尾への順次アクセスを想定しています。システムはこれをヒントとして、ファイルのキャッシュを最適化できます。

後方読み取り (つまり後方へのスキャン) を行う場合は、このフラグを使用しないでください。

ファイルシステムがキャッシュされた I/O と FILE_FLAG_NO_BUFFERING をサポートしていない場合、このフラグは効果を持ちません。

詳細については、このトピックの キャッシュの動作 セクションを参照してください。

FILE_FLAG_WRITE_THROUGH
0x80000000
書き込み操作は中間のキャッシュを経由せず、直接ディスクへ書き込まれます。

詳細については、このトピックの キャッシュの動作 セクションを参照してください。

dwSecurityQosFlagsDWORD4+12+12

dwSecurityQosFlags パラメーターは SQOS 情報を指定します。詳細については、偽装レベル を参照してください。

セキュリティフラグ 意味
SECURITY_ANONYMOUS
匿名 (Anonymous) の偽装レベルでクライアントを偽装します。
SECURITY_CONTEXT_TRACKING
セキュリティ追跡モードは動的です。このフラグを指定しない場合、セキュリティ追跡モードは静的です。
SECURITY_DELEGATION
委任 (Delegation) の偽装レベルでクライアントを偽装します。
SECURITY_EFFECTIVE_ONLY
クライアントのセキュリティコンテキストのうち、有効になっている部分のみがサーバーで利用できます。このフラグを指定しない場合、クライアントのセキュリティコンテキストのすべての側面が利用できます。

これにより、クライアントは、サーバーが自分を偽装している間に使用できるグループと特権を制限できます。

SECURITY_IDENTIFICATION
識別 (Identification) の偽装レベルでクライアントを偽装します。
SECURITY_IMPERSONATION
偽装 (Impersonation) レベルでクライアントを偽装します。他のフラグを指定しない場合の既定の動作です。
lpSecurityAttributesSECURITY_ATTRIBUTES*8/4+16+16

SECURITY_ATTRIBUTES 構造体へのポインターです。この構造体には、独立しているものの互いに関連する 2 つのデータメンバー、すなわち省略可能なセキュリティ記述子と、返されたハンドルを子プロセスが継承できるかどうかを決定するブール値が含まれます。

このパラメーターには NULL を指定できます。

このパラメーターが NULL の場合、CreateFile2 が返すハンドルは、アプリケーションが作成する子プロセスに継承されず、返されたハンドルに関連付けられたファイルまたはデバイスには既定のセキュリティ記述子が割り当てられます。

構造体の lpSecurityDescriptor メンバーは、ファイルまたはデバイスの SECURITY_DESCRIPTOR を指定します。このメンバーが NULL の場合、返されたハンドルに関連付けられたファイルまたはデバイスには既定のセキュリティ記述子が割り当てられます。

CreateFile2 は、既存のファイルまたはデバイスを開くときには lpSecurityDescriptor メンバーを無視しますが、bInheritHandle メンバーは引き続き使用します。

構造体の bInheritHandle メンバーは、返されたハンドルを継承できるかどうかを指定します。

詳細については、CreateFile2 のトピックの解説セクションを参照してください。

hTemplateFileHANDLE8/4+24+20

GENERIC_READ アクセス権を持つテンプレートファイルへの有効なハンドルです。テンプレートファイルは、作成されるファイルにファイル属性と拡張属性を提供します。

このパラメーターには NULL を指定できます。

既存のファイルを開く場合、CreateFile2 はこのパラメーターを無視します。

新しい暗号化ファイルを開く場合、そのファイルは親ディレクトリから随意アクセス制御リストを継承します。詳細については、ファイルの暗号化 を参照してください。

公式ドキュメント

CreateFile2 用の省略可能な拡張パラメーターを格納します。

解説(Remarks)

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

キャッシュの動作

dwFileFlags メンバーに指定できる値のうちいくつかは、ハンドルに関連付けられたデータをシステムがどのようにキャッシュするかを制御したり、それに影響を与えたりするために使用されます。次のとおりです。

これらのフラグをいずれも指定しない場合、システムは既定の汎用キャッシュ方式を使用します。それ以外の場合、システムのキャッシュは各フラグに指定されたとおりに動作します。

これらのフラグの一部は組み合わせるべきではありません。たとえば、FILE_FLAG_RANDOM_ACCESSFILE_FLAG_SEQUENTIAL_SCAN の組み合わせは、互いの効果を打ち消し合います。

FILE_FLAG_SEQUENTIAL_SCAN フラグを指定すると、順次アクセスで大きなファイルを読み取るアプリケーションのパフォーマンスが向上する場合があります。大きなファイルをおおむね順次に読み取りつつ、ときおり小さなバイト範囲を先へスキップするようなアプリケーションでは、パフォーマンスの向上がさらに顕著になることがあります。アプリケーションがランダムアクセスのためにファイルポインターを移動する場合は、最適なキャッシュ性能が得られない可能性が高くなります。ただし、正しく動作することは保証されます。

FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING は互いに独立しており、組み合わせて使用できます。

FILE_FLAG_WRITE_THROUGH を使用し、FILE_FLAG_NO_BUFFERING を同時に指定していない場合は、システムのキャッシュが有効であるため、データはシステムキャッシュに書き込まれますが、遅延なくディスクへフラッシュされます。

FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING の両方を指定した場合は、システムのキャッシュが有効でないため、データは Windows のシステムキャッシュを経由せずに直ちにディスクへフラッシュされます。オペレーティングシステムは、ハードディスクのローカルなハードウェアキャッシュから永続メディアへのライトスルーも要求します。

メモ

すべてのハードディスクハードウェアがこのライトスルー機能をサポートしているわけではありません。

FILE_FLAG_NO_BUFFERING フラグを適切に使用するには、アプリケーション側で特別な配慮が必要です。詳細については、ファイルのバッファリング を参照してください。

FILE_FLAG_WRITE_THROUGH によるライトスルー要求は、その要求の処理によって生じるタイムスタンプの更新や名前の変更操作などのメタデータの変更も、NTFS にフラッシュさせます。このため、FILE_FLAG_WRITE_THROUGH フラグは、書き込みのたびに FlushFileBuffers 関数を呼び出す代わりとして、FILE_FLAG_NO_BUFFERING フラグと併用されることがよくあります。書き込みごとの呼び出しは不要なパフォーマンス低下を招く可能性がありますが、これらのフラグを併用することでその低下を回避できます。ファイルとメタデータのキャッシュに関する一般的な情報については、ファイルのキャッシュ を参照してください。

FILE_FLAG_NO_BUFFERINGFILE_FLAG_OVERLAPPED と組み合わせると、I/O がメモリマネージャーの同期的な操作に依存しなくなるため、非同期処理のパフォーマンスが最大になります。ただし、データがキャッシュに保持されないため、一部の I/O 操作には時間がかかります。また、ファイルのメタデータは依然としてキャッシュされる場合があります (たとえば、空のファイルを作成する場合)。メタデータが確実にディスクへフラッシュされるようにするには、FlushFileBuffers 関数を使用してください。

FILE_ATTRIBUTE_TEMPORARY 属性を指定すると、アプリケーションはハンドルを閉じた後に一時ファイルを削除するため、十分なキャッシュメモリがある場合、ファイルシステムはデータを大容量記憶装置へ書き戻さないようになります。その場合、システムはデータの書き込みを完全に回避できます。FILE_ATTRIBUTE_TEMPORARY 属性は、前述のフラグのようにデータのキャッシュを直接制御するわけではありませんが、書き込みを行わずにできるだけ多くをシステムキャッシュに保持するようシステムに指示するため、アプリケーションによっては注意が必要です。

同期および非同期 I/O ハンドル

CreateFile2 は、同期または非同期のファイルハンドルまたはデバイスハンドルを作成する手段を提供します。同期ハンドルでは、そのハンドルを使用する I/O 関数の呼び出しは完了するまでブロックされます。一方、非同期のファイルハンドルでは、I/O 操作が完了したかどうかにかかわらず、システムが I/O 関数の呼び出しから直ちに戻ることができます。前述のとおり、この同期と非同期の動作の違いは、pCreateExParams パラメーターに渡す CREATEFILE2_EXTENDED_PARAMETERS 構造体の dwFileFlags メンバーに FILE_FLAG_OVERLAPPED を指定するかどうかによって決まります。非同期 I/O の使用には複雑な点や落とし穴がいくつかあります。詳細については、同期 I/O と非同期 I/O を参照してください。

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

各言語での定義

#include <windows.h>

// CREATEFILE2_EXTENDED_PARAMETERS  (x64 32 / x86 24 バイト)
typedef struct CREATEFILE2_EXTENDED_PARAMETERS {
    DWORD dwSize;
    DWORD dwFileAttributes;
    DWORD dwFileFlags;
    DWORD dwSecurityQosFlags;
    SECURITY_ATTRIBUTES* lpSecurityAttributes;
    HANDLE hTemplateFile;
} CREATEFILE2_EXTENDED_PARAMETERS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CREATEFILE2_EXTENDED_PARAMETERS
{
    public uint dwSize;
    public uint dwFileAttributes;
    public uint dwFileFlags;
    public uint dwSecurityQosFlags;
    public IntPtr lpSecurityAttributes;
    public IntPtr hTemplateFile;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CREATEFILE2_EXTENDED_PARAMETERS
    Public dwSize As UInteger
    Public dwFileAttributes As UInteger
    Public dwFileFlags As UInteger
    Public dwSecurityQosFlags As UInteger
    Public lpSecurityAttributes As IntPtr
    Public hTemplateFile As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class CREATEFILE2_EXTENDED_PARAMETERS(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("dwFileAttributes", wintypes.DWORD),
        ("dwFileFlags", wintypes.DWORD),
        ("dwSecurityQosFlags", wintypes.DWORD),
        ("lpSecurityAttributes", ctypes.c_void_p),
        ("hTemplateFile", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct CREATEFILE2_EXTENDED_PARAMETERS {
    pub dwSize: u32,
    pub dwFileAttributes: u32,
    pub dwFileFlags: u32,
    pub dwSecurityQosFlags: u32,
    pub lpSecurityAttributes: *mut core::ffi::c_void,
    pub hTemplateFile: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type CREATEFILE2_EXTENDED_PARAMETERS struct {
	dwSize uint32
	dwFileAttributes uint32
	dwFileFlags uint32
	dwSecurityQosFlags uint32
	lpSecurityAttributes uintptr
	hTemplateFile uintptr
}
type
  CREATEFILE2_EXTENDED_PARAMETERS = record
    dwSize: DWORD;
    dwFileAttributes: DWORD;
    dwFileFlags: DWORD;
    dwSecurityQosFlags: DWORD;
    lpSecurityAttributes: Pointer;
    hTemplateFile: Pointer;
  end;
const CREATEFILE2_EXTENDED_PARAMETERS = extern struct {
    dwSize: u32,
    dwFileAttributes: u32,
    dwFileFlags: u32,
    dwSecurityQosFlags: u32,
    lpSecurityAttributes: ?*anyopaque,
    hTemplateFile: ?*anyopaque,
};
type
  CREATEFILE2_EXTENDED_PARAMETERS {.bycopy.} = object
    dwSize: uint32
    dwFileAttributes: uint32
    dwFileFlags: uint32
    dwSecurityQosFlags: uint32
    lpSecurityAttributes: pointer
    hTemplateFile: pointer
struct CREATEFILE2_EXTENDED_PARAMETERS
{
    uint dwSize;
    uint dwFileAttributes;
    uint dwFileFlags;
    uint dwSecurityQosFlags;
    void* lpSecurityAttributes;
    void* hTemplateFile;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CREATEFILE2_EXTENDED_PARAMETERS サイズ: 24 バイト(x86)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFileAttributes : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwFileFlags : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwSecurityQosFlags : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpSecurityAttributes : SECURITY_ATTRIBUTES* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; hTemplateFile : HANDLE (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CREATEFILE2_EXTENDED_PARAMETERS サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFileAttributes : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwFileFlags : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwSecurityQosFlags : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpSecurityAttributes : SECURITY_ATTRIBUTES* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; hTemplateFile : HANDLE (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CREATEFILE2_EXTENDED_PARAMETERS
    #field int dwSize
    #field int dwFileAttributes
    #field int dwFileFlags
    #field int dwSecurityQosFlags
    #field intptr lpSecurityAttributes
    #field intptr hTemplateFile
#endstruct

stdim st, CREATEFILE2_EXTENDED_PARAMETERS        ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize