ホーム › Networking.WinInet › URLCACHE_ENTRY_INFO
URLCACHE_ENTRY_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pwszSourceUrlName | LPWSTR | 8/4 | +0 | +0 | キャッシュ元となるソースURL文字列である。 |
| pwszLocalFileName | LPWSTR | 8/4 | +8 | +4 | キャッシュされたローカルファイルのパス文字列である。 |
| dwCacheEntryType | DWORD | 4 | +16 | +8 | キャッシュエントリの種類を示すフラグである。 |
| dwUseCount | DWORD | 4 | +20 | +12 | このエントリの現在の参照使用回数である。 |
| dwHitRate | DWORD | 4 | +24 | +16 | このエントリへのヒット(アクセス)回数である。 |
| dwSizeLow | DWORD | 4 | +28 | +20 | エントリサイズの下位32ビット値である。 |
| dwSizeHigh | DWORD | 4 | +32 | +24 | エントリサイズの上位32ビット値である。 |
| ftLastModifiedTime | FILETIME | 8 | +36 | +28 | ソースリソースの最終更新時刻を示すFILETIMEである。 |
| ftExpireTime | FILETIME | 8 | +44 | +36 | エントリの有効期限を示すFILETIMEである。 |
| ftLastAccessTime | FILETIME | 8 | +52 | +44 | 最終アクセス時刻を示すFILETIMEである。 |
| ftLastSyncTime | FILETIME | 8 | +60 | +52 | サーバとの最終同期時刻を示すFILETIMEである。 |
| pbHeaderInfo | BYTE* | 8/4 | +72 | +60 | 格納されたHTTPヘッダ情報のバッファへのポインタである。 |
| cbHeaderInfoSize | DWORD | 4 | +80 | +64 | pbHeaderInfoのサイズをバイト単位で示す。 |
| pbExtraData | BYTE* | 8/4 | +88 | +68 | 追加データのバッファへのポインタである。NULL可。 |
| cbExtraDataSize | DWORD | 4 | +96 | +72 | pbExtraDataのサイズをバイト単位で示す。 |
各言語での定義
#include <windows.h>
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// URLCACHE_ENTRY_INFO (x64 104 / x86 76 バイト)
typedef struct URLCACHE_ENTRY_INFO {
LPWSTR pwszSourceUrlName;
LPWSTR pwszLocalFileName;
DWORD dwCacheEntryType;
DWORD dwUseCount;
DWORD dwHitRate;
DWORD dwSizeLow;
DWORD dwSizeHigh;
FILETIME ftLastModifiedTime;
FILETIME ftExpireTime;
FILETIME ftLastAccessTime;
FILETIME ftLastSyncTime;
BYTE* pbHeaderInfo;
DWORD cbHeaderInfoSize;
BYTE* pbExtraData;
DWORD cbExtraDataSize;
} URLCACHE_ENTRY_INFO;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 URLCACHE_ENTRY_INFO
{
public IntPtr pwszSourceUrlName;
public IntPtr pwszLocalFileName;
public uint dwCacheEntryType;
public uint dwUseCount;
public uint dwHitRate;
public uint dwSizeLow;
public uint dwSizeHigh;
public FILETIME ftLastModifiedTime;
public FILETIME ftExpireTime;
public FILETIME ftLastAccessTime;
public FILETIME ftLastSyncTime;
public IntPtr pbHeaderInfo;
public uint cbHeaderInfoSize;
public IntPtr pbExtraData;
public uint cbExtraDataSize;
}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 URLCACHE_ENTRY_INFO
Public pwszSourceUrlName As IntPtr
Public pwszLocalFileName As IntPtr
Public dwCacheEntryType As UInteger
Public dwUseCount As UInteger
Public dwHitRate As UInteger
Public dwSizeLow As UInteger
Public dwSizeHigh As UInteger
Public ftLastModifiedTime As FILETIME
Public ftExpireTime As FILETIME
Public ftLastAccessTime As FILETIME
Public ftLastSyncTime As FILETIME
Public pbHeaderInfo As IntPtr
Public cbHeaderInfoSize As UInteger
Public pbExtraData As IntPtr
Public cbExtraDataSize As UInteger
End Structureimport ctypes
from ctypes import wintypes
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class URLCACHE_ENTRY_INFO(ctypes.Structure):
_fields_ = [
("pwszSourceUrlName", ctypes.c_void_p),
("pwszLocalFileName", ctypes.c_void_p),
("dwCacheEntryType", wintypes.DWORD),
("dwUseCount", wintypes.DWORD),
("dwHitRate", wintypes.DWORD),
("dwSizeLow", wintypes.DWORD),
("dwSizeHigh", wintypes.DWORD),
("ftLastModifiedTime", FILETIME),
("ftExpireTime", FILETIME),
("ftLastAccessTime", FILETIME),
("ftLastSyncTime", FILETIME),
("pbHeaderInfo", ctypes.c_void_p),
("cbHeaderInfoSize", wintypes.DWORD),
("pbExtraData", ctypes.c_void_p),
("cbExtraDataSize", wintypes.DWORD),
]#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct URLCACHE_ENTRY_INFO {
pub pwszSourceUrlName: *mut core::ffi::c_void,
pub pwszLocalFileName: *mut core::ffi::c_void,
pub dwCacheEntryType: u32,
pub dwUseCount: u32,
pub dwHitRate: u32,
pub dwSizeLow: u32,
pub dwSizeHigh: u32,
pub ftLastModifiedTime: FILETIME,
pub ftExpireTime: FILETIME,
pub ftLastAccessTime: FILETIME,
pub ftLastSyncTime: FILETIME,
pub pbHeaderInfo: *mut core::ffi::c_void,
pub cbHeaderInfoSize: u32,
pub pbExtraData: *mut core::ffi::c_void,
pub cbExtraDataSize: u32,
}import "golang.org/x/sys/windows"
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type URLCACHE_ENTRY_INFO struct {
pwszSourceUrlName uintptr
pwszLocalFileName uintptr
dwCacheEntryType uint32
dwUseCount uint32
dwHitRate uint32
dwSizeLow uint32
dwSizeHigh uint32
ftLastModifiedTime FILETIME
ftExpireTime FILETIME
ftLastAccessTime FILETIME
ftLastSyncTime FILETIME
pbHeaderInfo uintptr
cbHeaderInfoSize uint32
pbExtraData uintptr
cbExtraDataSize uint32
}type
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
URLCACHE_ENTRY_INFO = record
pwszSourceUrlName: Pointer;
pwszLocalFileName: Pointer;
dwCacheEntryType: DWORD;
dwUseCount: DWORD;
dwHitRate: DWORD;
dwSizeLow: DWORD;
dwSizeHigh: DWORD;
ftLastModifiedTime: FILETIME;
ftExpireTime: FILETIME;
ftLastAccessTime: FILETIME;
ftLastSyncTime: FILETIME;
pbHeaderInfo: Pointer;
cbHeaderInfoSize: DWORD;
pbExtraData: Pointer;
cbExtraDataSize: DWORD;
end;const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const URLCACHE_ENTRY_INFO = extern struct {
pwszSourceUrlName: ?*anyopaque,
pwszLocalFileName: ?*anyopaque,
dwCacheEntryType: u32,
dwUseCount: u32,
dwHitRate: u32,
dwSizeLow: u32,
dwSizeHigh: u32,
ftLastModifiedTime: FILETIME,
ftExpireTime: FILETIME,
ftLastAccessTime: FILETIME,
ftLastSyncTime: FILETIME,
pbHeaderInfo: ?*anyopaque,
cbHeaderInfoSize: u32,
pbExtraData: ?*anyopaque,
cbExtraDataSize: u32,
};type
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
URLCACHE_ENTRY_INFO {.bycopy.} = object
pwszSourceUrlName: pointer
pwszLocalFileName: pointer
dwCacheEntryType: uint32
dwUseCount: uint32
dwHitRate: uint32
dwSizeLow: uint32
dwSizeHigh: uint32
ftLastModifiedTime: FILETIME
ftExpireTime: FILETIME
ftLastAccessTime: FILETIME
ftLastSyncTime: FILETIME
pbHeaderInfo: pointer
cbHeaderInfoSize: uint32
pbExtraData: pointer
cbExtraDataSize: uint32struct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct URLCACHE_ENTRY_INFO
{
void* pwszSourceUrlName;
void* pwszLocalFileName;
uint dwCacheEntryType;
uint dwUseCount;
uint dwHitRate;
uint dwSizeLow;
uint dwSizeHigh;
FILETIME ftLastModifiedTime;
FILETIME ftExpireTime;
FILETIME ftLastAccessTime;
FILETIME ftLastSyncTime;
void* pbHeaderInfo;
uint cbHeaderInfoSize;
void* pbExtraData;
uint cbExtraDataSize;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; URLCACHE_ENTRY_INFO サイズ: 76 バイト(x86)
dim st, 19 ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; pwszSourceUrlName : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwszLocalFileName : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwCacheEntryType : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwUseCount : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwHitRate : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwSizeLow : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ftLastModifiedTime : FILETIME (+28, 8byte) varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; ftExpireTime : FILETIME (+36, 8byte) varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; ftLastAccessTime : FILETIME (+44, 8byte) varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; ftLastSyncTime : FILETIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; pbHeaderInfo : BYTE* (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; cbHeaderInfoSize : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; pbExtraData : BYTE* (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; cbExtraDataSize : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; URLCACHE_ENTRY_INFO サイズ: 104 バイト(x64)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; pwszSourceUrlName : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pwszLocalFileName : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwCacheEntryType : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwUseCount : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwHitRate : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwSizeLow : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ftLastModifiedTime : FILETIME (+36, 8byte) varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; ftExpireTime : FILETIME (+44, 8byte) varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; ftLastAccessTime : FILETIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; ftLastSyncTime : FILETIME (+60, 8byte) varptr(st)+60 を基点に操作(8byte:入れ子/配列)
; pbHeaderInfo : BYTE* (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; cbHeaderInfoSize : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; pbExtraData : BYTE* (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; cbExtraDataSize : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; ※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 URLCACHE_ENTRY_INFO
#field intptr pwszSourceUrlName
#field intptr pwszLocalFileName
#field int dwCacheEntryType
#field int dwUseCount
#field int dwHitRate
#field int dwSizeLow
#field int dwSizeHigh
#field FILETIME ftLastModifiedTime
#field FILETIME ftExpireTime
#field FILETIME ftLastAccessTime
#field FILETIME ftLastSyncTime
#field intptr pbHeaderInfo
#field int cbHeaderInfoSize
#field intptr pbExtraData
#field int cbExtraDataSize
#endstruct
stdim st, URLCACHE_ENTRY_INFO ; NSTRUCT 変数を確保
st->dwCacheEntryType = 100
mes "dwCacheEntryType=" + st->dwCacheEntryType