Win32 API 日本語リファレンス
ホームNetworking.WinHttp › WINHTTP_PROXY_SETTINGS

WINHTTP_PROXY_SETTINGS

構造体
サイズx64: 112 バイト / x86: 68 バイト

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

フィールド

フィールドサイズx64x86説明
dwStructSizeDWORD4+0+0この構造体のバイト数。呼び出し前に設定する。
dwFlagsDWORD4+4+4プロキシ設定の種類を示すフラグビット。直接・指定・自動構成等を表す。
dwCurrentSettingsVersionDWORD4+8+8現在のプロキシ設定のバージョン番号。設定変更の検出に用いる。
pwszConnectionNameLPWSTR8/4+16+12対象とする接続の名前文字列。NULLで既定の接続を指す。
pwszProxyLPWSTR8/4+24+16プロキシサーバーのアドレス文字列。NULL可。
pwszProxyBypassLPWSTR8/4+32+20プロキシをバイパスするホスト一覧文字列。NULL可。
pwszAutoconfigUrlLPWSTR8/4+40+24自動構成スクリプト(PAC)のURL文字列。NULL可。
pwszAutoconfigSecondaryUrlLPWSTR8/4+48+28予備の自動構成スクリプトURL文字列。主URL失敗時に使用する。NULL可。
dwAutoDiscoveryFlagsDWORD4+56+32PAC URLの自動検出方式を示すフラグ。DHCP/DNS等。
pwszLastKnownGoodAutoConfigUrlLPWSTR8/4+64+36直近で正常に取得できたPAC URL文字列。NULL可。
dwAutoconfigReloadDelayMinsDWORD4+72+40自動構成スクリプトを再読み込みするまでの遅延時間(分)。
ftLastKnownDetectTimeFILETIME8+76+44最後にプロキシ検出を行った日時(FILETIME)。
dwDetectedInterfaceIpCountDWORD4+84+52pdwDetectedInterfaceIp配列の要素数。検出されたインターフェイスIPの個数。
pdwDetectedInterfaceIpDWORD*8/4+88+56検出されたインターフェイスIPアドレスの配列へのポインタ(DWORD表現)。
cNetworkKeysDWORD4+96+60pNetworkKeys配列の要素数。
pNetworkKeysWINHTTP_PROXY_NETWORKING_KEY*8/4+104+64ネットワーキングキーの配列へのポインタ。各キーがネットワーク環境を識別する。

各言語での定義

