ホーム › Networking.WinHttp › WINHTTP_PROXY_SETTINGS
WINHTTP_PROXY_SETTINGS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwStructSize | DWORD | 4 | +0 | +0 | この構造体のバイト数。呼び出し前に設定する。 |
| dwFlags | DWORD | 4 | +4 | +4 | プロキシ設定の種類を示すフラグビット。直接・指定・自動構成等を表す。 |
| dwCurrentSettingsVersion | DWORD | 4 | +8 | +8 | 現在のプロキシ設定のバージョン番号。設定変更の検出に用いる。 |
| pwszConnectionName | LPWSTR | 8/4 | +16 | +12 | 対象とする接続の名前文字列。NULLで既定の接続を指す。 |
| pwszProxy | LPWSTR | 8/4 | +24 | +16 | プロキシサーバーのアドレス文字列。NULL可。 |
| pwszProxyBypass | LPWSTR | 8/4 | +32 | +20 | プロキシをバイパスするホスト一覧文字列。NULL可。 |
| pwszAutoconfigUrl | LPWSTR | 8/4 | +40 | +24 | 自動構成スクリプト(PAC)のURL文字列。NULL可。 |
| pwszAutoconfigSecondaryUrl | LPWSTR | 8/4 | +48 | +28 | 予備の自動構成スクリプトURL文字列。主URL失敗時に使用する。NULL可。 |
| dwAutoDiscoveryFlags | DWORD | 4 | +56 | +32 | PAC URLの自動検出方式を示すフラグ。DHCP/DNS等。 |
| pwszLastKnownGoodAutoConfigUrl | LPWSTR | 8/4 | +64 | +36 | 直近で正常に取得できたPAC URL文字列。NULL可。 |
| dwAutoconfigReloadDelayMins | DWORD | 4 | +72 | +40 | 自動構成スクリプトを再読み込みするまでの遅延時間(分)。 |
| ftLastKnownDetectTime | FILETIME | 8 | +76 | +44 | 最後にプロキシ検出を行った日時(FILETIME)。 |
| dwDetectedInterfaceIpCount | DWORD | 4 | +84 | +52 | pdwDetectedInterfaceIp配列の要素数。検出されたインターフェイスIPの個数。 |
| pdwDetectedInterfaceIp | DWORD* | 8/4 | +88 | +56 | 検出されたインターフェイスIPアドレスの配列へのポインタ(DWORD表現)。 |
| cNetworkKeys | DWORD | 4 | +96 | +60 | pNetworkKeys配列の要素数。 |
| pNetworkKeys | WINHTTP_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 Structureimport 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: pointerstruct 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