RPC_ASYNC_NOTIFICATION_INFO
共用体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| APC | _APC_e__Struct | 16/8 | +0 | +0 | Windows 非同期プロシージャコール (APC) 通知に使用される構造体です。 |
| IOC | _IOC_e__Struct | 32/16 | +0 | +0 | I/O 完了ポートでの通知に使用される構造体です。 |
| IntPtr | _IntPtr_e__Struct | 16/8 | +0 | +0 | ポインター値による通知情報の構造体。共用体メンバー。 |
| hEvent | HANDLE | 8/4 | +0 | +0 | イベントによる通知に使用されるハンドルです。 |
| NotificationRoutine | PFN_RPCNOTIFICATION_ROUTINE | 8/4 | +0 | +0 | Windows Vista 以前のバージョンの Windows: COM が直接コールバックのために内部的に使用します。このメンバーは使用しないでください。 Windows 7 以降のバージョンの Windows: RPC 呼び出しの完了の上に構築されたユーザー定義の通知方式への省略可能な関数ポインターです。たとえば、アプリケーションは通知コールバックから SubmitThreadpoolWork を呼び出すことができます。 注意 通知コールバックから追加の RPC 呼び出しを行うこと、ブロックすること、または長時間実行される処理を行うことは、強く非推奨とされています。
|
構造体: _APC_e__Struct x64 16B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| NotificationRoutine | PFN_RPCNOTIFICATION_ROUTINE | 8/4 | +0 | +0 | Windows Vista 以前のバージョンの Windows: COM が直接コールバックのために内部的に使用します。このメンバーは使用しないでください。 Windows 7 以降のバージョンの Windows: RPC 呼び出しの完了の上に構築されたユーザー定義の通知方式への省略可能な関数ポインターです。たとえば、アプリケーションは通知コールバックから SubmitThreadpoolWork を呼び出すことができます。 注意 通知コールバックから追加の RPC 呼び出しを行うこと、ブロックすること、または長時間実行される処理を行うことは、強く非推奨とされています。
|
| hThread | HANDLE | 8/4 | +8 | +4 | 通知 APC を送信する先のスレッドのハンドルです。値が 0 の場合は現在のスレッドを示します。 |
構造体: _IOC_e__Struct x64 32B / x86 16B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hIOPort | HANDLE | 8/4 | +0 | +0 | I/O 完了ポートのハンドルです。 |
| dwNumberOfBytesTransferred | DWORD | 4 | +8 | +4 | 非同期呼び出しが開始される前に RPC クライアントによって設定されます。通知が完了ポートに配信されると、この値は GetQueuedCompletionStatus 関数の lpNumberOfBytesTransferred パラメーターが指す場所に格納されます。 |
| dwCompletionKey | UINT_PTR | 8/4 | +16 | +8 | 非同期呼び出しが開始される前に RPC クライアントによって設定されます。通知が完了ポートに配信されると、この値は GetQueuedCompletionStatus 関数の lpCompletionKey パラメーターが指す場所に格納されます。 |
| lpOverlapped | OVERLAPPED* | 8/4 | +24 | +12 | 非同期呼び出しが開始される前に RPC クライアントによって設定されます。通知が完了ポートに配信されると、この値は GetQueuedCompletionStatus 関数の lpOverlapped パラメーターが指す場所に格納されます。 |
構造体: _IntPtr_e__Struct x64 16B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hWnd | HWND | 8/4 | +0 | +0 | メッセージを送信する先のウィンドウを識別します。 |
| Msg | DWORD | 4 | +8 | +4 | 送信するメッセージです。 |
公式ドキュメント
RPC_ASYNC_NOTIFICATION_INFO 共用体は、非同期リモートプロシージャコールの通知情報を格納します。この通知情報は、I/O 完了ポート (IOC)、Windows 非同期プロシージャコール (APC)、Windows メッセージング、および Windows イベント通知に対して構成できます。
解説(Remarks)
Windows Vista およびそれ以前のバージョンの Windows では、RPC_ASYNC_NOTIFICATION_INFO 共用体は RPC_ASYNC_STATE 構造体の一部でした。詳細については RPC_ASYNC_STATE のトピックを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// RPC_ASYNC_NOTIFICATION_INFO (x64 32 / x86 16 バイト)
typedef struct RPC_ASYNC_NOTIFICATION_INFO {
_APC_e__Struct APC;
_IOC_e__Struct IOC;
_IntPtr_e__Struct IntPtr;
HANDLE hEvent;
PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
} RPC_ASYNC_NOTIFICATION_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RPC_ASYNC_NOTIFICATION_INFO
{
public _APC_e__Struct APC;
public _IOC_e__Struct IOC;
public _IntPtr_e__Struct IntPtr;
public IntPtr hEvent;
public IntPtr NotificationRoutine;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RPC_ASYNC_NOTIFICATION_INFO
Public APC As _APC_e__Struct
Public IOC As _IOC_e__Struct
Public IntPtr As _IntPtr_e__Struct
Public hEvent As IntPtr
Public NotificationRoutine As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class RPC_ASYNC_NOTIFICATION_INFO(ctypes.Structure):
_fields_ = [
("APC", _APC_e__Struct),
("IOC", _IOC_e__Struct),
("IntPtr", _IntPtr_e__Struct),
("hEvent", ctypes.c_void_p),
("NotificationRoutine", ctypes.c_void_p),
]#[repr(C)]
pub struct RPC_ASYNC_NOTIFICATION_INFO {
pub APC: _APC_e__Struct,
pub IOC: _IOC_e__Struct,
pub IntPtr: _IntPtr_e__Struct,
pub hEvent: *mut core::ffi::c_void,
pub NotificationRoutine: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type RPC_ASYNC_NOTIFICATION_INFO struct {
APC _APC_e__Struct
IOC _IOC_e__Struct
IntPtr _IntPtr_e__Struct
hEvent uintptr
NotificationRoutine uintptr
}type
RPC_ASYNC_NOTIFICATION_INFO = record
APC: _APC_e__Struct;
IOC: _IOC_e__Struct;
IntPtr: _IntPtr_e__Struct;
hEvent: Pointer;
NotificationRoutine: Pointer;
end;const RPC_ASYNC_NOTIFICATION_INFO = extern struct {
APC: _APC_e__Struct,
IOC: _IOC_e__Struct,
IntPtr: _IntPtr_e__Struct,
hEvent: ?*anyopaque,
NotificationRoutine: ?*anyopaque,
};type
RPC_ASYNC_NOTIFICATION_INFO {.bycopy.} = object
APC: _APC_e__Struct
IOC: _IOC_e__Struct
IntPtr: _IntPtr_e__Struct
hEvent: pointer
NotificationRoutine: pointerstruct RPC_ASYNC_NOTIFICATION_INFO
{
_APC_e__Struct APC;
_IOC_e__Struct IOC;
_IntPtr_e__Struct IntPtr;
void* hEvent;
void* NotificationRoutine;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RPC_ASYNC_NOTIFICATION_INFO サイズ: 16 バイト(x86)
dim st, 4 ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; APC : _APC_e__Struct (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; IOC : _IOC_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; IntPtr : _IntPtr_e__Struct (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; hEvent : HANDLE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; NotificationRoutine : PFN_RPCNOTIFICATION_ROUTINE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RPC_ASYNC_NOTIFICATION_INFO サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; APC : _APC_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; IOC : _IOC_e__Struct (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; IntPtr : _IntPtr_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; hEvent : HANDLE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; NotificationRoutine : PFN_RPCNOTIFICATION_ROUTINE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global RPC_ASYNC_NOTIFICATION_INFO
#field _APC_e__Struct APC
#field _IOC_e__Struct IOC
#field _IntPtr_e__Struct IntPtr
#field intptr hEvent
#field intptr NotificationRoutine
#endstruct
stdim st, RPC_ASYNC_NOTIFICATION_INFO ; NSTRUCT 変数を確保