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

FH_OVERLAPPED

構造体
サイズx64: 72 バイト / x86: 40 バイト

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

フィールド

フィールドサイズx64x86説明
InternalUINT_PTR8/4+0+0システム予約。I/O要求の状態を保持する。
InternalHighUINT_PTR8/4+8+4システム予約。転送されたバイト数を保持する。
OffsetDWORD4+16+8ファイル内の開始位置オフセットの下位32ビット。
OffsetHighDWORD4+20+12ファイル内の開始位置オフセットの上位32ビット。
hEventHANDLE8/4+24+16I/O完了時にシグナル状態となるイベントオブジェクトのハンドル。
pfnCompletionPFN_IO_COMPLETION8/4+32+20I/O完了時に呼び出されるコールバック関数へのポインタ。
Reserved1UINT_PTR8/4+40+24予約フィールド1。アプリケーションが任意に使用可能。
Reserved2UINT_PTR8/4+48+28予約フィールド2。アプリケーションが任意に使用可能。
Reserved3UINT_PTR8/4+56+32予約フィールド3。アプリケーションが任意に使用可能。
Reserved4UINT_PTR8/4+64+36予約フィールド4。アプリケーションが任意に使用可能。

各言語での定義

#include <windows.h>

// FH_OVERLAPPED  (x64 72 / x86 40 バイト)
typedef struct FH_OVERLAPPED {
    UINT_PTR Internal;
    UINT_PTR InternalHigh;
    DWORD Offset;
    DWORD OffsetHigh;
    HANDLE hEvent;
    PFN_IO_COMPLETION pfnCompletion;
    UINT_PTR Reserved1;
    UINT_PTR Reserved2;
    UINT_PTR Reserved3;
    UINT_PTR Reserved4;
} FH_OVERLAPPED;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FH_OVERLAPPED
{
    public UIntPtr Internal;
    public UIntPtr InternalHigh;
    public uint Offset;
    public uint OffsetHigh;
    public IntPtr hEvent;
    public IntPtr pfnCompletion;
    public UIntPtr Reserved1;
    public UIntPtr Reserved2;
    public UIntPtr Reserved3;
    public UIntPtr Reserved4;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FH_OVERLAPPED
    Public Internal As UIntPtr
    Public InternalHigh As UIntPtr
    Public Offset As UInteger
    Public OffsetHigh As UInteger
    Public hEvent As IntPtr
    Public pfnCompletion As IntPtr
    Public Reserved1 As UIntPtr
    Public Reserved2 As UIntPtr
    Public Reserved3 As UIntPtr
    Public Reserved4 As UIntPtr
End Structure
import ctypes
from ctypes import wintypes

class FH_OVERLAPPED(ctypes.Structure):
    _fields_ = [
        ("Internal", ctypes.c_size_t),
        ("InternalHigh", ctypes.c_size_t),
        ("Offset", wintypes.DWORD),
        ("OffsetHigh", wintypes.DWORD),
        ("hEvent", ctypes.c_void_p),
        ("pfnCompletion", ctypes.c_void_p),
        ("Reserved1", ctypes.c_size_t),
        ("Reserved2", ctypes.c_size_t),
        ("Reserved3", ctypes.c_size_t),
        ("Reserved4", ctypes.c_size_t),
    ]
#[repr(C)]
pub struct FH_OVERLAPPED {
    pub Internal: usize,
    pub InternalHigh: usize,
    pub Offset: u32,
    pub OffsetHigh: u32,
    pub hEvent: *mut core::ffi::c_void,
    pub pfnCompletion: *mut core::ffi::c_void,
    pub Reserved1: usize,
    pub Reserved2: usize,
    pub Reserved3: usize,
    pub Reserved4: usize,
}
import "golang.org/x/sys/windows"

type FH_OVERLAPPED struct {
	Internal uintptr
	InternalHigh uintptr
	Offset uint32
	OffsetHigh uint32
	hEvent uintptr
	pfnCompletion uintptr
	Reserved1 uintptr
	Reserved2 uintptr
	Reserved3 uintptr
	Reserved4 uintptr
}
type
  FH_OVERLAPPED = record
    Internal: NativeUInt;
    InternalHigh: NativeUInt;
    Offset: DWORD;
    OffsetHigh: DWORD;
    hEvent: Pointer;
    pfnCompletion: Pointer;
    Reserved1: NativeUInt;
    Reserved2: NativeUInt;
    Reserved3: NativeUInt;
    Reserved4: NativeUInt;
  end;
const FH_OVERLAPPED = extern struct {
    Internal: usize,
    InternalHigh: usize,
    Offset: u32,
    OffsetHigh: u32,
    hEvent: ?*anyopaque,
    pfnCompletion: ?*anyopaque,
    Reserved1: usize,
    Reserved2: usize,
    Reserved3: usize,
    Reserved4: usize,
};
type
  FH_OVERLAPPED {.bycopy.} = object
    Internal: uint
    InternalHigh: uint
    Offset: uint32
    OffsetHigh: uint32
    hEvent: pointer
    pfnCompletion: pointer
    Reserved1: uint
    Reserved2: uint
    Reserved3: uint
    Reserved4: uint
struct FH_OVERLAPPED
{
    size_t Internal;
    size_t InternalHigh;
    uint Offset;
    uint OffsetHigh;
    void* hEvent;
    void* pfnCompletion;
    size_t Reserved1;
    size_t Reserved2;
    size_t Reserved3;
    size_t Reserved4;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FH_OVERLAPPED サイズ: 40 バイト(x86)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Internal : UINT_PTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; InternalHigh : UINT_PTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Offset : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; OffsetHigh : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; hEvent : HANDLE (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pfnCompletion : PFN_IO_COMPLETION (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; Reserved1 : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; Reserved2 : UINT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Reserved3 : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Reserved4 : UINT_PTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FH_OVERLAPPED サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; Internal : UINT_PTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; InternalHigh : UINT_PTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; Offset : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; OffsetHigh : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; hEvent : HANDLE (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pfnCompletion : PFN_IO_COMPLETION (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; Reserved1 : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; Reserved2 : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; Reserved3 : UINT_PTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; Reserved4 : UINT_PTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global FH_OVERLAPPED
    #field intptr Internal
    #field intptr InternalHigh
    #field int Offset
    #field int OffsetHigh
    #field intptr hEvent
    #field intptr pfnCompletion
    #field intptr Reserved1
    #field intptr Reserved2
    #field intptr Reserved3
    #field intptr Reserved4
#endstruct

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