#include <windows.h>

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// WINHTTP_PROXY_SETTINGS  (x64 112 / x86 68 バイト)
typedef struct WINHTTP_PROXY_SETTINGS {
    DWORD dwStructSize;
    DWORD dwFlags;
    DWORD dwCurrentSettingsVersion;
    LPWSTR pwszConnectionName;
    LPWSTR pwszProxy;
    LPWSTR pwszProxyBypass;
    LPWSTR pwszAutoconfigUrl;
    LPWSTR pwszAutoconfigSecondaryUrl;
    DWORD dwAutoDiscoveryFlags;
    LPWSTR pwszLastKnownGoodAutoConfigUrl;
    DWORD dwAutoconfigReloadDelayMins;
    FILETIME ftLastKnownDetectTime;
    DWORD dwDetectedInterfaceIpCount;
    DWORD* pdwDetectedInterfaceIp;
    DWORD cNetworkKeys;
    WINHTTP_PROXY_NETWORKING_KEY* pNetworkKeys;
} WINHTTP_PROXY_SETTINGS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINHTTP_PROXY_SETTINGS
{
    public uint dwStructSize;
    public uint dwFlags;
    public uint dwCurrentSettingsVersion;
    public IntPtr pwszConnectionName;
    public IntPtr pwszProxy;
    public IntPtr pwszProxyBypass;
    public IntPtr pwszAutoconfigUrl;
    public IntPtr pwszAutoconfigSecondaryUrl;
    public uint dwAutoDiscoveryFlags;
    public IntPtr pwszLastKnownGoodAutoConfigUrl;
    public uint dwAutoconfigReloadDelayMins;
    public FILETIME ftLastKnownDetectTime;
    public uint dwDetectedInterfaceIpCount;
    public IntPtr pdwDetectedInterfaceIp;
    public uint cNetworkKeys;
    public IntPtr pNetworkKeys;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
    Public dwLowDateTime As UInteger
    Public dwHighDateTime As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINHTTP_PROXY_SETTINGS
    Public dwStructSize As UInteger
    Public dwFlags As UInteger
    Public dwCurrentSettingsVersion As UInteger
    Public pwszConnectionName As IntPtr
    Public pwszProxy As IntPtr
    Public pwszProxyBypass As IntPtr
    Public pwszAutoconfigUrl As IntPtr
    Public pwszAutoconfigSecondaryUrl As IntPtr
    Public dwAutoDiscoveryFlags As UInteger
    Public pwszLastKnownGoodAutoConfigUrl As IntPtr
    Public dwAutoconfigReloadDelayMins As UInteger
    Public ftLastKnownDetectTime As FILETIME
    Public dwDetectedInterfaceIpCount As UInteger
    Public pdwDetectedInterfaceIp As IntPtr
    Public cNetworkKeys As UInteger
    Public pNetworkKeys As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class WINHTTP_PROXY_SETTINGS(ctypes.Structure):
    _fields_ = [
        ("dwStructSize", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("dwCurrentSettingsVersion", wintypes.DWORD),
        ("pwszConnectionName", ctypes.c_void_p),
        ("pwszProxy", ctypes.c_void_p),
        ("pwszProxyBypass", ctypes.c_void_p),
        ("pwszAutoconfigUrl", ctypes.c_void_p),
        ("pwszAutoconfigSecondaryUrl", ctypes.c_void_p),
        ("dwAutoDiscoveryFlags", wintypes.DWORD),
        ("pwszLastKnownGoodAutoConfigUrl", ctypes.c_void_p),
        ("dwAutoconfigReloadDelayMins", wintypes.DWORD),
        ("ftLastKnownDetectTime", FILETIME),
        ("dwDetectedInterfaceIpCount", wintypes.DWORD),
        ("pdwDetectedInterfaceIp", ctypes.c_void_p),
        ("cNetworkKeys", wintypes.DWORD),
        ("pNetworkKeys", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct WINHTTP_PROXY_SETTINGS {
    pub dwStructSize: u32,
    pub dwFlags: u32,
    pub dwCurrentSettingsVersion: u32,
    pub pwszConnectionName: *mut core::ffi::c_void,
    pub pwszProxy: *mut core::ffi::c_void,
    pub pwszProxyBypass: *mut core::ffi::c_void,
    pub pwszAutoconfigUrl: *mut core::ffi::c_void,
    pub pwszAutoconfigSecondaryUrl: *mut core::ffi::c_void,
    pub dwAutoDiscoveryFlags: u32,
    pub pwszLastKnownGoodAutoConfigUrl: *mut core::ffi::c_void,
    pub dwAutoconfigReloadDelayMins: u32,
    pub ftLastKnownDetectTime: FILETIME,
    pub dwDetectedInterfaceIpCount: u32,
    pub pdwDetectedInterfaceIp: *mut core::ffi::c_void,
    pub cNetworkKeys: u32,
    pub pNetworkKeys: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type WINHTTP_PROXY_SETTINGS struct {
	dwStructSize uint32
	dwFlags uint32
	dwCurrentSettingsVersion uint32
	pwszConnectionName uintptr
	pwszProxy uintptr
	pwszProxyBypass uintptr
	pwszAutoconfigUrl uintptr
	pwszAutoconfigSecondaryUrl uintptr
	dwAutoDiscoveryFlags uint32
	pwszLastKnownGoodAutoConfigUrl uintptr
	dwAutoconfigReloadDelayMins uint32
	ftLastKnownDetectTime FILETIME
	dwDetectedInterfaceIpCount uint32
	pdwDetectedInterfaceIp uintptr
	cNetworkKeys uint32
	pNetworkKeys uintptr
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  WINHTTP_PROXY_SETTINGS = record
    dwStructSize: DWORD;
    dwFlags: DWORD;
    dwCurrentSettingsVersion: DWORD;
    pwszConnectionName: Pointer;
    pwszProxy: Pointer;
    pwszProxyBypass: Pointer;
    pwszAutoconfigUrl: Pointer;
    pwszAutoconfigSecondaryUrl: Pointer;
    dwAutoDiscoveryFlags: DWORD;
    pwszLastKnownGoodAutoConfigUrl: Pointer;
    dwAutoconfigReloadDelayMins: DWORD;
    ftLastKnownDetectTime: FILETIME;
    dwDetectedInterfaceIpCount: DWORD;
    pdwDetectedInterfaceIp: Pointer;
    cNetworkKeys: DWORD;
    pNetworkKeys: Pointer;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const WINHTTP_PROXY_SETTINGS = extern struct {
    dwStructSize: u32,
    dwFlags: u32,
    dwCurrentSettingsVersion: u32,
    pwszConnectionName: ?*anyopaque,
    pwszProxy: ?*anyopaque,
    pwszProxyBypass: ?*anyopaque,
    pwszAutoconfigUrl: ?*anyopaque,
    pwszAutoconfigSecondaryUrl: ?*anyopaque,
    dwAutoDiscoveryFlags: u32,
    pwszLastKnownGoodAutoConfigUrl: ?*anyopaque,
    dwAutoconfigReloadDelayMins: u32,
    ftLastKnownDetectTime: FILETIME,
    dwDetectedInterfaceIpCount: u32,
    pdwDetectedInterfaceIp: ?*anyopaque,
    cNetworkKeys: u32,
    pNetworkKeys: ?*anyopaque,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  WINHTTP_PROXY_SETTINGS {.bycopy.} = object
    dwStructSize: uint32
    dwFlags: uint32
    dwCurrentSettingsVersion: uint32
    pwszConnectionName: pointer
    pwszProxy: pointer
    pwszProxyBypass: pointer
    pwszAutoconfigUrl: pointer
    pwszAutoconfigSecondaryUrl: pointer
    dwAutoDiscoveryFlags: uint32
    pwszLastKnownGoodAutoConfigUrl: pointer
    dwAutoconfigReloadDelayMins: uint32
    ftLastKnownDetectTime: FILETIME
    dwDetectedInterfaceIpCount: uint32
    pdwDetectedInterfaceIp: pointer
    cNetworkKeys: uint32
    pNetworkKeys: pointer
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct WINHTTP_PROXY_SETTINGS
{
    uint dwStructSize;
    uint dwFlags;
    uint dwCurrentSettingsVersion;
    void* pwszConnectionName;
    void* pwszProxy;
    void* pwszProxyBypass;
    void* pwszAutoconfigUrl;
    void* pwszAutoconfigSecondaryUrl;
    uint dwAutoDiscoveryFlags;
    void* pwszLastKnownGoodAutoConfigUrl;
    uint dwAutoconfigReloadDelayMins;
    FILETIME ftLastKnownDetectTime;
    uint dwDetectedInterfaceIpCount;
    void* pdwDetectedInterfaceIp;
    uint cNetworkKeys;
    void* pNetworkKeys;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WINHTTP_PROXY_SETTINGS サイズ: 68 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; dwStructSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwCurrentSettingsVersion : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pwszConnectionName : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pwszProxy : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pwszProxyBypass : LPWSTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pwszAutoconfigUrl : LPWSTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pwszAutoconfigSecondaryUrl : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwAutoDiscoveryFlags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pwszLastKnownGoodAutoConfigUrl : LPWSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwAutoconfigReloadDelayMins : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ftLastKnownDetectTime : FILETIME (+44, 8byte)  varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; dwDetectedInterfaceIpCount : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; pdwDetectedInterfaceIp : DWORD* (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; cNetworkKeys : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pNetworkKeys : WINHTTP_PROXY_NETWORKING_KEY* (+64, 4byte)  varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINHTTP_PROXY_SETTINGS サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; dwStructSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwCurrentSettingsVersion : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pwszConnectionName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pwszProxy : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pwszProxyBypass : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pwszAutoconfigUrl : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pwszAutoconfigSecondaryUrl : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; dwAutoDiscoveryFlags : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; pwszLastKnownGoodAutoConfigUrl : LPWSTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; dwAutoconfigReloadDelayMins : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ftLastKnownDetectTime : FILETIME (+76, 8byte)  varptr(st)+76 を基点に操作(8byte:入れ子/配列)
; dwDetectedInterfaceIpCount : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; pdwDetectedInterfaceIp : DWORD* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; cNetworkKeys : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; pNetworkKeys : WINHTTP_PROXY_NETWORKING_KEY* (+104, 8byte)  varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
    #field int dwLowDateTime
    #field int dwHighDateTime
#endstruct

#defstruct global WINHTTP_PROXY_SETTINGS
    #field int dwStructSize
    #field int dwFlags
    #field int dwCurrentSettingsVersion
    #field intptr pwszConnectionName
    #field intptr pwszProxy
    #field intptr pwszProxyBypass
    #field intptr pwszAutoconfigUrl
    #field intptr pwszAutoconfigSecondaryUrl
    #field int dwAutoDiscoveryFlags
    #field intptr pwszLastKnownGoodAutoConfigUrl
    #field int dwAutoconfigReloadDelayMins
    #field FILETIME ftLastKnownDetectTime
    #field int dwDetectedInterfaceIpCount
    #field intptr pdwDetectedInterfaceIp
    #field int cNetworkKeys
    #field intptr pNetworkKeys
#endstruct

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