Win32 API 日本語リファレンス
ホームNetworkManagement.P2P › PEER_CONTACT

PEER_CONTACT

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

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

フィールド

フィールドサイズx64x86説明
pwzPeerNameLPWSTR8/4+0+0連絡先のピア名を表すワイド文字列。
pwzNickNameLPWSTR8/4+8+4連絡先のニックネームを表すワイド文字列。
pwzDisplayNameLPWSTR8/4+16+8連絡先の表示名を表すワイド文字列。
pwzEmailAddressLPWSTR8/4+24+12連絡先のメールアドレスを表すワイド文字列。NULL可。
fWatchBOOL4+32+16この連絡先を監視対象とするかを示すBOOL値。
WatcherPermissionsPEER_WATCH_PERMISSION4+36+20監視者に対する許可レベルを示すPEER_WATCH_PERMISSION。
credentialsPEER_DATA16/8+40+24連絡先の資格情報を保持するPEER_DATA。

各言語での定義

#include <windows.h>

// PEER_DATA  (x64 16 / x86 8 バイト)
typedef struct PEER_DATA {
    DWORD cbData;
    BYTE* pbData;
} PEER_DATA;

// PEER_CONTACT  (x64 56 / x86 32 バイト)
typedef struct PEER_CONTACT {
    LPWSTR pwzPeerName;
    LPWSTR pwzNickName;
    LPWSTR pwzDisplayName;
    LPWSTR pwzEmailAddress;
    BOOL fWatch;
    PEER_WATCH_PERMISSION WatcherPermissions;
    PEER_DATA credentials;
} PEER_CONTACT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PEER_DATA
{
    public uint cbData;
    public IntPtr pbData;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PEER_CONTACT
{
    public IntPtr pwzPeerName;
    public IntPtr pwzNickName;
    public IntPtr pwzDisplayName;
    public IntPtr pwzEmailAddress;
    [MarshalAs(UnmanagedType.Bool)] public bool fWatch;
    public int WatcherPermissions;
    public PEER_DATA credentials;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PEER_DATA
    Public cbData As UInteger
    Public pbData As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PEER_CONTACT
    Public pwzPeerName As IntPtr
    Public pwzNickName As IntPtr
    Public pwzDisplayName As IntPtr
    Public pwzEmailAddress As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public fWatch As Boolean
    Public WatcherPermissions As Integer
    Public credentials As PEER_DATA
End Structure
import ctypes
from ctypes import wintypes

class PEER_DATA(ctypes.Structure):
    _fields_ = [
        ("cbData", wintypes.DWORD),
        ("pbData", ctypes.c_void_p),
    ]

class PEER_CONTACT(ctypes.Structure):
    _fields_ = [
        ("pwzPeerName", ctypes.c_void_p),
        ("pwzNickName", ctypes.c_void_p),
        ("pwzDisplayName", ctypes.c_void_p),
        ("pwzEmailAddress", ctypes.c_void_p),
        ("fWatch", wintypes.BOOL),
        ("WatcherPermissions", ctypes.c_int),
        ("credentials", PEER_DATA),
    ]
#[repr(C)]
pub struct PEER_DATA {
    pub cbData: u32,
    pub pbData: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct PEER_CONTACT {
    pub pwzPeerName: *mut core::ffi::c_void,
    pub pwzNickName: *mut core::ffi::c_void,
    pub pwzDisplayName: *mut core::ffi::c_void,
    pub pwzEmailAddress: *mut core::ffi::c_void,
    pub fWatch: i32,
    pub WatcherPermissions: i32,
    pub credentials: PEER_DATA,
}
import "golang.org/x/sys/windows"

type PEER_DATA struct {
	cbData uint32
	pbData uintptr
}

type PEER_CONTACT struct {
	pwzPeerName uintptr
	pwzNickName uintptr
	pwzDisplayName uintptr
	pwzEmailAddress uintptr
	fWatch int32
	WatcherPermissions int32
	credentials PEER_DATA
}
type
  PEER_DATA = record
    cbData: DWORD;
    pbData: Pointer;
  end;

  PEER_CONTACT = record
    pwzPeerName: Pointer;
    pwzNickName: Pointer;
    pwzDisplayName: Pointer;
    pwzEmailAddress: Pointer;
    fWatch: BOOL;
    WatcherPermissions: Integer;
    credentials: PEER_DATA;
  end;
const PEER_DATA = extern struct {
    cbData: u32,
    pbData: ?*anyopaque,
};

const PEER_CONTACT = extern struct {
    pwzPeerName: ?*anyopaque,
    pwzNickName: ?*anyopaque,
    pwzDisplayName: ?*anyopaque,
    pwzEmailAddress: ?*anyopaque,
    fWatch: i32,
    WatcherPermissions: i32,
    credentials: PEER_DATA,
};
type
  PEER_DATA {.bycopy.} = object
    cbData: uint32
    pbData: pointer

  PEER_CONTACT {.bycopy.} = object
    pwzPeerName: pointer
    pwzNickName: pointer
    pwzDisplayName: pointer
    pwzEmailAddress: pointer
    fWatch: int32
    WatcherPermissions: int32
    credentials: PEER_DATA
struct PEER_DATA
{
    uint cbData;
    void* pbData;
}

struct PEER_CONTACT
{
    void* pwzPeerName;
    void* pwzNickName;
    void* pwzDisplayName;
    void* pwzEmailAddress;
    int fWatch;
    int WatcherPermissions;
    PEER_DATA credentials;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PEER_CONTACT サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; pwzPeerName : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pwzNickName : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pwzDisplayName : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pwzEmailAddress : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; fWatch : BOOL (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; WatcherPermissions : PEER_WATCH_PERMISSION (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; credentials : PEER_DATA (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PEER_CONTACT サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; pwzPeerName : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pwzNickName : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pwzDisplayName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pwzEmailAddress : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; fWatch : BOOL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; WatcherPermissions : PEER_WATCH_PERMISSION (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; credentials : PEER_DATA (+40, 16byte)  varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global PEER_DATA
    #field int cbData
    #field intptr pbData
#endstruct

#defstruct global PEER_CONTACT
    #field intptr pwzPeerName
    #field intptr pwzNickName
    #field intptr pwzDisplayName
    #field intptr pwzEmailAddress
    #field bool fWatch
    #field int WatcherPermissions
    #field PEER_DATA credentials
#endstruct

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